Um guia para a segmentação semântica de 2021

Nó Fonte: 872271

Intro

O aprendizado profundo tem sido muito bem-sucedido ao trabalhar com imagens como dados e atualmente está em um estágio em que funciona melhor do que humanos em vários casos de uso. Os problemas mais importantes que os humanos estão interessados ​​em resolver com a visão computacional são classificação de imagens, detecção de objetos e segmentação na ordem crescente de sua dificuldade.

Na simples e velha tarefa de classificação de imagens, estamos apenas interessados ​​em obter os rótulos de todos os objetos que estão presentes em uma imagem. Na detecção de objetos, avançamos um passo e tentamos saber junto com o que todos os objetos que estão presentes em uma imagem, o local em que os objetos estão presentes com a ajuda de caixas delimitadoras. A segmentação de imagens leva a um novo nível ao tentar descobrir com precisão o limite exato dos objetos na imagem.

Fonte http://cs224d.stanford.edu/index.html

Neste artigo, examinaremos esse conceito de segmentação de imagem, discutiremos os casos de uso relevantes, as diferentes arquiteturas de rede neural envolvidas na obtenção dos resultados, métricas e conjuntos de dados a explorar.

O que é segmentação de imagem

Sabemos que uma imagem nada mais é que uma coleção de pixels. A segmentação de imagens é o processo de classificação de cada pixel em uma imagem pertencente a uma determinada classe e, portanto, pode ser considerada um problema de classificação por pixel. Existem dois tipos de técnicas de segmentação

Source http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture11.pdf
  1. Segmentação semântica : - A segmentação semântica é o processo de classificação de cada pixel pertencente a uma etiqueta específica. Não é diferente em diferentes instâncias do mesmo objeto. Por exemplo, se houver 2 gatos em uma imagem, a segmentação semântica dá o mesmo rótulo a todos os pixels de ambos os gatos
  2. Segmentação de instância : - A segmentação de instância difere da segmentação semântica no sentido de que dá um rótulo único a cada instância de um objeto específico na imagem. Como pode ser visto na imagem acima, todos os 3 cães recebem cores diferentes, ou seja, rótulos diferentes. Com a segmentação semântica, todos eles teriam recebido a mesma cor.

Então, agora chegaremos ao ponto em que precisaríamos desse tipo de algoritmo

Casos de uso de segmentação de imagens

Reconhecimento de caligrafia : - Junjo et all demonstrou como a segmentação semântica está sendo usada para extrair palavras e linhas de documentos escritos à mão em seus Trabalho de pesquisa 2019 reconhecer caracteres escritos à mão

fonte

Modo retrato do Google : - Existem muitos casos de uso em que é absolutamente essencial separar o primeiro plano do segundo plano. Por exemplo, no modo retrato do Google, podemos ver o fundo desfocado enquanto o primeiro plano permanece inalterado para dar um efeito legal

Fonte: - https://ai.googleblog.com/2018/03/mobile-real-time-video-segmentation.html

Histórias do YouTube : - O Google lançou recentemente um recurso de histórias do YouTube para criadores de conteúdo mostrarem diferentes origens enquanto criam histórias.

Fonte: - https://ai.googleblog.com/2018/03/mobile-real-time-video-segmentation.html

Maquiagem virtual : - Aplicar batom virtual agora é possível com a ajuda da segmentação de imagem

Fonte: - https://www.theverge.com/2017/3/16/14946086/sephora-virtual-assistant-ios-app-update-ar-makeup

4. Teste virtual : - A experimentação virtual de roupas é um recurso interessante que estava disponível nas lojas usando hardware especializado que cria um modelo 3D. Mas com aprendizado profundo e segmentação de imagem, o mesmo pode ser obtido usando apenas uma imagem 2d

Fonte: - https://arxiv.org/pdf/1807.07688.pdf

Pesquisa Visual de Imagens : - A ideia de segmentar roupas também é usada em algoritmos de recuperação de imagens em eCommerce. Por exemplo, o Pinterest / Amazon permite que você carregue qualquer imagem e obtenha produtos de aparência semelhante, fazendo uma pesquisa de imagem com base na segmentação da parte do tecido

Fonte: - https://github.com/paucarre/tiefvision

Auto-condução de carros : - Os carros que dirigem sozinhos precisam de uma compreensão completa do que os rodeia a um nível de pixel perfeito. Portanto, a segmentação da imagem é usada para identificar pistas e outras informações necessárias

Fonte: - https://medium.com/intro-to-artificial-intelligence/semantic-segmentation-udaitys-self-driving-car-engineer-nanodegree-c01eb6eaf9d

Nanonets ajuda fortune 500 empresas a permitir melhores experiências do cliente em escala usando a segmentação semântica.

Métodos e Técnicas

