Inicie el entrenamiento, verificación y prueba de detección de objetivos del modelo yolov8 desde 0

Inicie el entrenamiento, verificación y prueba de detección de objetivos del modelo yolov8 desde 0

1 ambiente

En primer lugar, hay un gran entorno, es decir, se han preparado python, nvidia driver, cuda, cudnn, etc.

2 entorno virtual de yolov8

2.1 Crear un entorno virtual

conda create -n yolov8 python=3.10

2.2 Activar entorno virtual

Nota: Al activar un entorno virtual, necesita saber si el entorno virtual (yolov8) que crea tiene permisos de root o permisos de usuario. De lo contrario, cuando utilice source enable yolov8 para activar el entorno, es posible que siempre se le solicite No se pudo encontrar entorno conda: yolov5s; puede enumerar todos los entornos detectables conconda info --envs

source activate yolov8
# 如果是windows的话,使用
conda activate yolov8
# 关闭虚拟环境
source deactivate yolov8
# 删除虚拟环境
conda remove -n yolov8 --all
# 删除虚拟环境中的某个包
conda remove --name $yolov8  $package_name 
# 添加conda的清华镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn

Otros: Cómo cambiar entre permisos de usuario normal y usuario root:

exit
或
su user(user是自己安装时的用户名)

2.3 Instalar las dependencias necesarias de yolov8 en el entorno virtual

Ingrese al directorio raíz del proyecto yolov8

cd MyTrain/ultralytics-main

Luego, use Pip para instalar el paquete ultralytics en un entorno Python>=3.8, que también debe contener PyTorch>=1.7. También se instalarán todos los requisitos.txt necesarios.

pip install ultralytics

3 Prepare el conjunto de datos

3.1 Introducción a los conjuntos de datos

Se utilizan 26058 imágenes y el archivo de etiqueta es un archivo json exportado previamente mediante el asistente de etiquetas.

3.2 Estadísticas de etiquetas

Las categorías de etiquetas y cantidades incluidas en el fichero de anotaciones estadísticas son las siguientes:

'suv': 19843, 'car': 222010, 'van': 8538, 'bigtru': 11775, 'bus': 7733, 'tralight': 32538, 'tricycle': 9454, 'elec': 45199, 'pedes': 36552, 'smatru': 2281, 'bike': 7908, 'coach': 443, 'tank': 2659, 'pickup': 943, 'trailer': 438, 'mpv': 1839, ' car': 1354, ' ca   r': 1, 'elec ': 12, 'moto': 843, 'crane': 173, 'warm': 151644, 'percycle': 127, 'engine': 157, 'polic': 398, 'coni': 9758, 'pedesd': 13, 'van ': 1, 'motopoli': 22, 'escort': 26, 'tralight ': 1, 'right': 78, 'left': 114, 'stopline': 4, 'zebraline': 78, 'bull': 19, 'excava': 4, 'suv ': 2, 'zebraliner': 1, 'car ': 3, '            ': 1, 'car      ': 1, 'ambu': 168, 'sanJiaoWarm': 778, 'suLiaoDao': 506, 'zhiXiang': 1248, 'suLiaoDai': 414, 'lunTai': 643, 'yiZi': 20, 'ar': 1, '  car': 141, 'bus-c': 2, 'elerc': 1, 'pedes ': 1, 'pedesr': 3, 'carr': 1, 'bigtrur': 2, 'elecr': 12, 'suvr': 72, 

Explicación de las categorías de etiquetas anteriores: algunas de las etiquetas extrañas mencionadas anteriormente, como 'carr', 'bigtrur', 'pedes', etc., obviamente se deben a la entrada incorrecta de 'r' o caracteres de espacio, por lo que al convertir al formato de anotación yolov5, es necesario tenerlo en cuenta. Por tanto, el mapeo es el siguiente para obtener la etiqueta y el ID. Las etiquetas 'sanJiao Warm', 'suLiaoDao', 'zhiXiang', 'suLiaoDai', 'lunTai', 'yiZi' y otras etiquetas no se utilizan para el entrenamiento.

