deeplabV3+布置笔记——逢山开路,遇水搭桥篇

参考博客:DeepLab系列之V3+
下面详细描述我配置环境的步骤和踩过的坑

1-下载源代码

第一步下载源码:github
首先阅读根目录的readMe,如下截图:
在这里插入图片描述

2-运行预测Demo

下载代码首先跑demo,看看有没有问题,果然没有那么顺利,由于jupyter不便于调试,所以将代码复制到pycharm中进行调试问题
**问题1:**demo里用的是网络图片,我想用本地图片测试,这部分代码改了;
**问题2:**每次运行的时候总是要下载模型文件,占用时间。我将其4个模型都下载下来放到本地,直接加载模型路径就行了。
**问题3:**报错了一个cuda的问题,Unknown: Failed to get convolution algorithm. This is probably because cuDNN
解决方案:Unknown: Failed to get convolution algorithm. This is probably because cuDNN

3-准备自己训练模型

1-按照readme里面检查环境

外部运行

python model_test.py

**问题1:**提示我的电脑nets库没有,查了下应该是个依赖库。从github上下载把research下载下来放到项目目录里面,切换到research目录运行cmd,依次运行下面两行代码

python setup.py build
python setup.py install

然后再在pycharm里把“research/slim”通过setting里面设置为源目录,这个问题就解决了。

**问题2:**提示No module named ‘tf_slim‘
简单粗暴pip install 就搞定了,如下:

pip install tf_slim

再次运行测试程序(python model_test.py),等待了一会儿提示运行成功,如下图

在这里插入图片描述

2-使用VOC2012数据集训练模型

他是用下面的脚本进行自动安装的,由于我的是windows10系统,所以打开看看他里面代码执行原理,手工执行。

# From the tensorflow/models/research/deeplab/datasets directory.
sh download_and_convert_voc2012.sh
2.1下载VOC2012数据集

他脚本里面也有下载数据集,不过相当慢所以我是提前下载了这个数据集,然后放到“./datasets/pascal_voc_seg/VOC2012”目录

2.2提取标记的轮廓数据

切换到“D:\Project\pythonDemo\Seg\deeplab\datasets”目录,注意sh里面的变量定义,替换成你电脑的路径。命令行:
#Removing the color map in ground truth annotations…

python D:\Project\pythonDemo\Seg\deeplab\datasets\remove_gt_colormap.py --original_gt_folder="./pascal_voc_seg/VOC2012/SegmentationClass" --output_dir="./pascal_voc_seg/VOC2012/SegmentationClassRaw"

在这里插入图片描述
没有任何成功提示程序运行完了,然后检查输出路径VOC2012/SegmentationClassRaw确实存在轮廓数据,如下图:
在这里插入图片描述

2.3数据转换

切换到“D:\Project\pythonDemo\Seg\deeplab\datasets”目录,注意sh里面的变量定义,替换成你电脑的路径(这里要手工建立文件夹tfrecord),命令行:
#Converting PASCAL VOC 2012 dataset…

python D:\Project\pythonDemo\Seg\deeplab\datasets\build_voc2012_data.py --image_folder="./pascal_voc_seg/VOC2012/JPEGImages" --semantic_segmentation_folder="./pascal_voc_seg/VOC2012/SegmentationClassRaw" --list_folder="./pascal_voc_seg/VOC2012/ImageSets/Segmentation" --image_format="jpg" --output_dir="./pascal_voc_seg/tfrecord"

运行成功界面:
在这里插入图片描述
检查输出文件夹:pascal_voc_seg/tfrecord,如下图:

在这里插入图片描述

2.4运行train.py

按照local_test.sh提示的,先训练十个迭代(Train 10 iterations.)
先按照本地的实际路径把对应的变量参数设置好

变量整理:===============================================
CURRENT_DIR="D:/Project/pythonDemo/Seg"
WORK_DIR="D:/Project/pythonDemo/Seg/deeplab"
DATASET_DIR="datasets"
# Set up the working directories.
PASCAL_FOLDER="pascal_voc_seg"
EXP_FOLDER="exp/train_on_trainval_set"

INIT_FOLDER="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/init_models"
TRAIN_LOGDIR="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set/train"
EVAL_LOGDIR="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set/eval"
VIS_LOGDIR="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set/vis"
EXPORT_DIR="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set/export"

TF_INIT_ROOT="http://download.tensorflow.org/models"
TF_INIT_CKPT="deeplabv3_pascal_train_aug_2018_01_04.tar.gz"

PASCAL_DATASET="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/tfrecord"
NUM_ITERATIONS=10
#变量整理完了=======================================================

开始将外部参数对应的填好,放到pycharm参数设置里面

