Ya veo, significa que existo: una revisión de Deep Learning in Computer Vision (parte 1)

Visión por computadora. Ahora hablan mucho sobre eso, donde se aplica e implementa mucho. Y de alguna manera hace bastante tiempo no había artículos de revisión sobre Habré en CV, con ejemplos de arquitecturas y tareas modernas. Pero hay muchos, ¡y son realmente geniales! Si está interesado en lo que está sucediendo en Computer Vision ahora, no solo desde el punto de vista de la investigación y los artículos , sino también desde el punto de vista de los problemas aplicados, entonces es bienvenido a cat. Además, el artículo puede ser una buena introducción para aquellos que siempre han querido comenzar a entender todo esto, pero algo estaba en el camino;)

imagen

Hoy en el PhysTech hay una colaboración activa de la "Academia" y socios industriales. En particular, hay muchos laboratorios interesantes de compañías como Sberbank, Biocad, 1C, Tinkoff, MTS, Huawei en la Escuela de Matemáticas Aplicadas y Ciencias de la Computación de PhysTech .

Me inspiró para escribir este artículo trabajando en el Laboratorio de Sistemas Inteligentes Híbridos , inaugurado por VkusVill . El laboratorio tiene una tarea ambiciosa: construir una tienda que funcione sin cajas, principalmente con la ayuda de la visión por computadora. Durante casi un año de trabajo, tuve la oportunidad de trabajar en muchas tareas de visión, que se discutirán en estas dos partes.

¿Comprar sin mostradores de caja? En algún lugar ya lo escuché ...
Probablemente, querido lector, pensaste en Amazon Go . En cierto sentido, la tarea es repetir su éxito, pero nuestra decisión tiene más que ver con la implementación que con construir una tienda desde cero por un montón de dinero .

Nos moveremos de acuerdo al plan:

  1. Motivación y lo que está pasando.
  2. Clasificación como estilo de vida
  3. Arquitecturas de redes neuronales convolucionales: 1000 formas de lograr un objetivo
  4. Visualización de redes neuronales convolucionales: muéstrame pasión
  5. Yo mismo soy una especie de cirujano: extraemos características de las redes neuronales
  6. Mantente cerca: aprendizaje de representación para personas y personas
  7. Parte 2: detectar, evaluar posturas y reconocer acciones sin spoilers

Motivación y lo que está pasando.


¿Para quién es el artículo?
El artículo se centra más en personas que ya están familiarizadas con el aprendizaje automático y las redes neuronales. Sin embargo, le aconsejo que lea al menos las dos primeras secciones, de repente todo estará claro :)

En 2019, todos hablan de inteligencia artificial, la cuarta revolución industrial y el enfoque de la humanidad hacia una singularidad . Genial, genial, pero quiero detalles. Después de todo, somos técnicos curiosos que no creen en los cuentos de hadas sobre IA, creemos en el establecimiento de tareas formales, las matemáticas y la programación. En este artículo, hablaremos sobre casos específicos del uso de la IA muy moderna: el uso del aprendizaje profundo (es decir, redes neuronales convolucionales) en una variedad de tareas de visión por computadora.

Sí, hablaremos específicamente sobre las redes, a veces mencionaremos algunas ideas desde una visión "clásica" (llamaremos al conjunto de métodos en visión que se usaron antes de las redes neuronales, pero esto de ninguna manera significa que no se usen ahora).

Quiero aprender la visión por computadora desde cero
Recomiendo el curso de Anton Konushin "Introducción a la visión por computadora" . Personalmente, revisé su contraparte en SHAD, que sentó una base sólida para comprender el procesamiento de imágenes y videos.

imagen

En mi opinión, la primera aplicación realmente interesante de redes neuronales en visión, que fue cubierta en los medios en 1993, es el reconocimiento de escritura a mano por Jan LeCun . Ahora es uno de los principales AI en Facebook AI Research , su equipo ya ha lanzado muchas cosas útiles de código abierto .

Hoy, la visión se usa en muchas áreas. Daré solo algunos ejemplos sorprendentes:

imagen
imagen


Vehículos no tripulados Tesla y Yandex

imagen


Análisis de imágenes médicas y predicción del cáncer.

imagen


Consolas de juegos: Kinect 2.0 (aunque también usa información de profundidad, es decir, imágenes RGB-D)

imagen



Reconocimiento facial: Apple FaceID (usando múltiples sensores)

imagen


Clasificación de puntos faciales: máscaras de Snapchat

