图像分割:使用DeepLabv3+教程
图像分割,DeepLabV3+
关于DeepLabv3+网络原理介绍,见我上篇博客DeepLabV3与DeepLabV3+介绍
本文项目整理并学习了B站up主Bubbliiiing的视频,欢迎各位在评论区共同讨论交流。
目录
先下载好相关的代码文件(相关的代码,数据在文章最后有链接),解压后放在自己电脑的某个盘中,然后用pycharm等软件打开即可。注意打开的根目录得与图片一致哦,不然有的代码里调用.py文件会出现红色下划线
1、数据集的制作
在自己创建的虚拟环境中安装标注工具labelme,笔者是用Anaconda管理自己的虚拟环境(如何配置深度学习环境这里不做介绍,建议自行去百度),打开Anaconda Prompt(没安装Anaconda的直接win+r,输入cmd,进入你配置的虚拟环境安装也行)
打开后,输入activate pytorch(中间有空格)(pytorch是笔者虚拟环境起的名字,这里需要改成你自己起的虚拟环境的名字),激活我们的虚拟环境,再进行安装labelme打标签工具。
接下来输入pip install labelme==3.16.7(这个版本较稳定,这里没有换源安装,有需要可百度)
安装好了后在自己的虚拟环境中输入labelme,即可打开该标注数据工具
打开后界面如下:
本文代码使用的数据格式为VOC格式,如下图所示。先在电脑某个盘创建存放图片的文件夹(比如我在F盘创建了JPEGImages文件夹,里面存放着待处理的图片),记住位置(后续将打好标签的图片copy到我们代码目录下即可)
其中:
ImageSets下的Segmentation文件夹里:存放train.txt训练集图片名字,val.txt验证集图片名字
JPEGImages:存放训练前未处理的图片
SegmentationClass:存放将图片处理的标记图片
我们打开labelme工具的左侧Open Dir,点击“选择文件夹“”,选择刚才创建好的文件夹JPEGImages。
打开后出现文件夹的图片
点击左上方File,再点击Save Automatically,开启自动保存;
点击左侧栏Create Polygones,点击鼠标左键用小线段将目标的轮廓圈成一个闭合线段即可,后续给目标起标签名称,如下图,用绿色小线段把目标轮廓圈起来,并起名为sheep,点击OK(话说这动物是羊吗,我也不确定)
这张图片标注完成后,按下键盘上的D键切换下一张图(按A键返回上一张),接着标注,这个过程极为枯燥且费时,还请耐心标注。
所有图片标注完成后,存放图片文件夹会出现下图所示.json文件
将JPEGImages下所有文件Ctrl+A全选,然后Ctrl+x剪切,Ctrl+V粘贴到我们代码根目录下datesets--before文件夹下面,这里我们第一阶段的工作就完成了。
2、数据集的处理
接下来用pycharm打开我们项目文件夹,在根目录下打开json_to_dataset.py文件。
修改class类别参数:比如你的类别有cat,dog两个类,如下图类别中添加"_background_",
"cat","dog"三个类,这里都是默认要多加一个"_background_"背景类别。
接下来鼠标右键,选择运行代码;之后左侧datasets文件夹下的JPEGImages、SegmentionClass文件夹出现图片,分别是原图片,标签图片。
然后需要将上图中datasets下的JPEGImages、SegmentionClass两个文件夹剪切到VOCdevkit--VOC2007--目录下即可。
接下来打开根目录下的voc_annotation.py,右击运行,对数据集进行划分,默认训练集:验证集=9:1划分。运行结果VOCdevkit--VOC2007--ImageSets--Segmentation多出两个.txt文件
第二阶段的数据划分阶段也完成了。
3、训练自己的权重
在开始训练我们自己数据集的权重之前,我们打开pycharm左下角的命令终端如下图,在中输入如下的命令pip install -r requirements.txt,就可以对相应环境安装了。
pip install -r requirements.txt
点开根目录下train.py文件,下面介绍train文件部分参数
1、修改类别数num_classes,文件中默认21个类别(VOC数据集20类别+1背景类别),改成自己的(类别数+1)
2、修改主干网络backbone,默认是mobilenet,推荐使用默认;xception主干可能训练效果好一点,但是对电脑的性能要求更高
3、添加预训练权重model_path,添加预训练权重能加速训练。
4、修改训练轮数,Freeze_Epoch=50表示冻结训练50轮;UnFreeze_Epoch=100表示解冻训练(100-50=50)50轮,即总共训练100轮;根据自己实际情况设置轮数,一般几百轮即可。
代码里其他参数不再进行过多介绍,都推荐使用默认参数即可,想了解的也可以自己看代码,注释很详细。
最后直接运行train.py即可,等训练完,就会在根目录下logs下生成.pth权重文件。
这里训练阶段也结束了。
4、利用自己的权重进行预测
最后就是预测了,用到两个文件,根目录下的deeplab.py和predict.py。
我们首先需要去deeplab.py里面修改model_path以及num_classes,两个参数要修改。
model_path参数的路径修改为你上一步训练得到的权重路径,在根目录logs文件夹里,注意输入路径是斜杠为“/”。 num_classes参数=(自己类别数目)+1(背景类别)
然后点开predict.py文件,修改mode参数,可以检测图片或视频,详情看代码注释
比如下图mode = "dir_predict",就是检测指定文件夹下的图片,并把结果保存指定文件夹
根目录predict.py里,dir_origin_path:指定检测图片的文件夹路径,dir_save_path:指定保存检测结果的文件夹路径。格式如下图
参数修改完,其他参数采用默认,右键运行predict.py,即可生成语义分割结果,展示部分图像分割检测图片:
最后再次感谢b站up主Bubbliiiing!也感谢我的舍友对我的帮助爱吃肉的鹏
代码与VOC数据(里面有打好标签),将会放在下面链接:
代码:链接:https://pan.baidu.com/s/1azJZCfQTmzYU8PNBk4qoNw?pwd=9lg7
提取码:9lg7
VOC数据:链接:https://pan.baidu.com/s/1pSMDgJ43BSUyhvTQ8YDu8Q?pwd=1xlh
提取码:1xlh
更多推荐
所有评论(0)