1.安装环境 一定要注意版本问题

因为版本对不上,花了好多时间猜正确的版本。

系统:Ubantu16.04

nvidia驱动版本 410.78

python 版本 3.5.2

tensorflow-gpu版本 1.14.0

CUDA : 10.0

cudnn: 7.6.5

labelme 3.9

2.安装deeplabV3+项目

下载后解压 下载解压的文件夹名字叫 /models-master,为了方便,我改了名字为 /models

以下地址中的所有/models 就是/models-master

测试安装是否成功 打开终端进入 models/research  执行:

export PYTHONPATH=$PYTHONPATH:/path-to/models/research/slim

这个代码每次打开终端都需要执行一次 或者 直接写在 ~/.bashrc里,并 source ~/.bashrc

然后测试安装是否成功 在 models/research 目录下执行

python deeplab/model_test.py

如果成功会显示

失败的话可能是相关包没装齐全,根据提示装相关包就好。一般是ImportError :no modual name "XXX",其他的错误我没遇到。 如果是tensorflow的包没有,那基本是tensorflow版本问题,不是太新就是太旧,按照第一步版本重装就好。

3.制作数据集

3.1 labelme

用的labelme 版本是3.9.0

labelme 版本不对 会出现

attributeerror: module 'labelme.utils' has no attribute 'draw_label'

labelme对图片进行多变形标注后,会出现 图片以及相关的json文件

而deeplabV3+的数据集需要这些json文件 将这些json 文件放在一起。我放在 testdata 文件夹

3.2 json_to_mask

然后是将这些json换成deeplab所需要的mask_label.

这里需要根据自己的需求改代码,代码不难,容易看懂

会直接生成image和mask文件夹

image放的原图格式 .jpg,mask放的是label图 格式 .png 。

需要的是第一张原图和第二张黑的label图,第三张图是label的可视化,因为第二张全黑不容易知道是否有标签值在里面。

如图,鼠标在图片对应位置滑动,右下角显示label的id[2,2,2] ,说明这个图片不是全黑,是有label值的,标号错了可以自己修改前面的labelme_to_mask.py。

3.3构建数据集目录

自己创建,官方不自带

放在这个路径下#models/research/deeplab/datasets

-testdata

+ image

+ mask

+ index

- train.txt

- trainval.txt

- val.txt

+ tfrecord

image里放所有原图 ,mask里放label所有标签。 注意,原图名字和label名字要一一对应

index里放的是train.txt val.txt train.txt,靠这些txt文件区分训练集和测试集,可以用这个文件制作:

制作完成后,train.txt里放的是训练集图片的名,不包括路径和扩展名,其他以此类推,vis是测试集。trainval我没用上。

tfrecord文件夹里放的是tfrecord,

打开终端进入/models/research ,在该路径下执行python deeplab/datasets/build_voc2012_data.py \

--image_folder="models/research/deeplab/datasets/testdata/image" \

--semantic_segmentation_folder="/models/research/deeplab/datasets/testdata/mask" \

--list_folder="/models/research/deeplab/datasets/testdata/index" \

--image_format="jpg" \

--label_format="png" \

--output_dir="models/research/deeplab/datasets/testdata/tfrecord"

build_voc2012_data.py 是官方程序自带的。

--image_folder 上一步的image文件夹路径

--semantic_segmentation_folder 上一步的mask路径

--list_folder  index路径

--image_format 原图图片格式,我的是jpg 应该可以是别的格式

--label_format  标签图片格式

--output_dir tfrecord路径

数据集制作完毕

4.训练前代码改动

注册数据集

在/models/research/deeplab/datasets 路径的data_generator.py 第93行:_MYDATA_INFORMATION = DatasetDescriptor(

splits_to_sizes={

'train':44,  # num of samples in images/training  train.txt的行数

'val':27,  # num of samples in images/validation val.txt的行数

},

num_classes=6,  # 我的标签是5类(包括background),加上ignore_label总共六类

ignore_label=255,

)

然后找到 _DATASETS_INFORMATION ,加上mydata....一行_DATASETS_INFORMATION = {

'cityscapes': _CITYSCAPES_INFORMATION,

'pascal_voc_seg': _PASCAL_VOC_SEG_INFORMATION,

'ade20k': _ADE20K_INFORMATION,

'mydata': _MYDATA_INFORMATION,    #注册上面的数据集 加粗部分一致,前面的mydata随意取

}

同样在models/research/deeplab/deprecated下的segmentation_dataset.py文件进行同样的操作

train_utils.py

在models/research/deeplab/utils/train_utils.py的213行左右exclude_list = ['global_step','logits'] #本来只有global_step ,现在加上 logits,表示不加载逻辑层的参数

if not initialize_last_layer:

exclude_list.extend(last_layers)

train.py

在models/research/deeplab/train.py里 156行左右# Set to False if one does not want to re-use the trained classifier weights.

flags.DEFINE_boolean('initialize_last_layer', False, 'Initialize the last layer.') #这个本来是True设置为False

flags.DEFINE_boolean('last_layers_contain_logits_only', True, 'Only consider logits as last layers or not.')#这个设置为True

