Je vois, cela signifie que j'existe: une revue du Deep Learning in Computer Vision (partie 1)

Vision par ordinateur. Maintenant, ils en parlent beaucoup, oĂč il est appliquĂ© et mis en Ɠuvre beaucoup. Et il y a quelque temps, il n'y avait pas d'articles de synthĂšse sur HabrĂ© sur CV, avec des exemples d'architectures et de tĂąches modernes. Mais il y en a beaucoup et ils sont vraiment cool! Si vous ĂȘtes intĂ©ressĂ© par ce qui se passe actuellement en vision par ordinateur, non seulement du point de vue de la recherche et des articles , mais aussi du point de vue des problĂšmes appliquĂ©s, vous ĂȘtes les bienvenus chez cat. De plus, l'article peut ĂȘtre une bonne introduction pour ceux qui ont longtemps voulu commencer Ă  comprendre tout cela, mais quelque chose Ă©tait sur le chemin;)

image

Aujourd'hui, au PhysTech, il y a une collaboration active de l '"Académie" et des partenaires industriels. En particulier, il existe de nombreux laboratoires intéressants de sociétés telles que Sberbank, Biocad, 1C, Tinkoff, MTS, Huawei à la PhysTech School of Applied Mathematics and Computer Science .

J'ai été inspiré pour écrire cet article en travaillant dans le laboratoire des systÚmes intelligents hybrides , ouvert par VkusVill . Le laboratoire a une tùche ambitieuse: construire un magasin qui fonctionne sans caisses, principalement à l'aide de la vision par ordinateur. Pendant prÚs d'un an de travail, j'ai eu l'occasion de travailler sur de nombreuses tùches de vision, qui seront discutées dans ces deux parties.

Acheter sans caisses? Quelque part, je l'ai déjà entendu ..
Cher lecteur, vous avez probablement pensĂ© Ă  Amazon Go . Dans un sens, la tĂąche consiste Ă  rĂ©pĂ©ter leur succĂšs, mais notre dĂ©cision est plus sur la mise en Ɠuvre que sur la construction d'un tel magasin Ă  partir de zĂ©ro pour beaucoup d'argent .

Nous nous déplacerons selon le plan:

  1. La motivation et ce qui se passe
  2. La classification comme mode de vie
  3. Architectures de réseaux de neurones convolutifs: 1000 façons d'atteindre un objectif
  4. Visualisation des réseaux de neurones convolutionnels: montrez-moi la passion
  5. Je suis moi-mĂȘme une sorte de chirurgien: on extrait les traits des rĂ©seaux de neurones
  6. Restez proches: l'apprentissage de la représentation pour les personnes et les individus
  7. Partie 2: détecter, évaluer la posture et reconnaßtre les actions sans spoilers

La motivation et ce qui se passe


À qui s'adresse l'article?
L'article se concentre davantage sur les personnes qui connaissent déjà l'apprentissage automatique et les réseaux de neurones. Cependant, je vous conseille de lire au moins les deux premiÚres sections - du coup tout sera clair :)

En 2019, tout le monde parle d'intelligence artificielle, de la quatriÚme révolution industrielle et de l' approche de l'humanité à une singularité . Cool, cool, mais je veux des détails. AprÚs tout, nous sommes des techniciens curieux qui ne croient pas aux contes de fées sur l'IA, nous croyons au cadre formel des tùches, des mathématiques et de la programmation. Dans cet article, nous parlerons de cas spécifiques d'utilisation de l'IA trÚs moderne - l'utilisation de l'apprentissage en profondeur (à savoir, les réseaux de neurones convolutionnels) dans une variété de tùches de vision par ordinateur.

Oui, nous parlerons spécifiquement des grilles, en mentionnant parfois quelques idées d'un point de vue "classique" (nous appellerons l'ensemble des méthodes en vision qui étaient utilisées avant les réseaux de neurones, mais cela ne signifie nullement qu'elles ne sont pas utilisées maintenant).

Je veux apprendre la vision par ordinateur à partir de zéro
Je recommande le cours d'Anton Konushin "Introduction à la vision par ordinateur" . Personnellement, je suis passé par son homologue au SHAD, qui a jeté des bases solides dans la compréhension du traitement d'image et de vidéo.

image

