Princípios de redes neurais convolucionais em visão computacional

Insira a descrição da imagem aqui
Um neurônio simples: há três excitações à esquerda, multiplique as excitações pelos pesos correspondentes, depois some-as e adicione os vieses correspondentes e, finalmente, obtenha a saída final y por meio da função de excitação.
Insira a descrição da imagem aqui
Se colocarmos os neurônios nas colunas Arranjo e a conexão completa entre as colunas resultará em uma rede neural BP: No algoritmo da rede neural BP, inclui principalmente duas partes, propagação direta do sinal e propagação reversa do erro. Em circunstâncias normais, um valor de saída será obtido da esquerda para a direita. O valor do erro pode ser obtido comparando o valor de saída com o valor esperado. Ao calcular a derivada parcial de cada nó, o gradiente de erro de cada nó pode ser obtido. O valor de perda é aplicado de volta ao gradiente de erro para realizar a propagação de volta do erro.
Insira a descrição da imagem aqui

O objetivo da convolução é realizar a extração de características da imagem, que possui um mecanismo de percepção local na forma de uma janela deslizante, e o kernel da convolução não muda durante o processo de deslizamento, portanto, possui um mecanismo de compartilhamento de peso. A figura a seguir ilustra os benefícios do mecanismo de divisão de peso:

Insira a descrição da imagem aqui

#Deve entender:

Uma imagem é convoluída e o resultado também pode ser entendido como outra imagem.A convolução aqui é muito diferente da convolução no processamento digital de sinais. Em livros de sinalização, antes de fazer a soma do produto do elemento, o kernel de convolução é virado diagonalmente, ou seja, enrolado (não girado), e então a soma do produto é realizada, mas essa operação de espelhamento é ignorada na visão computacional. simplificada e a rede neural pode funcionar normalmente . Tecnicamente falando, o que realmente é feito aqui é correlação cruzada em vez de convolução. Na literatura de aprendizado profundo, por convenção, isso é chamado de operação de convolução.

! O kernel de detecção vertical pode detectar bordas verticais.Se a imagem original for pequena, as bordas detectadas são mais largas, mas quando a imagem é grande, as bordas verticais podem ser detectadas bem, e o mesmo se aplica à horizontal.
Insira a descrição da imagem aqui
! No campo do aprendizado profundo, para detectar as bordas de gráficos complexos, não é necessário escolher os nove números (modelo de convolução) fornecidos pelos pesquisadores, mas tratar esses nove números como nove parâmetros e usar o inverso. O algoritmo de propagação entende Esses nove parâmetros e permite que a rede neural os aprenda automaticamente por meio do feedback de dados. A rede neural pode aprender alguns recursos de baixo nível, como bordas, e pode detectar as bordas do livro em qualquer ângulo. É isso que a rede neural convolucional está prestes a fazer .

