Ubuntu14.04中配置运行DeepLabV2

本文详细介绍了如何在Ubuntu14.04上配置和运行DeepLabV2,包括安装依赖库、编译 Deeplab 版本的 Caffe、数据集准备、修改运行脚本等步骤,以及遇到的protobuf和CUDA版本问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  DeepLabV2是由Liang-Chieh Chen等提出的一个图像语义分割网络结构,其主要的创新点在于提出了Atrous convolution(带孔的卷积)结构,从而在增大感受野的同时防止了数据的冗余,提高了逐像素点分类精度,而在最顶层使用的全连接条件随机场(CRF)则精细化了分割边界,现在已经有很多的新的网络基于DeepLab提出.

  原文地址: https://arxiv.org/abs/1606.00915


  原作者给出了两个版本的DeepLab,一个是shell版本的 http://liangchiehchen.com/projects/DeepLab.html

一个是python版本的:https://github.com/TheLegendAli/DeepLab-Context

  python版的好坑,一直是protobuf的版本不对,果断换原作者给的shell.


  由于官方给的.sh文件的下载地址下不了,所以我通过clonegithub上一个人的版本得到:

  git clone https://github.com/xmojiao/deeplab_v2

  接下来进入正题,安装和运行的步骤主要包含下面几点:

一.安装相关依赖库

matio: sudo apt-get install libmatio-dev


wget: sudo pip install wget


二.编译deeplab版本的caffe

https://bitbucket.org/aquariusjay/deeplab-public-ver2/overview下载官方给出的源码,然后解压到文件夹aquariusjay-deeplab/code,在源码中像安装BVLC版本的caffe一样复制Makefile.config文件并进行修改,接着依次运行:

make all -j8

make test

make runtest -j8

make pycaffe

最后添加deeplab版本caffepython路径到环境变量中.

source~/.bashrc 生效

三.添加相应的模型文件和prototxt文件

在终端运行(默认你的deeplab源码是clonedeeplab这个目录下):

 mkdir -p ~/deeplab/exper/voc12/config/deeplab_largeFOV

mkdir -p ~/deeplab/exper/voc12/features/labels

mkdir -p ~/deeplab/exper/voc12/features2/labels

mkdir -p ~/deeplab/exper/voc12/list

mkdir -p ~/deeplab/exper/voc12/log

mkdir -p ~/deeplab/exper/voc12/model/deeplab_largeFOV

mkdir -p ~/deeplab/exper/voc12/res