imagen


Biometría de los movimientos de la cara y los ojos (un ejemplo del proyecto de FPMI MIPT )

imagen


Búsqueda por imagen: Yandex y Google

imagen


Reconocimiento del texto en la imagen ( Reconocimiento óptico de caracteres )

imagen

imagen


Drones y robots: recibir y procesar información a través de la visión

imagen

Odometría : construcción de un mapa y planificación al mover robots

imagen


Mejora de gráficos y texturas en videojuegos

imagen


Traducción de imágenes: Yandex y Google

imagen

imagen


Realidad aumentada: Leap Motion (Project North Star) y Microsoft Hololens

imagen



Transferencia de estilo y textura: Prisma , PicsArt

Sin mencionar las numerosas aplicaciones en diversas tareas internas de las empresas. Facebook, por ejemplo, también usa la visión para filtrar contenido multimedia. Los métodos de visión por computadora también se utilizan en pruebas de calidad / daños en la industria .

La realidad aumentada aquí necesita, de hecho, recibir una atención especial, ya que no funciona en el futuro cercano, esta puede convertirse en una de las principales áreas de aplicación de la visión.

Motivado Cargado Vamos:

Clasificación como estilo de vida



imagen

Como dije, en los años 90, las redes fueron disparadas a la vista. Y filmaron en una tarea específica: la tarea de clasificar imágenes de números escritos a mano (el famoso conjunto de datos MNIST ). Históricamente, fue la tarea de clasificar imágenes lo que se convirtió en la base para resolver casi todas las tareas posteriores en visión. Considere un ejemplo específico:

Tarea : se da una carpeta con fotos en la entrada, cada foto tiene un objeto particular: ya sea un gato, un perro o una persona (incluso si no hay fotos de "basura", es una tarea súper no vital, pero debe comenzar en algún lugar). /leather_bags descomponer las imágenes en tres carpetas: /cats , /dogs y /leather_bags /humans , colocando solo fotos con los objetos correspondientes en cada carpeta.

¿Qué es una foto / foto?
imagen
Casi en todas partes en visión es habitual trabajar con imágenes en formato RGB. Cada imagen tiene una altura (H), un ancho (W) y una profundidad de 3 (colores). Por lo tanto, una imagen se puede representar como un tensor de dimensión HxWx3 (cada píxel es un conjunto de tres números: valores de intensidad en los canales).




Imagine que todavía no estamos familiarizados con la visión por computadora, pero conocemos el aprendizaje automático. Las imágenes son simplemente tensores numéricos en la memoria de la computadora. Formalizamos el problema en términos de aprendizaje automático: los objetos son imágenes, sus signos son valores en píxeles, la respuesta para cada uno de los objetos es una etiqueta de clase (gato, perro o persona). Esta es una tarea de clasificación pura.

Si ahora se ha vuelto difícil ...
... es mejor leer primero los primeros 4 artículos del curso abierto OpenDataScience ML y familiarizarse con un artículo más introductorio sobre visión, por ejemplo, una buena conferencia en Small ShAD .

Puede tomar algunos métodos desde la vista "clásica" o el aprendizaje automático "clásico", es decir, no una red neuronal. Básicamente, estos métodos consisten en resaltar las imágenes de ciertas características (puntos especiales) o regiones locales que caracterizarán la imagen (" bolsa de palabras visuales "). Por lo general, todo se reduce a algo como SVM sobre HOG / SIFT .

Pero nos reunimos aquí para hablar sobre redes neuronales, por lo que no queremos usar los signos que inventamos, pero queremos que la red haga todo por nosotros. Nuestro clasificador tomará los signos de un objeto como entrada y devolverá una predicción (etiqueta de clase). Aquí, los valores de intensidad en píxeles actúan como signos (vea el modelo de imagen en
spoiler arriba). Recuerde que una imagen es un tensor de tamaño (Altura, Ancho, 3) (si es color). Cuando se aprende a ingresar a la cuadrícula, todo esto generalmente no es servido por una imagen y no por un conjunto de datos completo, sino por lotes, es decir, en pequeñas porciones de objetos (por ejemplo, 64 imágenes en el lote).

Por lo tanto, la red recibe un tensor de entrada de tamaño (BATCH_SIZE, H, W, 3). Puede "expandir" cada imagen en una línea vectorial de números H * W * 3 y trabajar con los valores en píxeles al igual que con los signos en el aprendizaje automático, un Perceptrón Multicapa (MLP) normal haría exactamente eso, pero honestamente, es así línea de base, ya que trabajar con píxeles como una fila de vectores no tiene en cuenta, por ejemplo, la invariancia traslacional de los objetos en la imagen. El mismo gato puede estar en el medio de la foto, y en la esquina, MLP no aprenderá este patrón.

