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 Stream函数式编程案例图文详解

    导读 作者计划把Java Stream写成一个系列的文章,本文只是其中一节.更多内容期待您关注我的号! 一.什么是Java Stream? Java Stream函数式编程接口最初是在Java 8中引 ...

  2. Vue学习笔记和代码记录

    ## 安装 * 直接引入链接:建议初学者使用:* 通过node.js的NPM安装Vue:* 通过node.js的NPM安装Vue-cli脚手架(推荐安装方式): ## 基础 ### 数据类型 * 字符 ...

  3. 浅谈微服务架构与.Net Core

    微服务(microservice)这个概念是2012年出现的,2014年3月Martin Fowler在他的个人网站(https://martinfowler.com/articles/microse ...

  4. 楼上请让路 RoarCTF2019 Writeup

    Misc 签到题 RoarCTF{签到!!!} 黄金六年 文件尾部有一段base64,解码为16进制可以看到是一个压缩包 打开压缩包需要密码 使用pr抽帧 可以看到部分帧中有二维码,依次扫码即可得到k ...

  5. 中国大学MOOC-数据结构与算法实战 P6 括号匹配 (15 分)

    检查一段C语言代码的小括号( ). 中括号 [ ] 和大括号{ } 是否匹配. 输入格式: 在一行中输入一段C语言代码,长度不超过1000个字符(行末以换行符结束). 输出格式: 第一行输出左括号的数 ...

  6. SpringBoot系列教程之Bean之指定初始化顺序的若干姿势

    上一篇博文介绍了@Order注解的常见错误理解,它并不能指定 bean 的加载顺序,那么问题来了,如果我需要指定 bean 的加载顺序,那应该怎么办呢? 本文将介绍几种可行的方式来控制 bean 之间 ...

  7. Redis(二)数据结构与键管理

    一.基础知识 1.全局命令 keys *   :查看所有键 dbsize:返回当前数据库中键的总数 exists key:检查键是否存在 del key ... :删除键 expire key sec ...

  8. 关于explorer.exe文件或目录已损坏的问题

    2019-5-8 今天由于断电导致电脑异常关机,就出现了开机后屏幕是黑的,只显示鼠标,然后会有警告:explorer.exe目录或文件已损坏. 网上也有各种解决办法,但是都没有清楚,导致捣鼓了半天,首 ...

  9. SOLID原则、设计模式适用于Python语言吗

    在阅读 clean architecture的过程中,会发现作者经常提到recompile redeploy,这些术语看起来都跟静态类型语言有关,比如Java.C++.C#.而在我经常使用的pytho ...

  10. 回话技术-Cookie-记录上一次访问时间

    效果: 第一次访问: 再次访问: <%@ page import="java.util.Date" %> <%@ page import="java.t ...