À mon avis, la premiĂšre application vraiment intĂ©ressante des rĂ©seaux de neurones en vision, qui a Ă©tĂ© couverte dans les mĂ©dias en 1993, est la reconnaissance de l'Ă©criture manuscrite par Jan LeCun . Maintenant, il est l'un des principaux IA de Facebook AI Research , leur Ă©quipe a dĂ©jĂ  publiĂ© beaucoup de choses utiles en Open Source .

Aujourd'hui, la vision est utilisée dans de nombreux domaines. Je ne donnerai que quelques exemples frappants:

image
image


Véhicules sans pilote Tesla et Yandex

image


Analyse d'imagerie médicale et prédiction du cancer

image


Consoles de jeu: Kinect 2.0 (bien qu'il utilise également des informations de profondeur, c'est-à-dire des images RGB-D)

image



Reconnaissance faciale : Apple FaceID (utilisant plusieurs capteurs)

image


Cote du visage: masques Snapchat

image


Biométrie des mouvements du visage et des yeux (exemple du projet FPMI MIPT )

image


Recherche par image: Yandex et Google

image


Reconnaissance du texte dans l'image ( reconnaissance optique des caractĂšres )

image

image


Drones et robots: recevoir et traiter des informations par la vision

image

Odométrie : création d'une carte et planification lors du déplacement de robots

image


Amélioration des graphismes et des textures dans les jeux vidéo

image


Traduction d'images: Yandex et Google

image

image


Réalité augmentée: Leap Motion (Project North Star) et Microsoft Hololens

image



Transfert de style et de texture: Prisma , PicsArt

Sans oublier les nombreuses applications dans diverses tùches internes des entreprises. Facebook, par exemple, utilise également la vision pour filtrer le contenu multimédia. Les méthodes de vision par ordinateur sont également utilisées dans les tests de qualité / dommages dans l'industrie .

En fait, la réalité augmentée doit faire l'objet d'une attention particuliÚre, car elle ne fonctionne pas dans un avenir proche, cela peut devenir l'un des principaux domaines d'application de la vision.

Motivé. Chargé. C'est parti:

La classification comme mode de vie



image

Comme je l'ai dit, dans les années 90, les filets ont été tirés à vue. Et ils ont tourné dans une tùche spécifique - la tùche de classer les images de nombres manuscrits (le célÚbre ensemble de données MNIST ). Historiquement, c'était la tùche de classer les images qui était devenue la base pour résoudre presque toutes les tùches ultérieures en vision. Prenons un exemple spécifique:

TĂąche : Un dossier avec des photos est donnĂ© Ă  l'entrĂ©e, chaque photo a un objet particulier: soit un chat, soit un chien, soit une personne (mĂȘme s'il n'y a pas de photos "poubelles", c'est une tĂąche super-non vitale, mais il faut commencer quelque part). Vous devez dĂ©composer les images dans trois dossiers: /cats , /dogs et /leather_bags /humans , en ne plaçant que des photos avec les objets correspondants dans chaque dossier.

