国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

mmsegmentation 訓(xùn)練自己的數(shù)據(jù)集

這篇具有很好參考價(jià)值的文章主要介紹了mmsegmentation 訓(xùn)練自己的數(shù)據(jù)集。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

open-mmlab有許多非常實(shí)用的框架,其中目標(biāo)檢測的話mmdetection確實(shí)很實(shí)用。但語義分割的話當(dāng)屬mmsegmentation,這篇博客就是介紹如何用mmsegmentation訓(xùn)練自己的數(shù)據(jù)集。

1.一天最無聊的事從搭環(huán)境開始

1.conda create -n openmmlab python=3.7 
2.conda activate openmmlab
3.conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=11.0
4.pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu110/torch1.7.0/index.html
5.pip install mmseg
#需要注意的是pytorch版本、cuda版本與mmcv版本需搭配,否則會出錯(cuò)。

mmdetection的環(huán)境mmsegmentation也可以用,有mmdetection環(huán)境的話就可以不用重新搭建了
給個(gè)代碼鏈接mmsegmentation

2.環(huán)境搭好下個(gè)官方的模型測試一下,測試腳本如下。

from mmseg.apis import inference_segmentor, init_segmentor
import mmcv

config_file = '../configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py'
checkpoint_file = '../ckpt/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth'

# 通過配置文件和模型權(quán)重文件構(gòu)建模型
model = init_segmentor(config_file, checkpoint_file, device='cuda:0')

# 對單張圖片進(jìn)行推理并展示結(jié)果
img = 'demo.png'  # or img = mmcv.imread(img), which will only load it once
result = inference_segmentor(model, img)
# 在新窗口中可視化推理結(jié)果
model.show_result(img, result, show=True)
# 或?qū)⒖梢暬Y(jié)果存儲在文件中
# 你可以修改 opacity 在(0,1]之間的取值來改變繪制好的分割圖的透明度
model.show_result(img, result, out_file='result.jpg', opacity=1)

mmsegmentation 訓(xùn)練自己的數(shù)據(jù)集
mmsegmentation 訓(xùn)練自己的數(shù)據(jù)集

3.至此,可以準(zhǔn)備自己的數(shù)據(jù)集了。數(shù)據(jù)集采用VOC格式的分割數(shù)據(jù)集,標(biāo)注好不知道怎么處理的,請參考博客VOC圖像分割數(shù)據(jù)集制作。

4.本博客采用deeplabV3為例。

mmsegmentation目錄下新建一個(gè)data用于存放自己的數(shù)據(jù)集
mmsegmentation 訓(xùn)練自己的數(shù)據(jù)集

5.修改圖像scale,不修改也可以,萬一報(bào)內(nèi)存錯(cuò)誤就改小點(diǎn)。

mmsegmentation 訓(xùn)練自己的數(shù)據(jù)集

# dataset settings
dataset_type = 'PascalVOCDataset'
data_root = 'data/VOCdevkit/VOC2012'
img_norm_cfg = dict(
    mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
crop_size = (512, 512)
train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations'),
    #修改圖像scale
    #dict(type='Resize', img_scale=(2048, 512), ratio_range=(0.5, 2.0)),
    dict(type='Resize', img_scale=(1280, 880), ratio_range=(0.5, 2.0)),
    dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75),
    dict(type='RandomFlip', prob=0.5),
    dict(type='PhotoMetricDistortion'),
    dict(type='Normalize', **img_norm_cfg),
    dict(type='Pad', size=crop_size, pad_val=0, seg_pad_val=255),
    dict(type='DefaultFormatBundle'),
    dict(type='Collect', keys=['img', 'gt_semantic_seg']),
]
test_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(
        type='MultiScaleFlipAug',
        img_scale=(1280, 880),
        # img_ratios=[0.5, 0.75, 1.0, 1.25, 1.5, 1.75],
        flip=False,
        transforms=[
            dict(type='Resize', keep_ratio=True),
            dict(type='RandomFlip'),
            dict(type='Normalize', **img_norm_cfg),
            dict(type='ImageToTensor', keys=['img']),
            dict(type='Collect', keys=['img']),
        ])
]
data = dict(
    samples_per_gpu=4,
    workers_per_gpu=4,
    train=dict(
        type=dataset_type,
        data_root=data_root,
        img_dir='JPEGImages',
        ann_dir='SegmentationClass',
        split='ImageSets/Segmentation/train.txt',
        pipeline=train_pipeline),
    val=dict(
        type=dataset_type,
        data_root=data_root,
        img_dir='JPEGImages',
        ann_dir='SegmentationClass',
        split='ImageSets/Segmentation/val.txt',
        pipeline=test_pipeline),
    test=dict(
        type=dataset_type,
        data_root=data_root,
        img_dir='JPEGImages',
        ann_dir='SegmentationClass',
        split='ImageSets/Segmentation/test.txt',
        pipeline=test_pipeline))