解释:

input_preprocess.pymodels/research/deeplab/input_preprocess.py  128行左右

# Randomly crop the image and label.

if is_trainingand labelis not None:

processed_image, label = preprocess_utils.random_crop([processed_image, label], crop_height, crop_width)

为这个if加一个else,下面的代码显示得不好,不过在链接里也有else:

rr = tf.minimum(tf.cast(crop_height, tf.float32) / tf.cast(image_height, tf.float32), \

tf.cast(crop_width, tf.float32) / tf.cast(image_width, tf.float32))

newh = tf.cast(tf.cast(image_height, tf.float32) * rr, tf.int32)

neww = tf.cast((tf.cast(image_width, tf.float32) * rr), tf.int32)

processed_image = tf.image.resize_images(processed_image, (newh, neww), method=tf.image.ResizeMethod.BILINEAR,           align_corners=True)

processed_image = preprocess_utils.pad_to_bounding_box(processed_image, 0, 0, crop_height, crop_width, mean_pixel)

不加这一段在运行vis.py和eval的时候会报错

类似

InvalidArgumentError (see above for traceback): padded_shape[1]=128 is not divisible by block_shape[1]=12

Invalid argument: padded_shape[1]=69 is not divisible by block_shape[1]=2

这种错基本都是这样解决

5.train vis eval

打开终端 ,进入 models/research路径

5.1 train.py

执行python deeplab/train.py \

--logtostderr \

--training_number_of_steps=200 \

--train_split="train" \

--model_variant="xception_65" \

--atrous_rates=6 \

--atrous_rates=12 \

--atrous_rates=18 \

--output_stride=16 \

--decoder_output_stride=4 \

--train_crop_size=317,385 \

--train_batch_size=2 \

--dataset="mydata" \

--tf_initial_checkpoint='models/research/deeplab/backbone/deeplabv3_cityscapes_train/model.ckpt' \

--train_logdir='models/research/deeplab/exp/train_on_train_set/train' \

--dataset_dir='models/research/deeplab/datasets/testdata/tfrecord'

--training_number_of_steps=200  这里是训练步数,自己设置训练多少次

--model_variant="xception_65" 选择backbone 有别的,但我没看。

--train_crop_size=317,385   设置图片裁剪大小,( height,width)这里尽可能大可以提高准度

这里要说的是我的训练集图片大小不一,没有进行统一尺寸修改。图片最小的尺寸是316×384  我都加了1,因为别的博客里说是要

(height/width - 1)/ 4 要是整数。

--train_batch_size=2  内存不够可以将这个调小。

--dataset="mydata"  这个mydata是上面注册数据集时取的名字

--tf_initial_checkpoint 初始权重,就是官方预训练过的权重 路径

解压在任意位置,路径对的上就行。

--train_logdir 训练出来的文件的保存路径,自己创建,/exp/train_on_train_set/train 这三个文件夹都是我参考别人博客创建的。

--dataset_dir 这个就是上面tfrecord的路径

其他没解释的

不出错的话是

错误记录:

Invalid argument: Nan in summary histogram for: image_pooling/BatchNorm/moving_variance_1

这个问题出现在我把batch_size设置成1,解决方案为设置为2,参考链接:

解释在:

官方解决方法是增加loss的范围,可是没说怎么加

5.2 vis.py

这个用于查看训练结果python deeplab/vis.py \

--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=317,384 \

--dataset="mydata" \

--checkpoint_dir='models/research/deeplab/exp/train_on_train_set/train' \

--vis_logdir="models/research/deeplab/exp/train_on_train_set/vis" \

--dataset_dir="models/research/deeplab/datasets/testdata/tfrecord"

--vis_crop_size 这里决定输出的label预测图大小,可以设置为数据库里最大的图片。

--checkpoint_dir 这个路径就是上面训练指令的--train_logdir  表示你要用训练好的权重

--vis_logdir 训练结果图片要存的位置,自己创建。

如果不出错,会显示

在--vis_logdir 路径下会看到分割结果的图片。

5.3 eval.pypython deeplab/eval.py \

--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=317,365 \

--dataset="mydata" \

--checkpoint_dir="models/research/deeplab/exp/train_on_train_set/train" \

--eval_logdir="models/research/deeplab/exp/train_on_train_set/eval" \

--dataset_dir="models/research/deeplab/datasets/testdata/tfrecord" \

--eval_crop_size 一样

--eval_logdir 输出文件路径,自己创建

正常输出 官方版本版本不一样可能有些差距。

我暂时就做到这里了,剩下的步骤可以参考别的博客。

参考链接:

最后这个不是打广告,只是有很多没有遇到的bug要是真的没法解决,不如买个网课,去问一下老师,老师很快就回复我了,还给了qq交流。

80不贵解君愁。

