一、网址:https://github.com/AlexeyAB/darknet

二、训练自己的数据(检测人头):

1、经过1周训练的效果图,总体上效果还是很OK的,检测精度也比较高:

2、数据准备:

2.1、标注工具:

标注工具在我的其他博客里有说明,这部分跳过,标注的人头的时候注意选择成person即可,方便以后生成训练时使用的.txt文件。

2.2、标注人头:

一般规则 - 您的训练数据集应包含您要检测的一组相对大小的对象(样本要充分)

  • train_network_width * train_obj_width / train_image_width ~= detection_network_width * detection_obj_width / detection_image_width
  • train_network_height * train_obj_height / train_image_height ~= detection_network_height * detection_obj_height / detection_image_heigh

2.3、训练数据转换:

需要把标注生成的.xml文件转换成.txt文件,切记名字要对应上:

2.4、生成train.txt和val.txt,比例大约为8:1

2.5、训练数据:

1)、修改Makefile配置,使用GPU训练

GPU=1 #如果使用GPU设置为1,CPU设置为0
CUDNN=1  #如果使用CUDNN设置为1,否则为0
OPENCV=1 #如果调用摄像头,还需要设置OPENCV为1,否则为0
OPENMP=0  #如果使用OPENMP设置为1,否则为0
DEBUG=0  #如果使用DEBUG设置为1,否则为0
 
CC=gcc
NVCC=/home/user/cuda-9.0/bin/nvcc   #NVCC=nvcc 修改为自己的路径
AR=ar
ARFLAGS=rcs
OPTS=-Ofast
LDFLAGS= -lm -pthread 
COMMON= -Iinclude/ -Isrc/
CFLAGS=-Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC
...
ifeq ($(GPU), 1) 
COMMON+= -DGPU -I/home/hebao/cuda-9.0/include/  #修改为自己的路径
CFLAGS+= -DGPU
LDFLAGS+= -L/home/hebao/cuda-9.0/lib64 -lcuda -lcudart -lcublas -lcurand  #修改为自己的路径
endif


编译程序:

make -j8

2)、开始训练:

./darknet detector train cfg/head.data cfg/yolov3-head.cfg darknet53.conv.74 -gpus 0,1

3)、检测目标:

./darknet detect cfg/yolov3-head.cfg weights/yolov3_150000.weights data/dog.jpg

 

注:

该博客主要做记录使用,由于数据属于公司,不能提供给大家,有些问题还没有解决,希望专业人士能够指点一下,QQ:187100248.

问题如下:

1、训练到10w多次,结果不收敛,一直震荡,不知道如何解决:

2、小目标会检测不到,漏掉的较多;

3、检测时间如何优化的更好。

 

算法demo,封装了一个前期的演示效果,验证算法可以在windows上运行,需要的环境:

vs2015+cuda9.1+windows10+release版本即可:

demo网盘地址:链接:https://pan.baidu.com/s/10AW8SHdGarzsZKuIaTSvPA 密码:9al6