一、DeepLabV3+图像语义分割原理
DeepLabV3
架构采用扩张卷积
(也称为空洞卷积)来捕捉多尺度信息,从而在不损失空间分辨率的情况下实现对图像的精细分割。
二、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文件夹下。
3.2 标签格式转换
运行json_to_dataset.py
文件,转换后,会在datasets\JPEGImages
文件夹下生成jpg格式图像
,在datasets\SegmentationClass
文件夹下生成png格式mask标签
。
3.3 数据集划分
将上一步的jpg格式图像
放到VOCdevkit\VOC2007\JPEGImages
文件夹下。
将上一步的png格式mask标签
放到VOCdevkit\VOC2007\SegmentationClass
文件夹下。
运行voc_annotation.py
文件。
查看在VOCdevkit\VOC2007\ImageSets\Segmentation
文件夹下生成的txt文件
。
四、deeplabv3+网络训练和测试
4.1 训练
运行train.py
文件。读者需要根据自己的情况修改文件中的num_classes
,model_path
,input_shape
,Freeze_batch_size
,Unfreeze_batch_size
以及其他训练参数。
训练结果保存在logs
文件夹下。
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”
模式,测试一张自己手动输入路径的图像,结果如下