{'suv': 1, 'car': 1, 'van': 1, 'bigtru': 3, 'bus': 2, 'tralight': 9, 'tricycle': 6, 'elec': 5, 'pedes': 0, 'smatru': 3, 'bike': 4, 'coach': 2, 'tank': 3, 'pickup': 1, 'trailer': 3, 'mpv': 1, ' car': 1, ' ca   r': 1, 'elec ': 5, 'moto': 5, 'crane': 3, 'warm': 8, 'engine': 3, 'polic': 10, 'coni': 7, 'pedesd': 0, 'van ': 1, 'motopoli': 5, 'escort': 3, 'tralight ': 9, 'bull': 3, 'excava': 3, 'suv ': 1, 'car ': 1,  'car      ': 1, 'ambu': 10, 'ar': 1, '  car': 1, 'bus-c': 2, 'elerc': 5, 'pedes ': 0,  'pedesr': 0, 'carr': 1, 'bigtrur': 3, 'elecr': 5, 'suvr': 1}

Las etiquetas se reasignan de la siguiente manera

pedes: 0, car: 1, bus: 2, truck: 3, bike: 4, elec: 5, tricycle: 6, coni: 7, warm: 8, tralight: 9, special_vehicles: 10

3.3 Convertir al texto de yolov8

El archivo de etiqueta de yolov8 es el mismo que el de yolov5. Requiere un tipo de objetivo normalizado (0-1), coordenada x del punto central de la caja, coordenada y del punto central de la caja, ancho de la caja, altura de la caja.

--datasTrain
------train_list.txt	# 包含训练每张图片的路径
------val_list.txt
------test_list.txt
------images
----------train     	# 存放训练数据集的图片(.jpg)
----------val
----------test
------labels
----------train			# 存放训练图片对应的标签文件(.txt)
----------val
----------tes

Un ejemplo de un archivo en el directorio datasTrain/labels/train es el siguiente: las primeras 6 líneas de data220829_0001.txt corresponden a data220829_0001.jpg.

2 0.29427 0.33842 0.19479 0.27685
3 0.11380 0.56111 0.22760 0.43703
3 0.39479 0.41064 0.11041 0.17314
1 0.39401 0.29490 0.02760 0.06759
1 0.40729 0.25833 0.05 0.07222
1 0.61875 0.16574 0.02604 0.04444

4 Preparándose para el entrenamiento

4.1 Archivo de configuración del modelo

Modifique los parámetros del archivo de configuración ultralytics-main/ultralytics/yolo/cfg/default.yaml en la ruta para realizar las operaciones correspondientes (train, val, test).

Los siguientes parámetros en yolo/cfg/default.yaml deben configurarse o verificarse para ver si son consistentes con la tarea (incluidos los valores de ejemplo del modo de entrenamiento)

task: detect  # inference task, i.e. detect, segment, classify
mode: train  # YOLO mode, i.e. train, val, predict, export

# Train settings -------------------------------------------------
# model 使用.pt文件是通过预训练模型
# model:  ./preDetectModel/yolov8s.pt 
# model 使用.yaml文件是从头开始训练,使用COCO模型来预训练口罩检测不可取,必须从头训练
model:  D:/yolov5train/yolov8_main/ultralytics/models/v8/yolov8s.yaml  
# data: path to data file, i.e. coco128.yaml
data:  D:/yolov5train/yolov8_main/ultralytics/yolo/v8/detect/data/my_yolov8.yaml
epochs: 300  # number of epochs to train for
patience: 50  # epochs to wait for no observable improvement for early stopping of training
batch: 2  # number of images per batch (-1 for AutoBatch)
imgsz: 960  # size of input images as integer or w,h
save: True  # save train checkpoints and predict results
save_period: 10 # Save checkpoint every x epochs (disabled if < 1,设为-1则禁用保存检查点)

single_cls: False  # train multi-class data as single-class
rect: True  # support rectangular train/val if mode='train'/'val'
resume: False  # resume training from last checkpoint

Para obtener una explicación detallada de los parámetros anteriores, consulte el blog: https://blog.csdn.net/weixin_45277161/article/details/131047101

El archivo de configuración del modelo se encuentra en ultralytics-main/ultralytics/models/v8/yolov8s.yaml. El contenido principal de este archivo es el siguiente:

# Parameters
nc: 11  # number of classes

scales: # model compound scaling constants
# [depth, width, max_channels]
s: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs

# YOLOv8.0n backbone
backbone:
# YOLOv8.0n head
head:

