上篇链接:https://blog.csdn.net/daisy_d_/article/details/105748051
全部完成分为下面几个步骤:
1.制作自己的数据集-将visdrone转化为yolo所需的格式
2.配置yolov3 (下面完成这部分)
3.测试及计算map
git clone https://github.com/pjreddie/darknet
cd darknet
修改makfile文件
GPU=1 #如果使用GPU设置为1,CPU设置为0
CUDNN=1 #如果使用CUDNN设置为1,否则为0
OPENCV=0 #如果调用摄像头,还需要设置OPENCV为1,否则为0
OPENMP=0
DEBUG=0
编译
make
下载权重,我用的是darknet53.conv.74
我放在了scripts文件夹下
wget https://pjreddie.com/media/files/darknet53.conv.74
修改cfg/voc.data
classes= 10
train = /home/mist/darknet/scripts/VOCdevkit/VOC2018/train.txt
#路径根据自己需要修改,注意使用绝对路径,这个代码相对路径我试的行不通
valid = /home/mist/darknet/scripts/VOCdevkit/VOC2018/val.txt
names = data/voc.names
backup = backup
修改data/voc.name
pedestrian
people
bicycle
car
van
truck
tricycle
awning-tricycle
bus
motor
修改cfg/yolov3-voc.cfg,我使用的这个网络
修改的地方:
第一处
[convolutional]
size=1
stride=1
pad=1
filters=45 #修改为3*(classes+5)即3*(10+5)=45
activation=linear
[yolo]
mask = 6,7,8
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=10 #修改类别个数,10类
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0
第二处
[convolutional]
size=1
stride=1
pad=1
filters=45 #修改
activation=linear
[yolo]
mask = 3,4,5
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=10 #修改
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0
第三处
[convolutional]
size=1
stride=1
pad=1
filters=45 #修改
activation=linear
[yolo]
mask = 0,1,2
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=10 #修改
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0
接下来就可以训练啦,训练可能时间比较长一定要用耐心~
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg scripts/darknet53.conv.74
如果训练中断了可以从最后一次保存的权重开始
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_51000.weights
训练时需要注意的参数
learning_rate=0.001 #初始学习率。学习率设置可以参考https://blog.csdn.net/qq_33485434/article/details/80452941
....
max_batches = 50200 #迭代max_batches后停止训练
....
steps=40000,45000 #steps和scale可以设置学习率的变化,迭代到40000次和45000次时,学习率衰减
scales=.1,.1 #.1就是衰减十倍
训练时保存权重的频率
前一千次每100保存一次,大于1000每10000保存一次权重
可以修改detector.c中,选择合适的频率
if(i%10000==0 || (i < 1000 && i%100 == 0))