由于在B站网络视频上的有些步骤在自己复现代码的时候不是很清楚,相信有小伙伴也有同样的问题,因此进行一个简单的梳理,希望对有需要的朋友有帮助,如有不对的地方欢迎私信!!
目录
前言
在B站博主同济子豪兄的关于利用MMsegmentation开源代码库进行语义分割的视频中介绍了从数据集的制作、训练自己的网络再到部署网络的全过程,但相信可能包括我在内的一些非计算机专业学生大概率用不到最后的部署环节,所以本文仅对前两个环节中的关键点,容易忽略的地方,在自己复现时候需要注意修改的地方进行简单的总结回顾!
利用MMsegmentation进行分割的步骤
一、利用预训练的配置文件和权重直接进行分割预测
1. 安装与配置环境
备注:教程中所有运行的代码均是在云端GPU环境下的jupyter notebook中运行的,由于本人的电脑没有安装NVIDIA的显卡,所以就直接用推荐的GPU租用平台进行运行尝试,如有需要可见链接。Featurize云GPU租用平台
第一步:安装Pytorch
Pytorch官网:https://pytorch.org/
选择合适的系统与CUDA版本之后,在电脑cmd终端运行Run this Command:后面的两行代码即可自动安装;而在教程中,如下图安装pytorch时候使用的是国内的镜像网站,因为在国内下载国外的东西会非常慢,也可以使用镜像进行下载。
镜像网站:https://download.pytorch.org/whl/cu113/torch_stable.html
第二步:安装MIM,MMCV和一些其他的工具包
在这一步骤其实没有太多技术要注意,按照代码的顺序逐一运行即可。
第三步:下载MMsegmentation开源算法库
依次运行下图中的代码块,将MMsegmentation开源算法库中的算法等文件全部下载到工作目录下并形成一个以mmsegmentation为名字的文件夹,文件夹包含了最新更新的代码库。当然,如果不想使用最新的代码库,也可以在下载时候指定代码库的版本,指定方式如第二个代码块的-b v1.1.2,二现在最先的版本应该已经更新到v1.2.1版本。下在完成之后需要进入到mmsegmentation工作目录才能进行下一步操作。
第四步:安装MMsegmentation--非常非常重要
mmsegmentation代码库需要安装在运行的电脑环境下才可以使用,所以在下载完之后务必要对代码库进行安装,否则在后面的训练以及预测环节均会出现类似“找不到mmseg文件”等错误。
第五步:创建训练模型权重、图片素材等要存放的文件位置
利用import os命令进入系统,创建权重文件,输出结果图像以及Configs配置文件要存放的位置。在此需要注意的是,文件夹只需要创建依次即可,无需重复创建,在已有文件的情况下运行代码创建同名称的文件夹会报错!
第六步:检查配置环境以及工具是否安装成功
在运行之前需要检查各个步骤,如Pytorch,MIM等环境和工具是否已经安装成功,依次运行如下代码块,出现各个环境以及工具的版本号就证明已经安装成功。如果出现没有安装成功的情况,版本号显示不出来,那么就重复上述的某一具体工具的安装步骤即可,直到出现版本号为止。
第七步:设置Matplotlib的中文字体
由于在后期的结果展示环节要用到大量的图像表达形式,因此在安装配置阶段就要配置好图像中使用的中文字体,按照各自电脑系统的不同选择不同的代码块进行运行,直到能出现如第二章图中能显示出中文字体为止。如果出现一直显示不出来中文字体的情况就把当前运行的内核全部关掉再重新启动之后运行代码块试试,内核关闭与重启的位置如第二个图所示。
2. 利用预训练的语义分割模型进行预测-单张图像命令行形式
第一步:进入mmsegmentation主目录
在所有的运行代码中,进入mmsegmentation主目录这一步骤基本均是第一步。因为所有的之后的包括训练,生成等操作均是在此基础上进行的。
第二步:载入测试图像
下载一下想进行预测的素材到设置好的data文件中,当然这个文件的名字在第一大部分安装配置环节是可自行进行修改的,利用PIL中的Image功能可以预览下载的素材,如果在运行是报错“Unable to establish SSL connection.”,从新运行代码块即可。
第三步:从MMsegmentation得Model Zoo中选择下载预训练语义分割模型的Config配置文件与Checkpoint权重文件
配置与权重下载:Model Zoo
注意:配置文件为Config文件,其一般为.py的python文件。权重文件为Checkpoint文件,一般为.pth结尾的文件,两者均可从上述Model Zoo的链接中获得。
例如:利用Segformer算法,Cityscpaes数据集预训练的模型,其两个文件的形式如下所示。
配置Config文件:
configs/segformer/segformer_mit-b5_8xb1-160k_cityscapes-1024x1024.py
Checkpoint权重文件:
https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934-87a052ec.pth
第四步:利用得到的Config文件与Checkpoint权重文件进行预测
例如:教程中使用的是Segformer算法,在Cityscpaes数据集预训练得到的模型,在命令行中的表示如下所示,其中demo表示图像处理程序;data表示要进行分割的图像;接下来是Config配置文件以及Checkpoint权重文件的地址链接表示形式,每个部分均需要用\符号进行隔开;--out-file outputs/B1_uk_segformer.jpg表示输出要存放的位置以及结果名称;--device cuda:0表示运算设备;--opacity 0.5表示透明度,数值越大越接近分割像素图,越小越接近图像的原图。
总结
利用预训练的模型进行分割结果的预测属于迁移学习的范畴,由于在一些领域的数据集数量与质量无法达到要求,研究人员本身也并不从事算法研究,导致若从随机初始化开始训练模型的过程变得异常的困难与低效。所以,从已经训练好的经典模型中来微调模型甚至是直接对想要的图像进行预测(本文的方式)对于一些计算机视觉领域甚至是跨学科领域无疑是一种非常好的方式。在未来,迁移学习会在更多的领域场景中得到应用,好的开源算法库也会越来越受到广大科研人员的认可,在此感谢那些在算法领域默默奉献的科研人员!
参考代码和视频:
源代码可参考:https://github.com/TommyZihao/MMSegmentation_Tutorials
B站视频:https://space.bilibili.com/1900783/channel/collectiondetail?sid=1631214