4.2 Archivo de configuración de datos

El archivo de configuración del conjunto de datos imita el método de escritura del archivo ultralytics-main/ultralytics/datasets/coco.yaml y se registra como my_yolov8.yaml. El archivo contiene el siguiente contenido

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: D:/yolov5train/datasTrain3_More  # dataset root dir
train: D:/yolov5train/datasTrain3_More/train_list.txt  # train images (relative to 'path') 
val: D:/yolov5train/datasTrain3_More/val_list.txt  # val images (relative to 'path') 
test: D:/yolov5train/datasTrain3_More/test_list.txt

# Classes
names:
  0: pedes
  1: car
  2: bus
  3: truck
  4: bike
  5: elec
  6: tricycle
  7: coni
  8: warm
  9: tralight
  10: specialVehicle

4.3 archivo .py del tren

De hecho, si los parámetros en el archivo train.py están configurados en ultralytics-main/ultralytics/yolo/cfg/default.yaml, puede dejarlos como están. Si /yolo/cfg/default.yaml no está configurado, utilice el siguiente método para iniciar el entrenamiento. De lo contrario, utilice el método descrito en 4.4 para iniciar el comando de entrenamiento.

ultralytics-main/ultralytics$yolo task=detect mode=train model=models/v8/yolov8s.yaml data=/ultralytics/yolo/v8/detect/data/my_yolov8.yaml imgsz=960 batch=-1 epochs=300 patience=50 workers=4
# 同时也尽可以正确设置/yolo/cfg/default.yaml中的参数 

4.4 Comandos de entrenamiento

cd ultralytics-main/ultralytics/
yolo cfg=./yolo/cfg/default.yaml  

【Pregunta 1】

Las 300 rondas de entrenamiento normal han terminado, pero aún se informa un problema extraño con pyplot de la siguiente manera:

plt.switch_backend(original_backend)
File "/home/user/anaconda3/envs/yolov8/lib/python3.10/site-packages/matplotlib/pyplot.py", line 279, in switch_backend
raise ImportError(
ImportError: Cannot load backend 'TkAgg' which requires the 'tk' interactive framework, as 'headless' is currently running

La versión de matplotlib es demasiado alta, desinstale la versión de matplotlib en el entorno y vuelva a instalarla.

pip uninstall matplotlib
pip install matplotlib==3.2.1
# 由于 v8在训练的时候,大环境ultralytics 8.0.155 requires matplotlib>=3.2.2。
# 所以又重新卸载了 装了一个刚好大于等于3.2.2版本的matplotlib
# 如下
pip install matplotlib==3.3.0

5 Verificación y pruebas

5.1 Verificación

Modifique los parámetros del archivo de configuración ultralytics-main/ultralytics/yolo/cfg/default.yaml en la siguiente ruta: Para verificar el conjunto de verificación, debe configurar split:val en Val/Test settings en val

mode: val 
——————————————————————————
# Val/Test settings ----------------------------------
val: True  			# (bool) validate/test during training
split: val  		# (str) dataset split to use for validation
save_json: False  	# (bool) save results to JSON file
save_hybrid: False  # (bool) save (labels + additional predictions)
conf:  0.25 		# (float, optional)  (default 0.25 predict, 0.001 val)
iou: 0.5  			# (float) intersection over union (IoU) threshold for NMS
max_det: 300  		# (int) maximum number of detections per image
half: False  		# (bool) use half precision (FP16)
dnn: False  		# (bool) use OpenCV DNN for ONNX inference
plots: True  		# (bool) save plots during train/val

implementar

cd ultralytics-main/ultralytics/
yolo cfg=./yolo/cfg/default.yaml  

5.2 Pruebas

Modifique los parámetros del archivo de configuración ultralytics-main/ultralytics/yolo/cfg/default.yaml en la siguiente ruta: Para verificar el conjunto de prueba, debe cambiar split: val en Val/Test settings para probar

mode: val 
——————————————————————————
# Val/Test settings ----------------------------------
val: True  			# (bool) validate/test during training
split: test  		# (str) dataset split to use for validation

implementar

cd ultralytics-main/ultralytics/
yolo cfg=./yolo/cfg/default.yaml  

Supongo que te gusta

Origin blog.csdn.net/qq_42835363/article/details/132349090
Recomendado
Clasificación