remende treinamento inteligente e treinamento totalmente convolucional em rede neural totalmente convolucional

8

No artigo da rede neural totalmente convolucional , os autores mencionam tanto o treinamento inteligente quanto o treinamento totalmente convolucional.

Meu entendimento para a construção do conjunto de treinamento é o seguinte:

Dada uma M*Mimagem, extraia as sub-imagens com N*N, where ( N<M). As sub-imagens selecionadas são sobrepostas com outras. Para cada lote no processo de treinamento, ele pode incluir todas as sub-imagens para uma determinada imagem ou várias imagens.

Meu entendimento está correto? Então, qual é a diferença entre o treinamento por remendo e o treinamento totalmente convolucional? Eu incluo a seção relacionada como referência.

insira a descrição da imagem aqui

user3125
fonte
Você tem esse direito.
Michael R. Chernick

Respostas:

8

Basicamente, o treinamento totalmente convolucional captura toda a imagem MxM e produz saídas para todas as sub-imagens em uma única passagem direta ConvNet . O treinamento patchwise explora explicitamente as sub-imagens e produz resultados para cada sub-imagem em passes para frente independentes . Portanto, o treinamento totalmente convolucional geralmente é substancialmente mais rápido do que o treinamento sem patch.

Portanto, para um treinamento totalmente convolucional, você faz atualizações como estas:

  1. Entrada de imagem MxM inteira (ou várias imagens)
  2. Envie através do ConvNet -> obtenha um mapa inteiro das saídas (tamanho máximo MxM por imagem, possivelmente menor)
  3. Faça atualizações usando a perda de todas as saídas

Agora, embora seja bastante rápido, ele restringe o processo de amostragem do treinamento em comparação com o treinamento remendado: você é obrigado a fazer muitas atualizações na mesma imagem(na verdade, todas as atualizações possíveis para todas as sub-imagens) durante uma etapa do seu treinamento. É por isso que eles escrevem que o treinamento totalmente convolucional é apenas idêntico ao treinamento com patches, se cada campo receptivo (também conhecido como subimagem) de uma imagem estiver contido em um lote de treinamento do procedimento de treinamento com patches (para o treinamento com patches, você também pode ter dois de dez possíveis). sub-imagens da imagem A, três das oito possíveis sub-imagens da imagem B, etc. em um lote). Em seguida, eles argumentam que, ao não usar todas as saídas durante o treinamento totalmente convolucional, você se aproxima do treinamento remendado novamente (já que não está fazendo todas as atualizações possíveis para todas as sub-imagens de uma imagem em uma única etapa de treinamento). No entanto, você perde parte da computação. Além disso, na Seção 4.4 / Figura 5,

robintibor
fonte
Oi robintibor, obrigado pela resposta. Você mencionou que "insira uma imagem MxM inteira (ou várias imagens)". Você quer dizer que alimenta toda a imagem na rede sem criar sub-imagens antes de alimentar a rede? Na prática, se o tamanho da imagem for muito grande, geralmente precisamos criar sub-imagens primeiro. Meu entendimento está correto?
user3125
Olá @ user3125, sim, alimente a imagem inteira ou, normalmente, várias imagens em um lote. Eu acho que raramente acontece que uma imagem 2D seja grande demais para percorrer a rede na memória, talvez você precise reduzir o tamanho do lote, ou seja, o número de imagens (completas, não sub) que você alimenta na rede ao mesmo tempo Tempo.
robintibor
Oi robintibor, obrigado pelo esclarecimento. Meu cenário é que temos um número limitado de imagens (200 ~ 300) com tamanho de pixel grande (980 * 980). Portanto, estou pensando em criar um grande número de imagens pequenas para fins de treinamento.
user3125
OK eu vejo. Para imagens dimensionais 980 * 980 e três canais de cores, você deve ter cerca de 11 MB por imagem, assumindo float32 = 4 bytes por pixel: (980 * 980 * 3 * 4 bytes) / (1024 ^ 2,0) = 10,9909 MB. Portanto, várias imagens devem caber facilmente em uma GPU comum, mas sua estrutura de rede (número de filtros, número de camadas, quando você reduz a amostragem etc.) determina quanta memória é usada para uma passagem para frente e para trás inteira. Eu sugiro que tente empurrar imagens inteiras através da rede e aumentando o tamanho do lote (número de imagens processadas ao mesmo tempo) até que ele trava :)
robintibor