【图像语义分割】Windows10训练DeepLabv3模型(Pytorch版)

【图像分割】Windows10训练DeepLabv3模型

      • 一、环境搭建
          • 1、安装Anaconda3、cuda、cudnn、pytoch
          • 2、安装相应库
          • 3、安装pycocotools包
      • 二、准备数据集(cityscapes)
      • 三、准备源码
      • 四、训练模型
          • 配置参数
          • 开始训练
          • 其它疑难杂症

更新日期:2020.12.23
环境:Win10 + Anaconda3 + pytorch1.6.0 + cuda10.2.89 + cudnn7.6.5
GPU:2070
IDE:pycharm

图像分割是计算机视觉中除了分类和检测外的另一项基本任务,它意味着要将图片根据内容分割成不同的块。相比图像分类和检测,分割是一项更精细的工作,因为需要对每个像素点分类,如下图的街景分割,由于对每个像素点都分类,物体的轮廓是精准勾勒的,而不是像检测那样给出边界框。

一、环境搭建

1、安装Anaconda3、cuda、cudnn、pytoch

详见此文

2、安装相应库

由于github源码中并没有阐明环境中具体工具包的版本号或requirement.txt,因此读者可以选择:
a、待运行代码时根据报错逐一弥补缺漏的工具包,安装时直接conda install 库名,如不确定有哪些版本可选,可运行conda search 库名查询。
b、依据上面链接中yolov5的环境配置工具包

3、安装pycocotools包

pycocotools,即python api tools of COCO。COCO是一个大型的图像数据集,用于目标检测、分割、人的关键点检测、素材分割和标题生成。这个包提供了Matlab、Python和luaapi,这些api有助于在COCO中加载、解析和可视化注释。

若不安装pycocotools包,在后续运行训练模型的代码时,会报错:

No module named ‘pycocotools’

点击此链接下载Microsoft Visual C++ 14.0,压缩包内附教程。

二、准备数据集(cityscapes)

Cityscapes拥有5000张在城市环境中驾驶场景的图像(2975train,500 val,1525test)。它具有19个类别的密集像素标注(97%coverage),其中8个具有实例级分割。Cityscapes数据集,即城市景观数据集,这是一个新的大规模数据集,其中包含一组不同的立体视频序列,记录在50个不同城市的街道场景。
【图像语义分割】Windows10训练DeepLabv3模型(Pytorch版)_第1张图片
官网链接——需要注册账号、下载速度慢。
百度云链接 提取码:dhr8

并将文件摆放为如下结构:
----cityscapes
--------gtFine_trainvaltest
------------gtFine
----------------test
----------------train
----------------val
--------leftImg8bit
------------test
------------train
------------val
--------preprocess.py
--------read_depth.py
--------testImages.txt
……一堆.txt

本人尝试过使用pascal VOC 2012 ,只有1.9G,训练效果并不佳。(可能是我参数没调对)

三、准备源码

github:源码地址

四、训练模型

配置参数

1、打开mypath.py将cityscapes下的return地址改为自己的cityscapes文件夹地址,如return 'E:\cityscapes/',并保存。
2、打开train.py,将设置中的dataset设为cityscapes;use-sbd改为false;修改自己合适的batch-size(本人RTX2070 8G,只能设为2);backbone可根据需要自行选择,我选的是xception模型,其它模型如下:
【图像语义分割】Windows10训练DeepLabv3模型(Pytorch版)_第2张图片
其它参数本人均为默认。如有需要也可自行修改。

开始训练

运行train.py首次训练时,会自动下载xception预训练模型C:\Users\HP.cache\torch\hub\checkpoints,但速度很慢。因此可以点击此处下载预期训练模型直接拷贝到目录下。再次运行训练代码。

请关注模型是否能顺利运行完第一个Epoch,如有报错:ValueError: Expected more than 1 value per channel when training, got input size是因为模型中用了batchnomolization,训练中用batch训练的时候当前batch恰好只含一个sample,而由于BatchNorm操作需要多于一个数据计算平均值,因此造成该错误。
解决方法:删掉一个训练样本(包括每个文件夹下的图片和.txt中的标签),使得train、test、val的样本数量均能被batchsize整除。(我train和test下各删了一个样本)

其它疑难杂症

待发现

你可能感兴趣的:(pytorch,机器学习,深度学习,python,经验分享)