yolov3模型识别不出训练图片_使用yolov3训练行人检测模型要点总结

最近,yolov3版本发布,借此机会训练了个行人检测模型,效果行人检测貌似还不错,在caltech reasonable测试集上MR达到13%,11名的样子,SOTA MR在7% 左右,行人检测的人类识别能力MR 0.8%左右;经过私有集训练后,效果也比较好。实际应用通常采用yolov3的主要原因:速度较快,识别率较高;416*416的输入图像下,英伟达p6000下FPS有30多;在jetson tx2(256 cudas)上,FPS有3.0多点,当然离嵌入式设备上的实时性还差得远。

1、训练集选择与预处理

• coco17 person图片及其标注文件

• voc12 person图片及其标注文件

• caltech行人检测数据集

• cvc14行人检测数据集:包含晚上和红外图像进行训练

• tud行人检测数据集

• citypersons(2048*1024)和KITTI(1242*375)行人检测数据集:由于分辨率与私有集相差太大,训练后在测试集上效果不好,因此实际没有使用

• 自己标注的数据集-私有集(小于2000张图,1920*1080分辨率,白天为彩色图,晚上为加红外补光的灰度图):

◦ 用实际应用环境中采集的图像进行正样本标注训练:含人的图像训练

◦ 用实际应用环境中采集的图像进行负样本标注训练:不含人的图像训练

将数据集数据处理为yolov3所需的格式,一般为txt文件放入图像文件夹下

2、yolov3 参数设置,只检测1类目标,行人为第0类

• 修改cfg文件:

◦ 修改anchor box:考虑到行人的宽高比为0.4左右进行重新设计,如采用聚类或者按照规律依次放大

◦ 修改输入图像大小:默认为416*416,因为我的输入图像为1920*1080分辨率,以及计算量上的考虑,选择512*288(h,w必须为32的倍数),等比例缩小3.75倍,anchor box的宽高比可以维持不变,同时计算量减少16%(BFLOP:65.862->55.633)

◦ 修改迭代次数,filter,classes,random等参数

• 修改data文件

• 修改names文件

3、训练

• GPU:英伟达P6000,24G显存,每次迭代训练64张,耗时4.6秒左右

• 公开集训练:在coco+voc+caltech+cvc14+tud,共87000多张图像,训练24000次迭代,从最初的权重文件开始

• 私有集训练:在自己标注的数据集,共1700多张,训练6000次迭代,

4、测试:使用官方示例的python2脚本调用.so库进行测试(C++不太熟)

• 使用caltech测试集(640*480):24000次迭代后测试,MR13%

• 使用cvc14测试集-白天和晚上可见光集(641*472):24000次迭代后测试,白天,晚上,包括可见光和红外图像,结果采用matlab2017b自带的miss rate 和AP进行计算,mr0.3左右,ap0.8左右

• 使用自己采集的数据(1920*1080):30000次迭代后测试,包括正样本和负样本

• 单张图像耗时分析:dell 工作站+英伟达P6000+Python2.7调用

◦ 处理图像(read和resize):0.03s cpu左右

◦ 模型预测:0.03s gpu左右

◦ 图上标注及保存至磁盘:0.07s cpu左右

5、主要困难

• 小行人难以识别:一般行人高度像素小于图像分辨率的十分之一,原图还需压缩至输入图像的大小,使得行人更小,检测率下降较大

• 遮挡行人难以识别:遮挡35%以上,检测率下降较大

• 非正常姿态行人难以识别:弯腰的,蹲着的,坐着的,躺着的

• 假行人容易误检:如人形建筑、人物照片、人物海报和人物广告等

• 晚上行人难以识别:晚上图像一般为灰度图,光线较暗,加了红外补光,主要是训练样本较少,导致检测率不高

• 密集行人难以识别:多个行人之间相互遮挡,挨的很紧,难以一个个单独识别区分

• 解决方法:

◦ 从模型方面:如修改loss函数,网络结构,增加常识信息等

◦ 从数据方面:增加相应的训练数据,但应当考虑训练样本的概率分布与实际应用场景一致

你可能感兴趣的:(yolov3模型识别不出训练图片_使用yolov3训练行人检测模型要点总结)