Antes do advento do aprendizado profundo, técnicas clássicas de aprendizado de máquina como SVM, Random Forest e K-means Clustering eram usadas para resolver o problema de segmentação de imagens. Mas, como acontece com a maioria das declarações de problemas relacionados a imagens, o aprendizado profundo funcionou melhor do que as técnicas existentes e se tornou uma norma agora quando se lida com a segmentação semântica. Vamos revisar as técnicas que estão sendo usadas para resolver o problema

Rede Totalmente Convolucional

A arquitetura geral de uma CNN consiste em poucas camadas convolucionais e agrupadas, seguidas por poucas camadas totalmente conectadas no final. O artigo da Fully Convolutional Network lançado em 2014 argumenta que a camada final totalmente conectada pode ser pensada como fazendo uma convolução 1 × 1 que cobre toda a região.

Fonte: - https://arxiv.org/abs/1411.4038

Portanto, as camadas densas finais podem ser substituídas por uma camada de convolução obtendo o mesmo resultado. Mas agora a vantagem de fazer isso é que o tamanho da entrada não precisa mais ser corrigido. Ao envolver camadas densas, o tamanho da entrada é restringido e, portanto, quando uma entrada de tamanho diferente deve ser fornecida, ela deve ser redimensionada. Mas, ao substituir uma camada densa por convolução, essa restrição não existe.

Além disso, quando um tamanho maior de imagem é fornecido como entrada, a saída produzida será um mapa de recursos e não apenas uma saída de classe como para uma imagem de tamanho de entrada normal. Além disso, o comportamento observado no mapa de recursos final representa o mapa de calor da classe necessária, ou seja, a posição do objeto é destacada no mapa de recursos. Como a saída do mapa de recursos é um mapa de calor do objeto necessário, é uma informação válida para nosso caso de uso de segmentação.

Uma vez que o mapa de características obtido na camada de saída é uma amostragem inferior devido ao conjunto de convoluções realizadas, gostaríamos de fazer uma amostragem superior usando uma técnica de interpolação. A amostragem ascendente bilinear funciona, mas o artigo propõe o uso da amostragem ascendente aprendida com deconvolução, que pode até aprender uma amostragem ascendente não linear.

A parte da amostragem inferior da rede é chamada de codificador e a parte da amostragem ascendente é chamada de decodificador. Este é um padrão que veremos em muitas arquiteturas, ou seja, reduzindo o tamanho com o codificador e depois aumentando a amostragem com o decodificador. Em um mundo ideal, não desejaríamos reduzir a amostra usando pooling e manter o mesmo tamanho o tempo todo, mas isso levaria a uma grande quantidade de parâmetros e seria computacionalmente inviável.

Fonte: - https://arxiv.org/abs/1411.4038

Embora os resultados de produção obtidos tenham sido decentes, a produção observada é irregular e irregular. A razão para isso é a perda de informações na camada de feição final devido à redução da resolução em 32 vezes usando camadas de convolução. Agora fica muito difícil para a rede fazer upsampling de 32x usando essas poucas informações. Esta arquitetura é chamada FCN-32

Para resolver esse problema, o artigo propôs 2 outras arquiteturas FCN-16, FCN-8. No FCN-16, as informações da camada de agrupamento anterior são usadas junto com o mapa de recursos final e, portanto, agora a tarefa da rede é aprender a amostragem de 16x, que é melhor em comparação com o FCN-32. O FCN-8 tenta torná-lo ainda melhor incluindo informações de mais uma camada de pool anterior.

juntar

U-net é construído em cima da rede totalmente convolucional vista de cima. Foi construído para fins médicos para encontrar tumores nos pulmões ou no cérebro. Também consiste em um codificador que faz o down-sample da imagem de entrada para um mapa de características e o decodificador que faz a amostragem do mapa de características para inserir o tamanho da imagem usando camadas de deconvolução aprendidas.

Fonte: - https://arxiv.org/abs/1505.04597

A principal contribuição da arquitetura U-Net são as conexões de atalho. Vimos acima no FCN que, como fazemos o down-sample de uma imagem como parte do codificador, perdemos muitas informações que não podem ser facilmente recuperadas na parte do codificador. O FCN tenta resolver isso pegando informações das camadas do pool antes da camada de feição final.

U-Net propõe uma nova abordagem para resolver este problema de perda de informação. Ele propõe o envio de informações para cada camada de amostragem ascendente no decodificador da camada de amostragem descendente correspondente no codificador, como pode ser visto na figura acima, capturando assim informações mais finas enquanto também mantém o cálculo baixo. Visto que as camadas no início do codificador teriam mais informações, elas reforçariam a operação de amostragem do decodificador, fornecendo detalhes finos correspondentes às imagens de entrada, melhorando muito os resultados. O artigo também sugeriu o uso de uma nova função de perda que discutiremos a seguir.

DeepLab

Deeplab de um grupo de pesquisadores do Google propôs uma infinidade de técnicas para melhorar os resultados existentes e obter uma saída mais fina com custos computacionais mais baixos. As 3 principais melhorias sugeridas como parte da pesquisa são

