"Target Detection" YOLO V5 (3): Tutorial

Directorio de artículos de serie

  1. YOLO V5 (1): notas de estudio
  2. YOLO V5 (2): análisis de código

1. Dependencia del entorno de instalación

1.1 Proyecto de clonación

git clone https://github.com/ultralytics/yolov5 # clone repo

1.2 Instalar las dependencias del entorno necesarias

Se python>=3.7:dan los PyTorch>=1.5,, La instalación depende:

cd yolov5
pip install -U -r requirements.txt
requirements.txt

2. Descarga el modelo previamente entrenado

2.1 Ejecutar el script para descargar el modelo previamente entrenado

/yolov5/weights/download_weights.sh Descargar definición de script modelo previamente entrenado

2.2 Modelo de preentrenamiento de descarga directa, y luego guardado en /yolov5/weightsel directorio puede

Descargue directamente en el controlador de Google https://drive.google.com/drive/folders/1Drs_Aiu7xx6S-ix95f9kNsA6ueKRpN2J

En tercer lugar, descargue el conjunto de datos etiquetado

3.1 Ejecutar descarga de script

python3 -c "
from yolov5.utils.google_utils import gdrive_download; 
gdrive_download('1n_oKgR81BJtqk75b00eAjdv03qVCQn2f','coco128.zip')
" # download dataset

Se ejecuta el código anterior, se descargará: coco128.zipel conjunto de datos, los datos son parte de los datos de COCO train2017, tomando solo el conjunto de datos 128 imagen marcada con coco, coco128.zipdespués de descargar el extracto en /yolov5el directorio se puede descomprimir coco128la estructura de archivos de la siguiente manera:

coco128
|-- LICENSE
|-- README.txt      # 相关说明
|-- annotations     # 空目录
|-- images          # 128 张 jpg 图片
|-- labels          # 128 张标注的 txt 文件

3.2 Si la descarga es lenta, también puede descargar coco128.zip directamente a través del enlace URL

Descargue directamente en el controlador de Google
https://drive.google.com/uc?export=download&id=1n_oKgR81BJtqk75b00eAjdv03qVCQn2f

Nota: El utils/google_utils.py script sirve para descargar el modelo previamente entrenado y el conjunto de datos de entrenamiento anotado.

Cuarto, entrenar el conjunto de datos coco128 descargado

4.1 Cree el archivo de configuración Dataset.yaml del conjunto de datos de entrenamiento

Descargue el bien anterior coco128.zipdespués de los pequeños conjuntos de datos, estos conjuntos de datos se pueden usar para entrenamiento y validación models/yolov5l.yaml.
coco128.yamlDefinido en:

  • Ruta de la imagen de entrenamiento (o lista de .txtarchivos de imágenes de entrenamiento )
  • La misma imagen que el conjunto de validación
  • Número de categorías objetivo
  • Lista de nombres de clases

4.2 Crear etiquetas (etiquetas)

Aplicando una derivación de etiquetas de formato darknet, cada etiqueta tiene un *.txtarchivo de imagen (imagen si no hay ningún objeto no es un *.txtarchivo requerido ), *.txtel formato de archivo es el siguiente:

  • Un objeto por línea
  • Cada línea es: class x_center y_center width heightformato
  • El marco debe coordinar el formato 归一化格式的 xywh(从0到1), si el bloque en píxeles, entonces x_centery widthdividido por el ancho de la imagen, será y_centery heightdividiendo la altura de la imagen
  • La categoría comienza en el índice 0

Imagen de ejemplo y etiqueta:

dataset/images/train2017/000000109622.jpg  # image
dataset/labels/train2017/000000109622.txt  # label

Por ejemplo: archivo de etiqueta 000000000009.txt, lo que significa que hay 8 objetivos marcados en la imagen 000000000009.jpg:

45 0.479492 0.688771 0.955609 0.5955
45 0.736516 0.247188 0.498875 0.476417
50 0.637063 0.732938 0.494125 0.510583
45 0.339438 0.418896 0.678875 0.7815
49 0.646836 0.132552 0.118047 0.096937
49 0.773148 0.129802 0.090734 0.097229
49 0.668297 0.226906 0.131281 0.146896
49 0.642859 0.079219 0.148063 0.148062

4.3 Estructura de archivos de organización

Organice sus imágenes y etiquetas de conjunto de entrenamiento y conjunto de validación de acuerdo con la figura siguiente.
Nota: El /coco128directorio debe y yolov5directorios al mismo nivel, garantizando al mismo tiempo coco128/labelsy coco128/imagesdos directorios al mismo nivel!
Inserte la descripción de la imagen aquí