6.自己的任務(wù)可能類別與VOC類別不一樣,需要對class進(jìn)行修改,選了deeplabv3plus_r50-d8.py作為backbone。對其num_class進(jìn)行修改

mmsegmentation 訓(xùn)練自己的數(shù)據(jù)集

# model settings
norm_cfg = dict(type='SyncBN', requires_grad=True)
model = dict(
    type='EncoderDecoder',
    pretrained='open-mmlab://resnet50_v1c',
    backbone=dict(
        type='ResNetV1c',
        depth=50,
        num_stages=4,
        out_indices=(0, 1, 2, 3),
        dilations=(1, 1, 2, 4),
        strides=(1, 2, 1, 1),
        norm_cfg=norm_cfg,
        norm_eval=False,
        style='pytorch',
        contract_dilation=True),
    decode_head=dict(
        type='DepthwiseSeparableASPPHead',
        in_channels=2048,
        in_index=3,
        channels=512,
        dilations=(1, 12, 24, 36),
        c1_in_channels=256,
        c1_channels=48,
        dropout_ratio=0.1,
        #num_classes=class+background
        num_classes=3,
        norm_cfg=norm_cfg,
        align_corners=False,
        loss_decode=dict(
            type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)),
    auxiliary_head=dict(
        type='FCNHead',
        in_channels=1024,
        in_index=2,
        channels=256,
        num_convs=1,
        concat_input=False,
        dropout_ratio=0.1,
        #num_classes=class+background
        num_classes=3,
        norm_cfg=norm_cfg,
        align_corners=False,
        loss_decode=dict(
            type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)),
    # model training and testing settings
    train_cfg=dict(),
    test_cfg=dict(mode='whole'))

7.還需修改兩個(gè)地方就可以run了,去到對應(yīng)的路徑下找到class_names.py,由于數(shù)據(jù)格式是VOC的,所以只需要對voc_classes進(jìn)行修改就行了。

mmsegmentation 訓(xùn)練自己的數(shù)據(jù)集

# Copyright (c) OpenMMLab. All rights reserved.
import mmcv


def cityscapes_classes():
    """Cityscapes class names for external use."""
    return [
        'road', 'sidewalk', 'building', 'wall', 'fence', 'pole',
        'traffic light', 'traffic sign', 'vegetation', 'terrain', 'sky',
        'person', 'rider', 'car', 'truck', 'bus', 'train', 'motorcycle',
        'bicycle'
    ]


def ade_classes():
    """ADE20K class names for external use."""
    return [
        'wall', 'building', 'sky', 'floor', 'tree', 'ceiling', 'road', 'bed ',
        'windowpane', 'grass', 'cabinet', 'sidewalk', 'person', 'earth',
        'door', 'table', 'mountain', 'plant', 'curtain', 'chair', 'car',
        'water', 'painting', 'sofa', 'shelf', 'house', 'sea', 'mirror', 'rug',
        'field', 'armchair', 'seat', 'fence', 'desk', 'rock', 'wardrobe',
        'lamp', 'bathtub', 'railing', 'cushion', 'base', 'box', 'column',
        'signboard', 'chest of drawers', 'counter', 'sand', 'sink',
        'skyscraper', 'fireplace', 'refrigerator', 'grandstand', 'path',
        'stairs', 'runway', 'case', 'pool table', 'pillow', 'screen door',
        'stairway', 'river', 'bridge', 'bookcase', 'blind', 'coffee table',
        'toilet', 'flower', 'book', 'hill', 'bench', 'countertop', 'stove',
        'palm', 'kitchen island', 'computer', 'swivel chair', 'boat', 'bar',
        'arcade machine', 'hovel', 'bus', 'towel', 'light', 'truck', 'tower',
        'chandelier', 'awning', 'streetlight', 'booth', 'television receiver',
        'airplane', 'dirt track', 'apparel', 'pole', 'land', 'bannister',
        'escalator', 'ottoman', 'bottle', 'buffet', 'poster', 'stage', 'van',
        'ship', 'fountain', 'conveyer belt', 'canopy', 'washer', 'plaything',
        'swimming pool', 'stool', 'barrel', 'basket', 'waterfall', 'tent',
        'bag', 'minibike', 'cradle', 'oven', 'ball', 'food', 'step', 'tank',
        'trade name', 'microwave', 'pot', 'animal', 'bicycle', 'lake',
        'dishwasher', 'screen', 'blanket', 'sculpture', 'hood', 'sconce',
        'vase', 'traffic light', 'tray', 'ashcan', 'fan', 'pier', 'crt screen',
        'plate', 'monitor', 'bulletin board', 'shower', 'radiator', 'glass',
        'clock', 'flag'
    ]


