LINUX-Opencv3.2SSDdemo&&TensorFlowdemo运行配置

来源:互联网 发布:朱敏希28分钟 知乎 编辑:程序博客网 时间:2024/05/16 05:03

使用电脑:lenovo-Y485P

使用系统:Ubuntu14.04

香蕉派型号:banana pi M2+

使用系统镜像:2016-11-29-ubuntu-16.04.1-mate-desktop-preview3-bpi-m2u-sd-emmc

 

Opencv3.2介绍

Opencv3.2opencv最新的稳定版本,于2016.12.23发布。除了修复BUG,主要的更新之一是在opencv_contrib中大大改进和加速dnn模块:

1、许多新层,包括反卷积,LSTM等。

2、支持语义分段和SSD网络与样本。

3TensorFlow导入程序+运行Inception net的示例。

  除此之外,还包括支持更多图片格式和相机后端,互动相机校准应用程序,支持最新操作系统,包括Ubuntu 16.04 LTSOSX 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上完全开源,是2016github上最火的开源项目之一,更新速度快,目前已支持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.prototxtdeploy.prototxt进行修改。

如果使用上面链接下载来的模型,修改以下部分。

1norm_param——>normalize_bbox_param

2Normalize——>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

Tensorflowdemo程序为调用谷歌训练好的模型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一起运行。(电脑上)



0 0