Par exemple, supposons que nous construisons un estimateur d'âge, basé sur l'image d'une personne. Ci-dessous, nous avons deux personnes en costume, mais la première est clairement plus jeune que la seconde.
(source: tinytux.com )
Il existe de nombreuses fonctionnalités qui impliquent cela, par exemple la structure du visage. Cependant, la caractéristique la plus révélatrice est le rapport entre la taille de la tête et la taille du corps :
(source: wikimedia.org )
Supposons donc que nous ayons formé une régression CNN pour prédire l'âge de la personne. Dans de nombreux prédicteurs d'âge que j'ai essayés, l'image ci-dessus de l'enfant semble tromper les prédictions en lui faisant croire qu'il est plus âgé, à cause de la combinaison et probablement parce qu'ils dépendent principalement du visage:
Je me demande à quel point une architecture CNN vanille peut inférer le rapport tête / torse?
Comparé à un RCNN régional, qui est capable d'obtenir des boîtes englobantes sur le corps et la tête, le CNN vanille fonctionnera-t-il toujours moins bien?
Juste avant l'aplatissement global de la vanille CNN (c'est-à-dire juste après toutes les circonvolutions), chaque sortie a un champ récepteur correspondant, qui devrait avoir un sens d'échelle. Je sais que le RCNN plus rapide exploite cela en faisant des propositions de boîte englobante exactement à ce stade, de sorte que tous les filtres convolutionnels précédents s'entraînent automatiquement à toutes les échelles.
Donc, je pense que le CNN vanille devrait être en mesure d'inférer le rapport taille tête / torse? Est-ce correct? Dans l'affirmative, est-ce que le seul avantage d'utiliser un cadre RCNN plus rapide pour exploiter le fait d'avoir été pré-formé à détecter des personnes?
la source
Réponses:
Tout d'abord, merci d'avoir posté une question très intéressante.
Pour y répondre rapidement, un convnet vanille formé end-2-end pour prédire l'âge d'une photo sera généralement enclin à mal classer les images telles que celle que vous avez publiée . Deuxièmement, notez que l' estimation précise de l'âge d'une personne est une tâche presque impossible 1 .
La principale différence avec l'approche que vous proposez d'utiliser certains détecteurs d'objets (que ce soit RCNN, Faster RCNN, YOLO ou SSD) est que vous utilisez différentes informations pour former les modèles. Le CNN est formé uniquement sur les images et doit trouver lui-même toutes les fonctionnalités nécessaires. Il va très probablement trouver diverses caractéristiques faciales, mais il dépendra également des vêtements et peut-être des caractéristiques de la scène (les enfants peuvent souvent être sur la photo avec certains jouets, les adultes seront plus susceptibles dans les environnements de bureau, etc.). Ces fonctionnalités ne seront pas robustes à votre contre-exemple.
D'un autre côté, si vous entraînez le réseau à détecter explicitement des objets comme "torse" et "tête", vous fournissez des informations supplémentaires sur le fait que ces objets sont importants pour la tâche, et simplifiez ainsi le problème 2 .
Bien que l'approche consistant à détecter la tête et le torse puis à évaluer le rapport de taille des boîtes englobantes semble intéressante, je peux voir plusieurs obstacles:
Tous ces problèmes suggèrent que l'approche du rapport tête / torse ne fonctionnera pas non plus parfaitement, même si elle pourrait être plus robuste pour votre contre-exemple particulier.
Je suppose que la meilleure façon d'accomplir cette tâche serait de 1) détecter le visage, 2) prédire l'âge uniquement à partir du recadrage du visage (supprime les informations potentiellement trompeuses). Notez que certaines architectures de type R-CNN utilisant le ROI-pooling pourraient être formées pour ce faire de bout en bout.
1 Même en utilisant des méthodes médicales très sophistiquées (qui sont sans doute beaucoup plus informatives qu'une photo de la personne), il n'est pas possible de le faire avec précision. Voir ce fil Quora pour plus d'informations .
2 Consultez l'article Knowledge Matters: Importance of Prior Information for Optimization pour un exemple montrant comment la fourniture de connaissances intermédiaires sur la tâche peut simplifier considérablement l'apprentissage.
la source
Les CNN sont une classe de modèles trop importante pour répondre à cette question. LeNet, AlexNet, ZFNet et VGG16 se comporteront très différemment de GoogLeNet, qui a été construit spécifiquement pour faire la plupart de ce que fait R-CNN, avec une architecture CNN (vous connaissez peut-être GoogLeNet avec le nom d'Inception, même si Inception à proprement parler est juste l'unité de base (sous-réseau) sur laquelle GoogLeNet est construit). Enfin, ResNets se comportera différemment. Et toutes ces architectures n'ont pas été construites pour classer les classes d'âge, mais les 1000 classes ImageNet, qui ne contiennent pas de classes d'âge pour les humains. On pourrait utiliser l' apprentissage par transfert(si vous avez suffisamment d'images de formation) pour former l'un des modèles formés largement disponibles ci-dessus et voir comment ils fonctionnent. En général, cependant, en particulier les architectures plus anciennes (disons jusqu'à VGG16) ont du mal à apprendre les "fonctionnalités globales" qui nécessitent de se renseigner sur "tête" (déjà une caractéristique complexe), "torse" (une autre caractéristique complexe) et leur (ce qui nécessite également que les deux entités soient dans une certaine relation spatiale). Ce genre de choses est ce que Capsule Networks aurait dû faire.
Les convnets sont nés pour faire exactement le contraire: être sensibles aux caractéristiques locales et relativement insensibles à leur position / échelle relative. Un bon Convnet devrait reconnaître "chat blanc", que l'image soit en gros plan ou en plan américain. La combinaison de couches convolutives (qui sont sensibles aux caractéristiques locales) avec des couches de mise en commun (qui suppriment une partie de la sensibilité aux variations d'échelle ou à la traduction de l'image) vous donne une architecture qui, dans sa forme la plus élémentaire, n'est pas excellente pour apprendre le type d'espace les relations entre les objets que vous recherchez. Il y avait un exemple quelque part (mais je ne le trouve plus) où, après avoir divisé une image de chat en différentes tuiles rectangulaires non superposées et les avoir assemblées dans un ordre aléatoire, le CNN continuerait à identifier l'image comme
cat
. Cela indique que les CNN sont plus sensibles aux caractéristiques locales (textures ou quelque chose comme ça) qu'à la relation spatiale entre les caractéristiques de haut niveau. Voir également le document sur les réseaux de capsules pour une discussion à ce sujet. Hinton a également montré un exemple de cela dans une vidéo sur les limites des convnets .Je suppose que l'une des architectures récentes serait parfaitement capable (avec suffisamment de données) de discerner les hommes des enfants, mais pas à cause d'un "seuil" sur une relation métrique entre des caractéristiques de haut niveau telles que "tête" et "torse" . Il apprendrait une certaine régularité statistique, peut-être complètement imperceptible pour les humains, qui sépare les images adultes des images enfants dans l'ensemble d'entraînement.
la source
Eh bien, tout dépend de la façon dont votre ensemble de données est construit. D'après mon expérience, les réseaux de neurones ont tendance à chercher des explications les plus simples. Et déduire l'âge de la tenue est en fait plus simple que d'utiliser le rapport tête / corps. Si vous pouvez étendre votre ensemble de données en gardant cela à l'esprit, votre CNN devrait fonctionner comme prévu.
la source