! O objetivo da camada convolucional: compartilhamento de parâmetros (pesquisas descobriram que ao extrair uma característica de uma imagem, um kernel de convolução pode ser aplicado a toda a imagem, que pode usar os mesmos parâmetros em diferentes áreas da imagem) e conexão esparsa (outros saída de convolução (O valor do pixel não afetará uma determinada saída), de modo que menos parâmetros podem ser usados ​​para o treinamento para evitar super ajuste.

! Preenchimento: imagem n × n, kernel de convolução de detecção de borda f × f pode obter (n-f + 1) × (n-f + 1) o tamanho da imagem após a convolução, que tem duas desvantagens: ① todas as vezes A imagem será reduzida após a operação de convolução, e não queremos reduzir os recursos de nossa imagem (por exemplo, uma rede de 100 camadas e, finalmente, obter recursos muito pequenos inúteis). ②Os pixels de canto e borda são menos usados ​​na saída, o que significa que muitas informações sobre a posição da borda da imagem são perdidas. Solução: Preencher a imagem antes da operação de convolução. É comum preenchê-la com 0. Se p for o número de camadas para preencher os pixels periféricos, o tamanho da imagem de saída será (n + 2p-f + 1) × (n + 2p-f + 1). Quanto à quantidade de pixels a preencher, normalmente existem duas opções: Convolução válida e Mesma convolução . A convolução válida não preenche os pixels e o tamanho da imagem de saída será reduzido; Mesma convolução significa que o tamanho de entrada e o tamanho de saída são iguais.
Nota: Na visão computacional, f geralmente é um número ímpar, por isso é conveniente calcular um pixel e o preenchimento assimétrico não ocorrerá durante o preenchimento.

! Comprimento do passo de convolução: a distância que o kernel de convolução se move horizontalmente e verticalmente, contado como s, o tamanho da imagem de saída torna-se: [(n + 2p-f) / s] + 1 × [(n + 2p-f) / s] + 1, se o quociente não for um número inteiro, é arredondado para baixo .

! Convolução tridimensional: não se limita apenas a imagens em tons de cinza, mas também deseja detectar as características das imagens coloridas RGB, você deve usar um kernel de convolução tridimensional, onde a dimensionalidade deve corresponder à profundidade da imagem (o motivo é mais tarde) . Imaginamos o kernel de convolução de três bits como um cubo e executamos operações de tradução, multiplicação e adição na imagem original, de forma que a saída após a convolução tridimensional tenha apenas um canal. Se você deseja detectar apenas a borda da imagem de um canal, você pode definir o kernel da primeira camada como um operador e definir os kernels das duas últimas camadas como 0, de modo que o kernel de convolução só será útil para o canal vermelho, então a seleção do parâmetro é diferente. Obtenha diferentes detectores de recursos. De acordo com a convenção da visão computacional, a largura e a altura do núcleo de convolução podem ser diferentes da largura e da altura da imagem de entrada, mas o número de canais deve ser o mesmo . Em teoria, é viável para nós focarmos em apenas um canal.
Insira a descrição da imagem aqui
Para resumir: 1. O número de canais do kernel de convolução e o número de canais da camada de feição de entrada deve ser o mesmo
2. O número de canais da matriz de feição de saída é o mesmo que o número de kernels de convolução
Insira a descrição da imagem aqui

! E se você quiser usar vários kernels de convolução ao mesmo tempo, ou seja, para detectar bordas em várias direções: podemos empilhar as imagens de saída pela convolução dos kernels de convolução de detecção de borda não usados , então o resumo é o seguinte: a imagem de entrada é n × n × a, o kernel de convolução é definido como f × f × a, então a saída da matriz pela convolução é (n-f + 1) × (n-f + 1) × o número de núcleos de convolução —Aqui o tamanho do passo é 1 e não há preenchimento. Portanto, o número de canais de saída é igual ao número de recursos a serem detectados.

! Como construir uma rede neural convolucional: a saída de diferentes núcleos de convolução e a imagem original após a convolução formarão uma camada de rede neural convolucional. O mecanismo de transmissão do python adiciona o mesmo desvio a cada valor da matriz de saída e, em seguida, aplica a ativação não linear , cada matriz convolvida produz uma matriz diferente do mesmo tamanho e, em seguida, repita as etapas anteriores para empilhar essas matrizes e obter uma camada de saída. O kernel de convolução é representado pela variável W1. No processo de convolução, cada número do kernel de convolução é multiplicado. Sua função é semelhante a W1a [0], mais o desvio b1. No segundo kernel de convolução, W1a [1] + b2, que é z = wx + b na rede neural e, finalmente, todas as saídas do kernel de convolução são empilhadas para formar uma saída após uma função não linear: a [1]. Cada elemento no kernel de convolução é um peso, e um kernel de convolução compartilha um viés, que pode ser usado para calcular o número de parâmetros. Independentemente do tamanho da imagem, o número de parâmetros é determinado após a determinação do kernel de convolução.Esta é uma característica da rede neural convolucional: evite overfitting. Não sei como olhar para a lenda aqui.

Aqui fórmulas mau jogo, um tiro direto:
!  Se uma camada é uma camada convolucional: vamos denotar o tamanho do kernel de convolução, o sobrescrito l denota a lª camada, denota o número de preenchimento, denota o tamanho do passo, a entrada desta camada será dados de uma certa dimensão: n × n × Número de canais na camada anterior
Insira a descrição da imagem aqui
! Exemplo para construir uma rede neural: extrato de 7 × 7 × 40 características de uma imagem de entrada 39 × 39 × 3, isto é, 1960 recursos, em seguida, processar a camada convolutional e expandi-lo em 1960 unidades que você precisa mestre é:. Como a profundidade computacional da rede neural continua a se aprofundar, a altura e largura permanecerão as mesmas por um período de tempo e, em seguida, diminuirão gradualmente conforme a profundidade da rede se aprofunda e o número de canais está aumentando, o que é uma tendência em muitas convoluções redes neurais .
Insira a descrição da imagem aqui
! Embora a camada convolucional possa ser usada para construir bem uma rede, a maioria dos arquitetos adicionará uma camada de pool e uma camada totalmente conectada. As duas últimas são mais fáceis de projetar do que a camada convolucional. O objetivo da camada de pool é realizar mapas de recursos. O processamento esparso reduz a quantidade de cálculos de matriz, aumenta a velocidade de cálculo e melhora a robustez dos recursos extraídos . Existem dois tipos de pooling: pooling máximo e pooling médio, este último é menos utilizado.

! Conjunto máximo: a entrada pode ser considerada como uma coleção de certos recursos, e cada elemento da saída é o valor máximo de sua área de cor correspondente. Um grande número significa que alguns recursos específicos podem ser extraídos. Se alguns recursos não forem extraídos, O valor máximo da área correspondente ainda é muito pequeno, como a área superior direita, onde o tamanho do passo é 2:
Insira a descrição da imagem aqui
Deve-se admitir que o principal motivo pelo qual as pessoas usam o pooling máximo é que esse método funciona bem em muitos experimentos, embora o acima, o entendimento intuitivo foi Ao ser citado, o tamanho máximo da saída do pool também pode ser expresso pela fórmula [(n + 2p-f) / s] +1 × [(n + 2p-f) / s] +1, e o tamanho do filtro f e passo O s longo é chamado de superparâmetro e geralmente é definido como f = 2 es = 2. O efeito é equivalente a reduzir a altura e a largura pela metade . Além disso, o preenchimento raramente é usado quando o agrupamento é maximizado, ou seja, p = 0. Além disso,Não há parâmetros que precisam ser aprendidos no processo de pooling, que são apenas atributos estáticos de uma determinada camada da rede neural.
Em geral, o tamanho da piscina e a passada são iguais .
Expansão: a entrada são alguns canais, a saída são alguns canais, porque o método de cálculo do pool máximo é realizar o processo de cálculo apenas para cada canal separadamente, e cada canal realiza o cálculo do pooling máximo separadamente.

! Pooling médio: Escolha o valor médio de cada área em vez do valor máximo, mas o pooling máximo é mais comumente usado do que o pooling médio. Deve-se notar que, na literatura, a camada de pooling e a camada convolucional são frequentemente consideradas como uma camada respectivamente, mas também há casos em que apenas a camada ponderada é calculada quando o número de camadas da rede é contado.

! Camada totalmente conectada: a convolução anterior e o agrupamento são equivalentes à engenharia de recursos, a última conexão total é equivalente à ponderação de recursos e a convolução é equivalente ao enfraquecimento intencional da conexão total. De acordo com a inspiração do campo de visão local, o fraco fora da área local é afetado O apagamento direto tem impacto zero, um pouco de força foi feito e os parâmetros usados ​​em diferentes partes são realmente os mesmos. O enfraquecimento reduz o número de parâmetros, economiza a quantidade de cálculo e se especializa em áreas locais, não ávido por mais e mais completo; forçar uma redução adicional dos parâmetros é mais. Cada neurônio na camada totalmente conectada está totalmente conectado com todos os neurônios na camada anterior, e a camada totalmente conectada pode integrar as informações locais com discriminação de categoria na camada convolucional ou na camada de pooling . O valor de saída da última camada da camada totalmente conectada é passado para uma saída, que pode ser classificada por regressão logística softmax (regressão softmax) .Esta camada também pode ser chamada de camada softmax. Normalmente, o algoritmo de treinamento CNN também usa o algoritmo BP.

! Para redes neurais convolucionais: a camada de pooling não tem parâmetros; a camada convolucional tem menos parâmetros; existe um grande número de parâmetros na camada totalmente conectada; conforme a rede neural se aprofunda, o número de valores de ativação diminui gradualmente. Se o número dos valores de ativação cai muito rápido, também afetará o desempenho da rede (diminua muito rápido e os recursos extraídos se tornarão menos). Em relação ao cálculo do valor de ativação: o tamanho do núcleo de convolução bidimensional é f = 5, então o valor de ativação de um núcleo de convolução é 5 × 5 + 1, e o número de valores de ativação de 6 núcleos de convolução é 6 × 26.

Nota: Por que a função de ativação foi introduzida?
Apresente fatores não lineares para fazer com que a rede tenha a capacidade de resolver problemas não lineares. Depois que ReLU é inativado, ele não pode mais ser ativado, portanto, não é recomendado usar uma taxa de aprendizado particularmente grande para o aprendizado no início, o que pode causar a inativação de muitos neurônios.
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/qq_42308217/article/details/109609140
Recomendado
Clasificación