Abstract

安装好Segnet并使用Python进行训练和测试之后,考虑项目的应用,需要在C++的工程环境下进行继续开发,所以这里的主要内容是用C++建立工程,使用相应的数据集和权重参数文件进行测试。


Caffe本身就是用C++开发的,所以也提供了相应的C++接口。作为简单的测试和学习,这里采用开源代码里的SegNet_with_C++进行测试,主要熟悉相关流程。在SegNet的目录下,examples/SegNet_with_C++里包含test_segmentation.cpp。可以使用该文件,建立C++工程。下面是相应步骤。

  1. 建立一个新的文件夹MySegNet,内部再建立src文件夹,将上述cpp文件copy到src文件夹里。同时将caffe里src下的其他cpp按源目录结构拷贝至此src下。
  2. 对应的include文件夹也拷贝到MySegNet下。
  3. 新建一个build文件夹。
  4. 新建一个CMakeLists.txt。按以下编辑相应的内容。
    CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
    PROJECT(MySegnet)
    SET(CMAKE_BUILD_TYPE Debug)
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -march=native -O3 -pthread")
    set(build_libraries
    ${Caffe_LIBRARIES}
    ${OpenCV_LIBS}
    ${BOOST_LIBRARIES}
    )
    add_executable(MySegnet
    test_segmentation.cpp
    )
    INCLUDE_DIRECTORIES(/home/SegNet/MySegnet/include
    /home/SegNet/MySegnet/include/caffe
    /home/SegNet/MySegnet/include/caffe/layer
    /home/SegNet/MySegnet/include/caffe/util
    /home/SegNet/MySegnet/include/caffe/test
    /usr/local/include
    /usr/local/cuda/include
    )
    target_link_libraries(MySegnet /home/SegNet/caffe-segnet-cudnn5-master/build/lib/libcaffe.so
    /usr/local/lib/libopencv_highgui.so
    /usr/local/lib/libopencv_core.so
    /usr/local/lib/libopencv_imgproc.so
    /usr/lib/x86_64-linux-gnu/libglog.so
    /usr/lib/x86_64-linux-gnu/libboost_system.so
    /usr/local/lib/libopencv_imgcodecs.so.3.4
    )

    上面可能有多余,也可能有不够的,按需添加。注意相应路径的修改。在路径使用上,可以使用绝对路径,也可以使用相对路径。

  5. 进入build文件夹,在终端打开。
    cmake (之前CMakeLists.txt所在的路径)
    make

    make成功建立target文件就好的,有什么错误对应解决,一般是缺东西,添加相应的内容即可。

  6. 这时可以看到生成的可执行文件,直接执行是没有什么作用的,需要带参数执行。由cpp中main函数代码可知,基本的执行语句是:
    sudo ./MySegnet /home/SegNet/MySegnet/bin/segnet_sun.prototxt /home/SegNet/MySegnet/bin/segnet_sun.caffemodel /home/SegNet/MySegnet/image/cat_gray.jpg /home/SegNet/MySegnet/img/sun.png
       (exe) (model_file) (trained_file) (test_img) (colors_img)

    部分文件或图片在caffe_segnet_cudnn5-master里能找到,部分可以去Github上下载。附网址。

  7. 需要测试更多图片的,可以在main函数中做相应的修改,重新make。测试新的分割,可以自己更改网络,重新训练并使用自己的model_file和trained_file

附相关文章链接:Segnet学习