4.4 Elige un modelo para entrenar

El archivo de configuración del conjunto de datos personalizados se modificó anteriormente y los datos se organizaron. Ahora puede seleccionar un modelo para entrenar.

Del ./modelsperfil de directorio seleccionado un modelo, aquí elegimos yolov5s.yaml, es el modelo más pequeño y rápido. La comparación entre otros modelos se describe a continuación. Después de seleccionar el modelo, si no está utilizando cocoun conjunto de datos para el entrenamiento, sino conjuntos de datos personalizados, esta vez solo necesita modificar *.yamlel archivo de configuración en la nc: 80lista de categorías de datos y parámetros.

yolov5s.yaml Definido principalmente en el archivo de configuración:

  • Parámetros: categoría, etc.
  • ancla
  • Red troncal YOLOv5
  • Cabeza YOLOv5

4.5 Iniciar entrenamiento

4.5.1 Comandos de entrenamiento

Ejecute el siguiente comando para entrenar coco128.ymal, entrenar 5 epochs. Hay dos métodos de entrenamiento, los siguientes parámetros:

  • --cfg yolov5s.yaml --weights '': Entrenamiento desde cero
  • --cfg yolov5s.yaml --weights yolov5s.pt: Iniciar el entrenamiento desde la carga del modelo previamente entrenado

YOLOv5 en coco128el 5 epochscomando de entrenamiento :

python train.py --img 640 --batch 16 --epochs 5 --data ./data/coco128.yaml --cfg ./models/yolov5s.yaml --weights ''

4.5.2 Errores comunes en el entrenamiento 1

1. Ejecute el error del comando de entrenamiento: RuntimeError: Model replicas must have an equal number of parameters.se muestra el error, la copia del modelo debe tener los mismos parámetros

2. Solución:
Esto puede deberse a la versión incorrecta del problema que Pytorch causó en mi torchversión 15.0, la versión reducida 1.4.0a ( Referencia ):

pip install torch==1.4.0+cu100 torchvision==0.5.0+cu100 -f https://download.pytorch.org/whl/torch_stable.html

4.5.3 Errores comunes en el entrenamiento 2

1. Se informa de un error al ejecutar el comando de entrenamiento:ModuleNotFoundError: No module named 'yaml'

2. Solución:
Esto se debe a un yamlerror de paquete de biblioteca no instalado , aunque la importación es: import yamlpero el nombre no está instalado yaml, lo siguiente está instalado correctamente yaml:

pip install PyYAML

4.5.4 Errores habituales en el entrenamiento 3

1. Se informa de un error al ejecutar el comando de entrenamiento:AttributeError: 'DistributedDataParallel' object has no attribute 'model'

2. Solución de error:
esto se debe al --devicevalor predeterminado ''. En este momento, el entrenamiento con múltiples GPU se usará de forma predeterminada . Sin embargo, el problema anterior ocurrirá durante el entrenamiento con múltiples GPU. Esto puede ser un error ( referencia ). GPU , cambie el comando de entrenamiento a lo siguiente:

python train.py --img 640 --batch 16 --epochs 5 --data ./data/coco128.yaml --cfg ./models/yolov5s.yaml --weights '' --device 0

4.6 Usar tensorboard para visualizar resultados

En el yolov5directorio, use:

tensorboard --logdir=runs

4.7 Prueba

Más parámetros opcionales para probar:

  • --weights : Ruta del modelo de preentrenamiento, valor predeterminado weights/yolov5s.pt
  • --data: El archivo de configuración del conjunto de datos, el valor predeterminado es data/coco.yaml
  • --batch-size: Valores predeterminados 32
  • --img-size: Tamaño de inferencia (píxeles), predeterminado 640
  • --conf-thres: Umbral de confianza objetivo, predeterminado 0.001
  • --iou-thres: Umbral IOU de NMS, predeterminado 0.65
  • --save-json: Guarda el resultado del jsonarchivo compatible con cocoapi
  • --task: Predeterminado val, otros valores opcionales:val, test, study
  • --device: cudaDispositivo, por ejemplo :, 0 或 0,1,2,3 或 cpupredeterminado''
  • --half: FP16Razonamiento de semiprecisión
  • --single-cls: Trátelo como una sola categoría,布尔值
  • --augment: Inferencia mejorada, booleano
  • --verbose: Categoría de visualización mAP, booleano

Ejemplos de comandos de prueba:

python test.py --weights yolov5s.pt --data ./data/coco.yaml --img 640