创建好目录之后,deeplab官网(https://bitbucket.org/aquariusjay/deeplab-public-ver2/overview)上下载:

(1).sh文件:

https://ucla.box.com/s/4grlj8yoodv95936uybukjh5m0tdzvrf

(2)imagelist文件(.txt):

https://ucla.box.com/s/rd9z2xvwsfpksi7mi08i2xqrj7ab4keb

(3)模型文件及prototxt文件:

http://liangchiehchen.com/projects/DeepLabv2_vgg.html

(这个是deeplab所有官方的模型:http://liangchiehchen.com/projects/DeepLab_Models.html)


PS:一般来(1)(2)链接都很难打开,而网上分享的那些文件都需要积分或者什么的,所以我推荐大家用以下方法获取:

首先clonegithub上这份代码:git clone https://github.com/xmojiao/deeplab_v2

然后在voc2012中将config,list,model文件夹以及根目录中的.py,.sh的文件复制到你新建的~/deeplab/exper/voc12目录相应文件夹中.



四.数据集的准备

按照https://github.com/xmojiao/deeplab_v2/tree/master/voc2012的第2步将benchmarkvoc2010两个数据集融合完成.



五.修改run_pascal.sh文件

修改的地方有下面几个:

(1)

 #ROOT_DIR=/home/dl/DL_dataset

ROOT_DIR=/home/irsa/deeplab/dataset 这个ROOT_DIR为你存放数据的根目录(它的用途就是得到后面的DATA_ROOT,这个目录是存放数据集的直接目录)

(2)

 #CAFFE_DIR=../deeplab-public-ver2

CAFFE_DIR=/home/irsa/deeplab 这个是存放deeplab版本caffe的目录,也就是你在前面编译caffe时,运行make-j8的目录.

(3)

 #EXP=.

EXP=/home/irsa/deeplab/exper/voc12



if[ "${EXP}" = "/home/irsa/deeplab/exper/voc12" ];then

NUM_LABELS=21

DATA_ROOT=${ROOT_DIR}/VOC_aug/dataset/

else

NUM_LABELS=0

echo"Wrong exp name"

fi

这里EXP为你前面新建的voc12目录,这个目录下存放着log,config等文件夹,都是训练的参数设置,测试训练数据集的txt,预训练模型等,而定义这个目录之后需要做一个判断,如果是要进行voc数据集的训练,则你还要将if后面判断语句中的判断量改了,这样才能使用DATA_ROOT中的NUM_LABELS类的数据进行训练.



PS:
这里的DATA_ROOTEXP目录很重要,但是所有读取数据的操作都是通过data数据层来获得的,Deeplab中使用的数据输入层为ImageSegDataLayer.

(4)

## Run



RUN_TRAIN=1 ## Training #1 (on train_aug)

RUN_TEST=0 ## Test #1 specification (on val or test)

RUN_TRAIN2=0 ## Training #2 (finetune on trainval_aug)

RUN_TEST2=0 ## Test #2 on official test set

通过修改这四个参数,用于控制是否进行训练和测试,以及使用那个数据集进行训练和测试.


六.进行训练

在终端中cdEXP目录下,然后运行以下命令:

sh run_pascal.sh 2>&1|tee train.log

七.进行测试

run_pascal.sh修改

RUN_TRAIN=0 ## Training #1 (on train_aug)

RUN_TEST=1 ## Test #1 specification (on val or test)

在终端中cdEXP目录下,然后运行以下命令

sh run_pascal.sh 2>&1|tee test.log


问题:


1.DeepLab版本的caffe编译时报错:fatalerror: google/protobuf/arena.h: 没有那个文件或目录


解决方法:卸载当前版本的protobuf,安装2.6.1版本的protobuf

condainstall protobuf=2.6.1

这样并没有解决问题,而且如果装了anaconda,那么protobuf将会有两个版本的,可以通过以下的命令查看:

protoc–version

sudoprotoc –version

一般使用condainstall或者通过pip安装是安装在anaconda环境中的,而不是安装在sudo下的.'

更新sudoprotobuf的版本可以参考https://blog.youkuaiyun.com/blue_it/article/details/53996216


终于解决了!!参照https://blog.youkuaiyun.com/CDownLoad_ZXL/article/details/79807064

anacondapath.bashrc中先注释掉,然后在重新打开终端(这个很重要,如果没有重新打开,那环境变量将不会生效).主要原因是anacondaprotobuf的版本和sudo下的protobuf版本不匹配导致的,这样注释掉anaconda的路径则会强制让其在默认路径下找,从而不会出现因为版本原因的错误.



2.cudnn.hpp:127:41:error: too few arguments to function ‘cudnnStatus_tcudnnSetPooling2dDescriptor


解决办法:caffe版本太低,cudnn的版本太高了.有两种方法修改:

第一,直接换最新版的

第二,按照http://www.mamicode.com/info-detail-2236530.html来替换相应文件



3../include/caffe/common.cuh(9):error: function "atomicAdd(double *, double)" has alreadybeen defined


解决方法:https://blog.youkuaiyun.com/Hello_Wendy/article/details/72765160

原因是cuda版本不匹配(一般用cuda8.0的时候会出现这种问题)



4.Errorparsing text-format caffe.NetParameter: 16:15: Message type"caffe.LayerParameter" has no field named "input_param".

:这是在运行infer.py调用deploy.prototxt时出现的错误


解决方法:DeepLab版本的caffe中添加Input_layer.hpp,并重新编译caffe\



5.make:没有什么可以做的为 `all'


解决方法:make clean 这应该是你在删除编译结果时只是删除了build目录下的所有东西,但是caffe编译的东西除了build下的之外,其他如python目录下也有编译结果,这样使得删除不干净,导致系统认为已经有编译结果了,不用再编译了.



参考文献:

https://bitbucket.org/aquariusjay/deeplab-public-ver2/overview官方教程

https://github.com/xmojiao/deeplab_v2/tree/master/voc2012 主要的依据

https://blog.youkuaiyun.com/Xmo_jiao/article/details/77488180

https://blog.youkuaiyun.com/Xmo_jiao/article/details/77897109


NBJ原创,不得转载!











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值