Para la arquitectura seleccionada, Yolov3, se realizó algunas modificaciones y se conservó la forma de ejecución del código del repositorio original.
Una implementación desde Keras de Yolo v3 (Tensorflow backend) inspirada por allanzelener/YAD2K.
- Tensorflow (si no se cuenta con gpu).
- Tensoflow-gpu
- keras
- Numpy
- PIL
- os
- Augmentor
- Descargar YOLOv3 weights (pesos) de la página YOLO website.
- Convertir el modelo YOLO Darknet a un modelo de Keras.
- Ejecutar YOLO detection.
* Use los comandos de consola para ejecutar Yolo V3; el script de yolo_video.py
contiene el código para ejecutar Yolo v3 para imágenes.
En consola ejecute cada linea para convertir los pesos y ejecutar un ejemplo de una imagen
wget https://pjreddie.com/media/files/yolov3.weights
python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5
python yolo_video.py [OPTIONS...] --image, for image detection mode, OR
python yolo_video.py [video_path] [output_path (optional)]
Para Tiny YOLOv3, se hace de manera similar, sólo es específicar la ruta del modelo y el anchor
con --model model_file
and --anchors anchor_file
, respectivamente.
Use --help para ver el uso de yolo_video.py:
usage: yolo_video.py [-h] [--model MODEL] [--anchors ANCHORS]
[--classes CLASSES] [--gpu_num GPU_NUM] [--image]
[--input] [--output]
Argumentos posicionales:
--input Video input path
--output Video output path
Argumentos opcionales:
-h, --help muestra esto mensaje de ayuda y salir
--model MODEL Ruta de archivo con los pesos (weight) del modelo, default model_data/yolo_weights.h5
--anchors ANCHORS Ruta de los anchor definidos, default
model_data/yolo_anchors.txt
--classes CLASSES ruta de las class definitions, default
model_data/coco_classes.txt
--gpu_num GPU_NUM Número de GPU a usar, default 1
--image Modo Image detection, ignorará todos los argumentos poscisioneles.
- MultiGPU uso: use
--gpu_num N
para usar N GPUs. Esto es pasado a Keras multi_gpu_model().
-
Genere su propio archivo de clases como sigue: Una fila para cada imagen;
Formato de la fila:ruta_image box1 box2 ... boxN
;
Formato de la caja:x_min,y_min,x_max,y_max,class_id
(sin espacios).
##For VOC dataset, trypython voc_annotation.py
Aquí está un ejemplo:path/to/img1.jpg 50,100,150,200,0 30,50,200,120,3 path/to/img2.jpg 120,300,250,600,2 ...
-
Asegúrese que ejecutó
python convert.py -w yolov3.cfg yolov3.weights model_data/yolo_weights.h5
,pues en la carpeta model_data se genera el archivo de pesos convertido con nombre "yolo", por lo que se debe cambiar el nombre a "yolo_weights" con formato .h5, quedando en la ruta como model_data/yolo_weights.h5. ésto es para cargar los pesos preentrenados, así está en los scripts.
- Se modifica los anchors con 9 opciones Ubicado en la carpeta model_data.
- Se modefica las clases de la carpeta model_data con las 7 nuevas clases (mano,cabeza,pie,piernas,cuerpo,rostro,brazo).
- Modificar a conveniencia el script train.py e inicie el entreno
python train.py
Use sus pesos entrenados con la opción de comando--model model_file
cuando use yolo_video.py Recuerde modificar la ruta de la clase y el anchor con--classes class_file
and--anchors anchor_file
, respectivamente.
* La función model.fit_generator() tiene capas congeladas y se modifica los epoch con: epoch=1 y el initiial_epoch=0 (lineas 63 y 64), además de el tamaño del batch igual a 8 imágenes para evitar que se llene la memoria RAM; lo demás por defecto.
* La función model.fit_generator() [linea 83] descongela las capas congeladas y realiza un entrenamiento profundo:
se modifica los epoch con: epoch=3 y el initiial_epoch=1 (lineas 82 y 83), esta función es para cuando no se tiene buenos
resultados, un entrenamiento profundo; lo demás del script queda igual, Default.
Si usted quiere usar los pesos (weights) preentrenados originales de YOLOv3, haga lo siguiente:
1. wget https://pjreddie.com/media/files/darknet53.conv.74
2. Renombre el archivo como darknet53.weights
3. python convert.py -w darknet53.cfg darknet53.weights model_data/darknet53_weights.h5
4. use model_data/darknet53_weights.h5 en train.py
-
El ambiente de prueba (test) es:
- Python 3.5.2
- Keras 2.1.5
- tensorflow 1.6.0
-
Se usan los anchors por defecto. si se cambian los anchors, probablemente se necesiten algunos cambios.
-
Siempre cargue los pesos preentrenados y congele las capas en el primer stage del entrenamiento ó trate de entrenar Darknet.Esto es por si hay algún warning.
-
MultiGPU uso:
--gpu_num N
para usar N GPUs. Esto es pasado a Keras multi_gpu_model(). -
Para acelerar el proceso de entrenamiento con las capas congeladas se puede usar train_bottleneck.py, esto calculará las caracteristicas del bottleneck del primer modelo congelado y luego entrenará con las últimas capas. Esto hace que el entrenamiento en CPU tenga posiblemente un tiempo razonable. See this for more information on bottleneck features.