目标检测学习(1)yolo-v4 训练、检测及评测

一、前言

  本篇主要记录对yolo4进行训练、检测及评测

二、下载好代码及编译

到作者官网 下载代码,

git clone https://github.com/AlexeyAB/darknet.git

打开makefile文件进行修改,文件修改如下,当然要先装好CUDA和cudnn

后执行

make -j8

三、在darknet根目录下创建VOCdevkit数据集  

   数据集的格式采用VOC2007,详见如下图

JPEGImages:放图片

ImageSets/Main: 放get_txt.py生成的txt文件,有train.txt, val.txt , test.txt, tainval.txt

Annotations:保存labelImg的标注数据,为xml文件

getTxt.py如下:

#coding=utf-8

import os,random

test_thr = 0.1
val_thr = 0.15

txtsavepath = 'ImageSets/Main/'
pic_root = './JPEGImages/'
name = os.listdir(pic_root)
random.shuffle(name)

pic_name_list = name
val_num = int(len(pic_name_list)*val_thr)
test_num = int(len(pic_name_list)*test_thr)
train_num = len(pic_name_list)-val_num-test_num
train_val_num = len(pic_name_list)-test_num

fval = open(txtsavepath+'/val.txt', 'w')
ftest = open(txtsavepath+'/test.txt', 'w')
ftrain = open(txtsavepath+'/train.txt', 'w')
ftrainval = open(txtsavepath+'/trainval.txt', 'w')

k = 0
for i in range(test_num):
  ftest.write(name[k][:-4]+'\n')
  k=k+1

name=name[k:]
for i in range(len(name)):
  ftrainval.write(name[i][:-4]+'\n')
  i=i+1

random.shuffle(name)
k=0
for i in range(val_num):
  fval.write(name[k][:-4]+'\n')
  k=k+1

for i in range(train_num):
  ftrain.write(name[k][:-4]+'\n')
  k=k+1

    
ftrain.close()
fval.close()
ftest.close()

四、将xml文件转为darknet所需的txt文件

  将scripts文件夹下的 voc_label.py 文件拷贝至根目录下,将其中sets、classes、路径改为自己的,可生成2007_train.txt, 2007_val.txt, 2007_val.txt, train_all.txt, train.txt 

五、复制cfg/yolo4-custom.cfg,改名为yolo4-defect.cfg

这是训练参数,和网络结构的修改

图像的大小可以是32的倍数,batch,subvision根据需要设置

训练代数,github中给出了max_batches的基本设置方法,2000 × classes。当然,设置的大一些也是可以的,只不过后期基本上在某一值附近震荡,值得注意的是,steps的设置是max_batches × 80% 和 max_batches × 90

网络结构的修改:根据待测目标类别的数量更改YOLO层(3个)和YOLO层前一层的卷积层(3个)
包含YOLO前一层卷积层的卷积核个数:(classes + 5)*3,如classes为1,这里则为18
YOLO层的类别数classes,注意yolo层有3个
锚框(可选,kmeans聚类)

六、将data/coco.names复制,修改为defect.names,修改为自己的类别名

七、cfg/voc.data 修改为自己的

八、复制作者的网络预训练模型 yolov4.conv.137 

九、输入训练指令

sudo ./darknet detector train cfg/defect.data cfg/yolov4-defect.cfg yolov4.conv.137 

yolov4.conv.137 为作者预训练的模型,backup文件夹将保存训练好的模型

训练会出现弹出训练过程的loss实时图像

如果训练中途断了的话,可直接使用最后保存的模型继续训练

sudo ./darknet detector train cfg/defect.data cfg/yolov4-defect.cfg backup/xxxxxx.weights

十、测试指令

sudo ./darknet detect cfg/yolov4-defect.cfg backup/yolov4-defect_last.weights  XX.jpg   -thresh 0.6
十一、python接口

根目录下的

十二、评测mAP

  map(平均精确度)是常用的目标检测算法性能的衡量,yolo-v4提供了对验证集map的计算代码,输入命令行命令:

        ./darknet detector map cfg/defect.data cfg/yolov4-defect.cfg backup/xxx.weights

猜你喜欢

转载自blog.csdn.net/AP1005834/article/details/108454408