Vorwort
yolov7 war schon eine Weile draußen, bevor der Autor einen Blog geschrieben hat. Es gibt bereits viele Blogs im Internet, die die Innovationen ihrer Artikel und die Netzwerkstruktur von yolov7 beschreiben. Ich werde hier nicht auf Details eingehen. In diesem Blog wird hauptsächlich geschrieben, wie um mit yolov7 Ihren eigenen Datensatz zu trainieren.
Umgebungsaufbau
Laden Sie zuerst den gesamten Projektcode von der offiziellen Website von yolov7 [https://github.com/WongKinYiu/yolov7] herunter und erstellen Sie dann eine virtuelle Conda-Umgebung auf dem Server. Ich verwende hier die Python3.7-Version
```
conda create -n yolo7 python=3.7
```
Aktivieren Sie dann die virtuelle Umgebung, geben Sie den Ordner yolov7-main ein und führen Sie den folgenden Befehl aus
```
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
```
Hier wird die Quelle der Tsinghua-Universität verwendet, um die entsprechende Abhängigkeitsbibliothek von Python zu installieren, was viel schneller geht.
Wenn im Installationsprozess kein Fehler auftritt, kann diese Umgebung direkt verwendet werden. Wenn während der Installation ein Paketinstallationsfehler gemeldet wird Führen Sie den Vorgang durch und installieren Sie ihn erneut mit dem Pip-Beutel auf der Leine
Abschließend können Sie den Befehl zum Modelltraining ausführen. Wenn kein Fehler gemeldet wird, bedeutet dies, dass die Umgebung vollständig eingerichtet ist.
```
python train.py --workers 8 --device 0 --batch-size 32 --data data/coco.yaml --img 640 640 --cfg cfg/training/yolov7.yaml --weights '' --name yolov7 --hyp data/hyp.scratch.p5.yaml
```
Ändern Sie die Konfigurationsdatei
Verwenden Sie basierend auf der Einrichtung der Umgebung Ihren eigenen Datensatz für das Training. Konvertieren Sie ihn hauptsächlich nach der Beschriftung Ihres eigenen Datensatzes in das Coco-Datenformat (es gibt viele Online-Tutorials, daher werde ich hier nicht auf Details eingehen). Aufgrund der Vorbereitung der Daten müssen Sie nur einige Konfigurationsdateien ändern, um normal trainieren zu können. Ich verwende denselben Coco-Datensatz wie den offiziellen. Wenn es sich um Ihren eigenen Datensatz handelt, sollten Sie die folgenden Punkte beachten Änderungen:
(1) In cfg/training/yolov7.yaml muss die Anzahl der Kategorien geändert werden
```
# parameters
nc: 80 # number of classes ##类别的数量需要进行修改
depth_multiple: 1.0 # model depth multiple
width_multiple: 1.0 # layer channel multiple
```
(2) In data/coco.yaml müssen die relevanten Informationen der gelesenen Daten geändert werden
```
# download command/URL (optional)
#download: bash ./scripts/get_coco.sh
# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: /data/benchmark/COCO2017/coco/train2017.txt # 118287 images ## 需要修改
val: /data/benchmark/COCO2017/coco/val2017.txt # 5000 images ## 需要修改
test: /data/benchmark/COCO2017/coco/test-dev2017.txt # ## 需要修改
# number of classes
nc: 80 #需要修改
# class names
names: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
'hair drier', 'toothbrush' ] ##需要修改
```
zu guter Letzt
Nachdem Sie den oben genannten zugehörigen Inhalt geändert haben, können Sie den Modelltrainingsbefehl direkt ausführen, um das Modell zu trainieren
Der Autor hat die Einzelkarten-V100-Batchgröße auf 32 eingestellt, um yolov7 für insgesamt 300 Epochen zu trainieren, was etwa 2 Wochen dauerte. Schließlich sind die Änderungen der drei Verluste im Trainingssatz wie folgt: box_loss beträgt etwa 0,026, cls_loss beträgt reduziert auf 0,0065,
obj_loss Etwa 0,024
Das Metrik-Trenddiagramm für den Trainingssatz sieht ungefähr wie folgt aus: