运行官网tensorflow的deeplabv3代码

版权所有,翻版必究。https://blog.csdn.net/fightingxyz/article/details/105488802#comments_13092868

环境:win10,Anaconda3,tensorflow1.15.0,tensorflow-gpu1.14.0,pycharm。

官网代码:可以从https://github.com/tensorflow/models下载model_master。下载解压后:

运行官网tensorflow的deeplabv3代码_第1张图片

在research中寻找deeplab代码:

运行官网tensorflow的deeplabv3代码_第2张图片

第一步:

数据集准备:使用网上的数据。这里使用的是VOCdevkit打开是VOC2012.里面有五个文件。

http://host.robots.ox.ac.uk/pascal/VOC/voc2012/index.html#devkit(官网)

VOC2012数据集下载地址:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar(本文使用)

分别为下面文件:

运行官网tensorflow的deeplabv3代码_第3张图片

网上即可下载:大约1.9G。

文件放置的位置为deeplab文件下datasets文件中。然后建立了一个pascal_voc_seg文件夹。将数据放在这个文件夹中。

运行官网tensorflow的deeplabv3代码_第4张图片

可建立可不建立。因为官网代码里面有个地方默认设置了所以我不想改地址,就加了一个pascal_voc_seg文件夹。

运行官网tensorflow的deeplabv3代码_第5张图片

本来没有exp文件和tfrecord文件。本文是进行后面步骤才有的。因为后面添加了生成tfrecord格式的文件夹。然后exp是代码默认生成的后续存放结果图和标签的地方。因为我又重新建立位置放置了,所以不用管。

第二步:

