YOLOv4训练自己的数据

一、训练前的准备

1.如何获取代码

https://github.com/AlexeyAB/darknet

2.修改MakeFile文件

GPU=1
CUDNN=1
CUDNN_HALF=0
OPENCV=1
AVX=0
OPENMP=0
LIBSO=1
ZED_CAMERA=0 
ZED_CAMERA_v2_8=0 

在这里插入图片描述
修改成自己的地址

3.下载权重

yolov4.weights

4.测试初始训练权重效果

在./darknet文件夹下的命令行中输入make clean, make
编译成功后:./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jp
成功后在主目录下出现predictions.jpg 图片为预测后的图片。

二、训练自己的数据集

1.数据集文件夹格式

  • VOCdevkit
    • VOC2007
      • Annotations
      • ImageSets
        • Layout
        • Main
        • Segmentation
      • JPEGImages

2. main文件夹下生成训练集和测试集文件

此处是代码

// An highlighted block
var foo = 'bar';

3. 修改voc.name

vehicle
ship
plane

4. 修改 voc.data

  classes= 3 # voc.name中类的个数
  train  = ./XXX/2007_train.txt # 此文件由voc_lable.py生成
  valid  = ./XXX/2007_test.txt #(此文件由voc_lable.py生成
  names = ./darknet/data/voc.name #(可以修改为自己的绝对路径)
  backup = backup/ # 权重保存的位置

5. voc_label.py生成训练用的txt文件和标签文件夹

修改该文件中的类和地址,然后直接运行即可

6. 修改yolov4.cfg文件

[net]
batch=64 
subdivisions=64 # 如果训练时出现out of memory 该值翻倍。
# Training
#width=512 
#height=512
width=608 
height=608
channels=3
momentum=0.949
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

learning_rate=0.0013 # 学习率
burn_in=1000 
max_batches = 10000 # 最大迭代数 一般为类数*2000,但是最大迭代数一般不小于
训练图片的数量
policy=steps
steps=8000,9000
scales=.1,.1
[convolutional]
size=1
stride=1
pad=1
filters=24 # (class+5)*3
activation=linear
[yolo]
mask = 6,7,8
anchors = 22, 38,  43, 36,  31, 54,  38, 89,  53, 66,  64,101, 107, 74, 105,169, 193,303 
# anchors 必须修改 
classes=3 # voc.name中的类数
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1
scale_x_y = 1.05
iou_thresh=0.213
cls_normalizer=1.0
iou_normalizer=0.07
iou_loss=ciou
nms_kind=greedynms
beta_nms=0.6
max_delta=5

7.生成anchors

./darknet detector calc_anchors data/voc.data -num_of_clusters 9 -width 608 -height 608

三、训练

#训练不带日志
./darknet detector train cfg/voc.data cfg/yolov4.cfg /backup/yolov4.weights -gpus 0,1,2,3
带日志
./darknet detector train cfg/voc.data cfg/yolov4.cfg /backup/yolov4.weights -gpus 0,1,2,3 -dont_show - mjpeg_port 8090 -map 2>1 |tee

计算所有值

./darknet detector map data/voc.data cfg/yolov4.cfg backup/yolov4_best.weights

批量测试

./darknet detector test data/voc.data cfg/yolo4.cfg backup/yolo_best.weights