Entonces necesita algo más inteligente, por ejemplo, una operación de convolución. Y se trata de la visión moderna, de las redes neuronales convolucionales :

El código de entrenamiento de la red de convolución puede verse más o menos así (en el marco PyTorch)
 #    : # https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html import torch.nn as nn import torch.nn.functional as F import torch.optim as optim class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, 5) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = x.view(-1, 16 * 5 * 5) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x net = Net() criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) for epoch in range(2): # loop over the dataset multiple times running_loss = 0.0 for i, data in enumerate(trainloader, 0): # get the inputs inputs, labels = data # zero the parameter gradients optimizer.zero_grad() # forward + backward + optimize outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() # print statistics running_loss += loss.item() if i % 2000 == 1999: # print every 2000 mini-batches print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 2000)) running_loss = 0.0 print('Finished Training') 


Como ahora estamos hablando de entrenar con un maestro , necesitamos varios componentes para entrenar una red neuronal:

  • Datos (ya existe)
  • Arquitectura de red (resaltado)
  • Una función de pérdida que dirá cómo debe aprender la red neuronal (aquí será entropía cruzada )
  • Método de optimización (cambiará el peso de la red en la dirección correcta)
  • Defina la arquitectura y los hiperparámetros del optimizador (por ejemplo, tamaño del paso del optimizador, número de neuronas en capas, coeficientes de regularización)

Esto es exactamente lo que se implementa en el código; la propia red neuronal convolucional se describe en la clase Net ().

Si desea aprender lentamente y desde el principio sobre paquetes y redes de convolución, le recomiendo una conferencia en la Escuela de Aprendizaje Profundo (MIPT MIPT) (en ruso) sobre este tema y, por supuesto, el curso cs231n de Stanford (en inglés) .

Escuela de aprendizaje profundo: ¿qué es?
Deep Learning School en el Laboratorio de Innovación FPMI MIPT es una organización que participa activamente en el desarrollo de un curso abierto de idioma ruso en redes neuronales. En el artículo me referiré a estos videos tutoriales varias veces.

imagen

En resumen, la operación de convolución le permite encontrar patrones en las imágenes en función de su variabilidad. Cuando entrenamos redes neuronales convolucionales (eng: Redes neuronales convolucionales), de hecho, encontramos filtros de convolución (pesos de neuronas) que describen bien las imágenes, y tan bien que puede determinar con precisión la clase a partir de ellas. Se han inventado muchas formas para construir dicha red. Más de lo que piensas ...

Arquitecturas de redes neuronales convolucionales: 1000 formas de lograr un objetivo



imagen


Sí, sí, otra revisión arquitectónica . ¡Pero aquí trataré de hacerlo lo más relevante posible!

Primero fue LeNet , que ayudó a Jan LeCun a reconocer los números en 1998. Esta fue la primera red neuronal convolucional para la clasificación. Su característica principal era que básicamente comenzó a usar operaciones de convolución y agrupación .

imagen

Luego hubo una pausa en el desarrollo de las redes, pero el hardware no se detuvo; se desarrollaron cálculos efectivos en GPU y XLA . En 2012, apareció AlexNet, participó en el concurso ILSVRC ( ImageNet Large-Scale Visual Recognition Challenge Challenge ).

Una pequeña digresión sobre ILSVRC
ImageNet se ensambló en 2012, y se utilizó un subconjunto de miles de imágenes y 1000 clases para la competencia ILSVRC. ImageNet actualmente tiene ~ 14 millones de imágenes y 21.841 clases (tomadas del sitio oficial), pero para la competencia, por lo general, solo seleccionan un subconjunto. ILSVRC se convirtió en la competencia anual de clasificación de imágenes más grande. Por cierto, recientemente descubrimos cómo entrenar en ImageNet en cuestión de minutos .

Fue en ImageNet (en ILSVRC) de 2010 a 2018 que recibieron redes SOTA en la clasificación de imágenes. Es cierto que desde 2016, las competencias en localización, detección y comprensión de la escena, en lugar de la clasificación, son más relevantes.

Por lo general, varias revisiones arquitectónicas arrojan luz sobre las que fueron las primeras en el ILSVRC de 2010 a 2016, y en algunas redes individuales. Para no saturar la historia, los coloqué debajo del spoiler a continuación, tratando de enfatizar las ideas principales:

