Démarrer la formation, la vérification et les tests de détection de cible du modèle Yolov8 à partir de 0

Démarrer la formation, la vérification et les tests de détection de cible du modèle Yolov8 à partir de 0

1 environnement

Tout d'abord, il existe un grand environnement, c'est-à-dire que Python, le pilote nvidia, cuda, cudnn, etc. ont été préparés.

2 L'environnement virtuel de yolov8

2.1 Créer un environnement virtuel

conda create -n yolov8 python=3.10

2.2 Activer l'environnement virtuel

Remarque : lors de l'activation d'un environnement virtuel, vous devez savoir si l'environnement virtuel (yolov8) que vous créez est sous les autorisations root ou les autorisations utilisateur. Sinon, lorsque vous utilisez source activate yolov8 pour activer l'environnement, vous pouvez toujours être invité : Impossible de trouver environnement conda : yolov5s ; Vous pouvez lister tous les environnements détectables avecconda 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

Autres : Comment basculer entre les autorisations d'utilisateur ordinaire et d'utilisateur root :

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

2.3 Installer les dépendances nécessaires de yolov8 dans l'environnement virtuel

Entrez le répertoire racine du projet yolov8

cd MyTrain/ultralytics-main

Ensuite, utilisez Pip pour installer le package ultralytics dans un environnement Python>=3.8, qui doit également contenir PyTorch>=1.7. Tous les fichiers requis.txt seront également installés.

pip install ultralytics

3 Préparez l'ensemble de données

3.1 Introduction aux ensembles de données

26 058 images sont utilisées et le fichier d'étiquette est un fichier json préalablement exporté à l'aide de l'assistant d'étiquette.

3.2 Statistiques des balises

Les catégories d'étiquettes et les quantités incluses dans le fichier d'annotations statistiques sont les suivantes :

'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, 

Explication des catégories de balises ci-dessus : Certaines des balises étranges mentionnées ci-dessus, telles que "carr", "bigtrur", "pedes", etc., sont évidemment causées par une saisie incorrecte de "r" ou de caractères d'espace, donc lors de la conversion au format d'annotation yolov5, doivent être pris en compte. Par conséquent, le mappage est le suivant pour obtenir la balise et l’ID. Les étiquettes « sanJiao Warm », « suLiaoDao », « zhiXiang », « suLiaoDai », « lunTai », « yiZi » et autres étiquettes ne sont pas utilisées pour la formation.

{'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}

Les balises sont réaffectées comme suit

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 en txt de yolov8

Le fichier d'étiquettes de yolov8 est le même que celui de yolov5. Il nécessite un type de cible normalisé (0-1), Coordonnée du point central de la boîte x, Coordonnée du point central de la boîte y, Largeur de la boîte, Hauteur de la boîte.

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

Un exemple de fichier dans le répertoire datasTrain/labels/train est le suivant : les 6 premières lignes de data220829_0001.txt correspondant à 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 Préparation à la formation

4.1 Fichier de configuration du modèle

Modifiez les paramètres du fichier de configuration ultralytics-main/ultralytics/yolo/cfg/default.yaml sous le chemin pour effectuer les opérations correspondantes (train, val, test).

Les paramètres suivants dans yolo/cfg/default.yaml doivent être définis ou vérifiés pour voir s'ils sont cohérents avec la tâche (y compris les exemples de valeurs du mode d'entraînement)

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

Pour une explication détaillée des paramètres ci-dessus, veuillez vous référer au blog : https://blog.csdn.net/weixin_45277161/article/details/131047101

Le fichier de configuration du modèle se trouve dans ultralytics-main/ultralytics/models/v8/yolov8s.yaml. Le contenu principal de ce fichier est le suivant :

# 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 Fichier de configuration des données

Le fichier de configuration de l'ensemble de données imite la méthode d'écriture du fichier ultralytics-main/ultralytics/datasets/coco.yaml et est enregistré sous le nom my_yolov8.yaml. Le fichier contient le contenu suivant

# 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

Fichier .py du train 4.3

En fait, si les paramètres du fichier train.py sont définis dans ultralytics-main/ultralytics/yolo/cfg/default.yaml, vous pouvez les laisser tranquilles. Si /yolo/cfg/default.yaml n'est pas défini, utilisez la méthode suivante pour démarrer la formation. Sinon, utilisez la méthode décrite en 4.4 pour démarrer la commande de formation.

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 Commandes d'entraînement

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

【Question 1】

Les 300 cycles d'entraînement normal sont terminés, mais un problème étrange avec pyplot est toujours signalé comme suit :

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 version de matplotlib est trop élevée. Désinstallez la version de matplotlib dans l'environnement et réinstallez-la.

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 Vérification et tests

5.1 Vérification

Modifiez les paramètres du fichier de configuration ultralytics-main/ultralytics/yolo/cfg/default.yaml sous le chemin comme suit. Pour vérifier l'ensemble de vérification, vous devez définir split: val sous Val/Test settings sur 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

mettre en œuvre

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

5.2 Tests

Modifiez les paramètres du fichier de configuration ultralytics-main/ultralytics/yolo/cfg/default.yaml sous le chemin comme suit. Pour vérifier l'ensemble de test, vous devez modifier split: val sous Val/Test settings pour tester

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

mettre en œuvre

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

Je suppose que tu aimes

Origine blog.csdn.net/qq_42835363/article/details/132349090
conseillé
Classement