先引出题目,占个坑,以后慢慢填。
mobilenet 也算是提出有一段时间了,网上也不乏各种实现版本,其中,谷歌已经开源了Tensorflow的全部代码,无奈自己几乎不熟悉Tensorflow,还是比较钟爱Caffe平台,因而一直在关心这方面。
单纯的Mobilenet分类不是关注重点,如何将其应用到目标检测网络才是关键,目前基本看好的思路就是Mobilenet+SSD,github上已经有至少如下项目涉及到这方面:
https://github.com/chuanqi305/MobileNet-SSD
https://github.com/zeusees/SSD_License_Plate_Detection
https://github.com/canteen-man/MobileNet-SSD-Focal-loss
https://github.com/cooliscool/LISA-on-SSD-mobilenet
https://github.com/FreeApe/VGG-or-MobileNet-SSD
接下来的时间,我将会尽可能进行进行分析验证,目的是寻找并试验出好的解决方案,并且期待能成功训练其他数据集。。
Mobilenet的速度是很快的,如果配上Depthwise layer,在TitanX应该能达到150fps,如果能将检测精度提升到70%以上,将会是一个很好的检测网络。
实现方案一
项目地址:MobileNet-SSD
几个月前接触到了这个project,当时chuanqi大神在Caffe平台上初步实现了Mobilenet-SSD,本人自然是很惊喜的,接下来就时不时和大神一起探讨,在其指导下,我在VOC数据集也能训练出大约72%的精度。现在这个项目趋于稳定,根据github上的描述,最终精度是72.7%,也很不错了。下面简单记录一下运行和训练方法。
模型分析
通过分析Mobilenet的模型结构和MobileNet-SSD的模型结构, 可以看出,conv13是骨干网络的最后一层,作者仿照VGG-SSD的结构,在Mobilenet的conv13后面添加了8个卷积层,然后总共抽取6层用作检测,貌似没有使用分辨率为38*38的层,可能是位置太靠前了吧。
模型运行
这个项目既然叫MobileNet-SSD,那首先要求能正常运行基础版本的SSD,这方面的博客教程这是不少,本人也有几篇博文涉及,可以参考。
克隆项目:
$ git clone https://github.com/chuanqi305/MobileNet-SSD.git
然后可以在自己的目录(我是用的是/home目录)下得到MobileNet-SSD文件夹,其中重要文件简介如下:
- template 存放4个网络定义的公用模板,可以由gen.py脚本修改并生成
- MobileNetSSD_deploy.prototxt 运行网络定义文件
- solver_train.prototxt 网络训练超参数定义文件
- solver_test.prototxt 网络测试超参数定义文件
- train.sh 网络训练脚本
- test.sh 网络测试脚本
- gen_model.sh 生成自定义网络脚本(调用template文件夹内容)
- gen.py 生成公用模板脚本(暂不用)
- demo.py 实际检测脚本(图片存于images文件夹)
- merge_bn.py 合并bn层脚本