使用电脑:lenovo-Y485P
使用系统:Ubuntu14.04
香蕉派型号:banana pi M2+
使用系统镜像:2016-11-29-ubuntu-16.04.1-mate-desktop-preview3-bpi-m2u-sd-emmc
Opencv3.2介绍
Opencv3.2是opencv最新的稳定版本,于2016.12.23发布。除了修复BUG,主要的更新之一是在opencv_contrib中大大改进和加速dnn模块:
1、许多新层,包括反卷积,LSTM等。
2、支持语义分段和SSD网络与样本。
3、TensorFlow导入程序+运行Inception net的示例。
除此之外,还包括支持更多图片格式和相机后端,互动相机校准应用程序,支持最新操作系统,包括Ubuntu 16.04 LTS和OSX 10.12,性能优化等。(详见http://opencv.org/opencv-3-2.html)
SSD相关
SSD全称Single Shot MultiBox Detector,是今年ECCV 2016 的一篇文章,是UNC Chapel Hill(北卡罗来纳大学教堂山分校)的Wei Liu大神的新作。在比赛数据集上的检测速度和准确率上相当亮眼。
论文代码:https://github.com/weiliu89/caffe/tree/ssd
Tensorflow相关
TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,可被用于语音识别或图像识别等多项机器深度学习领域,对2011年开发的深度学习基础架构DistBelief进行了各方面的改进。在github上完全开源,是2016年github上最火的开源项目之一,更新速度快,目前已支持windows。
Demo运行配置
(一)SSDdemo
1、找到相关文件
在PathtoContrib/opencv_contrib-3.2.0/modules/dnn/samples中复制文件ssd_object_detection.cpp(程序源码),rgb.jpg(测试用图)到测试文件夹中,一会儿使用cmake进行编译。另外,从github上下载已经训练好的模型到电脑上,本人配置的时候使用的是VGG_VOC0712Plus_SSD_300x300_iter_240000.caffemodel。
下载链接:http://www.cs.unc.edu/~wliu/projects/SSD/models_VGGNet_VOC0712Plus_SSD_300x300.tar.gz
其它模型下载地址:https://github.com/weiliu89/caffe/tree/ssd#models
下载,解压,将上面的模型和文件deploy.prototxt拷贝到测试文件夹内。
2、修改prototxt
如果对deploy.prototxt不进行修改,直接进入下一步的话会出现下图问题。
出现该问题的原因是,opencv将该demo收入时使用的caffe版本与论文作者训练该模型时使用的caffe版本不同。在语法上有调整或是增加,当前的caffe.NetParameter无法识别其中部分语句。
修改方法:
参考PathtoContrib/opencv_contrib-3.2.0/modules/dnn/samples中的SSD.prototxt示例:VGG_VOC0712_SSD_300x300_iter_60000.prototxt对deploy.prototxt进行修改。
如果使用上面链接下载来的模型,修改以下部分。
1、norm_param——>normalize_bbox_param
2、Normalize——>NormalizeBBox
3、去掉所有step:xxx(显式设置学习率)
4、在结尾删去保存输出结果相关部分。
使用其他模型,修改方法类似。
3、正式运行
打开ssd_object_detection.cpp。在这里使用了类CommandLineParser,将params修改如下。(实际为添加默认参数)
(参考阅读:http://blog.csdn.net/yzhang6_10/article/details/51074305)
修改前
修改后(香蕉派ssh模式)
其中min_confidence为最小置信率,检测目标时置信率超过该值才打印出来(认为检测到有效目标)。使用cmake对目标程序ssd_object_detection.cpp进行编译,运行测试结果。
CMakeLists.txt文件中的具体内容如下( 注:这个文件你可以到你的OpenCV源代码解压出来的文件夹下的/samples/cpp/example_cmake/文件夹下拷过来,然后再做修改 )。
PROJECT(OpenCV_Example) #这是建立一个工程项目
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
#这是对CMake工具最低版本要求
#这里我们要检查下我们的CMake工具的版本信息
#我们可以使用命令“cmake --version”查看
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)
FIND_PACKAGE( OpenCV REQUIRED )
#cmake用来查找opencv包
ADD_EXECUTABLE(OpenCV_Example Image_show.c)
#这里括号里面的两个参数分别是工程项目名和我们要编译文件名,注意空格
TARGET_LINK_LIBRARIES(OpenCV_Example ${OpenCV_LIBS})
#链接到OpenCV库
#只要更改前面第一个参数为我们的文件名即可
配置成功效果图。(香蕉派ssh模式下关闭了图形显示)
参考网址:
http://www.tuicool.com/articles/ieuMRnr(在linux环境下编译运行OpenCV程序的两种方法)
(二)TensorFlowdemo
Tensorflow的demo程序为调用谷歌训练好的模型inception对单张图片进行识别,过程与上面的demo类似。
1、找到相关文件
在PathtoContrib/opencv_contrib-3.2.0/modules/dnn/samples中复制文件tf_inception.cpp(程序源码),space_shuttle.jpg(测试用图)到测试文件夹中,一会儿使用cmake进行编译。根据demo中的链接地址下载已训练好的模型,下载,解压,将文件tensorflow_inception_graph.pb(模型)和imagenet_comp_graph_label_strings.txt(分类名单)拷入同一文件夹。
下载链接:
https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip
2、正式运行
Demo里同样使用了类CommandLineParser读取程序输入参数。这里可在调用时直接在外部附上文件,也可以在内部设置。这里使用的是在程序内部设置。打开程序,在keys中添加默认参数即可,类似上面。完成后使用cmake进行编译。
配置成功效果图(香蕉派实现)。
两个demo一起运行。(电脑上)