Arquitectura de 2012 a 2015
AñoArtículoIdea clavePeso
2012Alexnetusa dos paquetes seguidos; dividir el entrenamiento de la red en dos ramas paralelas240 MB
2013Zfnettamaño del filtro, número de filtros en capas-
2013Sobrepesouno de los primeros detectores de redes neuronales-
2014Vggprofundidad de red (13-19 capas), el uso de varios bloques Conv-Conv-Pool con un tamaño de convolución menor (3x3)549MB (VGG-19)
2014Inception (v1) (también conocido como GoogLeNet)1x1-convolución (idea de la red en red ), pérdidas auxiliares (o supervisión profunda ), apilamiento de las salidas de varias convoluciones (bloque de inicio)-
2015Resnetconexiones residuales , muy profundas (152 capas ..)98 MB (ResNet-50), 232 MB (ResNet-152)




Las ideas de todas estas arquitecturas (a excepción de ZFNet, generalmente se menciona poco) en un momento fueron una nueva palabra en las redes neuronales para la visión. Sin embargo, después de 2015 hubo muchas mejoras más importantes, por ejemplo, Inception-ResNet, Xception, DenseNet, SENet. A continuación intenté recogerlos en un solo lugar.

Arquitectura de 2015 a 2019
AñoArtículoIdea clavePeso
2015Inicio v2 y v3descomposición de paquetes en paquetes 1xN y Nx192 MB
2016Inception v4 e Inception-ResNetcombinación de inicio y ResNet215 MB
2016-17Resnext2do lugar ILSVRC, el uso de muchas ramas (bloque de inicio "generalizado")-
2017Xceptionconvolución separable en profundidad , pesa menos con una precisión comparable a Inception88 MB
2017DensenetBloque denso ligero pero preciso33 MB (DenseNet-121), 80 MB (DenseNet-201)
2018SenetBloqueo de exprimir y excitar46 MB (SENet-Inception), 440 MB (SENet-154)


La mayoría de estos modelos para PyTorch se pueden encontrar aquí , y hay algo genial .

Es posible que haya notado que todo pesa bastante (me gustaría un máximo de 20 MB, o incluso menos), mientras que hoy en día usan dispositivos móviles en todas partes y IoT está ganando popularidad, lo que significa que también desea usar redes allí.

Relación entre peso y velocidad del modelo.
Dado que las redes neuronales dentro de sí mismas solo multiplican los tensores, el número de operaciones de multiplicación (léase: el número de pesos) afecta directamente la velocidad del trabajo (si no se usa el procesamiento o preprocesamiento intensivo en mano de obra). La velocidad de la red en sí depende de la implementación (marco), el hardware en el que se ejecuta y el tamaño de la imagen de entrada.

Los autores de muchos artículos tomaron el camino de inventar arquitecturas rápidas, reuní sus métodos en el siguiente spoiler:


Los números en todas las tablas se toman del techo de los repositorios, de la tabla de aplicaciones de Keras y de este artículo .

Usted pregunta: "¿Por qué escribiste sobre todo este" zoológico "de modelos? ¿Y por qué es la tarea de clasificación? Pero queremos enseñar a las máquinas a ver, y la clasificación es solo una especie de tarea estrecha ... ". El hecho es que las redes neuronales para detectar objetos, evaluar posturas / puntos, volver a identificar y buscar en una imagen usan modelos precisos para la clasificación como columna vertebral , y el 80% del éxito depende de ellos.

Pero de alguna manera quiero confiar más en CNN, o pensaron en cajas negras, pero lo que está "adentro" no es obvio. Para comprender mejor el mecanismo de funcionamiento de las redes convolucionales, a los investigadores se les ocurrió el uso de la visualización.

Visualización de redes neuronales convolucionales: muéstrame pasión


Un paso importante para comprender lo que está sucediendo dentro de las redes convolucionales es el artículo "Visualizar y comprender las redes convolucionales" . En él, los autores propusieron varias formas de visualizar exactamente a qué (en qué partes de la imagen) reaccionan las neuronas en diferentes capas de CNN (también recomiendo ver una conferencia de Stanford sobre este tema ). Los resultados fueron muy impresionantes: los autores mostraron que las primeras capas de la red convolucional responden a algunas "cosas de bajo nivel" por el tipo de bordes / ángulos / líneas, y las últimas capas ya responden a partes enteras de las imágenes (ver la imagen a continuación), es decir, ya llevan en sí misma semántica.

