Redes neurais convolucionais com imagens de entrada de diferentes dimensões - Segmentação de imagens

12

Estou enfrentando o problema de ter imagens de diferentes dimensões como entradas em uma tarefa de segmentação. Observe que as imagens nem têm a mesma proporção.

Uma abordagem comum que encontrei em geral no aprendizado profundo é cortar as imagens, como também é sugerido aqui . No entanto, no meu caso, não posso cortar a imagem e manter seu centro ou algo semelhante, pois na segmentação quero que a saída tenha as mesmas dimensões da entrada.

Este artigo sugere que em uma tarefa de segmentação é possível alimentar a mesma imagem várias vezes para a rede, mas com uma escala diferente e, em seguida, agregar os resultados. Se eu entender essa abordagem corretamente, só funcionaria se todas as imagens de entrada tivessem a mesma proporção. Por favor corrija-me se eu estiver errado.

Outra alternativa seria apenas redimensionar cada imagem para dimensões fixas. Eu acho que isso também foi proposto pela resposta a esta pergunta. No entanto, não é especificado de que maneira as imagens são redimensionadas.

Eu considerei pegar a largura e a altura máximas no conjunto de dados e redimensionar todas as imagens para esse tamanho fixo, na tentativa de evitar a perda de informações. No entanto, acredito que nossa rede pode ter dificuldades com imagens distorcidas, pois as bordas de uma imagem podem não estar claras. Qual é a melhor maneira de redimensionar suas imagens antes de alimentá-las na rede?

Existe alguma outra opção que eu não conheça para resolver o problema de ter imagens de diferentes dimensões?

Além disso, qual dessas abordagens você considera as melhores, levando em consideração a complexidade computacional, mas também a possível perda de desempenho da rede?

Eu gostaria que as respostas para minhas perguntas incluíssem algum link para uma fonte, se houver uma. Obrigado.

MattSt
fonte

Respostas:

4

Eu darei uma resposta mais completa.

Existem 2 problemas que você pode enfrentar.

1) A sua rede neural (neste caso, a rede neural convolucional) não pode aceitar fisicamente imagens de diferentes resoluções. Geralmente, esse é o caso se houver camadas totalmente conectadas; no entanto, se a rede for totalmente convolucional , ela poderá aceitar imagens de qualquer dimensão. Totalmente convolucional implica que ele não contém camadas totalmente conectadas, mas apenas camadas convolucionais, de pool máximo e normalização em lote, todas invariáveis ​​ao tamanho da imagem. Exatamente essa abordagem foi proposta neste artigo inovador Redes totalmente convolucionais para segmentação semântica . Lembre-se de que seus métodos de arquitetura e treinamento podem estar um pouco desatualizados até agora. Abordagem semelhante foi usada emU-Net: Redes Convolucionais para Segmentação de Imagem Biomédica e muitas outras arquiteturas para detecção de objetos, estimativa e segmentação de poses.

2) As redes neurais convolucionais não são invariantes em escala. Por exemplo, se alguém treina nos gatos do mesmo tamanho em pixels em imagens de resolução fixa, a rede falhará nas imagens de tamanhos menores ou maiores de gatos. Para superar esse problema, conheço dois métodos (podem ser mais encontrados na literatura): 1) treinamento em várias escalas de imagens de tamanhos diferentes em redes totalmente convolucionais, a fim de tornar o modelo mais robusto às mudanças de escala; e 2) possuir arquitetura multi-escala. Um ponto de partida é examinar esses dois documentos notáveis: redes de pirâmides de recursos para detecção de objetos e representações de alta resolução para rotular pixels e regiões .

Anuar Y
fonte
2

Supondo que você tenha um conjunto de dados grande e rotulado em pixels, uma maneira hacky de resolver o problema é pré-processar as imagens com as mesmas dimensões, inserindo margens horizontais e verticais de acordo com as dimensões desejadas, como nos rótulos você adiciona uma saída extra simulada para os pixels da margem, portanto, ao calcular a perda, você pode mascarar as margens.

Fadi Bakoura
fonte
Como alguém lida com a normalização então nesses casos? Você normaliza apenas os pixels de uma imagem que não estão incluídos em sua margem, eu acho?
MattSt 5/05
Sim, porque seu processo de geração de dados tem tamanhos diferentes, portanto, se você incluir as margens, alterará a distribuição dos dados. margens são inseridas para agrupar as amostras de treinamento em lotes porque seu problema precisa gerar um vetor de saída fixo.
Fadi Bakoura 5/05
0

Acho que este artigo terá informações úteis para você.

Felix Goldberg
fonte
Você não deve dar respostas apenas ao link.
JohnnyApplesauce 11/04
0

Como você deseja realizar a segmentação, você pode usar o U-Net. Não possui unidades totalmente conectadas. Portanto, o tamanho da entrada não importa.

ganLover
fonte
3
Eu acho que você deve detalhar um pouco mais seus pontos.
precisa saber é o seguinte
0

Eu acho que você pode redimensionar sua imagem em pixels e converter rgb em binário ou inteiro para o próximo passo

Danny Lukmana
fonte
11
Olá e bem-vindo ao AI Stack Exchange. Você poderia expandir sua resposta? Considere adicionar mais contexto para fazer backup de sua resposta e talvez adicionar referências.
Jaden Travnik
0

Tente redimensionar a imagem para as dimensões de entrada da sua arquitetura de rede neural (mantendo-a fixa em algo como 128 * 128 em uma arquitetura de rede U-2D padrão) usando a técnica de interpolação de vizinhos mais próxima . Isso ocorre porque, se você redimensionar sua imagem usando qualquer outra interpolação, isso poderá resultar na violação dos rótulos de verdade do solo. Isso é particularmente um problema na segmentação. Você não enfrentará esse problema quando se trata de classificação.

Tente o seguinte:

import cv2 
resized_image = cv2.resize(original_image, (new_width, new_height), 
                           interpolation=cv2.INTER_NEAREST)
Shalabh Gupta
fonte