# def voc_classes():
#     """Pascal VOC class names for external use."""
#     return [
#         'background', 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus',
#         'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse',
#         'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train',
#         'tvmonitor'
#     ]

def voc_classes():
    return ['background','你自己的類別','你自己的類別']

def cocostuff_classes():
    """CocoStuff class names for external use."""
    return [
        'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train',
        'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign',
        'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep',
        'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella',
        'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard',
        'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard',
        'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork',
        'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange',
        'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair',
        'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv',
        'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave',
        'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase',
        'scissors', 'teddy bear', 'hair drier', 'toothbrush', 'banner',
        'blanket', 'branch', 'bridge', 'building-other', 'bush', 'cabinet',
        'cage', 'cardboard', 'carpet', 'ceiling-other', 'ceiling-tile',
        'cloth', 'clothes', 'clouds', 'counter', 'cupboard', 'curtain',
        'desk-stuff', 'dirt', 'door-stuff', 'fence', 'floor-marble',
        'floor-other', 'floor-stone', 'floor-tile', 'floor-wood', 'flower',
        'fog', 'food-other', 'fruit', 'furniture-other', 'grass', 'gravel',
        'ground-other', 'hill', 'house', 'leaves', 'light', 'mat', 'metal',
        'mirror-stuff', 'moss', 'mountain', 'mud', 'napkin', 'net', 'paper',
        'pavement', 'pillow', 'plant-other', 'plastic', 'platform',
        'playingfield', 'railing', 'railroad', 'river', 'road', 'rock', 'roof',
        'rug', 'salad', 'sand', 'sea', 'shelf', 'sky-other', 'skyscraper',
        'snow', 'solid-other', 'stairs', 'stone', 'straw', 'structural-other',
        'table', 'tent', 'textile-other', 'towel', 'tree', 'vegetable',
        'wall-brick', 'wall-concrete', 'wall-other', 'wall-panel',
        'wall-stone', 'wall-tile', 'wall-wood', 'water-other', 'waterdrops',
        'window-blind', 'window-other', 'wood'
    ]


def loveda_classes():
    """LoveDA class names for external use."""
    return [
        'background', 'building', 'road', 'water', 'barren', 'forest',
        'agricultural'
    ]


def potsdam_classes():
    """Potsdam class names for external use."""
    return [
        'impervious_surface', 'building', 'low_vegetation', 'tree', 'car',
        'clutter'
    ]


def vaihingen_classes():
    """Vaihingen class names for external use."""
    return [
        'impervious_surface', 'building', 'low_vegetation', 'tree', 'car',
        'clutter'
    ]


def isaid_classes():
    """iSAID class names for external use."""
    return [
        'background', 'ship', 'store_tank', 'baseball_diamond', 'tennis_court',
        'basketball_court', 'Ground_Track_Field', 'Bridge', 'Large_Vehicle',
        'Small_Vehicle', 'Helicopter', 'Swimming_pool', 'Roundabout',
        'Soccer_ball_field', 'plane', 'Harbor'
    ]


def stare_classes():
    """stare class names for external use."""
    return ['background', 'vessel']


