darknet框架使用

编译

修改Makefile

1
2
3
GPU=1
CUDNN=1
OPENCV=1
1
2
3
4
5
6
7
python3
额外添加
LINKFLAGS := -Wl,-rpath,/home/hhq/anaconda3/lib
$(EXEC): $(EXECOBJ) $(ALIB)
$(CC) $(COMMON) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(LINKFLAGS) $(ALIB)
$(SLIB): $(OBJS)
$(CC) $(CFLAGS) -shared $^ -o $@ $(LDFLAGS) $(LINKFLAGS)

make -j24

处理数据

1
/data0/hhq/data

下执行

1
python voc_label.py

从xml标注文件生成txt标注文件

custom数据训练

  • 修改voc.data
1
2
3
4
5
classes= 1
train = /data0/hhq/project/darknet-master/mydata/2031_train.txt
valid = /data0/hhq/project/darknet-master/mydata/2031_trainval.txt
names = /data2/hhq/project/darknet-master/mydata/voc.names
backup = /data2/hhq/project/darknet-master/mydata/model/
  • 修改voc.names

light

  • 修改yolov3-voc.cfg

修改classes,yolo上面一层卷积层的filter数量n=anchors*(1+4+1)

  • 训练
1
./darknet detector train ./mydata/voc.data ./mydata/yolov3-voc.cfg ./mydata/yolov3.weights -clear 0 -gpus 0,1  | tee train-0322-01.log
  • 输出

batch 输出,如

1
2705: 0.256951, 0.259272 avg, 0.000040 rate, 34.392978 seconds, 692480 images

2706迭代次数,0.256951总损失loss,0.259272 avg平均损失,0.000040当前学习率,34当前批次数据训练所花时间,692480=64*2705

详细输出,如

1
2
3
Region 82 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.000002, .5R: -nan, .75R: -nan,  count: 0
Region 94 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.000010, .5R: -nan, .75R: -nan, count: 0
Region 106 Avg IOU: 0.851382, Class: 0.999875, Obj: 0.997986, No Obj: 0.000242, .5R: 1.000000, .75R: 0.846154, count: 13

Region Avg IOU: 0.32657, 表示在当前 subdivision 内的图片的平均 IOU, 代表预测的矩形框和真实目标的交集与并集之比, 这里是 75.96%, 这个模型此时已经达到了很高的训练精度;

Class: 0.809470, 标注物体分类的正确率, 期望该值趋近于1;

Obj: 0.732717, 越接近 1 越好;

No Obj: 0.002799, 期望该值越来越小, 但不为零;

.5R: 1.000000, 是在 recall/count 中定义的, 是当前模型在所有 subdivision 图片中检测出的正样本与实际的正样本的比值。在本例中, 全部的正样本被正确的检测到。

count: 4, 所有当前 subdivision 图片(本例中一共 8 张)中包含正样本的图片的数量。 在输出 log 中的其他行中, 可以看到其他 subdivision 也有的只含有 6 或 1 个正样本, 说明在 subdivision 中含有不包含在检测对象 classes 中的图片。