mmseg库代码实践

本节课程是子豪兄倾心讲解,太棒啦~!每次听子豪兄的讲课都觉得很清晰,对于入门同学很友好。

前面一些和其他mm算法库同样的操作就略过啦,这就是mm系列算法库的一个很重要的意义,能学会一个就会好多模型任务的使用,哪怕你不是很了解模型本身间的区别与设计。

准备:checkpoint权重文件以作预训练权重;图像、视频用于测试的素材;dataset;torch、mmcv、mmdet、mmengine、mmseg的安装;很建议同时进行所有模块的测试:例如torch、mmseg的测试,可选的同样设置matplotlib字体库中文字体测试;

原来cityscape和ade20k是作为语义分割任务的主要benchmark。

在使用image_demo.py进行单图推理时,有个不常用的参数选择:--opacity 0.5 指定可视化的透明度。

用inference_model接口获得两个键值,'seg_logits' & 'pred_sem_seg'(用result来承接这个接口获得的信息),后者代表着类别信息,全图每一个像素的类别;可以可视化查看:

img_mask = pred_sem_seg.data[0].detach().cpu().numpy()

 

可见地,这是一个单通道的矩阵,而正如前文所说,此时增加参数,叠加透明度的设置可以让原图显示在这个通道图中,让视觉更加舒服。(plt.imshow( *, alpha = 0.5))

seg_logits存放了每个像素,每个类别的置信度

同时可以查看某一类的置信度,设置如下:

i=2
plt.imshow(result.seg_logits.data-capu().numpy()[i,:,:])
plt.show()

使用mmseg的官方可视化工具show_result_pyplot的话可以如下设置:

Visualization = show_result_pyplot(model, img_path, result, opacity=0.8, title='MMSeg', out_file='outputs/B2.jpg')

mmseg还提供了对应于具体dataset进行设置的可视化方案,此方案可给出具体图例,在mmseg/datasets/具体数据集.py中描述。

视频的seg推理,通过对每一帧进行预测,最后叠加起来完成整体视频的预测。(实际上会创建一个temp来存放每一帧的推理,然后把每一帧的推理结果叠加起来,再删除temp)

视频后续内容没什么需要着重强调的了,我就再增加一些本次作业中的注意事项吧:

1. 西瓜的数据集中img和ann有一个文件的文件名不匹配,多了个'.1.jpg'的'.1',将img和ann中的图片文件名修改一致即可。

2.本次作业除了子豪兄已经完成的灰度转化之外,最难的难点可能就是去修改dataset类别了,提供以下参考:

# 创建mmseg/datasets/xigua.py
from mmseg.registry import DATASETS
from .basesegdataset import BaseSegDataset


@DATASETS.register_module()
class XiguaDataset(BaseSegDataset):
    """
    用来分西瓜的,一共五类。
    / 背景 / 0
    red 西瓜红瓤 多段线(polygon) 1
    green 西瓜外壳 多段线(polygon) 2
    white 西瓜白皮 多段线(polygon) 3
    seed-black 西瓜黑籽 多段线(polygon) 4
    seed-white 西瓜白籽 多段线(polygon) 5
    """
    METAINFO = dict(
        classes=('red','green','white','seed-black','seed-white',),
        palette=[[120, 120, 120], [180, 120, 120], [6, 230, 230], [80, 50, 50],
                 [4, 200, 3],
                ]
    )

    def __init__(self,
                 img_suffix='.jpg',
                 seg_map_suffix='.png',
                 reduce_zero_label=True,
                 **kwargs) -> None:
        super().__init__(
            img_suffix=img_suffix,
            seg_map_suffix=seg_map_suffix,
            reduce_zero_label=reduce_zero_label,
            **kwargs)