1) Convoluções atrosas
2) Acumulação Piramidal Espacial Atrosa
3) Uso de campos aleatórios condicionais para melhorar a produção final
Vamos discutir sobre tudo isso

Convolução Atrosa

Um dos principais problemas com a abordagem FCN é a redução excessiva devido a operações consecutivas de agrupamento. Devido à série de agrupamento, a imagem de entrada é amostrada para baixo em 32x, que é novamente amostrada para obter o resultado da segmentação. A redução da resolução em 32x resulta em perda de informações, o que é crucial para obter resultados precisos em uma tarefa de segmentação. Além disso, a deconvolução para aumentar a amostra em 32x é uma operação cara de computação e memória, uma vez que existem parâmetros adicionais envolvidos na formação de uma amostra crescente aprendida.

O artigo propõe o uso da convolução Atrous ou da convolução de orifícios ou convolução dilatada que ajuda a entender o contexto amplo usando o mesmo número de parâmetros.

Source:- https://www.mdpi.com/1424-8220/19/24/5361/htm

A convolução dilatada funciona aumentando o tamanho do filtro acrescentando zeros (chamados buracos) para preencher a lacuna entre os parâmetros. O número de buracos / zeros preenchidos entre os parâmetros do filtro é chamado de taxa de dilatação de termo. Quando a taxa é igual a 1, nada mais é do que a convolução normal. Quando a taxa é igual a 2, um zero é inserido entre todos os outros parâmetros, fazendo com que o filtro pareça uma convolução 5 × 5. Agora ele tem a capacidade de obter o contexto da convolução 5 × 5, embora tenha parâmetros de convolução 3 × 3. Da mesma forma, para a taxa 3, o campo receptivo vai para 7 × 7.

No Deeplab, as últimas camadas de agrupamento são substituídas para ter o passo 1 em vez de 2, mantendo assim a taxa de amostragem baixa para apenas 8x. Em seguida, uma série de convoluções auriculares são aplicadas para capturar o contexto maior. Para o treinamento, a máscara rotulada de saída é reduzida em 8x para comparar cada pixel. Para inferência, a amostragem ascendente bilinear é usada para produzir saída do mesmo tamanho, o que dá resultados decentes o suficiente com custos computacionais / de memória mais baixos, uma vez que a amostragem ascendente bilinear não precisa de nenhum parâmetro em oposição à deconvolução para a amostragem ascendente.

ASPP

Spatial Pyramidal Pooling é um conceito introduzido no SPPNet para capturar informações em várias escalas de um mapa de características. Antes da introdução do SPP, imagens de entrada em diferentes resoluções são fornecidas e os mapas de recursos computados são usados ​​juntos para obter as informações em várias escalas, mas isso exige mais computação e tempo. Com Spatial Pyramidal Pooling, informações em várias escalas podem ser capturadas com uma única imagem de entrada.

Fonte: - http://kaiminghe.com/eccv14sppnet/index.html

Com o módulo SPP, a rede produz 3 saídas de dimensões 1 × 1 (ou seja, GAP), 2 × 2 e 4 × 4. Esses valores são concatenados pela conversão em um vetor 1d, capturando, assim, informações em várias escalas. Outra vantagem de usar o SPP é que imagens de entrada de qualquer tamanho podem ser fornecidas.

ASPP pega o conceito de fusão de informações de escalas diferentes e o aplica às convoluções Atrous. A entrada é convolvida com diferentes taxas de dilatação e as saídas dessas são fundidas.

Fonte: - http://liangchiehchen.com/projects/DeepLab.html

Como pode ser visto, a entrada é convolvida com filtros 3 × 3 de taxas de dilatação 6, 12, 18 e 24 e as saídas são concatenadas por serem do mesmo tamanho. Uma saída de convolução 1 × 1 também é adicionada à saída fundida. Para fornecer também as informações globais, a saída GAP também é adicionada acima após a amostragem. A saída fundida de 3 × 3 saídas dilatadas variadas, 1 × 1 e saída GAP é passada através da convolução 1 × 1 para obter o número necessário de canais.

Uma vez que a imagem necessária a ser segmentada pode ser de qualquer tamanho na entrada, as informações em várias escalas do ASPP ajudam a melhorar os resultados.

Melhorando a produção com CRF

Pooling é uma operação que ajuda a reduzir o número de parâmetros em uma rede neural, mas também traz consigo uma propriedade de invariância. Invariância é a qualidade de uma rede neural que não é afetada por pequenas traduções na entrada. Devido a esta propriedade obtida com o pooling, a saída de segmentação obtida por uma rede neural é grosseira e os limites não são definidos concretamente.

Fonte: - http://liangchiehchen.com/projects/DeepLab.html

