deeplab v3+训练自己的数据集

数据集的制作及相关代码修改

源代码链接:deeplab v3+
笔者使用的是类似voc2012的数据集,最终的目的是进行语义分割。要想获得这样的数据集可以使用labelme进行标注,也可以使用PS进行处理。笔者使用了PS进行标注,生成了灰度图。
为了方便,使用的数据集形式与官方数据集一致,如下所示:
在这里插入图片描述
其中,在SegmentationClass中Segmentation里存放train.txt,val.txt等文件,里面记录着用作训练集验证集的文件名。JPEGImages中存放着所有的数据,SegmentationClass中存放着JPEGImages中数据对应的标签。tfrecord之后会存放经过处理的数据。train中会存放生成的训练文件,eval会存放生成的评估文件,vis会存放最终对eval的分割结果。
建立好文件夹后,首先要将原始图片转变为tensorflow支持的tfrecord格式。这里对download_and_convert_voc2012.sh文件的某些语句进行注释,因为我们不需要下载与解压voc数据集。如下所示:

# Helper function to download and unpack VOC 2012 dataset.
#download_and_uncompress() {
#  local BASE_URL=${1}
#  local FILENAME=${2}

# if [ ! -f "${FILENAME}" ]; then
#    echo "Downloading ${FILENAME} to ${WORK_DIR}"
#    wget -nd -c "${BASE_URL}/${FILENAME}"
#  fi
#  echo "Uncompressing ${FILENAME}"
#  tar -xf "${FILENAME}"
#}

# Download the images.
#BASE_URL="http://host.robots.ox.ac.uk/pascal/VOC/voc2012/"
#FILENAME="VOCtrainval_11-May-2012.tar"

#download_and_uncompress "${BASE_URL}" "${FILENAME}"

运行download_and_convert_voc2012.sh文件制作数据集:

# From the tensorflow/models/research/deeplab/datasets directory.
sh download_and_convert_voc2012.sh

在segmentation_dataset.py中修改如下内容为自己数据的train数据量、val数据量及分类数(num_classes),注意,此处的分类数包括背景:

    splits_to_sizes={
        'train': 2358,
 #       'train_aug': 10582,
 #      'trainval': 2913,
        'val': 590,
    },
    num_classes=6,
    ignore_label=255,

为了使用预训练的权重,更改train.py中的True改为False:

flags.DEFINE_boolean('initialize_last_layer', False,
                     'Initialize the last layer.')

之后按照官方教程进行训练即可

可能出现问题

1、如果数据集中的图片大小不一致,在运行eval.py的时候可能出现类似tensorflow.python.framework.errors_impl.InvalidArgumentError: Shape mismatch in tuple component 1. Expected [513,513,3], got [513,616,3] 这样的错误,此时需要根据根据数据集中最大的图片尺寸修改即可,例如数据集中图片尺寸最大为624*823,可以设置eval_crop_size为625与825.
2、如果出现类似错误:InvalidArgumentError (see above for traceback): assertion failed: [predictions out of bound] [Condition x < y did not hold element-wise:] [x (mean_iou/confusion_matrix/control_dependency_1:0) = ] [0 3 3…] [y (mean_iou/ToInt64_2:0) = ] [150]
在eval.py修改代码如下:

   metric_map = {}

    # insert by trobr
    indices = tf.squeeze(tf.where(tf.less_equal(
        labels, dataset.num_classes - 1)), 1)
    labels = tf.cast(tf.gather(labels, indices), tf.int32)
    predictions = tf.gather(predictions, indices)
    # end of insert

    metric_map[predictions_tag] = tf.metrics.mean_iou(
        predictions, labels, dataset.num_classes, weights=weights)
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在Win10系统下,使用DeepLab V3进行语义分割训练自己的数据集可以通过以下步骤实现: 1. 准备数据集:首先,需要进行数据集的准备工作。收集大量的图像数据,并为每张图像标注像素级别的语义标签。确保训练图像和标签数据是一一对应的。 2. 安装依赖环境:在Win10系统下,首先需要安装Python和TensorFlow等深度学习框架,并配置好相应的环境变量。确保能够成功导入相关的库和模块。 3. 下载DeepLab V3:从GitHub上下载DeepLab V3的源代码,并解压到本地目录。在命令行中切换到DeepLab V3的根目录。 4. 数据预处理:使用脚本文件数据集进行预处理,将图像和标签数据转换成模型可接受的格式。这可以通过运行预处理脚本来完成。 5. 配置参数:在配置文件中设置相关的训练参数,如训练图像的路径、标签的路径、模型的参数等。可以根据实际需要进行调整。 6. 运行训练:在命令行中运行训练脚本,该脚本会调用DeepLab V3模型进行训练。根据配置文件中的设置,模型将使用训练数据进行迭代训练,以优化模型的性能。 7. 评估模型:训练完成后,可以运行评估脚本对训练得到的模型进行评估。该脚本将使用测试数据进行预测,并计算出预测结果的准确性。 8. 使用模型:训练完成后,可以使用已训练好的模型对新的图像进行语义分割。通过在命令行中运行预测脚本,将输入图像作为参数进行预测,即可得到相应的语义分割结果。 以上是在Win10系统下使用DeepLab V3进行语义分割训练自己的数据集的基本步骤。根据具体情况和需求,可能还需要进行一些额外的调整和改进。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值