caffe Segnet 语义分割(一)
2018.02.26 learning journal
by 赵木木
Segnet论文下载
1. 编译slam3d出错记录
- Qt 编译器可以清楚的查到错误所在位置;
在Issues中查看
【error1】:
could not convert‘Eigen::PlainObject...
'Eigen::Map...PCL_ADD_POINT4D;....
【error2】:
/usr/local/include/eigen3/Eigen/src/Core/arch/CUDA/Half.h:48: error: using typedef-name '__half' after 'struct'struct __half {^
解决方案
将已有的第三方库eigen-3-2-10安装
cmake..
make
sudo make install
也就是使用slam3d自带的eigen的库,就不会报错。
2. 学习segnet-caffe
学习链接:
Segnet分割网络caffe教程
对照Segnet-Tutorial文件内容
caffe-segnet官方英文教程学习
github上有开源的两套源码,其中caffe-segnet是支持cudnn v2 版本;
另有支持cudnn v5版本的:源码地址为 https://github.com/TimoSaemann/caffe-segnet-cudnn5
已经下载好源码至本地并安装。
另有贝叶斯Segnet和Segnet教程:SegNet and Bayesian SegNet Tutorial
说明:
This repository contains all the files for you to complete the ‘Getting Started with SegNet’ and the ‘Bayesian SegNet’ tutorials here: http://mi.eng.cam.ac.uk/projects/segnet/tutorial.html
Please see this link for detailed instructions.
教程
2.1 Setting Up Caffe and the Dataset
请注意,本教程假设您将所有文件下载到本地的文件夹/ SegNet /中。如果您选择使用不同的目录,请在适当的地方修改命令。
Segnet 从监督学习来预测像素点的分类标签,因此我们需要一个具有相应 ground truth 标签的输入图像的数据集,标签图像必须是单通道,每个像素都标有其类别。在本教程中,我们将使用CamVid数据集,其中包含367个训练和233个道路场景的测试图像。该数据集是在英国剑桥附近拍摄的,包含白天和黄昏场景。我们将使用图像大小为360 x 480的11类版本。从 Github-Segnet教程 下载SegNet所需的这个数据集以及本教程所需的其余文件。
文件组织如下:
/SegNet/CamVid/test/testannot/train/trainannot/test.txttrain.txtModels/# SegNet and SegNet-Basic model files for training and testingScripts/compute_bn_statistics.pytest_segmentation_camvid.pycaffe-segnet/# caffe implementation
我们现在需要修改 CamVid/train.txt和 CamVid/test.txt ,以便SegNet知道在哪里找到数据。 SegNet需要一个由空白分隔的路径的图像文件(.jpg或.png)和相应的标签图像(.png)。例如:
/path/to/image1.png /another/path/to/label1.png /path/to/image2.png /path/label2.png ...
请在文本编辑器中打开这两个文件,并使用查找和替换工具将 ‘/ SegNet / …’ 更改为数据的绝对路径。
2.2 Training SegNet
下一步是建立一个训练模型。您可以使用SegNet或SegNet basic进行训练。首先,打开模型文件Models/segnet_train.prototxt
和推理模型文件 Models/segnet_inference.prototxt
。您将需要修改所有模型数据层中的数据输入的源代码行,将其替换为本地电脑中到您的数据文件的绝对目录。根据您的GPU大小,您可能需要修改培训模型中的批量大小。在12GB的GPU上,如NVIDIA K40或Titan X,您应该可以分别使用10或6的批量大小来处理SegNet-Basic或SegNet。如果你有一个更小的GPU,那么尽量使它尽可能大,然而即使是低至2或3的批量也应该训练得好。其次,请打开解算器文件Models/segnet_solver.prototxt
并更改两行; net和snapshot_prefix目录应该将目录与您的数据匹配。
原来的caffe训练参数:有‘#’注释的地方修改为绝对路径
caffe训练参数详解:https://www.cnblogs.com/denny402/p/5074049.html
对SegNet-Basic模型,推理模型和解算器原型文件重复以上步骤。创建一个文件夹以存储您的训练权重和解算器详细信息:mkdir /SegNet/Models/Training
我们现在准备好培训SegNet!打开一个终端并发出这些命令:
./SegNet/caffe-segnet/build/tools/caffe train -gpu 0 -solver /SegNet/Models/segnet_solver.prototxt # This will begin training SegNet on GPU 0
./SegNet/caffe-segnet/build/tools/caffe train -gpu 0 -solver /SegNet/Models/segnet_basic_solver.prototxt # This will begin training SegNet-Basic on GPU 0
./SegNet/caffe-segnet/build/tools/caffe train -gpu 0 -solver /SegNet/Models/segnet_solver.prototxt -weights /SegNet/Models/VGG_ILSVRC_16_layers.caffemodel # This will begin training SegNet on GPU 0 with a pretrained encoder
第三个命令初始化来自在ImageNet上训练的VGG模型的编码器权重。如果你想试试这个,你可以在这里 http://www.robots.ox.ac.uk/~vgg/research/very_deep/ 下载这些权重。(google chrome 浏览器打开)
对这个小数据集的培训不应该花太长时间。大约50-100个时期后,你应该看到它收敛。你应该寻找超过90%的训练准确性。一旦你对模型的汇合结果感到满意,我们现在可以对其进行测试。
2.3 Testing SegNet
首先打开脚本Scripts/compute_bn_statistics.py
和Scripts/test_segmentation_camvid.py
并将第10行更改为您的SegNet Caffe安装目录。
SegNet中的批处理规范化层根据训练期间每个小批量的均值和方差统计信息对输入特征映射进行移位。在测试时间,我们必须使用整个数据集的统计数据。为此,请使用以下命令运行脚本Scripts/compute_bn_statistics.py
。确保您将训练权重文件更改为您希望使用的权重文件。
python /Segnet/Scripts/compute_bn_statistics.py /SegNet/Models/segnet_train.prototxt /SegNet/Models/Training/segnet_iter_10000.caffemodel /Segnet/Models/Inference/ # compute BN statistics for SegNet
python /Segnet/Scripts/compute_bn_statistics.py /SegNet/Models/segnet_basic_train.prototxt /SegNet/Models/Training/segnet_basic_iter_10000.caffemodel /Segnet/Models/Inference/ # compute BN statistics for SegNet-Basic
该脚本将输出目录中的最终测试权重保存为/SegNet/Models/Inference/test_weights.caffemodel
请将它们重命名为更具描述性的内容。
现在我们可以查看SegNet的输出了!
test_segmentation_camvid.py
运行命令将显示每个测试图像的输入图像,地面实况和分割预测。尝试使用这些命令,使用正确的推理统计信息将权重文件更改为刚才处理的权重文件:
python /SegNet/Scripts/test_segmentation_camvid.py --model /SegNet/Models/segnet_inference.prototxt --weights /SegNet/Models/Inference/test_weights.caffemodel --iter 233 # Test SegNet
python /SegNet/Scripts/test_segmentation_camvid.py --model /SegNet/Models/segnet_basic_inference.prototxt --weights /SegNet/Models/Inference/test_weights.caffemodel --iter 233 # Test SegNetBasic
2.4 Results
下表显示了我们在CamVid数据集上使用SegNet获得的性能。如果你已经正确地遵循了本教程,你应该能够获得前两个结果。最终的结果是通过公开可用的数据集对3.5K额外的标记图像进行了训练,请参阅该论文获取更多详细信息。 webdemo已经接受了未公开的更多数据和额外的类别(道路标记)的训练。
输出结果图示:
以下是记录网页浏览
(1)针对语义地图的一些资料索引:
SLAM++ 2.3 https://sourceforge.net/p/slam-plus-plus/wiki/Home/
(2)KITTI数据集
http://www.cvlibs.net/datasets/kitti/eval_odometry.php
(3)Awesome SLAM
github SLAM 资源
(4)SLAMCN 网址: http://www.slamcn.org/index.php/%E9%A6%96%E9%A1%B5
PPT文献:Incorporating Manhattan and Piecewise Planar Priors in RGB Monocular SLAM
【http://webdiis.unizar.es/~neira/SLAM/SLAM_5_Trends.pdf】
(5)2D-3D Semantic
【https://github.com/alexsax/2D-3D-Semantics】
【有关2D-3D-Semantics Data的github】
(6)【https://arxiv.org/pdf/1703.07334.pdf】
Pop-up SLAM: Semantic Monocular Plane SLAM for Low-texture Environments
论文文献
(7)【http://www.cnblogs.com/denny402/p/5679037.html】
caffe的python接口学习(1):生成配置文件
caffe Segnet 语义分割(一)相关推荐
- SegNet 语义分割网络以及其变体 基于贝叶斯后验推断的 SegNet
HomePage: http://mi.eng.cam.ac.uk/projects/segnet/ SegNet Paper: https://www.computer.org/csdl/trans ...
- Pytorch:图像语义分割-FCN, U-Net, SegNet, 预训练网络
Pytorch: 图像语义分割-FCN, U-Net, SegNet, 预训练网络 Copyright: Jingmin Wei, Pattern Recognition and Intelligen ...
- 语义分割网络-BiSenet
Sementic Segmentation-BiSenet 语义分割网络-BiSenet(Sementic Segmentation-BiSenet) 介绍 思路来源 关于感受野 关于空间信息 网络框 ...
- 【Deep Learning笔记】语义分割网络-Segnet的探索
文章目录 1 简介 2 网络框架 3 Encoder 4 Pooling&Upsampling(decoder): 5 Batch Normlization 6 Loss Function 7 ...
- DL之SegNet:SegNet图像分割/语义分割算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之SegNet:SegNet图像分割/语义分割算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 导读 基于CNN的神经网络SegNet算法可进行高精度地识别行驶环境. 目录 SegN ...
- 语义分割 | segnet 制作自己的数据,如何训练,如何测试,如何评价
本博文介绍如何手把手制作自己的数据集,并使用SegNet网络进行语义分割,如何训练,如何测试自己的分割模型. --------------------------------------------- ...
- 制作自己的segnet数据集_语义分割【论文解读】经典网络SegNet 值得仔细反复阅读...
摘要: 提出了一种新颖而实用的深度全卷积神经网络结构用于语义像素分割称为SegNet.这个核心的可训练分割引擎包括一个编码器网络,一个相应的解码器网络,以及一个像素级的分类层.编码器网络的架构与VGG ...
- 【语义分割】SegNet
论文:SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation SegNet是2016年提出旨在 ...
- 一文概览主要语义分割网络:FCN,SegNet,U-Net...
本文来自 CSDN 网站,译者蓝三金 图像的语义分割是将输入图像中的每个像素分配一个语义类别,以得到像素化的密集分类.虽然自 2007 年以来,语义分割/场景解析一直是计算机视觉社区的一部分,但与计算 ...
最新文章
- UVa133 - The Dole Queue
- 【转载】如果让我重做一次研究生--王泛森院士
- python项目实战_2个Python入门级的实战项目
- typora及vue主题安装
- Nginx ab压力测试
- java安全权限配置_使用Spring安全表达式控制系统功能访问权限问题
- 网络知识:秒懂你家的网络连接方式
- 【转】开源的C# websocket-sharp组件解析
- LeetCode 1230. 抛掷硬币(DP)
- 数据链路层的一些总结
- 2018年最新Spring Boot视频教程附代码笔记资料(50G)
- php数组去重复数据的小例子
- mysql 编辑 条目,mysql函数:将旧条目旋转到归档表
- 天才基本法中预测犯罪发生地点的数学建模真的可以为所欲为【全国大学生数学建模竞赛】
- macbook运行移动硬盘中windows及bootcamp下载出错问题的解决
- CAS5.3版本对接Jenkins单点登录
- Git Windows下配置Merge工具DiffMerge
- Python去重操作及相关函数
- vmware linux top si高以及网卡队列、软负载相关优化
- 编译MTK系统源码时checking Env失败的解决方法
热门文章
- 计算机组装bios的密码破解,主板BIOS密码忘记了怎么清除?主板bios密码忘记了扣电池解决方法...
- android o 结构光流程,【OPPOFindX评测】O-Face 3D结构光:最科幻的交互方式-中关村在线...
- vip结尾的域名到期查询,多久会被删除?
- Uni-app 课程详情页 获取课程详情 + 收藏 + 加入购物车
- ElasticSearch十四--ES-index template 和 aggregation聚合分析
- 微软大神的python语言入门_你是如何自学 Python 的?
- swagger接口文档出现的空文档问题
- Java计算机毕业设计大学生科研管理系统的设计与实现源码+系统+数据库+lw文档
- 忙里偷闲 - 应该较真吗
- 十三水牌型 图片_十三水,得玩法到底有多少种!