Para lidar com isso, o artigo propõe o uso do modelo gráfico CRF. O campo aleatório condicional opera uma etapa de pós-processamento e tenta melhorar os resultados produzidos para definir os limites do modelador. Ele funciona classificando um pixel com base não apenas em seu rótulo, mas também com base em outros rótulos de pixel. Como pode ser visto na figura acima, a fronteira grosseira produzida pela rede neural fica mais refinada depois de passar pelo CRF.

O Deeplab-v3 introduziu a normalização do lote e sugeriu a taxa de dilatação multiplicada por (1,2,4) dentro de cada camada em um bloco Resnet. Além disso, a adição de recursos de nível de imagem ao módulo ASPP que foi discutido na discussão acima sobre ASPP foi proposta como parte deste documento

Fonte: - https://arxiv.org/pdf/1706.05587.pdf

Deeplab-v3 + sugeriu ter um decodificador em vez de uma amostragem simples bilinear de 16x. O decodificador pega uma dica do decodificador usado por arquiteturas como a U-Net, que obtém informações das camadas do codificador para melhorar os resultados. A saída do codificador é amostrada 4x usando a amostragem ascendente bilinear e concatenada com os recursos do codificador, que é novamente amostrada 4x após realizar uma convolução 3 × 3. Essa abordagem produz resultados melhores do que uma amostragem direta de 16x. Também é proposta a arquitetura Xception modificada para ser usada em vez de Resnet como parte do codificador e convoluções separáveis ​​em profundidade agora são usadas no topo das convoluções Atrous para reduzir o número de cálculos.

Rede de Convolução Global

Fonte: - https://arxiv.org/pdf/1703.02719.pdf

A segmentação semântica envolve a realização de duas tarefas simultaneamente

i) Classificação
ii) localização

As redes de classificação são criadas para serem invariáveis ​​à translação e rotação, não dando importância às informações de localização, ao passo que a localização envolve obter detalhes precisos sobre a localização. Portanto, essas duas tarefas são inerentemente contraditórias. A maioria dos algoritmos de segmentação dá mais importância à localização, ou seja, o segundo na figura acima e, portanto, perde de vista o contexto global. Neste trabalho o autor propõe uma forma de dar importância também à tarefa de classificação sem perder a informação de localização.

Fonte: - https://arxiv.org/pdf/1703.02719.pdf

O autor propõe fazer isso usando grandes kernels como parte da rede, permitindo conexões densas e, portanto, mais informações. Isso é feito com a ajuda de um bloco GCN, como pode ser visto na figura acima. O bloco GCN pode ser considerado como um filtro de convolução akxk, onde k pode ser um número maior que 3. Para reduzir o número de parâmetros, o filtro akxk é dividido em blocos 1 xk e kx 1, kx1 e 1xk que são somados. Assim, ao aumentar o valor k, um contexto maior é capturado.

Além disso, o autor propõe um bloco de Refinamento de Fronteira que é semelhante a um bloco residual visto no Resnet que consiste em uma conexão de atalho e uma conexão residual que se somam para obter o resultado. Observa-se que ter um bloco de Refinamento de Limite resultou na melhoria dos resultados no limite de segmentação.

Os resultados mostraram que o bloco GCN melhorou a precisão de classificação dos pixels mais próximos do centro do objeto, indicando a melhoria causada devido à captura do contexto de longo alcance, enquanto o bloco de Refinamento de Limite ajudou a melhorar a precisão dos pixels mais próximos do limite.

Veja mais de uma vez - KSAC para segmentação semântica

A família Deeplab usa ASPP para permitir que vários campos receptivos capturem informações usando diferentes taxas de convolução auricular. Embora o ASPP tenha sido significativamente útil para melhorar a segmentação dos resultados, existem alguns problemas inerentes causados ​​devido à arquitetura. Não há informações compartilhadas entre as diferentes camadas paralelas no ASPP, afetando assim o poder de generalização dos kernels em cada camada. Além disso, uma vez que cada camada atende a diferentes conjuntos de amostras de treinamento (objetos menores para menores taxas de átrio e objetos maiores para maiores taxas de átrio), a quantidade de dados para cada camada paralela seria menor, afetando assim a generalização geral. Além disso, o número de parâmetros na rede aumenta linearmente com o número de parâmetros e, portanto, pode levar ao sobreajuste.

Fonte: - https://arxiv.org/pdf/1908.09443.pdf

Para lidar com todos esses problemas, o autor propõe uma nova estrutura de rede chamada Kernel-Sharing Atrous Convolution (KSAC). Como pode ser visto na figura acima, em vez de ter um kernel diferente para cada camada paralela é ASPP, um único kernel é compartilhado, melhorando assim a capacidade de generalização da rede. Usando KSAC em vez de ASPP 62% dos parâmetros são salvos quando as taxas de dilatação de 6,12 e 18 são usadas.

