Tensoflow-代码实战篇--Deeplab-V3+--代码复现(二)

时间:2024-04-04 14:22:46

在上篇博文中,我详细的介绍了如何在数据集Cityscapes复现Deeplab(v3+),这篇文章主要介绍一下对数据集VOC2012的验证。

一、参考资料:

1、官方代码:githup
2、大神博客:https://blog.csdn.net/qq_32799915/article/details/80070711

二、准备工作:

环境:

关于如何配置tensorflow环境以及路径的导入请见上文:https://blog.csdn.net/qq_38437505/article/details/82952024

数据集准备:

1、下载数据集:

自己先下好voc2012的数据集,解压放在本地。
我的本地数据存在目录如下:
Tensoflow-代码实战篇--Deeplab-V3+--代码复现(二)
图中:除了SegmentationClassRaw和tfrecord之外的几个文件夹是有下载的数据集解压得到的,而SegmentationClassRaw和tfrecord这两个文件夹使我们自己创建的;SegmentationClassRaw: 是我们将原始的三通道(彩色)Lable转换成单通道(黑白)的,详细转换过程见下步;**tfrecord:**是我们将图片和单通道lable转换用于tensorflow计算的数据格式,转换过程见下.

3、数据格式转换:

  • 三通道—to—单通道
    下载的数据集中只提供了三通道(彩色)的标注(lable)(SegmentationClass文件夹中),但是我们训练和后面的测试中必须得用到单通道(黑白)的,所以第一步应该将其进行转换(不过我不是很明白为嘛训练要用单通道的,难道是因为单通道的计算量小,希望哪路大神看见此文帮我解答一下);官方提供的代码中提供了格式转换文件【/home/jerry/Deeplab/research/deeplab/datasets/remove_gt_colormap.py】,我在看博文时发现有大神用其他代码转换格式的,很厉害。我就直接用了官方的,代码很简单。我编了个sh脚本文件,直接调用该文件,不需要对【remove_gt_colormap.py】进行任何修改。
    Tensoflow-代码实战篇--Deeplab-V3+--代码复现(二)
    转换成后的数据存储在SegmentationClassRaw中,该文件夹最好自己先建好,然后在sh中修改相关路径就ok。
  • 生成tfrecord文件
    官方提供的文件中,同样有将voc2012数据转换成tfrecord的代码【/home/jerry/Deeplab/research/deeplab/datasets/build_voc2012_data.py】,同样,编写sh脚本文件,修改部分路径,然后直接生成tfrecord文件,代码见上图后半部分。同样,最好先自己建立tfreord文件夹。
  • 参数说明:
    –image_folder=“保存images的路径” \
    –semantic_segmentation_folder=“保存labels的路径” \
    –list_folder=“保存train.txt文件的路径” \
    –image_format=“jpg(image格式)” \
    –output_dir=“生成tfrecord格式的数据所要保存的位置”

数据都准备好了之后,就可以直接开始调用代码,进行训练和测试了。

三、训练

训练这部分,没有什么难的,直接将官方代码运行就好。个人为了麻烦,全部将需要调参的写成了sh脚本文件,下面直接贴出我的代码。
Tensoflow-代码实战篇--Deeplab-V3+--代码复现(二)
脚本中的相关参数含义可见我的上文https://blog.csdn.net/qq_38437505/article/details/82952024
利用官方提供的ckpt,我训练的loss大约1.4左右。

四、测试:

Tensoflow-代码实战篇--Deeplab-V3+--代码复现(二)
利用官方的训练ckpt模型,我的最终,Miou达到了81.5%,由于机器以及部分参数的原因,没法达到论文中准确率。

五、可视化结果

Tensoflow-代码实战篇--Deeplab-V3+--代码复现(二)
最后将我最终得到训练结果给大家看看,还是很不错的。
Tensoflow-代码实战篇--Deeplab-V3+--代码复现(二)
Tensoflow-代码实战篇--Deeplab-V3+--代码复现(二)