def cityscapes_palette():
    """Cityscapes palette for external use."""
    return [[128, 64, 128], [244, 35, 232], [70, 70, 70], [102, 102, 156],
            [190, 153, 153], [153, 153, 153], [250, 170, 30], [220, 220, 0],
            [107, 142, 35], [152, 251, 152], [70, 130, 180], [220, 20, 60],
            [255, 0, 0], [0, 0, 142], [0, 0, 70], [0, 60, 100], [0, 80, 100],
            [0, 0, 230], [119, 11, 32]]


def ade_palette():
    """ADE20K palette for external use."""
    return [[120, 120, 120], [180, 120, 120], [6, 230, 230], [80, 50, 50],
            [4, 200, 3], [120, 120, 80], [140, 140, 140], [204, 5, 255],
            [230, 230, 230], [4, 250, 7], [224, 5, 255], [235, 255, 7],
            [150, 5, 61], [120, 120, 70], [8, 255, 51], [255, 6, 82],
            [143, 255, 140], [204, 255, 4], [255, 51, 7], [204, 70, 3],
            [0, 102, 200], [61, 230, 250], [255, 6, 51], [11, 102, 255],
            [255, 7, 71], [255, 9, 224], [9, 7, 230], [220, 220, 220],
            [255, 9, 92], [112, 9, 255], [8, 255, 214], [7, 255, 224],
            [255, 184, 6], [10, 255, 71], [255, 41, 10], [7, 255, 255],
            [224, 255, 8], [102, 8, 255], [255, 61, 6], [255, 194, 7],
            [255, 122, 8], [0, 255, 20], [255, 8, 41], [255, 5, 153],
            [6, 51, 255], [235, 12, 255], [160, 150, 20], [0, 163, 255],
            [140, 140, 140], [250, 10, 15], [20, 255, 0], [31, 255, 0],
            [255, 31, 0], [255, 224, 0], [153, 255, 0], [0, 0, 255],
            [255, 71, 0], [0, 235, 255], [0, 173, 255], [31, 0, 255],
            [11, 200, 200], [255, 82, 0], [0, 255, 245], [0, 61, 255],
            [0, 255, 112], [0, 255, 133], [255, 0, 0], [255, 163, 0],
            [255, 102, 0], [194, 255, 0], [0, 143, 255], [51, 255, 0],
            [0, 82, 255], [0, 255, 41], [0, 255, 173], [10, 0, 255],
            [173, 255, 0], [0, 255, 153], [255, 92, 0], [255, 0, 255],
            [255, 0, 245], [255, 0, 102], [255, 173, 0], [255, 0, 20],
            [255, 184, 184], [0, 31, 255], [0, 255, 61], [0, 71, 255],
            [255, 0, 204], [0, 255, 194], [0, 255, 82], [0, 10, 255],
            [0, 112, 255], [51, 0, 255], [0, 194, 255], [0, 122, 255],
            [0, 255, 163], [255, 153, 0], [0, 255, 10], [255, 112, 0],
            [143, 255, 0], [82, 0, 255], [163, 255, 0], [255, 235, 0],
            [8, 184, 170], [133, 0, 255], [0, 255, 92], [184, 0, 255],
            [255, 0, 31], [0, 184, 255], [0, 214, 255], [255, 0, 112],
            [92, 255, 0], [0, 224, 255], [112, 224, 255], [70, 184, 160],
            [163, 0, 255], [153, 0, 255], [71, 255, 0], [255, 0, 163],
            [255, 204, 0], [255, 0, 143], [0, 255, 235], [133, 255, 0],
            [255, 0, 235], [245, 0, 255], [255, 0, 122], [255, 245, 0],
            [10, 190, 212], [214, 255, 0], [0, 204, 255], [20, 0, 255],
            [255, 255, 0], [0, 153, 255], [0, 41, 255], [0, 255, 204],
            [41, 0, 255], [41, 255, 0], [173, 0, 255], [0, 245, 255],
            [71, 0, 255], [122, 0, 255], [0, 255, 184], [0, 92, 255],
            [184, 255, 0], [0, 133, 255], [255, 214, 0], [25, 194, 194],
            [102, 255, 0], [92, 0, 255]]


#def voc_palette():
    """Pascal VOC palette for external use."""
   # return [[0, 0, 0], [128, 0, 0], [0, 128, 0], [128, 128, 0], [0, 0, 128],
           # [192, 0, 0], [64, 128, 0], [192, 128, 0], [64, 0, 128],
            #[192, 0, 128], [64, 128, 128], [192, 128, 128], [0, 64, 0],
            #[128, 64, 0], [0, 192, 0], [128, 192, 0], [0, 64, 128]]