Outra vantagem de usar uma estrutura KSAC é que o número de parâmetros é independente do número de taxas de dilatação usadas. Assim, podemos adicionar tantas taxas quanto possível sem aumentar o tamanho do modelo. ASPP dá melhores resultados com taxas de 6,12,18, mas a precisão diminui com 6,12,18,24, indicando possível overfitting. Mas a precisão do KSAC ainda melhora consideravelmente, indicando a capacidade de generalização aprimorada.

Esta técnica de compartilhamento de kernel também pode ser vista como um aumento no espaço de recursos, uma vez que o mesmo kernel é aplicado em várias taxas. Semelhante ao modo como o aumento de entrada oferece melhores resultados, o aumento de recursos executado na rede deve ajudar a melhorar a capacidade de representação da rede.

Segmentação de Vídeo

Para casos de uso como carros autônomos, robótica etc., há uma necessidade de segmentação em tempo real no vídeo observado. As arquiteturas discutidas até agora são projetadas para precisão e não para velocidade. Portanto, se eles forem aplicados em uma base por quadro em um vídeo, o resultado virá em uma velocidade muito baixa.

Além disso, geralmente, em um vídeo, há muitas sobreposições em cenas em quadros consecutivos que podem ser usados ​​para melhorar os resultados e a velocidade que não aparecerão se a análise for feita por quadro. Usando essas dicas, vamos discutir arquiteturas que são projetadas especificamente para vídeos

STFCN

O Spatio-Temporal FCN propõe o uso do FCN junto com o LSTM para fazer a segmentação de vídeo. Já sabemos como o FCN pode ser usado para extrair recursos de segmentação de uma imagem. LSTM é um tipo de rede neural que pode capturar informações sequenciais ao longo do tempo. STFCN combina o poder do FCN com LSTM para capturar as informações espaciais e temporais

Fonte: - https://arxiv.org/abs/1608.05971

Como pode ser visto na figura acima, o STFCN consiste em um FCN, módulo espaço-temporal seguido de deconvolução. O mapa de características produzido por um FCN é enviado ao Módulo Spatio-Temporal que também possui uma entrada do módulo do quadro anterior. O módulo baseado em ambas as entradas captura as informações temporais além das informações espaciais e as envia através das quais são amostradas para o tamanho original da imagem usando deconvolução semelhante a como é feito no FCN

Como o FCN e o LSTM estão trabalhando juntos como parte do STFCN, a rede é treinável de ponta a ponta e supera as abordagens de segmentação de quadro único. Existem abordagens semelhantes em que LSTM é substituído por GRU, mas o conceito é o mesmo de capturar as informações espaciais e temporais

CNNs de vídeo semântico por meio de distorção de representação

Este artigo propõe o uso de fluxo óptico em frames adjacentes como uma entrada extra para melhorar os resultados da segmentação.

Fonte: - https://arxiv.org/abs/1708.03088

A abordagem sugerida pode ser ligada a qualquer arquitetura padrão como um plug-in. O ingrediente principal em jogo é o módulo NetWarp. Para calcular o mapa de segmentação, o fluxo óptico entre o quadro atual e o anterior é calculado, isto é, Ft e é passado por um FlowCNN para obter Λ (Ft). Este processo é denominado Transformação de Fluxo. Este valor é passado por um módulo de warp que também leva como entrada o mapa de feições de uma camada intermediária calculada pela passagem pela rede. Isso fornece um mapa de feições distorcido que é então combinado com o mapa de feições intermediário da camada atual e toda a rede é treinada ponta a ponta. Essa arquitetura obteve resultados SOTA em conjuntos de dados de benchmark de vídeo CamVid e Cityscapes.

Convnets Clockwork para Segmentação Semântica de Vídeo

Este artigo se propõe a melhorar a velocidade de execução de uma rede neural para tarefa de segmentação em vídeos, aproveitando o fato de que a informação semântica em um vídeo muda lentamente em comparação com a informação em nível de pixel. Portanto, as informações nas camadas finais mudam em um ritmo muito mais lento em comparação com as camadas iniciais. O jornal sugere tempos diferentes

Fonte: - https://arxiv.org/abs/1608.03609

A figura acima representa a taxa de comparação de mudança para um pool4 de nível médio e um fc7 de camada profunda. À esquerda, vemos que, como há muitas mudanças nos quadros, as duas camadas mostram uma mudança, mas a mudança para o pool4 é maior. À direita, vemos que não há muitas mudanças entre os frames. Conseqüentemente, o pool4 mostra uma mudança marginal, enquanto fc7 mostra uma mudança quase nula.

A pesquisa utiliza esse conceito e sugere que, nos casos em que não há muita mudança entre os quadros, não há necessidade de computar os recursos / saídas novamente e os valores em cache do quadro anterior podem ser usados. Uma vez que a taxa de mudança varia com as camadas, diferentes relógios podem ser ajustados para diferentes conjuntos de camadas. Quando o relógio marca as novas saídas são calculadas, caso contrário, os resultados armazenados em cache são usados. A taxa de tiques do relógio pode ser fixada estaticamente ou pode ser aprendida dinamicamente