imagen


Además, el proyecto de visualización profunda de la Universidad de Cornell y la compañía avanzaron aún más la visualización, mientras que el famoso DeepDream aprendió a distorsionar en un estilo interesante y adictivo (a continuación se muestra una imagen de deepdreamgenerator.com ).

imagen


En 2017, se publicó un muy buen artículo en Distill , en el que realizaron un análisis detallado de lo que "ve" cada capa, y más recientemente (en marzo de 2019) Google inventó atlas de activación : mapas únicos que se pueden construir para cada capa de red, lo que nos acerca a comprender la imagen general del trabajo de CNN.



Si quieres jugar con la visualización tú mismo, recomendaría Lucid y TensorSpace .

De acuerdo, CNN parece ser cierto hasta cierto punto. Necesitamos aprender a usar esto en otras tareas, y no solo en la clasificación. Esto nos ayudará a extraer imágenes de Embedding'ov y Transfer Learning.

Yo mismo soy una especie de cirujano: extraemos características de las redes neuronales


Imagine que hay una imagen y queremos encontrar una que se vea visualmente (esto es, por ejemplo, la búsqueda en una imagen en Yandex.Pictures). Anteriormente (antes de las redes neuronales), los ingenieros solían extraer características manualmente para esto, por ejemplo, inventando algo que describe bien la imagen y permite compararla con otras. Básicamente, estos métodos ( HOG , SIFT ) funcionan con gradientes de imagen , por lo general, estos elementos se denominan descriptores de imagen "clásicos". De particular interés, me refiero al artículo y al curso de Anton Konushin (esto no es publicidad, solo un buen curso :)

imagen


Usando redes neuronales, no podemos inventar estas características y heurísticas nosotros mismos, sino entrenar adecuadamente el modelo y luego tomar la salida de una o más capas de la red como signos de la imagen .

imagen

Una mirada más cercana a todas las arquitecturas deja en claro que hay dos pasos para la clasificación en CNN:
1) Capas de extractor de características para extraer características informativas de imágenes usando capas convolucionales
2) Aprendiendo sobre estas características capas de clasificador totalmente conectadas (FC)

imagen


La incrustación de imágenes (características) se trata solo del hecho de que puede tomar sus signos después del extractor de características de una red neuronal convolucional (aunque se pueden agregar de diferentes maneras) como una descripción informativa de las imágenes. Es decir, capacitamos a la red para la clasificación, y luego tomamos la salida frente a las capas de clasificación. Estos signos se denominan características , descriptores de redes neuronales o incrustaciones de imágenes (aunque las incrustaciones generalmente se aceptan en la PNL, ya que esto es visión, a menudo hablaré características ). Por lo general, este es un tipo de vector numérico, por ejemplo, 128 números, con el que ya puede trabajar.

¿Pero qué pasa con los codificadores automáticos?
Sí, de hecho, las características se pueden obtener mediante codificadores automáticos . En mi práctica, lo hicieron de diferentes maneras, pero, por ejemplo, en artículos sobre reidentificación (que se discutirán más adelante), con mayor frecuencia aún toman características después del extractor, en lugar de entrenar el codificador automático para esto. Me parece que vale la pena realizar experimentos en ambas direcciones, si la pregunta es qué funciona mejor.

Por lo tanto, la tubería para resolver el problema de búsqueda en una imagen se puede organizar simplemente: ejecutamos las imágenes a través de CNN, tomamos señales de las capas deseadas y comparamos estas características entre sí a partir de diferentes imágenes. Por ejemplo, simplemente consideramos la distancia euclidiana de estos vectores.

imagen


Transfer Learning es una técnica bien conocida para el entrenamiento efectivo de redes neuronales que ya están capacitadas en un conjunto de datos específico para su tarea. A menudo también dicen Ajuste fino en lugar de Aprendizaje de transferencia, en las notas del curso de Stanford cs231n se comparten estos conceptos, dicen, Aprendizaje de transferencia es una idea general, y Ajuste fino es una de las implementaciones de la técnica. Esto no es tan importante para nosotros en el futuro, lo principal es entender que podemos entrenar a la red para predecir bien en el nuevo conjunto de datos, comenzando no por pesos aleatorios, sino por aquellos entrenados en algún tipo grande de ImageNet. Esto es especialmente cierto cuando hay pocos datos y desea resolver el problema cualitativamente.


