认识和安装MMSegmentation
官方教程:开始:安装和运行 MMSeg
由于我已经配置好pytorch的环境了,所以这里直接开始安装MMSegmentation
1. 安装MMSegmentation
-
pip install openmim:应该是类似pip的一个库, 用来安装python包的
-
mim install mmengine:
-
mim install “mmcv>=2.0.0”
-
pip install “mmsegmentation>=1.0.0”
2. 验证MMSegmentation
下载测试配置文件和模型文件,在pycharm的命令行输入:
mim download mmsegmentation --config pspnet_r50-d8_4xb2-40k_cityscapes-512x1024 --dest .
使用官方提供测试代码测试:
from mmseg.apis import inference_model, init_model, show_result_pyplot
import mmcv
config_file = 'pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py'
checkpoint_file = 'pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth'
# 根据配置文件和模型文件建立模型
model = init_model(config_file, checkpoint_file, device='cuda:0')
# 在单张图像上测试并可视化
img = 'demo/demo.png' # or img = mmcv.imread(img), 这样仅需下载一次
result = inference_model(model, img)
# 在新的窗口可视化结果
show_result_pyplot(model, img, result, show=True)
# 或者将可视化结果保存到图像文件夹中
# 您可以修改分割 map 的透明度 (0, 1].
show_result_pyplot(model, img, result, show=True, out_file='result.jpg', opacity=0.5)
# 在一段视频上测试并可视化分割结果
video = mmcv.VideoReader('video.mp4')
for frame in video:
result = inference_segmentor(model, frame)
show_result_pyplot(model, result, wait_time=1)
2.1 图片推理
直接运行会报错:FileNotFoundError: [Errno 2] No such file or directory: 'demo/demo.png'
,意思是官方代码提供的路径本地并没有
解决:在网上下载一个图片(这里我下载的是一个城市街道的图片),并命名为demo.png,将它放在工程目录demo下。
这样就运行出初步的结果了。
2.2 视频推理
图片测试完,video.mp4也是同样的错误。
这里再搞一段视频来,但是注意:这个视频的目录是根目录。
修改好video.mp4之后又有新的错误:NameError: name 'inference_segmentor' is not defined
,也就是代码中的inference_segmentor
找不到,编辑器里也同样报红。原因是官方修改了命名,但是文档没有及时更新。
解决:把
inference_segmentor
改成inference_model
。
然后又报错TypeError: show_result_pyplot() missing 1 required positional argument: 'result'
,说show_result_pyplot缺少参数result。
解决:再把
show_result_pyplot(model, result, wait_time=1)
改为show_result_pyplot(model, frame, result, wait_time=1)
。
现在就可以推理成功了,视频文件会逐帧plt.show出来。
2.3 修改后的完整代码
贴出修改后的完整代码:
"""
==========================================
@author: Seaton
@Time: 2023/8/15:10:41
@IDE: PyCharm
@Summary:测试MMSegmentation配置
==========================================
"""
import mmseg
from mmseg.apis import inference_model, init_model, show_result_pyplot
import mmcv
print('mmsegmentation版本', mmseg.__version__)
config_file = 'pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py'
checkpoint_file = 'pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth'
# 根据配置文件和模型文件建立模型
model = init_model(config_file, checkpoint_file, device='cuda:0')
# 在单张图像上测试并可视化
img = 'demo/demo.png' # or img = mmcv.imread(img), 这样仅需下载一次
result = inference_model(model, img)
print(result.keys())
# 在新的窗口可视化结果
# show_result_pyplot(model, img, result, show=True)
# 或者将可视化结果保存到图像文件夹中
# 您可以修改分割 map 的透明度 (0, 1].
show_result_pyplot(model, img, result, show=True, out_file='result.jpg', opacity=0.5)
# 在一段视频上测试并可视化分割结果
video = mmcv.VideoReader('demo/video.mp4') # 这里我把视频跟上面的图片放一起了
for frame in video:
result = inference_model(model, frame)
show_result_pyplot(model, frame, result, wait_time=1)