Fonte: - https://arxiv.org/abs/1608.03609

Segmentação semântica de vídeo de baixa latência

Este artigo melhora a discussão acima, selecionando adaptativamente os quadros para calcular o mapa de segmentação ou para usar o resultado armazenado em cache em vez de usar um temporizador fixo ou uma heurística.

Fonte: - https://arxiv.org/abs/1804.00389

O artigo propõe dividir a rede em 2 partes, recursos de baixo nível e recursos de alto nível. O custo de computação de recursos de baixo nível em uma rede é muito menor em comparação com recursos de alto nível. A pesquisa sugere o uso dos recursos de rede de baixo nível como um indicador da mudança no mapa de segmentação. Em suas observações, eles encontraram uma forte correlação entre a alteração dos recursos de baixo nível e a alteração do mapa de segmentação. Portanto, para entender se há necessidade de calcular se os recursos mais altos precisam ser calculados, a diferença de recursos mais baixos em 2 quadros é encontrada e comparada se ultrapassar um determinado limite. Todo esse processo é automatizado por uma pequena rede neural cuja tarefa é pegar características inferiores de dois quadros e dar uma previsão se as características superiores devem ser calculadas ou não. Como a decisão da rede é baseada nos quadros de entrada, a decisão tomada é dinâmica em comparação com a abordagem acima.

Segmentação para nuvens de pontos

Os dados vindos de um sensor como lidar são armazenados em um formato chamado Point Cloud. A nuvem de pontos nada mais é do que uma coleção de conjuntos desordenados de pontos de dados 3D (ou qualquer dimensão). É uma representação esparsa da cena em 3D e a CNN não pode ser aplicada diretamente nesse caso. Além disso, qualquer arquitetura projetada para lidar com nuvens de pontos deve levar em consideração que é um conjunto desordenado e, portanto, pode ter várias permutações possíveis. Portanto, a rede deve ser invariante de permutação. Além disso, os pontos definidos na nuvem de pontos podem ser descritos pela distância entre eles. Assim, pontos mais próximos em geral contêm informações úteis que são úteis para tarefas de segmentação

PontoNet

PointNet é um artigo importante na história da pesquisa em nuvens de pontos usando aprendizado profundo para resolver as tarefas de classificação e segmentação. Vamos estudar a arquitetura do Pointnet

Fonte: - https://arxiv.org/abs/1612.00593

A entrada da rede para n pontos é uma matriz nx 3. A matriz nx 3 é mapeada para nx 64 usando uma camada multi-perceptron compartilhada (rede totalmente conectada) que é então mapeada para nx 64 e, em seguida, para nx 128 e nx 1024. O agrupamento máximo é aplicado para obter um vetor de 1024 que é convertido para k saídas passando por MLP com tamanhos 512, 256 e k. Finalmente, k saídas de classe são produzidas de forma semelhante a qualquer rede de classificação.

A classificação lida apenas com os recursos globais, mas a segmentação também precisa dos recursos locais. Assim, os recursos locais da camada intermediária em nx 64 são concatenados com recursos globais para obter a matriz ans 1088 que é enviada por meio de mlp de 512 e 256 para chegar a nx 256 e, em seguida, através de MLP de 128 em para fornecer classes de saída m para cada ponto na nuvem de pontos.

Além disso, a rede envolve uma transformação de entrada e uma transformação de recurso como parte da rede, cuja tarefa é não alterar a forma da entrada, mas adicionar invariância às transformações afins, ou seja, translação, rotação etc.

A-CNN

Fonte: - https://arxiv.org/abs/1904.08017

A-CNN propõe o uso de convoluções anulares para capturar informações espaciais. Sabemos pela CNN que as operações de convolução captam a informação local que é essencial para a compreensão da imagem. A-CNN desenvolveu uma nova convolução chamada convolução anular, que é aplicada a pontos de vizinhança em uma nuvem de pontos.

A arquitetura toma como entrada nx 3 pontos e encontra normais para eles que são usados ​​para ordenar os pontos. Uma subamostra de pontos é obtida usando o algoritmo FPS resultando em ni x 3 pontos. Sobre essas convolução anular é aplicada para aumentar para 128 dimensões. A convolução anular é realizada nos pontos de vizinhança que são determinados usando um algoritmo KNN.

Outro conjunto das operações acima são realizadas para aumentar as dimensões para 256. Em seguida, um mlp é aplicado para alterar as dimensões para 1024 e o pooling é aplicado para obter um vetor global 1024 semelhante à nuvem de pontos. Toda essa parte é considerada o codificador. Para classificação, a saída global do codificador é passada por mlp para obter saídas de classe c. Para a tarefa de segmentação, os recursos globais e locais são considerados semelhantes ao PointCNN e, em seguida, são passados ​​por um MLP para obter m saídas de classe para cada ponto.

