Les compétitions sont un excellent moyen d'améliorer les compétences d'apprentissage automatique. Non seulement vous avez accès à des ensembles de données de qualité, mais vous avez également des objectifs clairs. Cela vous aide à vous concentrer sur la partie importante: concevoir des solutions de qualité pour les problèmes actuels.
Un de mes amis et moi avons récemment participé à la N + 1 poisson, N + 2 poissons concurrence. Cette compétition d'apprentissage automatique, avec beaucoup de traitement d'image, vous oblige à traiter des clips vidéo de poissons identifiés, mesurés et gardés ou rejetés à la mer.
Dans l'article, je vais vous expliquer comment nous avons abordé le problème de la concurrence en utilisant des techniques de traitement d'image standard et des modèles de réseaux de neurones pré-entraînés. La performance des solutions soumises a été mesurée sur la base d'une certaine formule. Avec notre solution, nous avons réussi à assurer la 11e place.
Pour une brève introduction à l'apprentissage automatique, vous pouvez vous référer à Cet article .
On nous a fourni des vidéos d'un ou de plusieurs poissons dans chaque segment. Ces vidéos ont été capturées sur différents bateaux pêchant le poisson de fond dans le golfe du Maine.
Les vidéos ont été collectées à partir de caméras à position fixe placées pour regarder vers le bas sur une règle. Un poisson est placé sur la règle, le pêcheur retire ses mains de la règle, puis le pêcheur rejette ou garde le poisson en fonction de l'espèce et de la taille.
Trois tâches étaient importantes pour ce projet. Le but ultime était de créer un algorithme qui génère automatiquement des annotations pour les fichiers vidéo, où les annotations sont composées de:
Les organisateurs du concours ont créé une métrique agrégée qui a donné une idée générale de la performance sur toutes ces tâches. La métrique était une simple combinaison pondérée d'une métrique individuelle pour chacune des tâches. Bien qu'il y ait certains poids, ils ont recommandé que nous nous concentrions sur un algorithme bien équilibré capable de contribuer à toutes les tâches!
Vous pouvez en savoir plus sur la façon dont la mesure de performance globale est calculée à partir des mesures de performance de chaque tâche individuelle à partir de la page web officielle du concours .
Lorsque vous travaillez avec apprentissage automatique projets traitant d'images ou de vidéos, vous utiliserez très probablement réseaux de neurones convolutifs . Mais, avant de pouvoir utiliser des réseaux de neurones convolutifs, nous devions prétraiter les trames et résoudre d'autres sous-tâches grâce à différentes stratégies.
Pour la formation, nous avons utilisé un GPU nVidia 1080Ti. Une bonne partie de notre temps a été perdue à essayer d'optimiser notre code afin de rester pertinent dans la concurrence. Nous avons cependant fini par passer moins de temps là où cela aurait eu plus d'importance.
Avec l'analyse de la silhouette, trouver le nombre de bateaux est devenu une tâche assez triviale. Les étapes étaient les suivantes et utilisaient des techniques très standard:
SURF détecte les points d'intérêt dans une image et génère des descriptions de fonctionnalités. Cette approche est vraiment robuste, même avec diverses transformations d'image.
Une fois que les caractéristiques des points d'intérêt dans l'image sont connues, un regroupement de K-moyennes est effectué, suivi d'une analyse de silhouette pour déterminer un nombre approximatif de bateaux dans les images.
Bien que l'ensemble de données contienne des fichiers vidéo distincts, chaque vidéo semble avoir des chevauchements avec d'autres vidéos de l'ensemble de données. C'est peut-être parce que les vidéos ont été séparées d'une longue vidéo et ont donc fini par avoir quelques images communes au début ou à la fin de chaque vidéo.
Pour identifier ces cadres et les supprimer si nécessaire, nous avons utilisé des fonctions de hachage rapide sur les cadres.
En appliquant certaines méthodes de traitement d'image standard, nous avons localisé la position de la règle et son orientation. Nous avons ensuite fait pivoter et recadré l'image pour positionner la règle de manière cohérente sur tous les cadres. Cela nous a également permis de réduire la taille du cadre par dix.
Règle détectée (tracée sur le cadre moyen):
Zone recadrée et pivotée:
La mise en œuvre de cette étape pour déterminer la séquence des poissons a pris la majorité de mon temps lors de cette compétition. La formation de nouveaux réseaux de neurones convolutifs semblait trop coûteuse, nous avons donc décidé d'utiliser des réseaux de neurones pré-entraînés.
Pour cela, nous avons choisi les réseaux de neurones suivants:
Ces modèles de réseaux de neurones sont formés sur le Ensemble de données ImageNet .
Nous n'avons extrait que les couches convolutives des modèles et leur avons fait passer le jeu de données de compétition. À la sortie, j'avais un éventail assez compact de fonctionnalités.
comment rédiger une documentation technique pour un logiciel
Ensuite, nous avons formé les réseaux de neurones avec uniquement des couches denses entièrement connectées et avons prévu des résultats pour chaque modèle pré-entraîné. Après cela, nous avons fait la moyenne du résultat et les résultats se sont avérés assez médiocres.
Nous avons décidé de le remplacer par Mémoire longue durée (LSTM) réseaux de neurones pour une meilleure prédiction où les données d'entrée étaient une séquence de cinq images qui ont été transformées avec les modèles pré-entraînés.
Pour fusionner la sortie de tous les modèles, nous avons utilisé la moyenne géométrique.
Le pipeline de détection des poissons était:
Le résultat d'une vidéo ressemble à ceci:
Après avoir passé une grande partie de la durée du concours à mettre en œuvre l'étape précédente, nous avons essayé de rattraper le temps perdu en travaillant avec des modèles de l'étape précédente pour identifier les espèces de poissons.
Notre approche pour cela était à peu près la suivante:
Pour déterminer la longueur du poisson, nous avons utilisé des réseaux de neurones. L'un d'eux a été formé pour identifier les têtes de poisson et l'autre pour identifier les queues de poisson. Les longueurs des poissons ont été approximées comme la distance entre les deux points identifiés par les deux réseaux neuronaux.
Voici à quoi ressemblait le schéma général des étapes:
La conception générale était assez simple car les images vidéo étaient passées par les étapes décrites ci-dessus avant de combiner les résultats séparés.
L'analyse de silhouette est une technique qui permet de distinguer des groupes de points de données visuellement séparés les uns des autres.
Un modèle d'apprentissage automatique est le produit d'un algorithme d'apprentissage automatique basé sur des données. Le modèle peut ensuite être utilisé pour produire des extrants pertinents pour des intrants similaires.