开始做的动机
某日在RoboMaster论坛上,看到有小伙伴使用TensorFlow Object Detection API 制作了小车装甲板识别的帖子,刚好最近在看人脸识别网络的内容,识别小车的装甲板和识别人脸是不是有什么关联呢?
我的代码:链接: https://pan.baidu.com/s/1lFGqNJYdTyVuCztG8LSXow 密码: ajqo
数据集
看了之前提到的文章,我得到一个很好的启示:要把官方数据集内含有小车的部分截取下来作为数据集比较靠谱,因为原始数据集是1920x1080的大小,我们截取的小车大于在400x300左右,较小的尺寸方便训练
把官方文件夹内的一个文件夹移动到,我的项目中,然后再使用ProcessXML.py解析数据集用于训练
label.txt内前面是图片的名字后面的数字每四个一组分别为[x1,y1,x2,y2]左上角和右下角
[官方数据集下载地址]:链接: https://pan.baidu.com/s/1knd-TlmdDaSZsLYuNQ8ASA 密码: 27oq
截取之后的效果图:(在validation_data.py
可以查看效果)
那么首先就要读懂官方数据集的格式,方便我们做裁剪
这是官方数据集的一个文件排布,四个文件夹是一场比赛的截图和对应的标签,我们随便从一个文件里入手,内部打开是XML文件和对应的图片,使用python对应的XML这个包可以轻松地把我们需要的信息解析出来,我也写了代码
随便找个人脸识别模型改改看
我参照了这个人脸识别算法:传送门
可以看到,它是框取了人脸位置外加5个landmark定位,对于小车这个识别来说,框取就好了landmark可能不需要,所以我们要观察一下他的网络输出和损失函数做出对应的修改,其实说是修改,就是仅仅删除而已,把算lanmark的部分删掉,然后再观察一下网络结构,这个网络结构还是很简单的,用了FPN得到三种不同深度下提取的feaure map,再分别用对应的Head去提取,所以简单地删掉LandmarkHead就好了
开始训练
大约80多个epoch
由于我在家里,实在不想训练完整过程,加上数据集我是解析了大约500张,所以中途停止了训练,把训练过程保存的模型拿来测试一下
这张图片是选取原贴公众号里面的一张图片,并不是训练集里面的,可以看到训练一半时可以达到需求
项目内文件的功能
- ProcessXML.py:解析官方数据集
- train.py :用于训练
- detect.py:用于检测
- validation_data.py:用于验证分割好的数据集