Cinco, entrena tu propio conjunto de datos

Hay dos formas de preparar datos:

  • Una es especificar directamente la ruta del conjunto de entrenamiento y las imágenes del conjunto de prueba. (本文使用的这种方法)
  • El otro es un archivo txt que ofrece imágenes de los conjuntos de entrenamiento y prueba.

5.1 Prepare el conjunto de datos

yolov5Los conjuntos de datos de etiquetas se guardan como txtarchivos de formato YOLO , en:

  • Cómo etiquetar el conjunto de datos
  • ¿Cuál es el formato de los datos VOC y los datos YOLO?
  • Cómo convertir datos en formato VOC a datos en formato YOLO
  • Y el proceso de cálculo de conversión mutua entre formato VOC y formato YOLO

Por favor 参考: este blog , ¡no los repitas aquí! ! !

Una vez etiquetado el conjunto de datos, se almacena en el siguiente formato de directorio:

hat_hair_beard
├── images
│   ├── train2017        # 训练集图片,这里我只列举几张示例
│   │   ├── 000050.jpg
│   │   ├── 000051.jpg
│   │   └── 000052.jpg
│   └── val2017          # 验证集图片
│       ├── 001800.jpg
│       ├── 001801.jpg
│       └── 001802.jpg
└── labels               
    ├── train2017       # 训练集的标签文件
    │   ├── 000050.txt
    │   ├── 000051.txt
    │   └── 000052.txt
    └── val2017         # 验证集的标签文件
        ├── 001800.txt
        ├── 001801.txt
        └── 001802.txt
  • had_hair_beard: el directorio para almacenar datos, que se encuentra en yolov5目录下
  • imágenes: las imágenes se almacenan en el directorio, incluidas las imágenes del conjunto de entrenamiento y del conjunto de validación
  • etiquetas: el archivo de etiquetas se almacena en el directorio, que contiene los archivos de etiquetas correspondientes al conjunto de entrenamiento y las imágenes del conjunto de validación

Organice de acuerdo con la estructura anterior 数据的目录结构y luego podrá modificar algunos archivos relacionados con la capacitación.

5.2 Modificar archivos de configuración de modelo y datos

5.2.1 Modificar archivo de configuración de datos

El archivo de configuración original: ./data/coco128.yaml
Copiamos el archivo (estos son mis hábitos personales, no se puede cambiar, directamente coco128.yamlen el archivo modificado)
luego hat_hair_beard.yamlnecesita modificar el 3lugar Contenido:

1. La ruta del conjunto de formación y las imágenes del conjunto de validación

train: /home/shl/shl/yolov5/hat_hair_beard/images/train2017
val: /home/shl/shl/yolov5/hat_hair_beard/images/val2017

Nota: 最好用绝对路径,我在使用相对路径的时候报错,说路径存在

2. Modificar el número de categorías nc

nc=7  # 我数据集一共分7个类别

3. Modifique la lista de categorías y modifique la categoría a su propia categoría.

names: ['hard_hat', 'other', 'regular', 'long_hair', 'braid', 'bald', 'beard']

5.2.2 Modificar el archivo de configuración del modelo

Arriba 数据的准备y 配置文件的修改después de que todo esté listo, puedes开始训练了!!!

5.3 Entrene su propio conjunto de datos

5.3.1 Utilizar el yolovs.ptmodelo de preentrenamiento para el entrenamiento

Comando de entrenamiento:

python train.py --img 640 --batch 16 --epochs 300 
			--data ./data/hat_hair_beard.yaml \
			--cfg ./models/hat_hair_beard_yolov5s.yaml \
			--weights ./weights/yolov5s.pt 
			--device 1

Después del entrenamiento, se generarán dos modelos previamente entrenados:

  • best.pt: Guarda los mejores modelos en el medio
  • last.pt: El último modelo guardado después del entrenamiento

注意:
Al utilizar el --deviceconjunto de parámetros 多GPU进行训练, se puede dar: RuntimeError: Model replicas must have an equal number of parameters.En particular, el siguiente error, se dará el comando:

  • --device 1: Especificar una sola GPU no informará un error
  • --device 1,2,3: Cuando más de dos GPU reciben
    una issuessolución oficial : la torchversión de la actualización torch1.4y mitorch 为 1.5 版本

Conexión de referencia

  1. https://blog.csdn.net/weixin_41010198/article/details/106785253
  2. https://blog.csdn.net/weixin_41153216/article/details/106924348

Supongo que te gusta

Origin blog.csdn.net/libo1004/article/details/111149963
Recomendado
Clasificación