def voc_palette():
    """Pascal VOC palette for external use."""
    return [[0, 0, 0], [128, 0, 0], [0, 128, 0]]

def cocostuff_palette():
    """CocoStuff palette for external use."""
    return [[0, 192, 64], [0, 192, 64], [0, 64, 96], [128, 192, 192],
            [0, 64, 64], [0, 192, 224], [0, 192, 192], [128, 192, 64],
            [0, 192, 96], [128, 192, 64], [128, 32, 192], [0, 0, 224],
            [0, 0, 64], [0, 160, 192], [128, 0, 96], [128, 0, 192],
            [0, 32, 192], [128, 128, 224], [0, 0, 192], [128, 160, 192],
            [128, 128, 0], [128, 0, 32], [128, 32, 0], [128, 0, 128],
            [64, 128, 32], [0, 160, 0], [0, 0, 0], [192, 128, 160], [0, 32, 0],
            [0, 128, 128], [64, 128, 160], [128, 160, 0], [0, 128, 0],
            [192, 128, 32], [128, 96, 128], [0, 0, 128], [64, 0, 32],
            [0, 224, 128], [128, 0, 0], [192, 0, 160], [0, 96, 128],
            [128, 128, 128], [64, 0, 160], [128, 224, 128], [128, 128, 64],
            [192, 0, 32], [128, 96, 0], [128, 0, 192], [0, 128, 32],
            [64, 224, 0], [0, 0, 64], [128, 128, 160], [64, 96, 0],
            [0, 128, 192], [0, 128, 160], [192, 224, 0], [0, 128, 64],
            [128, 128, 32], [192, 32, 128], [0, 64, 192], [0, 0, 32],
            [64, 160, 128], [128, 64, 64], [128, 0, 160], [64, 32, 128],
            [128, 192, 192], [0, 0, 160], [192, 160, 128], [128, 192, 0],
            [128, 0, 96], [192, 32, 0], [128, 64, 128], [64, 128, 96],
            [64, 160, 0], [0, 64, 0], [192, 128, 224], [64, 32, 0],
            [0, 192, 128], [64, 128, 224], [192, 160, 0], [0, 192, 0],
            [192, 128, 96], [192, 96, 128], [0, 64, 128], [64, 0, 96],
            [64, 224, 128], [128, 64, 0], [192, 0, 224], [64, 96, 128],
            [128, 192, 128], [64, 0, 224], [192, 224, 128], [128, 192, 64],
            [192, 0, 96], [192, 96, 0], [128, 64, 192], [0, 128, 96],
            [0, 224, 0], [64, 64, 64], [128, 128, 224], [0, 96, 0],
            [64, 192, 192], [0, 128, 224], [128, 224, 0], [64, 192, 64],
            [128, 128, 96], [128, 32, 128], [64, 0, 192], [0, 64, 96],
            [0, 160, 128], [192, 0, 64], [128, 64, 224], [0, 32, 128],
            [192, 128, 192], [0, 64, 224], [128, 160, 128], [192, 128, 0],
            [128, 64, 32], [128, 32, 64], [192, 0, 128], [64, 192, 32],
            [0, 160, 64], [64, 0, 0], [192, 192, 160], [0, 32, 64],
            [64, 128, 128], [64, 192, 160], [128, 160, 64], [64, 128, 0],
            [192, 192, 32], [128, 96, 192], [64, 0, 128], [64, 64, 32],
            [0, 224, 192], [192, 0, 0], [192, 64, 160], [0, 96, 192],
            [192, 128, 128], [64, 64, 160], [128, 224, 192], [192, 128, 64],
            [192, 64, 32], [128, 96, 64], [192, 0, 192], [0, 192, 32],
            [64, 224, 64], [64, 0, 64], [128, 192, 160], [64, 96, 64],
            [64, 128, 192], [0, 192, 160], [192, 224, 64], [64, 128, 64],
            [128, 192, 32], [192, 32, 192], [64, 64, 192], [0, 64, 32],
            [64, 160, 192], [192, 64, 64], [128, 64, 160], [64, 32, 192],
            [192, 192, 192], [0, 64, 160], [192, 160, 192], [192, 192, 0],
            [128, 64, 96], [192, 32, 64], [192, 64, 128], [64, 192, 96],
            [64, 160, 64], [64, 64, 0]]


