[ACTUALIZACIÓN]: Este repositorio sirve como código de conductor para mi investigación. Acabo de graduarme de la universidad, y estoy muy ocupado buscando roles de pasantías / becas de investigación antes de solicitar un Masters. No tendré tiempo para buscar problemas por el momento. Gracias.
Este repositorio contiene código para un detector de objetos basado en yolov3: una mejora incremental, implementada en pytorch. El código se basa en el código oficial de Yolo V3, así como en un puerto de Pytorch del código original, por Marvis. Uno de los objetivos de este código es mejorar el puerto original eliminando partes redundantes del código (el código oficial es básicamente una biblioteca de aprendizaje profundo completamente soplado e incluye cosas como modelos de secuencia, que no se usan en yolo). También he intentado mantener el código mínimo y documentarlo lo mejor que pueda.
Si desea comprender cómo implementar este detector usted mismo desde cero, entonces puede pasar por esta serie de tutorial de 5 partes muy detallada que escribí en el espacio de los documentos. Perfecto para alguien que quiere pasar de las habilidades de Pytorch de principiante a intermedia.
Implementar Yolo V3 desde cero
A partir de ahora, el código solo contiene el módulo de detección, pero debe esperar el módulo de entrenamiento pronto. :)
El uso de Pytorch 0.3 romperá el detector.
Clon y cd en el directorio de repo. Lo primero que debe hacer es obtener el archivo de pesas esta vez, para V3, los autores han suministrado un archivo de pesas solo para Coco aquí, y colocar.
El archivo de pesas en su directorio de repo. O simplemente podría escribir (si está en Linux)
wget https://pjreddie.com/media/files/yolov3.weights
python detect.py --images imgs --det det
El indicador de --images define el directorio para cargar imágenes desde, o un solo archivo de imagen (lo resolverá), y --det es el directorio para guardar imágenes. Otra configuración, como el tamaño de lotes (usando el indicador --bs ), la confianza del umbral de objeto se puede ajustar con banderas con las que se pueden buscar.
python detect.py -h
Puede cambiar las resoluciones de la imagen de entrada por el indicador --reso . El valor predeterminado es 416. Cualquiera que sea el valor que haya elegido, recuerde que debe ser un múltiplo de 32 y más de 32 . Las cosas raras sucederán si no lo haces. Te han advertido.
python detect.py --images imgs --det det --reso 320
Para esto, debe ejecutar el archivo, video_demo.py con la bandera --video especificando el archivo de video. El archivo de video debe estar en formato .AVI ya que OpenCV solo acepta OpenCV como el formato de entrada.
python video_demo.py --video video.avi
La configuración ajustable se puede ver con la bandera -h.
Para acelerar la inferencia de video, puede intentar usar el archivo video_demo_half.py, lo que hace toda la inferencia con flotadores de media precisión de 16 bits en lugar de flotador de 32 bits. No he visto grandes mejoras, pero lo atribuyo a tener una tarjeta más antigua (Tesla K80, Kepler Arch). Si tiene una de las tarjetas con soporte Float16 rápido, pruébelo y, si es posible, comparelo.
Igual que el módulo de video, pero no tiene que especificar el archivo de video ya que la alimentación se tomará de su cámara. Para ser precisos, se tomará el feed de lo que el OpenCV, reconoce como cámara 0. La resolución de imagen predeterminada es 160 aquí, aunque puede cambiarlo con el indicador reso .
python cam_demo.py
Puede ajustar fácilmente el código para usar diferentes archivos de pesas, disponibles en el sitio web de Yolo
Nota: Las características de la escala han sido deshabilitadas para una mejor refactorización.
Yolo V3 realiza detecciones en diferentes escalas, cada una de las cuales delega en la detección de objetos de diferentes tamaños dependiendo de si capturan características gruesas, características de grano fino o algo entre. Puede experimentar con estas escalas por la bandera --scales .
python detect.py --scales 1,3