Sin embargo, simplemente tomar las características necesarias y realizar capacitación adicional del conjunto de datos al conjunto de datos puede no ser suficiente, por ejemplo, para tareas de búsqueda de personas / personas similares / algo específico. Las fotos de la misma persona visualmente a veces pueden ser aún más diferentes que las fotografías de diferentes personas. Es necesario hacer que la red resalte exactamente los signos inherentes a una persona / objeto, incluso si es difícil para nosotros hacer esto con nuestros ojos. Bienvenido al mundo del aprendizaje de representación .

Mantente cerca: aprendizaje de representación para personas y personas


Nota de terminología
Si lee artículos científicos, a veces parece que algunos autores entienden la frase aprendizaje métrico de manera diferente, y no hay consenso sobre qué métodos llamar aprendizaje métrico y cuáles no. Es por eso que en este artículo decidí evitar esta frase en particular y utilicé un aprendizaje de representación más lógico, algunos lectores pueden no estar de acuerdo con esto; estaré encantado de discutirlo en los comentarios.

Establecemos las tareas:

  • Tarea 1 : hay una galería (conjunto) de fotografías de los rostros de las personas, queremos que la red pueda responder de acuerdo con una nueva foto, ya sea con el nombre de una persona de la galería (supuestamente esta es), o dijo que no hay tal persona en la galería (y, tal vez, le agregamos nueva persona)

  • Tarea 2 : lo mismo, pero no estamos trabajando con fotografías de rostros, sino con personas de cuerpo entero.



La primera tarea generalmente se llama reconocimiento facial , la segunda, reidentificación (abreviada como Reid ). Los combiné en un bloque, porque sus soluciones usan ideas similares hoy: para aprender incrustaciones de imágenes efectivas que pueden hacer frente a situaciones bastante difíciles, hoy usan diferentes tipos de pérdidas, como, por ejemplo, pérdida de triplete , pérdida de cuádruple , pérdida de centro contrastante, pérdida de coseno .



Todavía hay maravillosas redes siamesas , pero sinceramente no las usé yo mismo. Por cierto, no solo la pérdida en sí misma "decide", sino cómo muestrear pares de aspectos positivos y negativos para ello, enfatizan los autores del artículo Las cuestiones de muestreo en el aprendizaje de inserción profunda .

La esencia de todas estas pérdidas y redes siamesas es simple: queremos que las imágenes de una clase (persona) en el espacio latente de características (incrustaciones) estén "cercanas", y de diferentes clases (personas) estén "lejos". La proximidad generalmente se mide de la siguiente manera: se toman incrustaciones de imágenes de una red neuronal (por ejemplo, un vector de 128 números) y consideramos la distancia euclidiana habitual entre estos vectores o la proximidad del coseno. Cómo medirlo es mejor elegir en su conjunto de datos / tarea.

Una representación esquemática de una tubería de resolución de problemas en el aprendizaje de representación se parece a esto:



Pero para ser más precisos, así
: (Softmax + CrossEntropy), (Triplet, Contrastive, etc.). positive' negative'

: - , — . , — - , (, ). .


Hay varios buenos artículos específicamente sobre reconocimiento facial : un artículo de revisión (¡ DEBE LEER! ) , FaceNet , ArcFace , CosFace .

imagen


También hay muchas implementaciones: dlib , OpenFace , FaceNet repo , y en Habré ya se habló de ello durante mucho tiempo . Parece que solo se han agregado recientemente ArcFace y CosFace (escriba en los comentarios, si me perdí algo aquí, estaré encantado de saber algo más).

Sin embargo, ahora está más de moda no reconocer caras, sino generarlas , ¿verdad?


, - , , , - , - .



Reid : , , 10 , 5 ( ), 50 . (), , , ID. , : , , , , , , ( / ..).



, Reid — . , - , - negative' positive'.

Reid 2016 . , , — representation learning. , -, , Aligned Re-Id (, , ), Generative Adversarial Networks (GAN) .



imagen


, , -, . , - , , , . — !


OpenReid TorchReid . — , , . PyTorch, Readme Person Re-identification, .

face- reid- ( , ). ? …


, . , , ? ( ) :

  • : , ,
  • : ,
  • : ,

float64, , , float32 . low-precision training . , , Google MorphNet , ( ) .

?



imagen


DL CV: , , , . : , , . , , , . .

Stay tuned!

PS: - ?
(, , ), , , . . , , ( ).

Source: https://habr.com/ru/post/450732/


All Articles