本帖最后由 阿莫斯 于 2018-8-30 09:48 编辑
基于ROS智能陪伴扫地机:3.分析源码cpp文件
由于前期对AI图像识别了解不够,将其开发想的过于简单,因此中间耗时较长!在此抱歉,让大家久等了! 调整了之间占位的架构顺序,由于是想做应用开发,因此将重点调整到如何调用API,性能优化方面以后有时间再补充! 开发流程如下: - 选择最适合的模式
- 寻找识别结果输出API入口
- 调用该API进行开发
一、各种CNN模式体验效果对比 CNN模式的列表如下:
Classification:
- alexnet
- googlenet
- inception_v1
- inception_v2
- inception_v3
- inception_v4
- mobilenet
- squeezenet
Detection:
2.1 Classification模型简介:
1)复杂模型:
- Alexnet,2012年magenet比赛冠军的model——Alexnet提出,它证明了CNN在复杂模型下的有效性,然后GPU实现使得训练在可接受的时间范围内得到结果;
- GoogleNet,2014年ILSVRC比赛冠军的model,由Google团队提出,它证明了一件事:用更多的卷积,更深的层次可以得到更好的结构。(当然,它并没有证明浅的层次不能达到这样的效果)
GoogleNet的延伸版本:inception_v1~v4,其实正确的写法为GoogLeNet,向早期的LeNet致敬!
- v1增加了网络的width,另一方面增加了网络对尺度的适应性;
- v2方面了加入了BN层,减少了Internal Covariate Shift(内部neuron的数据分布发生变化),使每一层的输出都规范化到一个N(0, 1)的高斯; 另外一方面学习VGG用2个3x3的conv替代inception模块中的5x5,既降低了参数数量,也加速计算;
- v3一个最重要的改进是分解(Factorization),将7x7分解成两个一维的卷积(1x7,7x1),3x3也是一样(1x3,3x1),这样的好处,既可以加速计算(多余的计算能力可以用来加深网络),又可以将1个conv拆成2个conv,使得网络深度进一步增加,增加了网络的非线性;
- v4研究了Inception模块结合Residual Connection能不能有改进?发现ResNet的结构可以极大地加速训练,同时性能也有提升,得到一个Inception-ResNet v2网络,同时还设计了一个更深更优化的Inception v4模型;
2.轻量模型
- mobilenet,Google针对手机等嵌入式设备提出的一种轻量级的深层神经网络,它也能支持图像分类和检测,源码于2017年开放;、目前已提出新的模型MobileNetV2提升图像分类、目标检测以及语义分割方面的能力!
- squeezenet,由伯克利&斯坦福的研究人员合作发表于 ICLR-2017,提出的一个小型化的网络模型结构,该网络能在保证不损失精度的同时,将原始AlexNet压缩至原来的510倍左,核心指导思想是——在保证精度的同时使用最少的参数;
2.2 Detection模型简介:
- mobilenetssd,顾名思义mobilenet + ssd是mobilenet和ssd相结合建立的模型,SSD全称Single shot MultiBox Dector,是Wei Liu在ECCV2016上提出的一种目标检测算法,是目前主要的检测框架之一,相比Faster RCNN有明显的速度优势,相比YOLO又有明显的mAP优势(不过已经被CVPR 2017的YOLO9000超越);
- yolo,(You Only Look Once: Unified, Real-Time Object Detection),是Joseph Redmon和Ali Farhadi等人于2015年提出的基于单个神经网络的目标检测系统,2017年CVPR上又发表的YOLO 2,进一步提高了检测的精度和速度,核心思想就是利用整张图作为网络的输入,直接在输出层回归 bounding box(边界框) 的位置及其所属的类别;
在查找资料的时候,发现查的越多,算法越来越复杂!不过不用担心,角蜂鸟已经帮我们处理好了这些模型,作为应用工程师我们关注的重点是选择最合适和如何使用这两个问题!选择则需要知道各个模型的背景,目标以及优缺点,科技是进步的,新的一般比旧的更优!通过以上的对比分析大家应该对各个模型有了大致的了解,大家选择各自的模型进行体验吧;
表1 几种经典模型的尺寸,计算量和参数数量对比
经典模型尺寸对比
表2 几种经典压缩方法及对比
经典压缩对比
根据以上信息推测,不考虑功耗和计算复杂度(角蜂鸟实现),角蜂鸟提供给我们的模型:
Classification模型中识别率最高应该是inception_v4,理由就不多说了,根据以上信息可以分析出!
Detection模型中识别率最高的应该是mobilenetssd,根据上一篇文章可知,角蜂鸟yolo卷积编码算法为tiny yolo v1性能没有ssd好!
至于为什么还提供其他模型有知道的可以补充!
2.3 测试结果:
选择不同的的CNN模式,体验测试效果!此次先跳过!
二、各种CNN模式的实现方式
第一部分讲了如何选择,这部分我们将如何使用?Demo只提供了一个直观的窗口体验检测的结果,那么如何获取检测的结果?怎么使用这个结果进行应用开发呢?
在上一篇文章最后,我们运行demo使用yolo卷积编码算法实现目标检测时执行了以下两条指令
- roslaunch horned_sungem_launch hs_camera.launch cnn_type:=yolo camera:=hs pixels:=360
复制代码- roslaunch horned_sungem_launch hs_detection_example.launch camera_topic:="/hs/camera/image_raw"
复制代码 下面详细分析这两条启动指令如何实现应用的启动;
当时classification类的CNN时,重定义了节点刚才的节点,调用的包为nodelet,调用包中以下类型程序nodelet,节点的名称设置为horned_sungem_stream,参数从horned_sungem_stream/HSNodelet $(arg manager)下的文件中加载;
这个启动文件实现了创建节点horned_sungem_stream,开启camera拍摄视频,并启动CNN进行图像类的识别,并见视频和识别结果以话题形式发布出去!
- hs_detection_example.launch
不使用源码中的节点名,重新创建了一个名为horned_sungem_example_stream_detection的节点!调用的包是horned_sungem_example,可执行文件名为horned_sungem_example_stream_detection!通过重映射将摄像头的图像数据发布到camera_topic,即/hs/camera/image_raw;
这个启动文件实现了将订阅节点horned_sungem_example_stream_detection的视频流输出的功能!
三、提高识别率的方法
下一步:应用开发
—————————————————————————————————————————————————
参考文献:
干货|详解CNN五大经典模型enet,Alexnet,Googlenet,VGG,DRL
http://www.sohu.com/a/134347664_642762
GoogLeNet系列解读InceptionV1/V2
https://blog.csdn.net/u011534057/article/details/54847992
Deep Learning-TensorFlow (13) CNN卷积神经网络_ GoogLeNet 之 Inception(V1-V4)
http://lib.csdn.net/article/aimachinelearning/66253
深入浅出——网络模型中Inceptionv1到 v4 的作用与结构全解析
https://blog.csdn.net/u014114990/article/details/52583912
mobilenet网络的理解
https://blog.csdn.net/wfei101/article/details/78310226
谷歌发布MobileNetV2:可做语义分割下一代移动端计算机视觉架构
http://baijiahao.baidu.com/s?id=1596801861393928295&wfr=spider&for=pc
纵览轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception
https://baijiahao.baidu.com/s?id=1589005428414488177&wfr=spider&for=pc
深度学习模型压缩与加速算法之SqueezeNet和ShuffleNet
https://www.2cto.com/net/201709/675202.html
Mobilenet-SSD的Caffe系列实现
https://blog.csdn.net/Jesse_Mx/article/details/78680055
CNN目标检测(三):SSD详解
https://blog.csdn.net/a8039974/article/details/77592395
caffe-MobileNet-ssd环境搭建及训练自己的数据集模型
https://blog.csdn.net/cs_fang_dn/article/details/78790790
YOLO 算法框架的使用一(初级)
https://www.cnblogs.com/minsons/p/7905473.html
从YOLOv1到YOLOv3,目标检测的进化之路
https://blog.csdn.net/guleileo/article/details/80581858
[目标检测]YOLO原理
https://www.cnblogs.com/fariver/p/7446921.html
五种CNN模型的尺寸,计算量和参数数量对比详解
http://www.elecfans.com/d/598165.html
|