YOLO官网:https://pjreddie.com/darknet/yolo/
1.安装darknet
git clone https://github.com/pjreddie/darknet
cd darknet
make
2.下载权重文件pre-trained weight
wget https://pjreddie.com/media/files/yolo.weights
3、测试
./darknet detector test cfg/coco.data cfg/yolo.cfg yolo.weights data/dog.jpg
或者
./darknet detect cfg/yolo.cfg yolo.weights
Enter Image Path:
data/dog.jpg
根据网址修改:http://blog.csdn.net/ch_liu23/article/details/53558549
1、新建文件夹VOC2017(名字+年份)
在VOC2017文件夹下新建三个文件夹Annotation、ImageSets和JPEGImages,并把准备好的自己的原始图像(.jpg)放在JPEGImages文件夹下;把xml文件放在Annotation文件夹下。
2、在ImageSets文件夹中,新建三个文件夹Layout、Main、Segmentation,然后把写了训练图像的名字的文本train.txt放在Main文件夹下。
3、运行自己写的脚本./write.sh
// 根据标记的xml文件生成一个train.txt文件,其中包含所有训练集图片的文件名
#!/bin/sh
#============ get the file name ===========
echo -e "请输入你要读取的文件夹路径\n当前路径为${PWD}"
read InputDir
echo "你输入的文件夹路径为${InputDir}"
echo -e "请输入你要将数据输出保存的文件路径\n当前路径为${PWD}"
read OutputFile
echo "输出保存的文件路径为${OutputFile}"
: > $OutputFile #清空OutputFile
#循环读取文件夹名
for file_a in ${InputDir}/*; do
temp_file=`basename $file_a`
echo $temp_file >> $OutputFile
done
注:输出文件是train.txt的绝对路径,生成后需要去掉所以后缀名.xml。
按darknet的说明编译好后,接下来在darknet-master/scripts文件夹中新建文件夹VOCdevkit,然后将整个VOC2017文件夹都拷到VOCdevkit文件夹下。利用scripts文件夹中的voc_label.py文件生成一系列训练文件和labels,具体操作如下:
(1)首先需要修改voc_label.py中的代码,这里主要修改数据集名,以及类别信息,我的是VOC2017,并且所有样本用来训练,没有val或test,并且只检测人、车等,故只有五类目标,因此按如下设置:
sets=[('2017', 'train')]
classes = [ "person","car","electric bicycle","bicycle","motorcycle"]
注:删除最后两行输出语句。
(2)修改好后在该目录下运行命令:python voc_label.py
,之后则在文件夹scripts\VOCdevkit\VOC2007下生成了文件夹lables。同时在scripts\下应该也生成了train_2017.txt这个文件,里面包含了所有训练样本(.jpg)的绝对路径。
(1)以tiny-yolo-voc.cfg为例,该网络是yolo-voc的简版,相对速度会快些,主要修改参数如下:
filters=50 //修改最后一层卷积层核参数个数,计算公式是依旧自己数据的类别数filter=num×(classes + coords + 1)=5×(5+4+1)=50
activation=linear
[region]
classes=5 //类别数,本例为5类
注:另外也可根据需要修改learning_rate、max_batches等参数。
(2)data文件下的voc.names
打开voc.names文件可以看到有20类的名称,本例中只有五类,可改成:
person
car
electric bicycle
bicycle
motorcycle
(3)修改cfg文件夹中的voc.data文件
classes= 5 //类别数
train = /home/anngic/darknet/scripts/train_2017.txt //训练样本的绝对路径文件
valid = /home/pjreddie/data/voc/2007_test.txt //测试集的绝对路径文件
names = data/voc.names //上一步修改的voc.names文件
backup = /home/anngic/darknet/results/ //训练后生成的权重保存位置
附:关于Difficult大小写报错的修改方法,需把所有Difficult改成difficult。
sed -i "s#Difficult#difficult#g" `grep "Difficult" -rl ./`
1.上面完成了就可以命令训练了,可以在官网上找到一些预训练的模型作为参数初始值,也可以直接训练,训练命令为
$./darknet detector train ./cfg/voc.data cfg/tiny-yolo-voc.cfg
2.训练过程中会根据迭代次数保存训练的权重模型,如使用权重tiny-yolo-voc_6000.weights进行测试:
$./darknet detector test cfg/voc.data cfg/tiny-yolo-voc.cfg results/tiny-yolo-voc_6000.weights data/images.jpg