# 本质上是在_init_.py中增加注册,举个例子,希望不理解的同学通过例子可以理解
# Copyright (c) OpenMMLab. All rights reserved.
# yapf: disable
from .ade import ADE20KDataset
from .basesegdataset import BaseSegDataset
from .chase_db1 import ChaseDB1Dataset
from .cityscapes import CityscapesDataset
from .coco_stuff import COCOStuffDataset
from .dark_zurich import DarkZurichDataset
from .dataset_wrappers import MultiImageMixDataset
from .decathlon import DecathlonDataset
from .drive import DRIVEDataset
from .hrf import HRFDataset
from .isaid import iSAIDDataset
from .isprs import ISPRSDataset
from .lip import LIPDataset
from .loveda import LoveDADataset
from .night_driving import NightDrivingDataset
from .pascal_context import PascalContextDataset, PascalContextDataset59
from .potsdam import PotsdamDataset
from .refuge import REFUGEDataset
from .stare import STAREDataset



from .xigua import XiguaDataset



from .synapse import SynapseDataset
# yapf: disable
from .transforms import (CLAHE, AdjustGamma, BioMedical3DPad,
                         BioMedical3DRandomCrop, BioMedical3DRandomFlip,
                         BioMedicalGaussianBlur, BioMedicalGaussianNoise,
                         BioMedicalRandomGamma, GenerateEdge, LoadAnnotations,
                         LoadBiomedicalAnnotation, LoadBiomedicalData,
                         LoadBiomedicalImageFromFile, LoadImageFromNDArray,
                         PackSegInputs, PhotoMetricDistortion, RandomCrop,
                         RandomCutOut, RandomMosaic, RandomRotate,
                         RandomRotFlip, Rerange, ResizeShortestEdge,
                         ResizeToMultiple, RGB2Gray, SegRescale)
from .voc import PascalVOCDataset

# yapf: enable
__all__ = [
    'BaseSegDataset', 'BioMedical3DRandomCrop', 'BioMedical3DRandomFlip',
    'CityscapesDataset', 'PascalVOCDataset', 'ADE20KDataset',
    'PascalContextDataset', 'PascalContextDataset59', 'ChaseDB1Dataset',
    'DRIVEDataset', 'HRFDataset', 'STAREDataset', 'DarkZurichDataset',
    'NightDrivingDataset', 'COCOStuffDataset', 'LoveDADataset',
    'MultiImageMixDataset', 'iSAIDDataset', 'ISPRSDataset', 'PotsdamDataset',
    'LoadAnnotations', 'RandomCrop', 'SegRescale', 'PhotoMetricDistortion',
    'RandomRotate', 'AdjustGamma', 'CLAHE', 'Rerange', 'RGB2Gray',
    'RandomCutOut', 'RandomMosaic', 'PackSegInputs', 'ResizeToMultiple',
    'LoadImageFromNDArray', 'LoadBiomedicalImageFromFile',
    'LoadBiomedicalAnnotation', 'LoadBiomedicalData', 'GenerateEdge',
    'DecathlonDataset', 'LIPDataset', 'ResizeShortestEdge',
    'BioMedicalGaussianNoise', 'BioMedicalGaussianBlur',
    'BioMedicalRandomGamma', 'BioMedical3DPad', 'RandomRotFlip',
    'SynapseDataset', 'REFUGEDataset','XiguaDataset'
]
# 还要去mmseg/utils/class_names.py进行以下修改

def xigua_classes():
    return[
        'red','green','white','seed-black','seed-white',
    ]

def xigua_palette():
    [
    [120, 120, 120], [180, 120, 120], [6, 230, 230], [80, 50, 50],
                 [4, 200, 3],
    ]

dataset_aliases = {
    'cityscapes': ['cityscapes'],
    'ade': ['ade', 'ade20k'],
    'voc': ['voc', 'pascal_voc', 'voc12', 'voc12aug'],
    'loveda': ['loveda'],
    'potsdam': ['potsdam'],
    'vaihingen': ['vaihingen'],
    'cocostuff': [
        'cocostuff', 'cocostuff10k', 'cocostuff164k', 'coco-stuff',
        'coco-stuff10k', 'coco-stuff164k', 'coco_stuff', 'coco_stuff10k',
        'coco_stuff164k'
    ],
    'isaid': ['isaid', 'iSAID'],
    'stare': ['stare', 'STARE'],
    'lip': ['LIP', 'lip'],


    'xigua':['xigua']


}

那么本次内容到此为止啦~大家加油完成笔记和提交作业鸭!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值