安装MMSegmentation
说明
本教程使用jupyter notebook编写, 可新建一个目录,将代码下载运行
本机环境
!uname -v
#91~18.04.1-Ubuntu SMP Fri Jul 23 13:36:29 UTC 2021
!lspci | grep -i vga
02:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1)
03:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1)
!nvidia-smi
Fri Apr 28 15:15:23 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.63.01 Driver Version: 470.63.01 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:02:00.0 Off | N/A |
| 0% 39C P8 10W / 280W | 13MiB / 11178MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 NVIDIA GeForce ... Off | 00000000:03:00.0 Off | N/A |
| 0% 36C P8 9W / 250W | 226MiB / 11178MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 1393 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 2225 G /usr/lib/xorg/Xorg 4MiB |
| 1 N/A N/A 1393 G /usr/lib/xorg/Xorg 18MiB |
| 1 N/A N/A 1578 G /usr/bin/gnome-shell 72MiB |
| 1 N/A N/A 2225 G /usr/lib/xorg/Xorg 101MiB |
| 1 N/A N/A 2372 G /usr/bin/gnome-shell 24MiB |
| 1 N/A N/A 2582 G ...setup/gnome-initial-setup 2MiB |
+-----------------------------------------------------------------------------+
Conda虚拟环境
步骤0. 安装conda
步骤1. 创建一个 conda 环境,并激活
conda create --name openmmlab python=3.8 -y
conda activate openmmlab
%conda create --name openmmlab python=3.8 -y
# 在notebook中使用无法conda activate,需要手动切换,新环境需要安装ipykernel
# %conda activate openmmlab
步骤2. 参考pytorch官网安装pytorch
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia -y
查看是否torch能否成功调用GPU
%conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia -y
import torch
torch.cuda.is_available()
True
安装mmseg
步骤0. 安装MMCV
pip install -U openmim
mim install mmengine
mim install "mmcv>=2.0.0"
%pip install -U openmim
!mim install mmengine
!mim install "mmcv>=2.0.0"
步骤1. MMSegmentation
git clone -b main https://github.com/open-mmlab/mmsegmentation.git
cd mmsegmentation
pip install -v -e .
# 连接不到github可以把连接换成gitee
!git clone -b main https://gitee.com/open-mmlab/mmsegmentation.git
%cd mmsegmentation
%pip install -v -e .
验证是否安装成功
为了验证 MMSegmentation 是否正确安装,MMSegmentation提供了一些示例代码来运行一个推理 demo 。
步骤1. 下载配置文件和模型文件
!mim download mmsegmentation --config pspnet_r50-d8_4xb2-40k_cityscapes-512x1024 --dest .
步骤 2. 验证推理 demo
!python demo/image_demo.py demo/demo.png configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth --device cuda:0 --out-file result.jpg
查看推理结果
import matplotlib.pyplot as plt
from PIL import Image
img = Image.open('demo/demo.png')
pred = Image.open('result.jpg')
plt.figure(figsize=(12, 6))
plt.subplot(121)
plt.xticks([])
plt.yticks([])
plt.imshow(img)
plt.title('image')
plt.subplot(122)
plt.imshow(pred)
plt.xticks([])
plt.yticks([])
plt.title('predict')
plt.show()
使用现有模型进行训练和测试(CHASE_DB1数据集)
步骤1. 准备CHASE_DB1数据集
!wget https://staffnet.kingston.ac.uk/~ku15565/CHASE_DB1/assets/CHASEDB1.zip
!python tools/dataset_converters/chase_db1.py CHASEDB1.zip
步骤2. 使用UNet进行训练
选择configs/unet/unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128.py进行训练,为了缩短时间,仅作示例,在文件中添加一行
train_cfg = dict(type=‘IterBasedTrainLoop’, max_iters=4000, val_interval=400)
完整unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128.py文件内容如下
_base_ = [
'../_base_/models/fcn_unet_s5-d16.py', '../_base_/datasets/chase_db1.py',
'../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py'
]
crop_size = (128, 128)
data_preprocessor = dict(size=crop_size)
model = dict(
data_preprocessor=data_preprocessor,
test_cfg=dict(crop_size=(128, 128), stride=(85, 85)))
train_cfg = dict(type='IterBasedTrainLoop', max_iters=4000, val_interval=400)
!python tools/train.py configs/unet/unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128.py
将mmsegmentation/mmseg/datasets/chase_db1.py的最后一行注释掉
assert self.file_client.exists(self.data_prefix[‘img_path’])
重新运行
!python tools/train.py configs/unet/unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128.py
步骤3. 测试
运行测试发现指定–show-dir参数后,并没有输出结果图,通过debug发现,根据SegVisualizationHook的文档,interval默认值为50,及50个iter显示一次,但CHASE_DB1测试集数据不足50张,所以没有输出。通常测试输出时期望能够可视化查看所有图片,但在schedules中修改SegVisualizationHook会影响到训练,于是选择在mmsegmentation/mmseg/.mim/tools/test.py中对trigger_visualization_hook函数进行修改,添加visualization_hook[‘interval’] = 1,代码如下
def trigger_visualization_hook(cfg, args):
default_hooks = cfg.default_hooks
if 'visualization' in default_hooks:
visualization_hook = default_hooks['visualization']
# Turn on visualization
visualization_hook['draw'] = True
# 指定添加interval为1
visualization_hook['interval'] = 1
if args.show:
visualization_hook['show'] = True
visualization_hook['wait_time'] = args.wait_time
if args.show_dir:
visulizer = cfg.visualizer
visulizer['save_dir'] = args.show_dir
else:
raise RuntimeError(
'VisualizationHook must be included in default_hooks.'
'refer to usage '
'"visualization=dict(type=\'VisualizationHook\')"')
return cfg
# 根据自己的情况修改checkpoint和show-dir的路径
!python tools/test.py configs/unet/unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128.py work_dirs/unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128/iter_4000.pth --show-dir work_dirs/unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128/result
查看测试图片
img = Image.open('work_dirs/unet-s5-d16_fcn_4xb4-40k_chase-db1-128x128/result/vis_data/vis_image/test_Image_11L.png_0.png')
plt.imshow(img)
plt.xticks([])
plt.yticks([])
plt.show()