Qu'est-ce qu'une image / photo?
image
Presque partout dans la vision, il est habituel de travailler avec des images au format RVB. Chaque image a une hauteur (H), une largeur (W) et une profondeur de 3 (couleurs). Ainsi, une image peut ĂȘtre reprĂ©sentĂ©e comme un tenseur de dimension HxWx3 (chaque pixel est un ensemble de trois nombres - valeurs d'intensitĂ© dans les canaux).




Imaginez que nous ne connaissions pas encore la vision par ordinateur, mais nous connaissons l'apprentissage automatique. Les images sont simplement des tenseurs numériques dans la mémoire de l'ordinateur. Nous formalisons le problÚme en termes d'apprentissage automatique: les objets sont des images, leurs signes sont des valeurs en pixels, la réponse pour chacun des objets est une étiquette de classe (chat, chien ou personne). Il s'agit d'une pure tùche de classification .

Si maintenant c'est devenu difficile ..
... alors il est préférable de lire d'abord les 4 premiers articles du cours ouvert OpenDataScience ML et de lire un article plus introductif sur la vision, par exemple, une bonne conférence dans Small ShAD .

Vous pouvez prendre certaines méthodes de la vue «classique» ou de l'apprentissage automatique «classique», c'est-à-dire pas d'un réseau de neurones. Fondamentalement, ces méthodes consistent à mettre en évidence sur les images de certaines fonctionnalités (points spéciaux) ou des régions locales qui caractériseront l'image (« sac de mots visuels »). Habituellement, tout se résume à quelque chose comme SVM sur HOG / SIFT .

Mais nous nous sommes réunis ici pour parler des réseaux de neurones, donc nous ne voulons pas utiliser les signes que nous avons inventés, mais voulons que le réseau fasse tout pour nous. Notre classificateur prendra les signes d'un objet en entrée et renverra une prédiction (étiquette de classe). Ici, les valeurs d'intensité en pixels agissent comme des signes (voir le modÚle d'image dans
spoiler ci-dessus). N'oubliez pas qu'une image est un tenseur de taille (Hauteur, Largeur, 3) (s'il s'agit de couleur). Lorsque vous apprenez à entrer dans la grille, tout cela n'est généralement pas servi par une image et non par un ensemble de données entier, mais par lots, c'est-à-dire dans de petites portions d'objets (par exemple, 64 images dans le lot).

Ainsi, le rĂ©seau reçoit un tenseur d'entrĂ©e de taille (BATCH_SIZE, H, W, 3). Vous pouvez «agrandir» chaque image dans une ligne vectorielle de nombres H * W * 3 et travailler avec les valeurs en pixels comme avec les signes dans l'apprentissage automatique, un Perceptron multicouche (MLP) normal ferait exactement cela, mais honnĂȘtement, c'est comme ça ligne de base, car travailler avec des pixels comme une ligne vectorielle ne prend pas en compte, par exemple, l'invariance translationnelle des objets dans l'image. Le mĂȘme chat peut ĂȘtre au milieu de la photo et dans le coin, MLP n'apprendra pas ce schĂ©ma.

Vous avez donc besoin de quelque chose de plus intelligent, par exemple, une opération de convolution. Et cela concerne la vision moderne, les réseaux de neurones convolutifs :

Le code de formation du réseau de convolution peut ressembler à ceci (sur le framework 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') 


Puisque nous parlons maintenant de formation avec un enseignant , nous avons besoin de plusieurs composants pour former un réseau de neurones:

  • DonnĂ©es (existe dĂ©jĂ )
  • Architecture de rĂ©seau (mise en Ă©vidence)
  • Une fonction de perte qui dira comment le rĂ©seau neuronal apprendra (ici ce sera l' entropie croisĂ©e )
  • MĂ©thode d'optimisation (changera le poids du rĂ©seau dans la bonne direction)
  • DĂ©finir l'architecture et les hyperparamĂštres de l'optimiseur (par exemple, la taille des pas de l'optimiseur, le nombre de neurones dans les couches, les coefficients de rĂ©gularisation)

C'est exactement ce qui est implĂ©mentĂ© dans le code; le rĂ©seau neuronal convolutionnel lui-mĂȘme est dĂ©crit dans la classe Net ().

Si vous voulez apprendre lentement et dÚs le début sur les faisceaux et les réseaux de convolution, je recommande une conférence à la Deep Learning School (MIPT MIPT) (en russe) sur ce sujet et, bien sûr, le cours de Stanford cs231n (en anglais) .

Deep Learning School - qu'est-ce que c'est?
Deep Learning School au Laboratoire d'Innovation FPMI MIPT est une organisation qui est activement engagée dans le développement d'un cours ouvert en langue russe sur les réseaux de neurones. Dans l'article, je ferai référence à plusieurs fois à ces didacticiels vidéo .

image

En bref, l'opération de convolution vous permet de trouver des motifs sur des images en fonction de leur variabilité. Lorsque nous formons des réseaux de neurones à convolution (eng: Réseaux de neurones à convolution), nous trouvons en fait des filtres de convolution (poids des neurones) qui décrivent bien les images, et si bien que nous pouvons déterminer avec précision la classe à partir d'eux. De nombreuses façons ont été inventées pour construire un tel réseau. Plus que vous ne le pensez ...

Architectures de réseaux de neurones convolutifs: 1000 façons d'atteindre un objectif



image


Oui, oui, une autre revue architecturale . Mais ici, je vais essayer de le rendre aussi pertinent que possible!

Il y a d'abord eu LeNet , il a aidé Jan LeCun à reconnaßtre les nombres en 1998. Ce fut le premier réseau neuronal convolutif pour la classification. Sa principale caractéristique était qu'elle commençait essentiellement à utiliser des opérations de convolution et de mise en commun .

image

Ensuite, il y a eu une pause dans le dĂ©veloppement des grilles, mais le matĂ©riel ne s'est pas arrĂȘtĂ©; des calculs efficaces sur GPU et XLA ont Ă©tĂ© dĂ©veloppĂ©s . En 2012, AlexNet est apparue, elle a participĂ© au concours ILSVRC ( ImageNet Large-Scale Visual Recognition Challenge ).

Une petite digression sur ILSVRC
ImageNet a été assemblé en 2012, et un sous-ensemble de milliers d'images et de 1000 classes a été utilisé pour le concours ILSVRC. ImageNet compte actuellement environ 14 millions de photos et 21 841 classes (prises sur le site officiel), mais pour la compétition, elles ne sélectionnent généralement qu'un sous-ensemble. ILSVRC est alors devenu le plus grand concours annuel de classification d'images. Soit dit en passant, nous avons récemment compris comment s'entraßner sur ImageNet en quelques minutes .

C'est sur ImageNet (en ILSVRC) de 2010 à 2018 qu'ils ont reçu les réseaux SOTA dans la classification des images. Certes, depuis 2016, les concours de localisation, de détection et de compréhension de la scÚne, plutÎt que de classification, sont plus pertinents.

En rÚgle générale, diverses revues d'architecture mettent en lumiÚre celles qui ont été les premiÚres à l'ILSVRC de 2010 à 2016 et sur certains réseaux individuels. Afin de ne pas encombrer l'histoire, je les ai placés sous le spoiler ci-dessous, en essayant de souligner les idées principales:

Architecture de 2012 Ă  2015
AnnéeArticleIdée cléLe poids
2012Alexnetutilisez deux faisceaux d'affilée; diviser la formation réseau en deux branches parallÚles240 Mo
2013Zfnettaille de filtre, nombre de filtres dans les couches-
2013Surpasserl'un des premiers détecteurs de réseau neuronal-
2014Vggprofondeur du réseau (13-19 couches), utilisation de plusieurs blocs Conv-Conv-Pool avec une taille de convolution plus petite (3x3)549 Mo (VGG-19)
2014Inception (v1) (alias GoogLeNet)Convolution 1x1 (idée du Network-in-Network ), pertes auxiliaires (ou supervision profonde ), empilement des sorties de plusieurs convolutions (Inception-block)-
2015Resnetconnexions résiduelles , trÚs profondes (152 couches ..)98 Mo (ResNet-50), 232 Mo (ResNet-152)




Les idées de toutes ces architectures (à l'exception de ZFNet, il est généralement peu mentionné) étaient à une époque un nouveau mot dans les réseaux de neurones pour la vision. Cependant, aprÚs 2015, il y a eu de nombreuses autres améliorations importantes, par exemple, Inception-ResNet, Xception, DenseNet, SENet. Ci-dessous, j'ai essayé de les rassembler en un seul endroit.

Architecture de 2015 Ă  2019
AnnéeArticleIdée cléLe poids
2015Inception v2 et v3décomposition des packages en packages 1xN et Nx192 Mo
2016Inception v4 et Inception-ResNetcombinaison de Inception et ResNet215 Mo
2016-17Resnext2Úme place ILSVRC, l'utilisation de nombreuses branches (bloc Inception «généralisé»)-
2017Xceptionconvolution séparable en profondeur , pÚse moins avec une précision comparable à Inception88 Mo
2017DensenetBloc dense léger mais précis33 Mo (DenseNet-121), 80 Mo (DenseNet-201)
2018SenetBloc de compression et d'excitation46 Mo (SENet-Inception), 440 Mo (SENet-154)


La plupart de ces modĂšles pour PyTorch peuvent ĂȘtre trouvĂ©s ici , et il y a une telle chose cool .

Vous avez peut-ĂȘtre remarquĂ© que tout cela pĂšse beaucoup (je voudrais 20 Mo maximum, voire moins), alors qu'aujourd'hui ils utilisent des appareils mobiles partout et que l' IoT gagne en popularitĂ©, ce qui signifie que vous souhaitez Ă©galement utiliser des grilles lĂ -bas.

Relation entre le poids et la vitesse du modĂšle
Étant donnĂ© que les rĂ©seaux de neurones en eux-mĂȘmes ne multiplient que les tenseurs, le nombre d'opĂ©rations de multiplication (lire: le nombre de poids) affecte directement la vitesse de travail (si le post-traitement ou le prĂ©traitement Ă  forte intensitĂ© de main-d'Ɠuvre n'est pas utilisĂ©). La vitesse du rĂ©seau lui-mĂȘme dĂ©pend de l'implĂ©mentation (framework), du matĂ©riel sur lequel il s'exĂ©cute et de la taille de l'image d'entrĂ©e.

Les auteurs de nombreux articles ont pris le chemin d'inventer des architectures rapides, j'ai rassemblé leurs méthodes sous le spoiler ci-dessous:


Les nombres dans toutes les tables sont tirés du plafond des référentiels, de la table Keras Applications et de cet article .

Vous demandez: «Pourquoi avez-vous écrit sur tout ce« zoo »de modÚles? Et pourquoi est la tùche de la classification? Mais nous voulons apprendre aux machines à voir, et la classification n'est qu'une sorte de tùche étroite. ». Le fait est que les réseaux de neurones pour détecter les objets, évaluer les postures / points, ré-identifier et rechercher dans une image utilisent exactement les modÚles pour la classification en tant que colonne vertébrale , et 80% du succÚs en dépend.

Mais je veux en quelque sorte faire davantage confiance à CNN, ou ils ont imaginé des boßtes noires, mais ce qui est "à l'intérieur" n'est pas évident. Pour mieux comprendre le mécanisme de fonctionnement des réseaux convolutifs, les chercheurs ont imaginé l'utilisation de la visualisation.

Visualisation des réseaux de neurones convolutionnels: montrez-moi la passion


Une étape importante vers la compréhension de ce qui se passe à l'intérieur des réseaux convolutionnels est l'article «Visualiser et comprendre les réseaux convolutionnels» . Dans ce document, les auteurs ont proposé plusieurs façons de visualiser exactement à quoi (sur quelles parties de l'image) les neurones dans différentes couches CNN répondent (je recommande également de regarder une conférence de Stanford sur ce sujet ). Les résultats étaient trÚs impressionnants: les auteurs ont montré que les premiÚres couches du réseau convolutionnel répondent à certaines «choses de bas niveau» par le type de bords / angles / lignes, et les derniÚres couches répondent déjà à des parties entiÚres des images (voir l'image ci-dessous), c'est-à-dire qu'elles portent déjà en soi une sémantique.

image


De plus, le projet de visualisation en profondeur de l'Université Cornell et de la société a avancé la visualisation encore plus loin, tandis que le célÚbre DeepDream a appris à déformer dans un style intéressant et addictif (ci-dessous, une image de deepdreamgenerator.com ).

image


En 2017, un trĂšs bon article a Ă©tĂ© publiĂ© sur Distill , dans lequel ils ont effectuĂ© une analyse dĂ©taillĂ©e de ce que chaque couche «voit», et plus rĂ©cemment (en mars 2019), Google a inventĂ© des atlas d'activation : des cartes uniques qui peuvent ĂȘtre construites pour chaque couche rĂ©seau, ce qui nous rapproche de la comprĂ©hension de l'image globale du travail de CNN.



Si vous voulez jouer avec la visualisation vous-mĂȘme, je recommanderais Lucid et TensorSpace .

D'accord, CNN semble ĂȘtre vrai dans une certaine mesure. Nous devons apprendre Ă  l'utiliser dans d'autres tĂąches, et pas seulement dans la classification. Cela nous aidera Ă  extraire les images Embedding'ov et Ă  transfĂ©rer l'apprentissage.

Je suis moi-mĂȘme une sorte de chirurgien: on extrait les traits des rĂ©seaux de neurones


Imaginez qu'il y ait une image, et nous voulons trouver celles qui lui ressemblent visuellement (c'est, par exemple, la recherche dans une image dans Yandex.Pictures). Auparavant (avant les rĂ©seaux de neurones), les ingĂ©nieurs extrayaient manuellement des fonctionnalitĂ©s pour cela, par exemple, inventant quelque chose qui dĂ©crit bien l'image et permet de la comparer avec d'autres. Fondamentalement, ces mĂ©thodes ( HOG , SIFT ) fonctionnent avec des dĂ©gradĂ©s d'image , gĂ©nĂ©ralement ces choses sont appelĂ©es descripteurs d'image «classiques». D'un intĂ©rĂȘt particulier, je me rĂ©fĂšre Ă  l' article et au cours d'Anton Konushin (ce n'est pas de la publicitĂ©, juste un bon cours :)

image


En utilisant des rĂ©seaux de neurones, nous ne pouvons pas inventer nous-mĂȘmes ces caractĂ©ristiques et ces heuristiques, mais former correctement le modĂšle, puis prendre la sortie d'une ou plusieurs couches du rĂ©seau comme signes de l'image .

image

Un examen plus approfondi de toutes les architectures montre clairement qu'il y a deux étapes de classification dans CNN:
1). Couches d'extraction de fonctionnalités pour extraire des fonctionnalités informatives à partir d'images à l'aide de couches convolutionnelles
2). Apprendre en plus de ces fonctionnalités Couches de classificateur entiÚrement connectées (FC)

image


L'incorporation d'images (fonctionnalitĂ©s) est Ă  peu prĂšs le fait que vous pouvez prendre leurs signes aprĂšs l'extracteur de fonctionnalitĂ©s d'un rĂ©seau de neurones convolutionnels (bien qu'elles puissent ĂȘtre agrĂ©gĂ©es de diffĂ©rentes maniĂšres) comme description informative des images. Autrement dit, nous avons formĂ© le rĂ©seau pour la classification, puis prenons simplement la sortie devant les couches de classification. Ces signes sont appelĂ©s caractĂ©ristiques , descripteurs de rĂ©seau de neurones ou imbrications d' images (bien que les incorporations soient gĂ©nĂ©ralement acceptĂ©es dans la PNL, car il s'agit de vision, je parlerai souvent de fonctionnalitĂ©s ). Il s'agit gĂ©nĂ©ralement d'une sorte de vecteur numĂ©rique, par exemple, 128 nombres, avec lequel vous pouvez dĂ©jĂ  travailler.

Mais qu'en est-il des encodeurs automatiques?
Oui, en fait, les fonctionnalitĂ©s peuvent ĂȘtre obtenues par des auto-encodeurs . Dans ma pratique, ils l'ont fait de diffĂ©rentes maniĂšres, mais, par exemple, dans des articles sur la rĂ©-identification (qui seront discutĂ©s plus tard), plus souvent, ils prennent toujours des fonctionnalitĂ©s aprĂšs l'extracteur, plutĂŽt que de former l'auto-encodeur pour cela. Il me semble qu'il vaut la peine de mener des expĂ©riences dans les deux sens, si la question est de savoir ce qui fonctionne le mieux.

Ainsi, le pipeline pour rĂ©soudre le problĂšme de la recherche par image peut ĂȘtre organisĂ© simplement: nous exĂ©cutons les images via CNN, prenons les signes des couches souhaitĂ©es et comparons ces caractĂ©ristiques les unes avec les autres Ă  partir d'images diffĂ©rentes. Par exemple, nous considĂ©rons simplement la distance euclidienne de ces vecteurs.

image


Le transfert d'apprentissage est une technique bien connue pour la formation efficace de réseaux de neurones qui sont déjà formés sur un ensemble de données spécifique pour leur tùche. Souvent, ils disent également que le réglage fin au lieu de l'apprentissage par transfert, dans les notes de cours de Stanford cs231n, ces concepts sont partagés, disent-ils, l'apprentissage par transfert est une idée générale et le réglage fin est l'une des implémentations de la technique. Ce n'est pas si important pour nous à l'avenir, l'essentiel est de comprendre que nous pouvons simplement former le réseau à bien prédire sur le nouvel ensemble de données, à partir non pas de poids aléatoires, mais de ceux formés sur un grand type ImageNet. Cela est particuliÚrement vrai lorsqu'il y a peu de données et que vous souhaitez résoudre le problÚme de maniÚre qualitative.


Cependant, le simple fait de prendre les fonctionnalitĂ©s nĂ©cessaires et de faire une formation supplĂ©mentaire de l'ensemble de donnĂ©es Ă  l'ensemble de donnĂ©es peut ne pas ĂȘtre suffisant, par exemple, pour des tĂąches de recherche de personnes / personnes / quelque chose de spĂ©cifique similaires. Les photos d'une mĂȘme personne visuellement peuvent parfois ĂȘtre encore plus diffĂ©rentes que les photographies de personnes diffĂ©rentes. Il est nĂ©cessaire de faire en sorte que le rĂ©seau souligne exactement les signes inhĂ©rents Ă  une personne / un objet, mĂȘme s'il nous est difficile de le faire avec nos yeux. Bienvenue dans le monde de l' apprentissage de la reprĂ©sentation .

Restez proches: l'apprentissage de la représentation pour les personnes et les individus


Note terminologique
Si vous lisez des articles scientifiques, il semble parfois que certains auteurs comprennent diffĂ©remment l'expression apprentissage mĂ©trique , et il n'y a pas de consensus sur les mĂ©thodes Ă  appeler apprentissage mĂ©trique et celles qui ne le sont pas. C'est pourquoi dans cet article, j'ai dĂ©cidĂ© d'Ă©viter cette phrase particuliĂšre et j'ai utilisĂ© un apprentissage de la reprĂ©sentation plus logique, certains lecteurs peuvent ne pas ĂȘtre d'accord avec cela - je serai heureux de discuter dans les commentaires.

Nous définissons les tùches:

  • TĂąche 1 : il y a une galerie (ensemble) de photographies de visages de personnes, nous voulons que le rĂ©seau puisse rĂ©pondre selon une nouvelle photo soit avec le nom d'une personne de la galerie (soi-disant c'est ça), soit dit qu'il n'y a pas une telle personne dans la galerie (et, peut-ĂȘtre, nous y ajoutons nouvelle personne)

  • TĂąche 2 : la mĂȘme chose, mais nous ne travaillons pas avec des photographies de visages, mais avec un recadrage complet de personnes



La premiÚre tùche est généralement appelée reconnaissance faciale , la seconde - la ré-identification (en abrégé Reid ). Je les ai combinés en un seul bloc, car leurs solutions utilisent aujourd'hui des idées similaires: afin d'apprendre des imbrications d'images efficaces qui peuvent faire face à des situations plutÎt difficiles, elles utilisent aujourd'hui différents types de pertes, comme, par exemple, la perte de triplet , la perte de quadruplet , perte de centre contrastif , perte de cosinus .



Il existe encore de merveilleux rĂ©seaux siamois , mais honnĂȘtement, je ne les ai pas utilisĂ©s moi-mĂȘme. Soit dit en passant, non seulement la perte elle-mĂȘme «dĂ©cide», mais aussi comment Ă©chantillonner des paires de positifs et de nĂ©gatifs pour elle, soulignent les auteurs de l'article L'Ă©chantillonnage compte dans l'apprentissage enracinĂ© en profondeur .

L'essence de toutes ces pertes et réseaux siamois est simple - nous voulons que les images d'une classe (personne) dans l'espace latent des fonctionnalités (plongements) soient «proches», et de différentes classes (personnes) soient «éloignées». La proximité est généralement mesurée comme suit: des incorporations d'images à partir d'un réseau de neurones sont prises (par exemple, un vecteur de 128 nombres) et nous considérons la distance euclidienne habituelle entre ces vecteurs ou la proximité cosinus. Comment mesurer, il vaut mieux choisir sur votre ensemble de données / tùche.

Une représentation schématique d'un pipeline de résolution de problÚmes sur l'apprentissage de la représentation ressemble à ceci:



Mais pour ĂȘtre plus prĂ©cis, comme ça
: (Softmax + CrossEntropy), (Triplet, Contrastive, etc.). positive' negative'

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


: - ( MUST READ! ) , FaceNet , ArcFace , CosFace .

image


: dlib , OpenFace , FaceNet repo , . , ArcFace CosFace ( , - , - ).

, , ?


, - , , , - , - .



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



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

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



image


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


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

face- reid- ( , ). ? 



, . , , ? ( ) :

  • : , ,
  • : ,
  • : ,

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

?



image


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

Stay tuned!

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

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


All Articles