Python影像辨識筆記(十二):使用YOLOv4進行COCO資料集訓練

Python影像辨識筆記(十二):使用YOLOv4進行COCO資料集訓練

參考資料:

前言:

本次有幸使用四顆NVIDIA Tesla V100的GPU,進行YOLOv4 Model的訓練,在訓練效能上,比以前只用Jetson TX2快上許多。

因此,我想藉由這次機會,和大家分享,如何自己訓練COCO Dataset的YOLOv4 Model。

本文:

下載darknet

$ mkdir project
$ cd ~/project
$ git clone
https://github.com/AlexeyAB/darknet
$ cd darknet

編輯Makefile

本文假設讀者已完成GPU、CuDNN……等相關設定,因此不再贅述

由於所使用的Server因為一些因素,無法使用OpenCV,我們就維持OPENCV=0的狀態

$ sudo nano Makefile#參數調整如下
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=0
AVX=0
OPENMP=0
LIBSO=0
$ sudo nano src/utils.c#將裡面的2014改成2017void replace_image_to_label(char *input_path, char *output_path) {//find_replace(input_path, "/images/", "/labels/", output_path); // COCOfind_replace(input_path, "/images/train2014/", "/labels/train2014/", output_path); // COCOfind_replace(output_path, "/images/val2014/", "/labels/val2014/", output_path); // COCOfind_replace(output_path, "/JPEGImages/", "/labels/", output_path); // PascalVOC上述步驟完成後,執行以下指令$ make

下載 COCO Dataset 的資料到darknet目錄

2017 Train images [118K/18GB]2017 Val images [5K/1GB]2017 Train/Val annotations [241MB]#下載完成後,執行以下指令建立資料夾$ mkdir -p coco/images/ coco/annotations/ coco/labels/coco/- images/- annotations/- labels/#解壓縮$ unzip 'train2017.zip' -d coco/images/$ unzip 'val2017.zip' -d coco/images/$ unzip 'annotations_trainval2017.zip' -d coco/annotations/#除此之外,將val2017.txt放到coco/images/中。如果沒有找到該文件,就自己建立
#先移到coco/images/val2017中,再執行以下指令。並且將自己的絕對路徑補上,完成驗證集文件的建立
$ ls > val2017.txt

將COCO標註格式轉成YOLO格式(darknet/)

下載COCO to YOLO到darknet資料夾中(找pre-built JAR file)$ java -jar cocotoyolo.jar "coco/annotations/instances_train2017.json" "$PWD/coco/images/train2017/" "all" "coco/yolo/"$ mv coco/yolo/image_list.txt coco/train2017_images.txt
$ mv coco/yolo/ coco/labels/train2017/
+ coco/ | +-+images/ | | | + train2017/ | + val2017/ | ++ annotations/ | ++ labels/ | ++ train2017_images.txt | ++ val2017_images.txt+ coco/
|+-+images/
| + train2017/
| + val2017/
++ annotations/|
++ labels/
| + train2017_images.txt
| + val2017_images.txt

下載yolov4.conv.137(用來進行Model訓練)(darknet/)

$ wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.conv.137

修改coco.data(darknet/cfg/coco.data)

$ nano coco.data#將train、valid改成屬於自己路徑的資料夾
classes= 80
train = /Users/yanwei/darknet/coco/train2017_images.txt
valid = /Users/yanwei/darknet/coco/val2017_images.txt
names = /Users/yanwei/darknet/data/coco.names
backup = /Users/yanwei/darknet_training/backup/
eval=coco

設定cfg檔案(darknet/cfg)

$ cd darknet/cfg
$ cp yolov4-custom.cfg yolov4-coco.cfg #建立yolov4-coco.cfg檔案
$ nano yolov4-coco.cfg
[net]
# Training
batch=64 #若電腦較慢者batch和subdivisions都先改成1
subdivisions=16
width=416 #在Tesla V100上使用608會出現Out of memory,先改成416
height=416
channels=3
momentum=0.949
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1
learning_rate=0.001
burn_in=1000
max_batches = 160000 #使用2000*Class數量,如果有80個class就是2000*80
policy=steps
steps=128000,144000 #80%*max_batches,90%*max_batches
scales=.1,.1
#cutmix=1
mosaic=0 #由於Server目前沒有OpenCV的關係,mosaic要改成0

開始訓練(darknet/)

$ cd darknet
$ ./darknet detector train cfg/coco.data cfg/yolov4-coco.cfg yolov4.conv.137 -gpus 0,1,2,3 -map |tee -a trainRecord.txt
#上面的指令讀取coco.data中設定的 train & valid圖片路徑、label names、上個步驟的yolov4-coco.cfg作為神經層設定、yolov4.conv.137作為用來幫助訓練的Pre-trained Model、-gpus 0,1,2,3使用了4顆GPU、-map會顯示mAP、tee指令將output輸出至trainRecord.txt文件,可供後續資料視覺化,了解訓練過程
我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章