语义分割学习之SegNet的C++编译的更多相关文章

  1. 【Keras】基于SegNet和U-Net的遥感图像语义分割

    上两个月参加了个比赛,做的是对遥感高清图像做语义分割,美其名曰"天空之眼".这两周数据挖掘课期末project我们组选的课题也是遥感图像的语义分割,所以刚好又把前段时间做的成果重新 ...

  2. 比较语义分割的几种结构:FCN,UNET,SegNet,PSPNet和Deeplab

    简介 语义分割:给图像的每个像素点标注类别.通常认为这个类别与邻近像素类别有关,同时也和这个像素点归属的整体类别有关.利用图像分类的网络结构,可以利用不同层次的特征向量来满足判定需求.现有算法的主要区 ...

  3. 语义分割(semantic segmentation) 常用神经网络介绍对比-FCN SegNet U-net DeconvNet,语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类;目标检测只有两类,目标和非目标,就是在一张图片中找到并用box标注出所有的目标.

    from:https://blog.csdn.net/u012931582/article/details/70314859 2017年04月21日 14:54:10 阅读数:4369 前言 在这里, ...

  4. 语义分割:基于openCV和深度学习(二)

    语义分割:基于openCV和深度学习(二) Semantic segmentation in images with OpenCV 开始吧-打开segment.py归档并插入以下代码: Semanti ...

  5. 语义分割:基于openCV和深度学习(一)

    语义分割:基于openCV和深度学习(一) Semantic segmentation with OpenCV and deep learning 介绍如何使用OpenCV.深度学习和ENet架构执行 ...

  6. 笔记︱图像语义分割(FCN、CRF、MRF)、论文延伸(Pixel Objectness、)

    图像语义分割的意思就是机器自动分割并识别出图像中的内容,我的理解是抠图- 之前在Faster R-CNN中借用了RPN(region proposal network)选择候选框,但是仅仅是候选框,那 ...

  7. 【Semantic segmentation Overview】一文概览主要语义分割网络(转)

    文章来源:https://www.tinymind.cn/articles/410 本文来自 CSDN 网站,译者蓝三金 图像的语义分割是将输入图像中的每个像素分配一个语义类别,以得到像素化的密集分类 ...

  8. 语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

    花了点时间梳理了一下DeepLab系列的工作,主要关注每篇工作的背景和贡献,理清它们之间的联系,而实验和部分细节并没有过多介绍,请见谅. DeepLabv1 Semantic image segmen ...

  9. 使用Keras基于RCNN类模型的卫星/遥感地图图像语义分割

    遥感数据集 1. UC Merced Land-Use Data Set 图像像素大小为256*256,总包含21类场景图像,每一类有100张,共2100张. http://weegee.vision ...

随机推荐

  1. Java编程思想——第17章 容器深入研究 读书笔记(三)

    七.队列 排队,先进先出. 除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: ad ...

  2. PHP 数组转json格式,key的保存问题

    <?php $arr = [ 2, 3, ]; echo print_r($arr,true); echo json_encode($arr); echo "\n\n"; $ ...

  3. PowerShell渗透--Empire

    0x00 简介 Empire是一款针对Windows平台的,使用PowerShell脚本作为攻击载荷的渗透攻击框架代码具有从stager生成,提权到渗透维持的一系列功能,无需powershell.ex ...

  4. 彩虹战队waf测试工具(测试数据)

    安全狗 D盾 云锁 360主机卫士 奇安信 绿盟 腾讯云 百度云 阿里云 小米斗鱼 启明星辰/天融信 深信服 华为 知道创宇 长亭 360天眼

  5. sql注入100种姿势过waf(一):waf 了解

    仅供学习交流如果你有更好的思路可以一起分享,想一起学习的进我主页 首先WAF(Web Application Firewall),俗称Web应用防火墙,主要的目的实际上是用来过滤不正常或者恶意请求包, ...

  6. 【笔记】关于N-Way K-Shot 分类问题的理解

    Time: 2019年10月27日 Author:Veagau 在看讲Repitle的论文[On First-Order Meta-Learning Algorithm]时,实验环节对N-Way K- ...

  7. SpringBoot生命周期管理之停掉应用服务几种方法

    前言 在生产环境下管理Spring Boot应用的生命周期非常重要.Spring容器通过ApplicationContext处理应用服务的所有的beans的创建.初始化.销毁. 本文着重于生命周期中的 ...

  8. [洛谷P3613]睡觉困难综合症

    写码30min,调码3h的题.. 好在最后查出来了 , , n, x, y, z); 改成了 , , n, mark[x], y, z); 然后$40\rightarrow 100$ #include ...

  9. Python的Argparse模块是什么?

            近日在阅读代码的过程中遇到了Argparse模块,记得前段时间已经看了,可是过了两周现在又忘了, 看来写代码一定要钻研到底搞清楚其中原委才行,本文主要参考Python3.6系列官方文档 ...

  10. 玩转OneNET物联网平台之MQTT服务⑦ —— 远程控制LED(数量无限制)+ Android App控制 优化第一版

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...