Este é o primeiro paper de um projeto mais ambicioso da Stening® que pretende revolucionar o mercado e a produção no setor da medicina e das próteses sob medida. Neste escrito introdutório do projeto treinamos uma rede neural para que seja capaz de distinguir seis classes diferentes de dispositivos. Os resultados obtidos são muito promissores e demonstram o potencial que este tipo de tecnologia tem no futuro da medicina.
Na Stening® sempre nos interessou a pesquisa e a inovação. É por isso que nos renovamos continuamente. A inteligência artificial é uma disciplina da computação que está crescendo a passos largos e cada vez tem mais impacto na medicina.
Os objetivos principais do estudo são os seguintes:
Trata-se de um estudo computacional orientado ao setor da inteligência artificial.
O objetivo desta seção é introduzir o tipo de tecnologia utilizada. Desta maneira, proceder-se-á a apresentar o que é a Inteligência Artificial (IA), as redes neurais e o tipo de rede utilizada para este caso prático, a Convolutional Neural Network (CNN).
A IA é um ramo da computação que se centra na realização de programas de computador que têm como objetivo realizar diversas operações e tarefas consideradas próprias da inteligência humana, como o autoaprendizado.
Concretamente, centrar-nos-emos na disciplina do aprendizado de máquina ou machine learning. Esta disciplina, dentro da IA, é a encarregada de criar todo este tipo de programas. Dentro do machine learning encontramos três ramos bem diferenciados de aprendizado:
O primeiro consiste em algoritmos que recebem uma série de dados dos quais depois aprendem, já que sabem a resposta. Desta forma, utilizam o aprendido para depois fazer predições. O segundo tipo de aprendizado diferencia-se do primeiro, já que não sabemos as respostas, de modo que a abordagem do problema é diferente. Os algoritmos pertencentes a este tipo de aprendizado centram-se em analisar os datasets. O terceiro tipo não utiliza grandes quantidades de dados, como os outros dois, mas aprende à base de tentativa e erro em um ambiente. Este tipo de aprendizado é o que se utiliza em condução autônoma, robótica ou IA aplicada a jogos.
Neste estudo utilizou-se o aprendizado supervisionado. Recompilou-se um conjunto de dados, neste caso imagens de dispositivos médicos de seis classes diferentes. Depois, introduziram-se os dados a uma rede neural que analisou as imagens, aprendendo com elas e podendo predizer novos dispositivos destas classes. Na seção seguinte explicar-se-á o que é uma rede neural.
As redes neurais artificiais inspiram-se no funcionamento do cérebro. Os seres humanos somos capazes de ver uma imagem e descrever o que aparece nela. Também somos capazes de escutar uma peça musical e saber de que gênero se trata. Tudo isto sabemos porque o escutamos em outra ocasião e aprendemos com isso. Estamos aplicando o aprendizado supervisionado.

O objetivo principal da IA é recriar este tipo de comportamentos e aprendizados, como se disse anteriormente. Para isso criam-se algoritmos, como as redes neurais. Este tipo de algoritmos conecta nós denominados neurônios. O motivo desta denominação é porque tentam emular os neurônios do cérebro, que atuam como unidades de processamento da informação que nos entra pelos sentidos: visão, audição, tato, etc.
Figura 1: rede neural2
Na figura 1 pode ver-se uma estrutura bastante simples de uma rede neural. Os círculos são os nós ou neurônios. Como se pode apreciar, a rede consta de duas camadas, uma de entrada (a inferior) e outra de saída (a superior). Na imagem, os "x" são os dados que introduzimos à rede e os "y" são os resultados que obtemos da rede. Os "w" são uns números que se vão atualizando, chamados pesos. Estes marcam o aprendizado da rede. Irão atualizando-se à medida que a rede neural for treinando. A rede deixará de treinar quando tiver alcançado a porcentagem de certeza adequada para nosso objetivo.
Cabe destacar que uma rede neural pode ter mais camadas de neurônios, não somente duas. As redes que têm camadas internas, chamadas camadas ocultas, são as mais utilizadas. Neste caso de estudo utiliza-se um tipo de rede neural ideal para tarefas de reconhecimento de imagens chamada Convolutional Neural Network, ou rede neural de convolução. Será explicada na seção seguinte.
Uma CNN é um tipo de rede neural que se baseia na estrutura e no trabalho das primeiras camadas de visão do cérebro. Em 1998, introduz-se este tipo de rede (LeCun et al.)4. Uma CNN compõe-se de duas partes principais: uma que se encarrega de extrair informação da imagem e outra que se encarrega da classificação desta.