def loveda_palette():
    """LoveDA palette for external use."""
    return [[255, 255, 255], [255, 0, 0], [255, 255, 0], [0, 0, 255],
            [159, 129, 183], [0, 255, 0], [255, 195, 128]]


def potsdam_palette():
    """Potsdam palette for external use."""
    return [[255, 255, 255], [0, 0, 255], [0, 255, 255], [0, 255, 0],
            [255, 255, 0], [255, 0, 0]]


def vaihingen_palette():
    """Vaihingen palette for external use."""
    return [[255, 255, 255], [0, 0, 255], [0, 255, 255], [0, 255, 0],
            [255, 255, 0], [255, 0, 0]]


def isaid_palette():
    """iSAID palette for external use."""
    return [[0, 0, 0], [0, 0, 63], [0, 63, 63], [0, 63, 0], [0, 63, 127],
            [0, 63, 191], [0, 63, 255], [0, 127, 63], [0, 127,
                                                       127], [0, 0, 127],
            [0, 0, 191], [0, 0, 255], [0, 191, 127], [0, 127, 191],
            [0, 127, 255], [0, 100, 155]]


def stare_palette():
    """STARE palette for external use."""
    return [[120, 120, 120], [6, 230, 230]]


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']
}


def get_classes(dataset):
    """Get class names of a dataset."""
    alias2name = {}
    for name, aliases in dataset_aliases.items():
        for alias in aliases:
            alias2name[alias] = name

    if mmcv.is_str(dataset):
        if dataset in alias2name:
            labels = eval(alias2name[dataset] + '_classes()')
        else:
            raise ValueError(f'Unrecognized dataset: {dataset}')
    else:
        raise TypeError(f'dataset must a str, but got {type(dataset)}')
    return labels


def get_palette(dataset):
    """Get class palette (RGB) of a dataset."""
    alias2name = {}
    for name, aliases in dataset_aliases.items():
        for alias in aliases:
            alias2name[alias] = name

    if mmcv.is_str(dataset):
        if dataset in alias2name:
            labels = eval(alias2name[dataset] + '_palette()')
        else:
            raise ValueError(f'Unrecognized dataset: {dataset}')
    else:
        raise TypeError(f'dataset must a str, but got {type(dataset)}')
    return labels

mmsegmentation 訓(xùn)練自己的數(shù)據(jù)集

# Copyright (c) OpenMMLab. All rights reserved.
import os.path as osp

from .builder import DATASETS
from .custom import CustomDataset


@DATASETS.register_module()
class PascalVOCDataset(CustomDataset):
    """Pascal VOC dataset.

    Args:
        split (str): Split txt file for Pascal VOC.
    """

    # CLASSES = ('background', 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle',
    #            'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog',
    #            'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa',
    #            'train', 'tvmonitor')
    CLASSES = ['background','你自己的類別','你自己的類別']

    # PALETTE = [[0, 0, 0], [128, 0, 0], [0, 128, 0], [128, 128, 0], [0, 0, 128],
    #            [128, 0, 128], [0, 128, 128], [128, 128, 128], [64, 0, 0],
    #            [192, 0, 0], [64, 128, 0], [192, 128, 0], [64, 0, 128],
    #            [192, 0, 128], [64, 128, 128], [192, 128, 128], [0, 64, 0],
    #            [128, 64, 0], [0, 192, 0], [128, 192, 0], [0, 64, 128]]
    #染色板,可根據(jù)需要自己設(shè)置
    PALETTE = [[0, 0, 0], [128, 0, 0], [0, 128, 0]]

    def __init__(self, split, **kwargs):
        super(PascalVOCDataset, self).__init__(
            img_suffix='.jpg', seg_map_suffix='.png', split=split, **kwargs)
        assert osp.exists(self.img_dir) and self.split is not None

8.最后一步,對mmsegmentation進(jìn)行重新編譯

python setup.py install

mmsegmentation 訓(xùn)練自己的數(shù)據(jù)集

9.訓(xùn)練,看圖說話

python tools/train.py configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug.py

mmsegmentation 訓(xùn)練自己的數(shù)據(jù)集文章來源地址http://www.zghlxwxcb.cn/news/detail-456612.html

10.測試腳本

