一、DeepLabV3+图像语义分割原理

DeepLabV3架构采用扩张卷积(也称为空洞卷积)来捕捉多尺度信息,从而在不损失空间分辨率的情况下实现对图像的精细分割。
【保姆级教程】DeepLabV3+语义分割:训练自己的数据集-LMLPHP

二、DeepLabV3+代码及预训练权重下载

2.1 下载deeplabv3+代码

这里使用的是B站大佬Bubbliiiing复现的deeplabv3+代码

 仓库地址: https://github.com/bubbliiiing/deeplabv3-plus-pytorch

2.2 下载模型预训练权重

链接:https://pan.baidu.com/s/1dYoFxrWmwASpDKSHl4x37Q
提取码:vj0h
将下载的权重文件放到model_data文件夹下。

三、labelme图像标注及格式转换

3.1 图像标注

项目代码中,自行带了一张标注好的图片(如下图),我这边不再标注,读者可以根据自己的需求自行标注。自己标注的数据的图像和标签文件需求都放在datasets\before文件夹下。
【保姆级教程】DeepLabV3+语义分割:训练自己的数据集-LMLPHP

3.2 标签格式转换

运行json_to_dataset.py文件,转换后,会在datasets\JPEGImages文件夹下生成jpg格式图像,在datasets\SegmentationClass文件夹下生成png格式mask标签
【保姆级教程】DeepLabV3+语义分割:训练自己的数据集-LMLPHP

3.3 数据集划分

将上一步的jpg格式图像放到VOCdevkit\VOC2007\JPEGImages文件夹下。
将上一步的png格式mask标签放到VOCdevkit\VOC2007\SegmentationClass文件夹下。
运行voc_annotation.py文件。
查看在VOCdevkit\VOC2007\ImageSets\Segmentation文件夹下生成的txt文件
【保姆级教程】DeepLabV3+语义分割:训练自己的数据集-LMLPHP

四、deeplabv3+网络训练和测试

4.1 训练

运行train.py文件。读者需要根据自己的情况修改文件中的num_classesmodel_pathinput_shapeFreeze_batch_sizeUnfreeze_batch_size以及其他训练参数。
训练结果保存在logs文件夹下。
【保姆级教程】DeepLabV3+语义分割:训练自己的数据集-LMLPHP

4.2 测试

运行predict.py文件。
读者需要根据自己的情况修改模型权重和测试图片的地址。
读者可以通过修改mode参数,实现下面5种模式:

#   'predict'           表示单张图片预测,如果想对预测过程进行修改,如保存图片,截取对象等,可以先看下方详细的注释
#   'video'             表示视频检测,可调用摄像头或者视频进行检测,详情查看下方注释。
#   'fps'               表示测试fps,使用的图片是img里面的street.jpg,详情查看下方注释。
#   'dir_predict'       表示遍历文件夹进行检测并保存。默认遍历img文件夹,保存img_out文件夹,详情查看下方注释。
#   'export_onnx'       表示将模型导出为onnx,需要pytorch1.7.1以上。

设置mode = “predict”模式,测试一张自己手动输入路径的图像,结果如下
【保姆级教程】DeepLabV3+语义分割:训练自己的数据集-LMLPHP

03-31 15:44