--logtostderr --training_number_of_steps=10 --train_split="trainval" --model_variant="xception_65" --atrous_rates=6 --atrous_rates=12 --atrous_rates=18 --output_stride=16 --decoder_output_stride=4 --train_crop_size="513,513" --train_batch_size=4 --fine_tune_batch_norm=true --tf_initial_checkpoint="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/init_models/deeplabv3_pascal_train_aug/model.ckpt" --train_logdir="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set/train" --dataset_dir="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/tfrecord"

第一次运行出错,需要加上下面两行代码可以正确输出。

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '/gpu:1'

程序运行结果如下图:
在这里插入图片描述
检查输出文件夹D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set/train,如下图:
在这里插入图片描述

这是一个怪异的小插曲,这个图片永久保存,留着以后的某一天或许能解开答案。我本来截取的是本地文件夹“D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set/train”,粘贴上去怎么是下面这个图,本来没有在意,准备删除的时候细思极恐,故保留在这篇技术博客中间。我电脑上的所有软件或网页上从没有见过这个图片,我截图后粘贴进去就是这个图,电脑数据串行了还是平行时空混乱了???这个水印也是我的博客。zph 2020.12.30
在这里插入图片描述
这是我的整个电脑屏幕截图,搞了两个显示器分屏显示的,一边调试一边写博客。
在这里插入图片描述
好了,上面小插曲绝对真实,现在还是个迷,或许三维空间的我们有很多东西理解不了吧,言归正传,继续向下运行eval.py文件

2.5运行eval.py

按照local_test.sh提示的

# Run evaluation. This performs eval over the full val split (1449 images) and
# will take a while.
# Using the provided checkpoint, one should expect mIOU=82.20%.

先按照本地的实际路径把对应的变量参数进行替换,外部传参改好后如下

--logtostderr --eval_split="val" --model_variant="xception_65" --atrous_rates=6 --atrous_rates=12 --atrous_rates=18 --output_stride=16 --decoder_output_stride=4 --eval_crop_size="513,513" --checkpoint_dir="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set/train" --eval_logdir="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set/eval" --dataset_dir="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/tfrecord" --max_number_of_evaluations=1

第一次运行出错,需要加上下面两行代码可以正确输出。

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '/gpu:1'

下面这个图是我运行了两次的(一直发现GPU没有用上,进行了一次调试,运行一次时间太长,半个小时到一个小时,等后面再慢慢解决吧),第一次结果0.82左右与作者设想的差不多,第二次运行0.89了。
在这里插入图片描述

2.6运行vis.py

按照local_test.sh提示的将结果可视化

#Visualize the results.

整理好命令行如下,放进pycharm中外部传参进去运行

--logtostderr --vis_split="val" --model_variant="xception_65" --atrous_rates=6 --atrous_rates=12 --atrous_rates=18 --output_stride=16 --decoder_output_stride=4 --vis_crop_size="513,513" --checkpoint_dir="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set/train" --vis_logdir="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set/vis" --dataset_dir="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/tfrecord" --max_number_of_iterations=1

第一次运行出错,需要加上下面两行代码可以正确输出。

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '/gpu:1'

午睡去了,运行自己停止,应该也有半个小时到一个小时左右
在这里插入图片描述

2.7运行export_model.py

按照local_test.sh提示应该是要导出模型

# Export the trained checkpoint.

整理好输入变量路径

CKPT_PATH="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set/train/model.ckpt-10"
EXPORT_PATH="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set/export/frozen_inference_graph.pb"

整理好传参命令:

--logtostderr --checkpoint_path="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set/train/model.ckpt-10" --export_path="D:/Project/pythonDemo/Seg/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set/export/frozen_inference_graph.pb" --model_variant="xception_65" --atrous_rates=6 --atrous_rates=12 --atrous_rates=18 --output_stride=16 --decoder_output_stride=4 --num_classes=21 --crop_size=513 --crop_size=513 --inference_scales=1.0

运行成功,如下图:
在这里插入图片描述
检查导出模型文件夹,成功生成模型文件
在这里插入图片描述
最后还有下面这段话:

# Run inference with the exported checkpoint.
# Please refer to the provided deeplab_demo.ipynb for an example.

说的是生成的模型是pb格式的模型文件,怎么使用可以参考“deeplab_demo.ipynb”进行单独使用。
回过头来看deeplab_demo.ipynb代码,是通过下面这段代码加载的:
在这里插入图片描述

至此,这篇布置笔记差不多了,贯穿了数据集准备、模型训练、模型导出、模型使用。如果要用自己标注的数据集进行训练起始远远还不够,一些参数的设置,如何调参问题,出现异常怎么解决,后面需要花很多时间来一一解决。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值