[Música] Olá bem-vindos segunda semana do curso de aprendizado profundo nessa semana nós vamos abordar as redes convolucionais especialmente nessa primeira aula vou fazer uma breve introdução as redes convolucionais compostas por camadas convolucionais que são bastante utilizadas por tratamento de imagens então para isso primeiro eu vou ilustrar alguns problemas que nós temos ao lidar com imagens em particular imagens reais é limitações das redes densas MultiLaser no padrão por exemplo para lidar diretamente com imagens introduzir o que que são os campos receptivos locais e por fim conceber o que que são as redes convolucionais e apresentar dois
modelos que são amplamente utilizados que foram a base do desenvolvimento da área bom classificação de imagens é um problema bastante utilizado nas redes sociais na indústria a gente utiliza a classificação de imagens nos mais diversos cenários no domínio médico por exemplo e consiste o seguinte dado uma imagem inicial eu quero que o modelo seja capaz de classificar aquela imagem com base algum tipo de informação fornecida pelo especialista nesse caso aqui essa imagem contém um carro que ela está classificando como sendo um carro poderia ser uma imagem ó contém ou não uma célula cancerígena contém ou
não dado padrão específico que a gente tá em busca dentro dessa imagem Qual que é o problema né qual quão difícil essa tarefa Quais são os possíveis problemas envolvidos nesse processo de criar um classificador no primeiro momento parece algo simples dado uma entrada a gente treina um classificador que vai mapear a entrada no seu respectivo porém quando a gente pensa em imagens reais a gente tem algo bastante distinto desses exemplos didáticos que esse carrinho projetado aqui em duas dimensões a gente tem uma imagem real que ela pode conter esse objeto transformado ela pode ter outros
objetos ao fundo ela pode ter oclusões sobre esse objeto então quando a gente pensa em imagens reais a gente tem diversos problemas que não necessariamente a gente está observando nessa nesse Toy sample que é uma imagem idealizada uma imagem centralizada que facilita o processo de classificação Então quais são os possíveis problemas que a gente tem ao tratar em imagens reais por exemplo segmentação eu posso ter um objeto que ele é composto por diversos segmentos Então como encontrar esse segmentos como contaminar esse segmento de tal forma falar que eles fazem parte de um mesmo objeto o
problema de iluminação essa mesma foto aqui se eu tirar ela numa hora durante o dia se eu tirar durante a noite ela vai tirar uma foto totalmente distinta mesmo considerando que os objetos da cena são exatamente os mesmos então a iluminação ela pode interferir bastante até na questão das cores e assim por diante de formação informações esse carro aqui por exemplo ele não tá no Plano Perfeito como esse exemplo é didático aqui ele tá levemente transformado rotacionado então a gente pode ter transformações deformações da cena nas imagens reais a gente pode ter oclusões a gente
poderia ter um segundo objeto é cobrindo parte do objeto de fundo objeto que eu tenho tô buscando na imagem eu posso ter não apenas um objeto mas múltiplos objetos a utilidade do objeto é algo importante também se eu pensar que eu criei um classificador para definir se aquele objeto é uma cadeira ou não então o que que a gente espera de uma cadeira algo que tenha quatro pernas o encosto algo do tipo pode ser que eu tenho um outro objeto criado por um arquiteto que é tem função de cadeira mas não se parece nada com
uma cadeira Então como que o modelo vai aprender e extrair essas características de tal forma mapear aquele objeto que não tem características triviais de uma cadeira em uma cadeira então atividade de objeto é importante dentro de diversas outras complicações que a gente pode encontrar ao lidar com imagens reais então primeira questão Será que a gente pode utilizar um classificador mlp uma rede Multilaser uma rede densa para resolver esse problema de classificação então só recordando o que que é uma rede mlp uma rede formada por camadas densas na qual cada neurônio dessa camada é alimentado por
todos os neurônios da camada anterior cada neurônio dessa camada alimentada por todos os números da camada anterior e assim camada camada então dado uma entrada fornecida à rede essa rede propaga o sinal camada camada até a camada de saída gerando pra gente um possível valor pode ser uma classe ou um valor numérico escalar no problema de regressão Então como que a gente poderia utilizar essa rede Multilaser exceto por meio de classificação vamos pensar o seguinte pensar que essa imagem aqui é uma imagem de 20 linhas por 30 colunas uma imagem de 20 por 30 então
tem um total de 600 pixels a gente poderia fazer a operação que a gente chama de flathanie ou achar talento onde eu vou pegar essa matriz e transformar ela num vetor com 600 posições uma vez que eu tenha essa Matriz transformada no vetor de 600 posições a gente é algo mais próximo de uma classificação tradicional ou seja vou apresentar um vetor para a rede essa rede vai processar esse vetor e vai gerar a saída a respectiva classe é um objeto é uma um carro ou não então esse vetor aqui alimenta a nossa rede Multilaser que
gera a nossa classificação Qual que é o problema desse processo né Qual que é o problema dessa utilização primeiro residências podem conter muitos parâmetros Vamos pensar que uma imagem não é 20 por 30 mas 1000 por mil quantos parâmetros eu teria em cada neurônio da primeira camada oculta se eu tenho mil entradas mil por mil Eu tenho um milhão de pixels então cada neurônio teria um milhão de pixels mais ou mais 1 milhão e um parâmetros ou seja se eu tiver 1000 neurônios eu vou ter um bilhão de parâmetros já na primeira camada oculta da
rede então a quantidade de parâmetro e um problema bastante fator complicante a utilizar esses modelos para classificação de imagens é questão da intolerância transformações por exemplo se eu voltar nessa imagem anterior pensar nesse carro aqui a rede aprendeu a classificar esse carro se eu fizer pequeno o deslocamento de um pixel desse carro para a esquerda para a direita para cima para baixo para qualquer lugar aquele Pixel que era representado aqui como um pixel representando a borda do carro que estava numa posição do vetor ela já não vai estar mais nessa posição ela vai estar numa
outra posição uma vez que eu fiz esse deslocamento será como se eu pegasse um vetor que representa um paciente num prontuário médico e falar o seguinte eu tô trocando agora altura pelo peso do paciente Ou seja a classificação com certeza vai ser uma classificação errada então eu não vou ter tolerância a essas variações do modelo para que isso fosse possível Eu precisaria treinar essa rede pensando que eu tenho essa imagem do carro e treinar esse carro em todas as posições possíveis de tal forma que essa rede aprenda a reconhecer esse carro não numa única posição
da imagem mas em diversas posições Tá bom então como a gente pode resolver esse problema que a gente observou que a rede mlp vai apresentar ao classificar imagens a primeira abordagem seria o seguinte ao invés de apresentar a imagem bruta Ou aquele vetor do flathany para rede eu posso ter uma fase anterior distração de características aí o engenheiro de atributos o especialista domínio ele pode chegar pra gente falar para esse tipo de imagem Tais características são os mais relevantes cor algum tipo de textura algum tipo de informação relevante para aquela imagem Então a gente vai
extrair essas características e compor um vetor no qual esse vetor agora não necessariamente representa os 600 pixels de maneira bruta mas sim características extraídas do 600 pixels as imagens Então esse vetor de características é apresentado para rede Multilaser e a gente faz o processo de classificação assumindo que esse vetor que é um vetor bom consegue extrair todas as características relevantes para imagem a gente consegue fazer essa classificação como uma rede mlp Qual que é o problema é uma possível limitação dessa abordagem quais características que eu vou extrair eu não tô aprendendo a extrair características o
especialista domínio está fornecendo para mim ó utiliza Tais a característica A B e C para alimentar o modelo então se essas características não forem representativas o suficiente para fazer esse mapeamento é certamente essa rede não vai conseguir aprender mapear a entrada saída tá e a gente pode ter Vamos pensar num cenário simples aqui pelos problemas de classificação de dígitos Então tem um dígito 4 dígito manuscrito eu vou apresentar para uma rede e eu vou classificar como sendo dígito 4 poderia ser 0 1 2 3 até 9 qual que é um dos problemas que a gente
enfrenta né a gente pode ter diversas configurações do número 4 cada pessoa escreve de uma maneira diferente e o que que é interessante disso como que a gente Reconhece esse padrão 4 a gente não necessariamente a gente analisa o quadro como todo a gente extrai características locais desse padrão 4 por exemplo tipo uma intersecção dessas três partes aqui duas arestas para cima ou essas arestas estão interligadas existe apenas uma perna para baixo Então você vai características locais que nos permitem a classificação desse padrão 4 então o nosso cérebro ele não faz uma ele não faz
uma análise Global da imagem Ele não recebe toda a imagem de uma vez e faz o processamento a gente faz a partir da nossa movimentação da fobia a gente consegue extrair características pontuais em regiões específicas da imagem extraindo características locais que depois combinadas na formação do objeto como todo então o que que a gente pode fazer fazer a mesma coisa com as redes neurais ao invés de criar neurônios densos que vão receber toda a imagem como input como entrada a gente pode criar neurônios agora que vão se especializar numa região bem específica da nossa entrada
da imagem então por exemplo esse neurônio aqui ele tá recebendo não todos os pixels ele tá recebendo apenas esse quadradinho aqui de 5 por 5 pixels então o processamento dele é relacionado a essa região da imagem Então ele pode aprender por exemplo verificar se existe ou não cor vermelha ali dentro dessa imagem pode verificar não se existe uma reta vertical ou qualquer outro tipo de padrão dentro dessa pequena região e que que é um ponto interessante disso primeiro eu tô reduzindo a quantidade de parâmetro se eu tivesse uma rede intensa esse neurônio que teria parâmetros
Associados a todas as entradas agora não ele tem parâmetros Associados apenas esse filtro 5 por 5 que a gente vai chamar de quer 5 por 5 eu poderia pensar o seguinte se esse neurônio que ele aprendeu a detectar um padrão nessa respectiva posição da imagem que que acontece esse padrão aparecer uma outra região da imagem eu poderia ter uma cópia desse neurônio ou uma replicação desse neurônio mapeando essa outra região da imagem então a gente pode criar uma espécie de camada um filtro que a gente vai chamar de filtro uma camada que representa um filtro
um mapa de características no qual cada neurônio desse filtro está associado uma pequena região da imagem então o primeiro neurônio 5 por 5 o segundo neurônio aqui está associado a um deslocamento desse quadrado de análise em uma posição o terceiro assim e assim por diante e o que que é interessante cada neurônio aqui ele não vai ter 25 parâmetros livres ou 26 se a gente considerar o baias 5 por 5 e diferentes todos os neurônios aqui são replicações do mesmo neurônio Então se a gente pensar nessa camada como um todo independente do tamanho dela ela
sempre vai ter 26 parâmetros que é os parâmetros de um único neurônio que são replicados ao longo de toda a camada tá então só ilustrar aqui né se a gente tem uma imagem de entrada aqui a gente vai ter o nosso o Kernel nosso filtro Ou seja eu tô falando que esse neurônio aqui ele depende dessas nove células da imagem original esse segundo neurônio que está representado aqui depende agora não daqueles primeiros três por três pixels mas três por três pixels deslocado em uma coluna assim mesma coisa por debaixo a mesma coisa por cima e
lembrando que cada um desses neurônios aqui representa exatamente o mesmo neurônio uma replicação do neurônio anterior então em comparação com as redes Multilaser nós temos que as redes convolucionais elas vão ter Campos receptivos locais e não globais como na residência a gente vai ter replicação de neurônio dentro do mesmo filtro e com isso a gente consegue uma redução drástica do número de parâmetros como funciona operador de convolução da equação padrão da convolução discreta e aqui tem um exemplo linear onde eu tenho um sinal de entrada e eu tô convolucionando esse sinal de entrada realizando a
convulsão com o filtro de tamanho 3 então cada célula aqui que representa pra gente um neurônio vai ser o quê a entrada vezes os pesos mais entrada vezes mais entrada vezes o peso gerando esse valor que pode passar para funcionar ativação assim como a gente faz com uma rede Multilaser só que em vez dele se alimentado por toda a entrada elementado apenas por três características e depois a gente vai passando isso neurônio neurônio Agora eu tenho esse segundo neurônio com essa segunda parcela de três posições A terceira parcela e assim por diante até o final
por que que a gente tem esses dois quadradinhos em preto aqui é porque para encaixar o filtro de três posições dentro desse vetor se eu colocasse o centro dele como sendo essa posição Eu precisaria de uma célula a mais aqui então a gente até pode contornar isso com que a gente vai chamar de pede em que a gente vai definir daqui a pouco e vai apresentar no exemplo ao lado também mas para esse caso específico não tô utilizando essa função de padding eu vou ter que sempre reduzir a saída daquela camada em relação ao tamanho
da entrada original então se eu tinha aqui 10 posições eu vou ter um filho três por três eu vou ter oito posições geradas aqui é a mesma coisa só pensando no exemplo tridimensional desculpa bidimensional onde nós temos a imagem e o filtro sendo realizado observa que aqui a gente está fazendo o efeito de pedem Ou seja eu estou preenchendo de tal forma criar um mapa com o mesmo tamanho da minha entrada tá então tô preenchendo com os valores fazendo a replicação dos valores ponto a ponto e a gente vai preenchendo esse mapa aqui que já
algo interessante que a gente pode observar essa multiplicação do Kernel pelo padrão como tá acontecendo nesse exemplo nesse gif ela é exatamente a mesma então se a gente conseguir paralisar isso que é exatamente que as gpus fazem a gente consegue não preencher essa bateria de maneira linear né preenchendo célula célula mas a gente consegue preencher ela de maneira paralela Ou seja eu conseguiria preencher essa Matriz com apenas um passo utilizando as multiplicações paralelas da GPU Outro ponto a gente pode ter não apenas um canal de entrada como ilustrado no exemplo anterior Mas se a gente
pensar numa imagem RGB a gente vai ter três canais o RG e o d a gente pensar numa imagem de satélite com 10 canais a gente vai ter 10 canais de entradas então cada célula do nosso filtro do nosso mapa ele agora ele vai ter pensar no filtro 3 por 3 ainda ele vai ter três por três um cano 3 por 3 associado a primeira camada um segundo terno terno 3 por 3 associado a segunda camada e um terceiro Kernel 3 por 3 associado à Terceira camada Então observa que ao invés de uma matriz 3
por 3 ou seja 9 pesos eu vou até agora 27 pesos mais o mais então cada neurônio que ele tem 27 + 1 parâmetros 28 parâmetros E lembrando que esse segundo neurônio é exatamente uma cópia desses Só deslocando na imagem esse terceiro neurônio é uma cópia do anterior com apenas um deslocamento da Imagem e assim por diante então cada mapa desse daqui ele vai extrair características específicas dessa imagem de entrada esse outro mapa no mesmo nível ele vai extrair outras características também dessa mesma entrada então pensar que essa aqui tá tentando retas verticais e esse
segundo mapa tá detectando retas horizontais na nossa imagem de entrada camada de pulling ela é utilizada com principalmente para reduzir a quantidade de dados gerados na camada convolucional Então se a gente pensar que tem uma matriz 4 por 4 poderia reduzir para uma atriz 2 por 2 reduzindo a quantidade de dados que vai ser processada nas próximas camadas da rede então por exemplo que que seria o uma forma padrão dentro de fazer isso seria o bullying por média onde eu vou pegar esses quatro valores aqui calcular somar eles e calcular média vai dar três pegar
esses outros valores somar calcular média dá 4 6 2 e assim por diante aí aqui que que eu posso falar dessa imagem aqui eu posso falar que nessa região aqui que é representada por essas quatro células Eu tenho um sinal de nível 6 ou seja um sinal alto quer dizer que nessa região que eu tô buscando ele tá presente quando eu tenho uma célula com resposta 1 significa que ele não tá presente zero seria ausente Total só que a gente observa o seguinte eu tenho uma célula aqui que tá com valor nove só que a
hora que eu faço a média ele caiu para três e naquela outra célula que tinha um monte de seis ou seja encontrei parcialmente o objeto que eu quero eu tô falando que é a região mais promissora do objeto sendo que eu tenho esse nove aqui então para resolver isso a gente pode utilizar o Max pulling ao invés do everger bullying então a gente pega os mesmos quadrados dois por dois três por três de acordo com o tamanho da camada de pulem e pega o maior valor 9 6 6 3 então o que que eu tô
falando nessa camada aqui agora que nessa região certamente eu tenho aquele objeto que eu tô buscando nas outras regiões Eu tenho algo parcial Mas não tão intenso quanto esse novo encontrado aqui então o que que essa camada de pulo em ajuda gente ela reduz o curso computacional do modelo e ela também introduz uma espécie de invariância a pequena variância translação ou seja se eu tô com objeto aqui ou aqui ou aqui ou aqui o objeto está presente na imagem Então como se eu tivesse uma certa tolerância à translação uma vez que eu tô reduzindo a
resolução dessa imagem outros dois termos bastante importantes para as redes convolucionais é o estrade o padding pedem já comentei o Strike seria o quê eu não tô varrendo esse care nesse filtro passo a passo mas eu tô pulando de quantas unidades nesse caso do exemplo da figura a gente tá pulando de uma unidade nas linhas depois pula a linha próxima linha e assim por diante pulando coluna coluna A gente então Strike de um a gente poderia ter um Strike de dois ou seja em vez de pular uma casa vou pular duas casas a gente poderia
ter um Strike de três Nesse caso a gente não teria uma intersecção da janelas eu tenho os três primeiros depois eu pulo pros próximos três sem intersecção O que que a gente ganha com isso redução do curso computacional o que que a gente perde com isso se o objeto ele não tá nem na nos três primeiros nos nove primeiros pixels e nem nos próximos nove Pode ser que seja bem no meio eu vou perder isso se eu tiver um Strike de três Então a hora que eu faço passo a passo com passo um eu tenho
a maior chance de encontrar esse objeto com relação pede que é o preenchimento das bordas eu posso utilizar o padding 0 que é simplesmente não preencher a borda aí o meu filtro gerado vai ser reduzido porque eu não tenho as bordas aqui na camada original eu posso fazer uma replicação ou seja ele simplesmente pega um valor que tá aqui e replica do lado de fora posso preencher com valor constante colocar zero em todo mundo ou ainda um preenchimento circular que seria como se eu pegasse esse valor aqui pegasse o valor até aqui do outro lado
pegar o valor Aqui de baixo o valor que tá aqui em cima como se eu fechasse esse mapa numa esfera Então depende muito da aplicação também aí o primeiro modelo que a gente tem de rede convolucional tem os modelos do fukushima lá atrás da década de 70 80 mas foram modelos que não tinham aplicações práticas lá do custo a dificuldade de treinamento aí 89 o Ian Ele propôs Pelo modelo de rede convolucional de fato aplicado que a net e ela foi utilizada para classificar dígitos manuscritos de septos dos Estados Unidos Então ela foi uma rede
que foi aplicada em problemas reais aí em 98 o yalekon expandiu essa rede melhorou essa rede criando net cinco que de representa para a gente a base é do que a gente usa como camada como redes convolucionais hoje ela basicamente Ela seria a primeira rede convolucional de fato que segue a estruturas que a gente teve na na sequência e ela é composta por várias camadas ocultas sendo camadas convolucionais camadas de bullying e também camadas dessas no final uma rede Multilaser exceto responsável pela classificação dos dígitos Aqui está a estrutura da rede a gente tem uma
entrada a gente tem cinco mapas de características ou seja cada ponto de cada um desses mapas está alimentado por uma região 5 por 5 dessa imagem original depois a gente tem a camada de bullying reduzindo aqui um erro de bullying reduzindo pela metade do tamanho do mapa era 28 ou 28 para 14 uma segunda camada comvolucional com 16 filtros uma segunda camada de pura e depois três camadas dessas responsável fazer a classificação dos dígitos de 0 a 9 ao longo do desenvolvimento dessa rede foi criado um data 7 um conjunto de idade chamado hemist que
ele é composto por 60 mil exemplos de treinamento e 10 mil exemplos de teste eles são imagens de 28 por 28 pixels em Tons de Cinza ele é balanceado ou seja ele tem 6 mil exemplos de cada classe de cada uma das 10 classes no conjunto de Treinamento e ele é muito utilizado como benchmark em redes convolucionais em modelos de aprendizado de máquina a net ela conseguiu uma curaça é muito grande aproximadamente é superior a 98%, para esse conjunto algo muito próximo da da Croácia humana só quando a gente pensa em imagens reais ele passa
a ser algo bastante simples é algo bastante simplória onde até a imagem centralizada não necessariamente reflete aquilo que a gente tem uma imagem real por exemplo como essa mas geralmente pode ter diversas classes apenas 10 eu posso ter tamanhos maiores mil por 1.256 por 256 eu posso ter diversos canais imagem colorida ela não representa uma imagem idealizada mas uma representação 2D de uma cena tridimensional então a gente pode ter diversos tipos de transformações e a gente pode ter múltiplos objetos na mesma cena carro um ônibus um prédio um poste pessoas será que as redes convolucionais
ainda assim funcionariam para esse tipo de cenário mais realista aí foi criado um conjunto de dados chamado Imaginext ele é composto por um ponto dois milhões de imagens com mil classes onde essas classes representam o padrão predominante na imagem Então se a gente pegar por exemplo Isso aqui vai ser um cachorro um outro objeto vai ser uma pizza um carro um prédio alguma coisa assim de acordo com a classificação do objeto para dominante e ela é utilizada para duas tarefas principais para a classificação e para localização do objeto classificação indicando que que imagem que que
essa imagem é localização essa imagem é um carro onde está o carro e ela foi utilizada uma competição de visão computacional é utilizada na verdade até hoje em competições de visão computacional e é um ambiente maior que bastante interessante na área de visão computacional aí que que aconteceu o Alex como eu já mencionei na primeira aula do curso em 2012 Ele propôs Alex net dentro do grupo foram alunos doutorado do grupo do professor de Alfre Hitman e o que que eles fizeram eles propuseram uma rede convolucional semelhante ela é net 5 só que com mais
camadas e eles conseguiram reduzir o erro do sistema de visão computacional que tava na casa de 26% para 16%, como eu já falei antes os modelos tradicionais não computacional ficavam trabalhando ali para reduzir meio ponto percentual assim por diante aí chegou a Alex net reduziu para 16% no plano de classificação das top 5 Class que seria o seguinte o fornecer as cinco classe mais prováveis se eu acertar uma delas eu falo que a classificação está correta então dado a esse grande ganho que existiu nessa época em 2012 nós temos aí como um ponto de fato
de é o ponto de não retorno né o ponto onde os modelos de aprendizado profundo é Se mostraram úteis e passaram a ser utilizados amplamente é importante destacar que esse artigo que descreve esse modelo já tem mais de 120 mil citações na academia na literatura tá Como que essa rede ele é uma rede com cinco camadas convolucionais a gente pensar que a net tem apenas duas ela não utiliza apenas ela não utiliza o everestur mas utiliza o Max pulling ele utilizou também o sistema de aumento de dados transistor fazendo pequenas transformações da imagem pampear o
conjunto de dados ele utiliza a função relu ao invés da tangente perbólica e foi um dos primeiros modelos a utilizar GPU no treinamento só pelos Traz esse modelo aqui demorou uma semana para ser treinado com duas gpus lá na época em 2011 2012 hoje Claro que ele é treinar de maneira muito mais eficiente com as gpus modernas Então hoje a CNN ela tem aplicações das mais diversas possíveis em visão computacional como classificação reconhecimento localização de objetos segmentação e também a gente pode utilizar as convoluções de uma dimensão para processamento de sequências ser sequências numéricas textos
sinais de áudio dentre outros bom que que nós vemos na sala Nós aprendemos aqui que são os campos receptivos locais e conhecemos as redes convolucionais conhecemos os conjuntos feminista e magnética são bastante importantes na área e conhecemos as duas primeiras redes convolucionais com destaque na literatura que ela é net e Alex próxima aula a gente vai conhecer algumas outras arquiteturas de redes convolucionais bastante importantes Principalmente um tema de visão computacional por hoje é isso então agradeço a atenção de todos até a próxima vídeo aula [Música] [Música]