Figura 2: componentes básicos de uma CNN5
Na primeira parte desta rede, feature extraction, extraímos a informação da imagem. Realizamos-lhe um método chamado convolution. Tentaremos entender, de forma sucinta, esta primeira parte. Aqui extraímos as qualidades principais da imagem, no nosso caso: forma do dispositivo, posição, comprimento, etc.
O processo de convolution, em linhas gerais, consiste em ir reduzindo as dimensões da imagem de forma que fiquemos com o mais relevante, o que mais informação nos aporta para poder classificá-la de maneira correta. Esta primeira fase contém o maior número de camadas da rede.
Uma vez superada a primeira fase, passamos à segunda: classificação. Esta última fase contém apenas duas camadas de neurônios: a primeira recebe a informação que nos chega da primeira fase e a passa à camada de saída, que nos indica de que classe se trata a imagem que ingressou no princípio.
Nesta seção analisaremos a elaboração do dataset, descreveremos os programas com os quais obtivemos os resultados e estudaremos os resultados obtidos.
A elaboração do dataset foi própria. Dada a demanda de dados para conseguir uma precisão alta na classificação, teve-se que proceder de uma maneira inovadora. Ou seja, para obter uma porcentagem de classificação alta (>90%) é necessário um alto número de imagens por classe (>500). Desta forma, ao não dispor de tal quantidade de fotos, procedemos a realizar os tubos com um programa de desenho 3D chamado Blender, versão 2.9, obtido de forma gratuita de seu site (Blender: www.blender.org). Todos eles estão baseados nos stents fabricados pela Stening®.
Os resultados dos desenhos foram os seguintes:

Figura 3: dispositivos 3D gerados a partir do programa Blender
Na figura 3, A) HE (Stent de Parede Fina), B) SET (Stent de Estenose Traqueal), C) SY13 (Stening® Y), D) SY16 (Stening® Y), E) TF12 (Tubo Faríngeo) e F) TM (Tubo em T).
De cada classe desenharam-se 1400 imagens, das quais 1000 se utilizaram para treinamento e as outras 400 para realizar predições (testing). Para dar versatilidade às imagens, foram-se rotacionando os dispositivos para tê-los em diferentes posições e motivar a rede a encontrar distintas características nas quais apoiar-se.
Realizaram-se dois programas escritos em Python, versão 3.5. Um dos programas contém a rede neural e realiza o treinamento; o outro recebe uma imagem e realiza a predição (sobre imagens que a rede nunca viu). Apoiamo-nos na biblioteca Keras para machine learning, assim como na OpenCV para visualizar as imagens.
No primeiro programa situa-se a rede neural. Esta construiu-se sobre uma CNN chamada VGG166. É uma rede neural de 16 camadas capaz de reconhecer diferentes classes de imagens. Retiraram-se-lhe as últimas camadas da rede correspondentes à classificação e introduziram-se as nossas próprias para que possa reconhecer as imagens que desejarmos.

Os resultados do treinamento e das predições foram os seguintes:
Figura 4: resultados do treinamento e das predições
Na figura 4 vemos dois gráficos. No primeiro mostra-se a progressão da predição, tanto durante o treinamento como durante o teste. Realizaram-se um total de 25 epochs. Vemos no gráfico que, ao chegar ao último epoch, a predição, tanto no treinamento como no testing, superou os 90% de certeza. No segundo gráfico temos o treinamento e o testing. Aqui medimos o erro cometido entre a predição da rede neural e o resultado correto da predição. Também se pode apreciar como, no primeiro epoch, o erro cometido é muito alto e, à medida que passam os epochs, este vai diminuindo até quase alcançar o zero.

Como vimos, os resultados obtidos foram muito bons, chegando a obter uma certeza de mais de 90%. Em perspectiva futura poderiam fazer-se melhorias quanto ao dataset. Ou seja, passar a treinar com fotos reais dos dispositivos e ver resultados.