Métrica

Vamos discutir as métricas que geralmente são usadas para entender e avaliar os resultados de um modelo.

Precisão do pixel

A precisão do pixel é a métrica mais básica que pode ser usada para validar os resultados. A precisão é obtida tomando a proporção de pixels classificados corretamente em relação ao total de pixels

Precisão = (TP + TN) / (TP + TN + FP + FN)

A principal desvantagem de usar essa técnica é que o resultado pode parecer bom se uma classe sobrepujar a outra. Digamos, por exemplo, que a classe de fundo cubra 90% da imagem de entrada, podemos obter uma precisão de 90% apenas classificando cada pixel como fundo

Cruzamento sobre União

IOU é definido como a razão entre a intersecção da verdade fundamental e as saídas de segmentação previstas sobre sua união. Se estivermos calculando para várias classes, o IOU de cada classe é calculado e sua média é tomada. É uma métrica melhor em comparação com a precisão do pixel, já que se cada pixel fosse fornecido como plano de fundo em uma entrada de 2 classes, o valor IOU é (90/100 + 0/100) / 2, ou seja, 45% IOU, o que dá uma melhor representação em comparação com 90 % precisão.

Fonte: - https://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection

IOU de frequência ponderada

Esta é uma extensão do IOU médio que discutimos e é usada para combater o desequilíbrio de classe. Se uma classe domina a maior parte das imagens em um conjunto de dados, como por exemplo o plano de fundo, ela precisa ser avaliada em comparação com outras classes. Assim, em vez de obter a média de todos os resultados da classe, uma média ponderada é obtida com base na frequência da região da classe no conjunto de dados.

Pontuação F1

A métrica usada popularmente na classificação F1 Score pode ser usada para tarefas de segmentação, bem como para lidar com o desequilíbrio de classe.

Fonte: - https://en.wikipedia.org/wiki/F1_score

Precisão Média

A área sob a curva Precisão - Rechamada para uma média IOU de limiar escolhida em diferentes classes é usada para validar os resultados.

Funções de perda

A função de perda é usada para guiar a rede neural para a otimização. Vamos discutir algumas funções de perda populares para tarefas de segmentação semântica.

Perda de entropia cruzada

A média simples de perda de classificação de entropia cruzada para cada pixel na imagem pode ser usada como uma função geral. Mas isso sofre novamente devido ao desequilíbrio de classe que a FCN propõe retificar usando pesos de classe

A UNet tenta melhorar isso dando mais peso aos pixels próximos da borda que fazem parte do limite em comparação com os pixels internos, pois isso faz com que a rede se concentre mais na identificação de bordas e não dê uma saída grosseira.

Perda Focal

A perda focal foi projetada para fazer a rede se concentrar em exemplos difíceis, dando mais peso-idade e também para lidar com o desequilíbrio de classe extremo observado em detectores de objetos de estágio único. O mesmo pode ser aplicado em tarefas de segmentação semântica também

Perda de dados

A função de dados nada mais é do que pontuação F1. Esta função de perda tenta otimizar a pontuação F1 diretamente. Da mesma forma, a pontuação IOU direta pode ser usada para executar a otimização também

Perda Tversky

É uma variante da perda de dados que dá peso-idade diferente para FN e FP

Distância de Hausdorff

É uma técnica usada para medir a semelhança entre os limites da verdade fundamental e o previsto. É calculado descobrindo a distância máxima de qualquer ponto em um limite até o ponto mais próximo no outro. Reduzir diretamente a função de perda de limite é uma tendência recente e tem mostrado melhores resultados, especialmente em casos de uso como segmentação de imagens médicas, onde a identificação do limite exato desempenha um papel fundamental.

A vantagem de usar uma perda de limite em comparação com uma perda baseada na região, como IOU ou Perda de dados, é que ela não é afetada pelo desequilíbrio de classe, uma vez que a região inteira não é considerada para otimização, apenas o limite é considerado.

Fonte https://en.wikipedia.org/wiki/Hausdorff_distance

Os dois termos considerados aqui são para dois limites, ou seja, a verdade fundamental e a previsão de saída.

LabelMe :-

Ferramenta de anotação de imagens escrita em python.
Suporta anotação de polígono.
Código aberto e gratuito.
Funciona no Windows, Mac, Ubuntu ou via Anaconda, Docker
Ligação :- https://github.com/wkentaro/labelme

Fonte: - https://github.com/wkentaro/labelme

Ferramenta de anotação de visão computacional: -

Ferramenta de anotação de vídeo e imagem desenvolvida pela Intel
Gratuito e disponível online
Funciona em Windows, Mac e Ubuntu
Ligação :- https://github.com/opencv/cvat

Anotador de imagem Vgg: -

Ferramenta gratuita de anotação de imagens de código aberto
Página html simples <200kb e pode ser executada offline
Suporta anotação de polígono e pontos.
Ligação :- https://github.com/ox-vgg/via