from mmseg.apis import inference_segmentor, init_segmentor
import mmcv

config_file = '你自己的配置文件'
checkpoint_file = '模型保存路徑'

# 通過配置文件和模型權(quán)重文件構(gòu)建模型
model = init_segmentor(config_file, checkpoint_file, device='cuda:0')

# 對單張圖片進(jìn)行推理并展示結(jié)果
img = 'demo.png'  # or img = mmcv.imread(img), which will only load it once
result = inference_segmentor(model, img)
# 在新窗口中可視化推理結(jié)果
model.show_result(img, result, show=True)
# 或?qū)⒖梢暬Y(jié)果存儲在文件中
# 你可以修改 opacity 在(0,1]之間的取值來改變繪制好的分割圖的透明度
model.show_result(img, result, out_file='result.jpg', opacity=1)

11測試多張圖

python tools/test.py work_dirs/ann_r50-d8_512x512_20k_voc12aug_baseline/ann_r50-d8_512x512_20k_voc12aug.py work_dirs/ann_r50-d8_512x512_20k_voc12aug_baseline/latest.pth --show-dir output

到了這里,關(guān)于mmsegmentation 訓(xùn)練自己的數(shù)據(jù)集的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • DETR訓(xùn)練自己的數(shù)據(jù)集

    DETR訓(xùn)練自己的數(shù)據(jù)集

    DETR是一個(gè)利用transformer實(shí)現(xiàn)端到端目標(biāo)檢測的模型。本文記錄利用官方提供的代碼來訓(xùn)練驗(yàn)證自己的數(shù)據(jù)集的過程以及一些注意事項(xiàng)。 此次項(xiàng)目用到的數(shù)據(jù)集為自己制造的自動駕駛領(lǐng)域的路況數(shù)據(jù)集,該數(shù)據(jù)集一共包含57個(gè)類別: names = [ \\\"i2\\\", \\\"i4\\\", \\\"i5\\\", \\\"il100\\\", \\\"il60\\\", \\\"il80\\\", \\\"io

    2023年04月17日
    瀏覽(38)
  • TransUnet訓(xùn)練自己的數(shù)據(jù)集

    TransUnet訓(xùn)練自己的數(shù)據(jù)集

    1.原始數(shù)據(jù)集如下圖所示分images和labels,若數(shù)據(jù)集是png/jpg....格式,首先需要將每一張圖的image和其對應(yīng)的label合并轉(zhuǎn)化為一個(gè).npz文件. train文件轉(zhuǎn)化為?train_npz文件;val轉(zhuǎn)化為test_vol_h5文件,如圖(注意這里訓(xùn)練集與測試集均轉(zhuǎn)化為.npz格式,需修改讀取文件的方法,具體是修改

    2023年04月12日
    瀏覽(17)
  • 使用SwinUnet訓(xùn)練自己的數(shù)據(jù)集

    使用SwinUnet訓(xùn)練自己的數(shù)據(jù)集

    參考博文: https://blog.csdn.net/qq_37652891/article/details/123932772 遙感圖像多類別語義分割,總共分為7類(包括背景) image: label_rgb label(這里并不是全黑,其中的類別取值為 0,1,2,3,4,5,6 ),此后的訓(xùn)練使用的也是這樣的數(shù)據(jù) 數(shù)據(jù)地址 百度云: https://pan.baidu.com/s/1zZHnZfBgVWxs6T

    2024年02月04日
    瀏覽(23)
  • 使用MMDetection訓(xùn)練自己的數(shù)據(jù)集

    使用MMDetection訓(xùn)練自己的數(shù)據(jù)集

    本文主要闡述如何使用 mmdetection 訓(xùn)練自己的數(shù)據(jù),包括配置文件的修改,訓(xùn)練時(shí)的數(shù)據(jù)增強(qiáng),加載預(yù)訓(xùn)練權(quán)重以及繪制損失函數(shù)圖等。這里承接上一篇文章,默認(rèn)已經(jīng)準(zhǔn)備好了 COCO 格式數(shù)據(jù)集且已安裝 mmdetection ,環(huán)境也已經(jīng)配置完成。 這里說明一下,因?yàn)?mmdetection 更新至

    2024年02月06日
    瀏覽(24)
  • PaddleOCR訓(xùn)練自己模型(1)----數(shù)據(jù)準(zhǔn)備

    PaddleOCR訓(xùn)練自己模型(1)----數(shù)據(jù)準(zhǔn)備

    PaddleOCR開源代碼(下載的是2.6RC版本的,可以根據(jù)自己需求下載) 具體環(huán)境安裝就不詳細(xì)介紹了, 挺簡單的,也挺多教程的。 二、數(shù)據(jù)集準(zhǔn)備及制作 (1)下載完代碼及配置完環(huán)境之后,運(yùn)行PPOCRLabel.py文件,打開標(biāo)注軟件( 2.7版本的會運(yùn)行報(bào)錯(cuò),解決方案如下 )解決PPOCR

    2024年04月16日
    瀏覽(26)
  • 第Y2周:訓(xùn)練自己的數(shù)據(jù)集

    第Y2周:訓(xùn)練自己的數(shù)據(jù)集

    ?? 本文為??365天深度學(xué)習(xí)訓(xùn)練營 中的學(xué)習(xí)記錄博客 ?? 原作者:K同學(xué)啊|接輔導(dǎo)、項(xiàng)目定制 我的環(huán)境: 數(shù)據(jù)集來源:kaggle水果檢測 目錄結(jié)構(gòu)如下: 這個(gè)文件的作用主要是劃分訓(xùn)練以及驗(yàn)證集的文件名 執(zhí)行之后會生成如下文件: 文件中是具體訓(xùn)練和驗(yàn)證的文件名: 主要依

    2024年02月07日
    瀏覽(15)
  • yolov5訓(xùn)練自己的數(shù)據(jù)集

    yolov5訓(xùn)練自己的數(shù)據(jù)集

    1.YOLOv5為開源代碼,直接從github上下載,首先打開github官網(wǎng),下載。 下載使用pycharm打開,有圖中這些文件,? ?其中 data:主要是存放一些超參數(shù)的配置文件(這些文件(yaml文件)是用來配置訓(xùn)練集和測試集還有驗(yàn)證集的路徑的,其中還包括目標(biāo)檢測的種類數(shù)和種類的名稱)

    2024年02月07日
    瀏覽(846)
  • detectron2訓(xùn)練自己的數(shù)據(jù)集

    detectron2訓(xùn)練自己的數(shù)據(jù)集

    ? Detectron2是Facebook AI Research的下一代庫,是一個(gè)提供最先進(jìn)的檢測和分割算法的平臺。它是Detectron和mask-benchmark的繼承者。Detectron是Facebook人工智能研究的軟件系統(tǒng),它實(shí)現(xiàn)了最先進(jìn)的目標(biāo)檢測算法,包括了Mask R-CNN,它是由python編寫的,由caffe2深度學(xué)習(xí)框架提供支持。 ? 在

    2024年02月02日
    瀏覽(17)
  • Mask RCNN訓(xùn)練自己的數(shù)據(jù)集

    Mask RCNN訓(xùn)練自己的數(shù)據(jù)集

    Mask RCNN作為實(shí)例分割的經(jīng)典算法,對于圖像分割的初學(xué)者來說,還是很有必要了解下的。 原mask rcnn的Tensorflow版本是1.13,這里提供tf2.5的mask rcnn的github源碼地址:https://github.com/zouyuelin/MASK_RCNN_2.5.0 目錄 一、制作數(shù)據(jù)集 1.下載安裝labelme ?2.標(biāo)注數(shù)據(jù)集 3.labelme數(shù)據(jù)集轉(zhuǎn)化 二、模

    2024年02月15日
    瀏覽(15)
  • 【DETR】訓(xùn)練自己的數(shù)據(jù)集-實(shí)踐筆記

    【DETR】訓(xùn)練自己的數(shù)據(jù)集-實(shí)踐筆記

    DETR(Detection with TRansformers)是基于transformer的端對端目標(biāo)檢測,無NMS后處理步驟,無anchor。 實(shí)現(xiàn)使用NWPUVHR10數(shù)據(jù)集訓(xùn)練DETR. NWPU數(shù)據(jù)集總共包含十種類別目標(biāo),包含650個(gè)正樣本,150個(gè)負(fù)樣本(沒有用到)。 代碼:https://github.com/facebookresearch/detr 1.數(shù)據(jù)集準(zhǔn)備 DETR需要的數(shù)據(jù)集格式

    2024年02月05日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包