mmsegmentation教程
下载预训练权重
github–>mmsegmentation–>model zoo–>XXX model(例如:PSPNet)–>找到预选连权重与config的前缀一致:pspnet_r50-d8_4xb2-40k_cityscapes-512x1024 (model)
了解配置文件
查看配置文件,可以运行 python tools/misc/print_config.py /PATH/TO/CONFIG 来查看完整的配置文件。
python tools/misc/print_config.py configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480.py
准备数据集
- 按照同济子豪兄的西瓜语义分割数据集进行制作
- 建立mmseg/datasets/My_Dataset.py
构建模型
- 执行以下两步生成完整的配置文件,在文件夹work_dirs中
cd mmsegmentation
python tools/train.py configs/deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480.py
- 复制在configs/deeplabv3plus并命名为:my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480.py
- 修改完整的配置文件的num_classes,所有的num_classes=背景+类别数
- 修改完整的配置文件的dataloader的路径
- 找到路径mmseg/datasets,复制pascal_context.py模仿建立my_pascal_context.py,在init.py中导入,并随后在配置文件中修改数据集格式。
- 将type='SyncBN’修改成type=‘BN’
- 添加更多的评估指标’mDice’,'mFscore’等等
- 修改完成后请pip install -v -e .或者python setup.py install
模型训练
- 模型训练
方法一:注意tools/train.py ‘xxx’和’–xxx’的区别,有’–‘可以添加也可以不添加,无’–'是必须添加。
python tools/train.py configs/my_deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480.py
方法二: train.py–>Configuration–>Parameters: E:/Python_Project/mmsegmentation_ours/configs/my_deeplabv3plus/deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480.py --work-dir mmseg_log -->apply–>run train.py
模型测试
- 对验证集或者测试集上图片进行测试
python tools/test.py configs/deeplabv3plus/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480.py work_dirs/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480/iter_5000.pth --work-dir work_dirs/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480/test --show --show-dir work_dirs/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480/test_img --out work_dirs/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480/test_images
- 单张图像分割显示:参考同济子豪兄
- 批量图像分割显示:参考同济子豪兄
模型分析实用工具
- 计算参数量(params)和计算量( FLOPs)
python tools/analysis_tools/get_flops.py configs/deeplabv3plus/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480.py --shape 512 512
注意:将tools/analysis_tools/get_flops.py进行以下修改:
outputs = get_model_complexity_info(
model,
# input_shape,#注释掉
inputs=data['inputs'],
show_table=False,
show_arch=False)
- 计算FPS,特别注意,在同一个benchmark上面对比性能指标,才有意义,200张以上才有效。
python tools/analysis_tools/benchmark.py configs/deeplabv3plus/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480.py work_dirs/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480/iter_5000.pth
- 获得Grad-CAM热力图,打印出网络结构:–category-index,仅仅包含了类别,不包括背景
python tools/analysis_tools/visualization_cam.py data/Watermelon87_Semantic_Seg_Mask/img_dir/test/denn-ke-11-7.jpg configs/deeplabv3plus/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480.py work_dirs/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480/iter_5000.pth --target-layers backbone.layer4[2].relu --category-index 2 --device cuda:0
python tools/analysis_tools/visualization_cam.py data/Watermelon87_Semantic_Seg_Mask/img_dir/test/denn-ke-11-7.jpg configs/deeplabv3plus/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480.py work_dirs/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480/iter_5000.pth --target-layers decode_head.sep_bottleneck[1].pointwise_conv.activate --category-index 1 --device cuda:0
- 画出混淆矩阵
python tools/analysis_tools/confusion_matrix.py configs/deeplabv3plus/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480.py work_dirs/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480/test_images work_dirs/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480/confusion_matrix
- 浏览数据集
python tools/analysis_tools/browse_dataset.py configs/deeplabv3plus/my_deeplabv3plus_r50-d8_4xb4-40k_pascal-context-59-480x480.py
- 分析日志文件参考同济子豪兄
模型部署
- MMDeploy-在线模型转换工具
在线模型转换工具:https://platform.openmmlab.com/deploee
在线模型测速工具:https://platform.openmmlab.com/deploee/task-profile-list - 模型本地部署参考同济子豪兄