ckpt下载 deeplabv3_Ubantu下 用deeplabV3+训练自己的数据集 你可能遇到的所有坑都在这了...相关推荐

  1. deeplabv3+训练自己的数据集

    deeplabv3+训练自己的数据集 环境:ubuntu 16.04 + TensorFlow 1.9.1 + cuda 9.0 + cudnn 7.0 +python3.6 tensorflow 项 ...

  2. Deeplabv3+训练自己的数据集(包含脚本)

    目录 前言 源码 一.环境配置 二.使用步骤 1.制作数据集 2.训练模型 3.测试 三.常见报错 总结 前言 最近在着手一个项目,需要用到语义分割这一块,最后经过慎重的考虑,最终选择deeplabv ...

  3. deeplabv3+——训练自己的数据集 torch1.12.0 cuda11.3

    目录 前言 环境 源码 参考博客 一.制作自己的数据集 二.训练 三.可视化 前言 环境 torch==1.12.0+cu113 cuda==11.3 显卡为 RTX3070ti tips:30系显卡 ...

  4. 使用 deeplabv3+ 训练自己的数据集经验总结

    简介 deeplabv3+是现今性能最好的语义分割模型之一,本文介绍如何在window环境下安装并运行deeplabv3+. 本文将详细介绍deeplabv3+的环境配置,训练自己的数据,参数调试等内 ...

  5. Win10下用TensorFlow训练自己的数据集来做目标检测

    本文主要来源于YouTube博主 EdjeElectronics的视频https://www.youtube.com/watch?v=Rgpfk6eYxJA (对于视频看不了的朋友,我把视频录制下来放 ...

  6. Windows下使用Darknet训练自己的数据集(模型:yolov4-tiny、数据集:垃圾分类)

    本文章主要介绍如何使用Darknet在windows下训练自己的数据集,其中模型使用的是yolov4-tiny,数据集使用的是自己垃圾分类数据集(需要的自取:在我上传的资源中有) PS:这是我的第一篇 ...

  7. ubuntu18.04下用yolo训练自己的数据集

    ubuntu18.04下用yolo训练自己的数据集并进行检测 收集数据集并标注 数据集的量对于检测的准确度有很高的影响,所以应该尽可能的获取较多的数据集.这里,我从百度图片上获得了92张夏洛特中的动漫 ...

  8. Tensorflow下利用Deeplabv3+训练自己的数据(超详细完整版)

    使用deeplabv3+进行语义分割 环境要求:python3.tensorflow-gpu 1.11.0或者以上,ubuntu/win都可以 0.DeepLabv3+代码下载 0.1 将tensor ...

  9. Pytorch 语义分割DeepLabV3+ 训练自己的数据集

    照葫芦画瓢总结记录了一下DeepLab分割系列,并对Deeplab V3++实现 一.DeepLab系列理解 1.DeepLab V1 原文:Semantic image segmentation w ...

  10. TensorFlow之DeepLabv3+训练自己的数据集

    0 背景 在之前的文章中,对 tensorflow 目标检测API进行了详细的测试,成功应用其模型做简单的检测任务.首先简单介绍下系统环境的配置 python3.6; tensorflow-gpu 1 ...

最新文章

  1. 如何找到文件的家-打开文件对话框openFileDialog
  2. 国产微服务网关Apache APISIX安装
  3. 嵌入式转linux服务器,嵌入式linux下web服务器搭建
  4. 要不来重新认识Spring事务?三歪又学到了
  5. 中英文怎么算 字符长度_钢材长度怎么算,只有1%的人才懂!
  6. ClassNotFoundException:是否会减慢您的JVM?
  7. 深度|二代征信:人行数字解读分与征信复议
  8. LeetCode每日一题:14.longest-common-prefix(最长公共前缀)
  9. Linux性能及调优指南(翻译)
  10. Perl面向对象编程
  11. autocad不能画图_学了这些CAD技巧,画图速度迅速提高
  12. SEKAI CTF 部分WP(我超,初音未来)
  13. 云计算需要学什么?学习云计算能从事什么岗位?
  14. matlab中complex,complex_-complex在C语言中是什么意思呀!
  15. kettle 用cmd bat来运行ktr和kjb
  16. Jenkins+Gitlab+Nginx实现自动发布与回退基于tag版本的静态项目(解决重复构建问题)
  17. 【Web技术】前端水印实现方案
  18. 5分钟读懂UML类图
  19. 为了让5G更省电,这家设备商秀出黑科技
  20. 下拉菜单html菜鸟教程,Bootstrap 下拉菜单

热门文章

  1. 【语音处理】基于matlab GUI音频信号处理(调音+调速+调频+滤波)(带面板)【含Matlab源码 299期】
  2. pgm图像缩小C语言,C++将二进制(P5)图像转换为ascii(P2)图像(.pgm)
  3. eclipse neon php插件,Eclipse Neon安装Tomcat插件
  4. Python argparse模块、argparse.ArgumentParser()用法解析
  5. centos7 redis 重启_linux下redis启动/关闭/重启服务配置
  6. 用python画一只皮卡丘_用python画一只可爱的皮卡丘实例
  7. linux安装quota软件包,CentOS关于quota的总结与实践详解
  8. Java集合干货——HashMap源码分析
  9. Java 8新特性探究(十一)Base64详解
  10. Drawable解析1——ColorDrawable、BitmapDrawable、ClipDrawabl和ScaleDrawable