准备要一个预训练模型:在此采用的是xception65_coco_voc_trainval(http://download.tensorflow.org/models/deeplabv3_pascal_trainval_2018_01_04.tar.gz)

得到:

文件的位置,放在deeplab下即可。虽然位置会有不同,但是没什么影响,看你自己了。下面是我的布局。

运行官网tensorflow的deeplabv3代码_第6张图片

第三步:

数据的生成:在deeplab提供了download_and_convert_voc2012.sh脚本,进行下载和生成相应的TFRecord,但是在Windows中需要自己进行改进。找到./deeplab/datasets中的remove_gt_colormap.py.运行。这就h是为什么建立一个pascal_vog_seg文件夹的目的。不用改这个地方。大约在30行左右。运行官网tensorflow的deeplabv3代码_第7张图片

原来的segementationclass数据样子:

运行官网tensorflow的deeplabv3代码_第8张图片

然后你的\pascal_voc_seg\VOCdevkit\VOC2012中会增加一个SegmentationClassRaw文件夹。其中的图如下所示:

运行官网tensorflow的deeplabv3代码_第9张图片

第四步:

在pascal_voc_seg目录下,建立tfrecord文件夹,用来保存输出的tfrecord文件。

运行官网tensorflow的deeplabv3代码_第10张图片

需要修改的地方(主要也是数据的存放输出位置)为:

运行官网tensorflow的deeplabv3代码_第11张图片

特别重要(因为你下载的图片为jpg格式,如果不更改就会出现问题。博主当时也是找了好久。数据明明存在,确实读不出来,(lll¬ω¬)):

(这个参数在build_data中),如果你的输入图像时jpg格式就将这里 改为jpg。如果时png格式就将image_format参数改为png格式。然后运行程序 build_voc2012_data.py。

你会发现,在你的保存路径./pascal_vog_seg/tfrecord中得到结果:

运行官网tensorflow的deeplabv3代码_第12张图片

第五步:

开始训练:运行train.py文件。不过需要进行一些配置。

总图(网络找到的):

运行官网tensorflow的deeplabv3代码_第13张图片

详解:

(1)存放模型的位置:

(2)训练次数,看你需要了。

(3)批次。和你使用的机器有关,内存不多的话将它改为最小值,即train_batch_size=1

(4)fine_tune_batch_norm,因为train_batch_size=1,所以将它改为False

(5)源码给的是513,这需要比较大的内存,设备不够,减小。网上有几篇文章提到需要大于300,暂时没有找到出处。

(6)atrous_rates参数的设置。可以从官网中看出,还需要设置xception_65.运行官网tensorflow的deeplabv3代码_第14张图片

(7)model_variant设置为xception_65.(此参数在common中)

(8)同样common.py文件中还需要添加'decoder_output_stride',设置为4,运行的时候发现需要设置为string类型。

运行官网tensorflow的deeplabv3代码_第15张图片

(9)'output_stride',设置为16

(10)datasets就是存放数据的文件。然后train_split设置为train。dataset_dir设置为之前存放tfrecord数据的位置。

运行官网tensorflow的deeplabv3代码_第16张图片

(11)预训练模型的位置。即之前下载的那个数据。

参数设置完成之后开始运行train.py。这是我的保存路径下\deeplab\model_save的数据。

运行官网tensorflow的deeplabv3代码_第17张图片

第六步:

运行eval.py文件。也需要配置一些参数。

总图:

运行官网tensorflow的deeplabv3代码_第18张图片

有些参数不在说明,上诉应该很清楚了。不懂请百度谢谢。eval_splt和train_split一样只是一个训练一个验证而已。将对应处的改为val.

运行官网tensorflow的deeplabv3代码_第19张图片

运行官网tensorflow的deeplabv3代码_第20张图片

注意这里使用的是原始数据大小。也可以换做其他设置,可以试试。

需要注意的是:eval.py在运行行会一直检测等待。怎么解决呢?有人说这样做:将你的代码中的

运行官网tensorflow的deeplabv3代码_第21张图片

改为:

运行官网tensorflow的deeplabv3代码_第22张图片

但是我测试无效,不过也可以尝试,没准你们的欧克了呢。我将此处改为(目的就是为了执行一次,也需要时间等待):

运行官网tensorflow的deeplabv3代码_第23张图片

结果为(先不分析结果,后续博客再说):

运行官网tensorflow的deeplabv3代码_第24张图片

第七步:

和eval.py类似,vis.py在运行时会一直检测等待,需要修改vis.py。先说参数的配置(话说第六步可进行可不进行)。

总图:

运行官网tensorflow的deeplabv3代码_第25张图片

仍然是对一些参数进行修改,相应你已经轻车熟路了!

运行官网tensorflow的deeplabv3代码_第26张图片

运行官网tensorflow的deeplabv3代码_第27张图片

想不想你的结果保存并显示出来,那就把false改为True吧!(运行后你的结果会出现在你设置的文件夹)

运行官网tensorflow的deeplabv3代码_第28张图片

看我的保存路径!出现两个文件夹!

运行官网tensorflow的deeplabv3代码_第29张图片

如果没有看接下来一段那你的程序会停止不动哦!哈哈哈哈!怎么修改呢?查看程序不动说明有些地方没有进行。我的修改简单粗暴:

运行官网tensorflow的deeplabv3代码_第30张图片

找到这个地方。还有下面这个地方!

首先把下面的替换为:

然后上面那个,去掉for语句,直接将值赋值,然后运行!:

运行官网tensorflow的deeplabv3代码_第31张图片

这句要注释!!!!(新增)

!!!!

结果:

运行官网tensorflow的deeplabv3代码_第32张图片

运行官网tensorflow的deeplabv3代码_第33张图片

后续发现问题会继续添加。不喜勿喷!!!后面研究用自己的数据训练。以及该变这个并不太还好的测试程序。不适合自己的习惯!!!

补充:

Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED

解决方法:在程序中添加以下语句即可。

import tensorflow as tf

 

config = tf.ConfigProto(gpu_options=tf.GPUOptions(allow_growth=True))

sess = tf.Session(config=config)

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(深度学习,tensorflow,计算机视觉,tensorflow)