[MISE À JOUR]: Ce repo sert de code de pilote pour mes recherches. Je viens de terminer mes études collégiales et je suis très occupé à chercher des rôles de stage / bourse de recherche avant de finalement postuler pour un Masters. Je n'aurai pas le temps d'examiner les problèmes pour le moment. Merci.
Ce référentiel contient du code pour un détecteur d'objets basé sur YOLOV3: une amélioration incrémentielle, implémentée dans Pytorch. Le code est basé sur le code officiel de Yolo V3, ainsi que sur un port pytorch du code d'origine, par Marvis. L'un des objectifs de ce code est d'améliorer le port d'origine en supprimant les parties redondantes du code (le code officiel est essentiellement une bibliothèque d'apprentissage en profondeur entièrement soufflé, et comprend des trucs comme les modèles de séquence, qui ne sont pas utilisés dans Yolo). J'ai également essayé de garder le code minimal et de le documenter aussi bien que possible.
Si vous voulez comprendre comment implémenter ce détecteur par vous-même à partir de zéro, vous pouvez passer par cette série de tutoriels en 5 parties très détaillée que j'ai écrite sur Paperspace. Parfait pour quelqu'un qui veut passer des compétences de débutant au pytorch intermédiaire.
Implémentez Yolo V3 à partir de zéro
À l'heure actuelle, le code ne contient que le module de détection, mais vous devriez vous attendre bientôt au module de formation. :)
L'utilisation de Pytorch 0.3 brisera le détecteur.
Clone et cd dans le répertoire Repo. La première chose que vous devez faire est d'obtenir le fichier de poids cette fois-ci, pour la V3, les auteurs ont fourni un fichier de poids uniquement pour Coco ici et Place
Le fichier de poids dans votre répertoire de référentiel. Ou, vous pouvez simplement taper (si vous êtes sur Linux)
wget https://pjreddie.com/media/files/yolov3.weights
python detect.py --images imgs --det det
--images Flag définit le répertoire pour charger des images à partir de ou un seul fichier image (il le comprendra), et --det est le répertoire pour enregistrer des images. D'autres paramètres tels que la taille du lot (drapeau à utiliser --bs ), la confiance du seuil d'objet peuvent être modifiées avec des drapeaux qui peuvent être recherchés.
python detect.py -h
Vous pouvez modifier les résolutions de l'image d'entrée par l'indicateur --reso . La valeur par défaut est 416. Quelle que soit la valeur que vous avez choisie, il y a un multiple de 32 et supérieur à 32 . Des choses étranges se produiront si vous ne le faites pas. Vous avez été averti.
python detect.py --images imgs --det det --reso 320
Pour cela, vous devriez exécuter le fichier, vidéo_demo.py avec --video indicateur spécifiant le fichier vidéo. Le fichier vidéo doit être au format .avi car OpenCV accepte uniquement OpenCV comme format d'entrée.
python video_demo.py --video video.avi
Les paramètres de modification peuvent être vus avec le drapeau -H.
Pour accélérer l'inférence vidéo, vous pouvez essayer d'utiliser le fichier vidéo_demo_half.py à la place, ce qui fait toute l'inférence avec des flotteurs de demi-précision 16 bits au lieu d'un flotteur 32 bits. Je n'ai pas vu de grandes améliorations, mais j'attribue cela à une carte plus ancienne (Tesla K80, Kepler Arch). Si vous avez une des cartes avec un support Fast16 rapide, essayez-le et si possible, comparez-le.
Identique au module vidéo, mais vous n'avez pas à spécifier le fichier vidéo car le flux sera tiré de votre appareil photo. Pour être précis, Feed sera tiré de ce que l'OpenCV reconnaît comme caméra 0. La résolution d'image par défaut est 160 ici, bien que vous puissiez la changer avec reso Flag.
python cam_demo.py
Vous pouvez facilement modifier le code pour utiliser différents fichiers de poids, disponible sur le site Web de Yolo
Remarque: Les fonctionnalités des échelles ont été désactivées pour une meilleure refactorisation.
Yolo V3 fait des détections sur différentes échelles, chacune députée dans la détection d'objets de différentes tailles selon qu'ils capturent des caractéristiques grossières, des caractéristiques à grain fin ou quelque chose entre. Vous pouvez expérimenter avec ces échelles par le drapeau --scales .
python detect.py --scales 1,3