Implementação de Pytorch de redes siamesas e trigêmeas para incorporações de aprendizagem.
As redes siamesas e trigêmeas são úteis para aprender mapeamentos da imagem para um espaço euclidiano compacto, onde as distâncias correspondem a uma medida de similaridade [2]. As incorporações treinadas de tal maneira podem ser usadas como vetores de recursos para classificação ou tarefas de aprendizado de poucas fotos.
Requer Pytorch 0.4 com Torchvision 0.2.1
Para Pytorch 0.3 Tag de checkout de compatibilidade Torch-0.3.1
Treinaremos incorporações no conjunto de dados MNIST. As experiências foram realizadas no Jupyter Notebook.
Vamos passar pelo aprendizado de incorporação de recursos supervisionados usando diferentes funções de perda no conjunto de dados MNIST. Isso é apenas para fins de visualização, portanto, usaremos incorporações bidimensionais, o que não é a melhor escolha na prática.
Para cada experimento, a mesma rede de incorporação é usada (32 conv 5x5 -> Prelu -> Maxpool 2x2 -> 64 CONV 5X5 -> Prelu -> Maxpool 2x2 -> densidade 256 -> Prefunda -> Dense 256 -> Precu -> Dense 2) e não realizamos nenhuma pesquisa hiperâmetro.
Adicionamos uma camada totalmente conectada com o número de classes e treinamos a rede para classificação com softmax e entropia cruzada. A rede treina com ~ 99% de precisão. Extraímos incorporações bidimensionais da penúltima camada:
Conjunto de trem:

Conjunto de testes:

Enquanto as incorporações parecem separáveis (que é para isso que as treinamos), elas não têm boas propriedades métricas. Eles podem não ser a melhor escolha como descritor para novas classes.
Agora, treinaremos uma rede siamesa que pega um par de imagens e treina as incorporações, para que a distância entre elas seja minimizada se elas forem da mesma classe e for maior que algum valor de margem, se elas representarem classes diferentes. Minimizaremos uma função de perda contrastiva [1]:

Amostras de classe siamesenista pares positivos e negativos aleatórios que são então alimentados à rede Siamese.
Após 20 épocas de treinamento, aqui estão as incorporações que obtemos para o conjunto de treinamento:

Conjunto de testes:

As incorporações instruídas são agrupadas muito melhor na aula.
Treinaremos uma rede trigêmea, que leva uma âncora, uma positiva (da mesma classe que uma âncora) e negativos (de classe diferente de uma âncora). O objetivo é aprender incorporações, de modo que a âncora esteja mais próxima do exemplo positivo do que do exemplo negativo por algum valor da margem.
Fonte: Schroff, Florian, Dmitry Kalenichenko e James Philbin. FaceNet: Uma incorporação unificada para reconhecimento de rosto e agrupamento. CVPR 2015.
Perda de trigêmeo : 
A classe TripletMnist mostra um exemplo positivo e negativo para cada âncora possível.
Após 20 épocas de treinamento, aqui estão as incorporações que obtemos para o conjunto de treinamento:

Conjunto de testes:

As incorporações instruídas não são tão próximas uma da sala de aula quanto no caso da rede siamesa, mas não é para isso que os otimizamos. Queríamos que as incorporações estivessem mais próximas de outras incorporações da mesma classe do que das outras classes e podemos ver que é para onde o treinamento está indo.
Existem alguns problemas com as redes siamesas e trigêmeas:
Para lidar com esses problemas com eficiência, alimentaremos uma rede com mini-lotes padrão, como fizemos para a classificação. A função de perda será responsável pela seleção de pares e trigêmeos duros no mini-lote. Se alimentarmos a rede com 16 imagens por 10 classes, podemos processar até 159*160/2 = 12720 pares e 10*16*15/2*(9*16) = 172800 trigêmeos, em comparação com 80 pares e 53 trigêmeos na implementação anterior.
Geralmente, não é a melhor idéia processar todos os pares ou trigêmeos possíveis em um mini-lote. Podemos encontrar algumas estratégias sobre como selecionar trigêmeos em [2] e [3].
Alimentaremos uma rede com mini-lotes, como fizemos para a rede de classificação. Desta vez, usaremos um amostrador de lote especial que provará n_classes e n_samples dentro de cada classe, resultando em mini lotes de tamanho n_classes*n_samples .
Para cada mini pares positivos e negativos em lote, serão selecionados usando os rótulos fornecidos.
O MNIST é um conjunto de dados bastante fácil e as incorporações dos pares selecionados aleatoriamente já eram muito bons, não vemos muitas melhorias aqui.
Treinar incorporados:

Teste de incorporação:

Alimentaremos uma rede com mini-lotes, como na seleção de pares on-line. Existem algumas estratégias que podemos usar para seleção de trigêmeos, dadas as etiquetas e incorporações previstas:
A estratégia para a seleção de trigêmeos deve ser escolhida com cuidado. Uma estratégia ruim pode levar a um treinamento ineficiente ou, ainda pior, para modelar o colapso (todas as incorporações acabam tendo os mesmos valores).
Aqui está o que obtivemos com negativos difíceis aleatórios para cada par positivo.
Conjunto de treinamento:

Conjunto de testes:

Experiências semelhantes foram realizadas para o conjunto de dados da fashionMnist, onde as vantagens da mineração negativa on -line são um pouco mais visíveis. A mesma arquitetura de rede exatamente com apenas incorporações bidimensionais foi usada, o que provavelmente não é complexo o suficiente para aprender boas incorporações. Conjuntos de dados mais complexos com classes de números mais altos devem se beneficiar ainda mais da mineração on -line.

Rede Siamese com pares selecionados aleatoriamente

Perda contrastiva online com mineração negativa

Rede Triplet com trigêmeos aleatórios

Perda de trigêmeos on -line com mineração negativa

[1] RAIA HADSELL, SUMIT CHOPRA, YANN LECUN, REDUÇÃO DA DIMENSENTALIDADE Aprendendo um mapeamento invariante, CVPR 2006
[2] Schroff, Florian, Dmitry Kalenichenko e James Philbin. FaceNet: Uma incorporação unificada para reconhecimento de rosto e agrupamento. CVPR 2015
[3] Alexander Hermans, Lucas Beyer, Bastian Leibe, em defesa da perda de triplos para a re-identificação da pessoa, 2017
[4] Brandon Amos, Bartosz Ludwiczuk, Mahadev Satyanarayanan, Openface: Uma Biblioteca de Reconhecimento de Facas de Uso Geral com Aplicativos Móveis, 2016
[5] Yi Sun, Xiaogang Wang, Xiaoou Tang, Learning Deep Face Representation by Identification-Verificação, NIPS 2014