Fonte: - https://github.com/ox-vgg/via

Rectlabel: -

Ferramenta de anotação paga para Mac
Pode usar modelos básicos de ML para fazer anotações nas imagens
Suporta polígonos, cúbico-bézier, linhas e pontos
Ligação :- https://github.com/ryouchinsa/Rectlabel-support

Labelbox: -

Ferramenta de anotação paga
Suporta a ferramenta caneta para anotações mais rápidas e precisas
Ligação :- https://labelbox.com/product/image-segmentation

Conjuntos de dados

Como parte desta seção, vamos discutir vários conjuntos de dados populares e diversos disponíveis ao público que podem ser usados ​​para começar o treinamento.

Contexto Pascal

Este conjunto de dados é uma extensão do conjunto de dados Pascal VOC 2010 e vai além do conjunto de dados original, fornecendo anotações para toda a cena e tem mais de 400 classes de dados do mundo real.

Fonte: - https://cs.stanford.edu/~roozbeh/pascal-context/
Fonte: - https://cs.stanford.edu/~roozbeh/pascal-context/

Ligação :- https://cs.stanford.edu/~roozbeh/pascal-context/

Conjunto de dados COCO

O conjunto de dados COCO stuff tem 164 mil imagens do conjunto de dados COCO original com anotações em nível de pixel e é um conjunto de dados de referência comum. Abrange 172 classes: 80 classes de coisas, 91 classes de coisas e 1 classe 'sem etiqueta'

Fonte: - http://cocodataset.org/#home

Ligação :- http://cocodataset.org/

Conjunto de dados de paisagens urbanas

Este conjunto de dados consiste em verdades fundamentais de segmentação para estradas, pistas, veículos e objetos na estrada. O conjunto de dados contém 30 classes e 50 cidades coletadas em diferentes condições ambientais e climáticas. Também possui um conjunto de dados de vídeo de imagens com anotações finas que podem ser usados ​​para segmentação de vídeo. KITTI e CamVidName são tipos semelhantes de conjuntos de dados que podem ser usados ​​para treinar carros autônomos.

Fonte: - https://www.cityscapes-dataset.com/

Ligação :- https://www.cityscapes-dataset.com/

Conjunto de dados Lits

O conjunto de dados foi criado como parte de um desafio para identificar lesões tumorais em tomografias computadorizadas do fígado. O conjunto de dados contém 130 varreduras de TC de dados de treinamento e 70 varreduras de TC de dados de teste.

Fonte: - https://competitions.codalab.org/competitions/17094

Ligação :- https://competitions.codalab.org/competitions/17094

Conjunto de dados CCP

O Cloth Co-Parsing é um conjunto de dados criado como parte do artigo de pesquisa Clothing Co-Parsing por Joint Image Segmentation and Labeling. O conjunto de dados contém mais de 1000 imagens com anotações em nível de pixel para um total de 59 marcas.

Fonte: - https://github.com/bearpaw/clothing-co-parsing

Fonte :- https://github.com/bearpaw/clothing-co-parsing

Conjunto de dados Pratheepan

Um conjunto de dados criado para a tarefa de segmentação de pele com base em imagens do google contendo 32 fotos de rosto e 46 fotos de família

Fonte: - http://cs-chan.com/downloads_skin_dataset.html

Ligação :- http://cs-chan.com/downloads_skin_dataset.html

Rotulagem de imagens aéreas de Inria

Um conjunto de dados de mapas de segmentação aérea criados a partir de imagens de domínio público. Tem uma cobertura de 810 Km2 e tem XNUMX classes predial e não predial.

Fonte: - https://project.inria.fr/aerialimagelabeling/
Fonte: - https://project.inria.fr/aerialimagelabeling/

Ligação :- https://project.inria.fr/aerialimagelabeling/

S3DIS

Este conjunto de dados contém as nuvens de pontos de seis partes internas de grande escala em 3 edifícios com mais de 70000 imagens.

Fonte: - http://buildingparser.stanford.edu/dataset.html

Ligação :- http://buildingparser.stanford.edu/dataset.html

Resumo

Discutimos uma taxonomia de diferentes algoritmos que podem ser usados ​​para resolver o caso de uso de segmentação semântica seja em imagens, vídeos ou nuvens de pontos e também suas contribuições e limitações. Também examinamos as maneiras de avaliar os resultados e os conjuntos de dados para começar. Isso deve fornecer uma compreensão abrangente da segmentação semântica como um tópico em geral.

Para obter uma lista de mais recursos para segmentação semântica, comece com https://github.com/mrgloom/awesome-semantic-segmentation.

Leitura


Você pode estar interessado em nossas últimas postagens sobre:

Update:
Adicionado material de leitura adicional.

Fonte: https://nanonets.com/blog/semantic-image-segmentation-2020/

Carimbo de hora:

Mais de IA e aprendizado de máquina