下面所有的所需工具都在我的github上下载https://github.com/zssjh/KITTI-yolov2-tinygithub.com
一:训练集准备
训练集下载地址:
http://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=2dwww.cvlibs.net需要下载12G的训练集图片和5m的标签文件
在这里我只要求网络识别car类,需要对训练集里面的标签做一个合并和忽略,原数据集中包含'Car','Truck','Van','Tram','Pedestrian'等
所需工具:
modify_annotations_txt.py
然后按照下面操作整理训练集文件夹:
然后需要将trainval.txt重新命名为train.txt,拷贝到KITTI数据集下,即与training和testing平行的位置
所需工具:
random_split_train_val.py
二:KITTI格式转化为VOC格式(YOLO训练只接受VOC格式)
所需工具:
nghiattran/vod-convertergithub.com执行命令:
python vod_converter/main.py --from kitti --from-path data/KITTI --to voc --to-path data/kitti-voc
在这个过程中我遇到了下面的几个问题,并给出解决办法:
成功之后发现转化后的数据集格式为:
这时候会在 /kitti-voc/VOC2012/ImageSets/Main 下面生成一个trainval.txt文件, 我们需要将上面生成的train.txt和val.txt文件都放到这, 并将val.txt改成test.txt. 还将目录中的VOC2012改成了VOC2007了.
三:将准备好的数据集VOC2007放在darknet工程中
darknet/data/kitti/VOCdevkit/VOC2007
四:修改voc_label.py文件适应自己的数据集
所需工具:
voc_label.py(里面已经修改好了下面的三步)
(1)修改sets
(2)修改classes
(3)修改jpg-->png
然后运行 python voc_label.py,会在当前目录生成两个文件2007_train.txt和2007_test.txt,里面就是文件路径, 同时在VOCdevkit/VOC2007/目录下面还会生成一个labels/目录,用于存放对应图片的标签txt文件。
五:修改src/data.c文件
将fill_truth_region函数里面labelpath = find_replace(labelpath, ".jpg", ".txt")的jpg全换成.png
六:修改yolov2-tiny.cfg
所需工具:
yolov2-tiny.cfg(里面已经修改好了下面的三步)
(1)注释testing,取消注释training,batch=64,subdivision=8
(2)修改classes=1,临近的filters=num*(1+1+4)=30
(3)输入图片尺寸(KITTI训练集的图片尺寸是1224*370)
cfg文件中的width和height必须能够被32整除,但是416>370,所以选择352*352
(4)为KITTI训练集重新生成anchors,修改cfg中的anchors,YOLOv2中的参数是相对于原图像的宽和高比例,不是实际的像素数,一共生成5组,每组包含一个width和一个height。
所需工具:
gen_anchors.py
七:创建kitti.data,voc.names只剩下car
八:重新编译darknet
make clean
make
九:开始训练
./darknet detector train cfg/kitti.data cfg/yolov2-tiny.cfg yolov2-tiny.weights
十:输出可视化
(1)首先保存log信息
在上述的训练命令后面加上
| tee yolov2-tiny.log
(2)提取log信息
所需工具:
extract_log.py
(3)画损失值
所需工具:
train_loss_visualization.py
(4)画IOU
所需工具:
train_iou_visualization.py