上一篇了解了基本CNN网络结构
现在进一步学习一下目标检测网络SSD,SSD的网络结构这里就不赘述,需要了解的可以自行查找。
在导入SSD的模型时,出现Normalize或Permute层就会导致matlab死机,怀疑是caffe在编译的时候有问题,决定重新编译码matcaffe.重新编译后还是一样不行,后来查看了caffe的layer文件,里面没有Normalize和Permute层,需要添加,在github下载了intel的caffe,添加了相关文件,可以载入Normalize和Permute层。
继续往下,发现prior_box_layer和DetectionOutput层也不能载入,继续按照之前的方法添加。
参考网址:
https://blog.csdn.net/sinat_35308776/article/details/79691039
https://blog.csdn.net/qq745021926/article/details/71698680
https://blog.csdn.net/lqp888888/article/details/77943837
cmd打开windows下命令行,将proto.exe和caffe.proto放置在同一文件夹下
命令行打开至该文件夹下
protoc.exe caffe.proto --cpp_out=.
DetectionOutput无法添加成功,暂时不添加了,不影响SSD的运行
查看网络结构netscope
http://ethereon.github.io/netscope/#/editor
在github上找到一个版本
https://github.com/fanyang16120029/SSD-Single-Shot-Detector-in-Matlab
这个版本将训练好的caffemodel(VGG_VOC0712_SSD_300x300_iter_240000.caffemodel)转成.mat文件用于目标检测。按照他们的方法,我将卷积后的数据直接取出来,不取Permute之后的数据,用这种方法可以实现目标检测,效果如下图:
再次编译detection_output_layer 注释以下内容编译通过
使用res10_300x300_ssd_iter_140000.caffemodel SSD人脸检测网络检测人脸,效果如下:
效果还不错
再验证之前的目标检测网络效果:
效果也挺好,说明之前的网络bbox计算有问题;
371132449@qq.com