【语义分割】使用MMSegmentation训练VOC格式自定义数据集

本文详细介绍了如何在MMSeg中准备VOC格式的数据集,选择并修改模型配置,如DeepLabV3,以及进行模型训练和图片批量推理的过程。同时提到了与MMDetection库相关的目标检测和自定义COCO数据集的训练示例。
部署运行你感兴趣的模型镜像

1.自定义数据集(VOC格式)的准备

1.1. 将数据集按照以下路径存放到MMSeg目录
mmsegmentation
|--data
|  |--VOCdevkit
|     |--VOC2012
|        |--Annotations
|           |-- 01.xml
|           |-- 02.xml
|
|        |--ImageSets
|           |-- Main
|           |-- Segmentation
|
|        |-- JPEGImages
|           |-- 01.jpg
|           |-- 02.jpg
|
|        |-- SegmentationClass
|           |-- 01.png
|           |-- 02.png|
1.2. 选择模型和预训练权重
1.3. 修改数据集配置文件

查看所选模型的配置文件,以训练DeepLabV3+为例:

(1) 修改数据集信息为:

'../_base_/datasets/pascal_voc12.py'

(2) 进入模型根目录文件修改classes数:configs/_base_/models/deeplabv3_r50-d8.py

(3) 进入voc数据集配置文件修改数据集类别信息:

(4) 进入训练参数配置文件修改预训练模型:configs/_base_/default_runtime.py

1.4. 每次修改完config文件需进行setup
python setup.py install

2. 模型训练

python tools/train.py config.py

以训练DeepLabV3+为例:

python tools/train.py configs/deeplabv3/deeplabv3_r50-d8_4xb4-40k_voc12aug-512x512.py

3. 模型图片批量推理

import os
import torch
import cv2
import argparse
import numpy as np
from pprint import pprint
from tqdm import tqdm
from mmseg.apis import init_model, inference_model

DEVICE = torch.device('cuda:0') if torch.cuda.is_available() else torch.device('cpu')
IMAGE_FILE_PATH = r"data/VOCdevkit/VOC2012/JPEGImages"
CONFIG = r'work_dirs/deeplabv3_r50-d8_4xb4-40k_voc12aug-512x512/deeplabv3_r50-d8_4xb4-40k_voc12aug-512x512.py'
CHECKPOINT = r'work_dirs/deeplabv3_r50-d8_4xb4-40k_voc12aug-512x512/iter_40000.pth'
SAVE_DIR = r"work_dir\infer_results"


def parse_args():
    parser = argparse.ArgumentParser(description='Visualize CAM')
    parser.add_argument('--img', default=IMAGE_FILE_PATH, help='Image file')
    parser.add_argument('--config', default=CONFIG, help='Config file')
    parser.add_argument('--checkpoint', default=CHECKPOINT, help='Checkpoint file')
    parser.add_argument('--device', default=DEVICE, help='device')
    parser.add_argument('--save_dir', default=SAVE_DIR, help='save_dir')

    args = parser.parse_args()
    return args


def make_full_path(root_list, root_path):
    file_full_path_list = []
    for filename in root_list:
        file_full_path = os.path.join(root_path, filename)
        file_full_path_list.append(file_full_path)
    return file_full_path_list


def read_filepath(root):
    from natsort import natsorted
    test_image_list = natsorted(os.listdir(root))
    test_image_full_path_list = make_full_path(test_image_list, root)
    return test_image_full_path_list


def apply_colormap(pred_mask):
    color_map = {
        0: [0, 0, 0],  # black: background
        1: [0, 255, 255],  # yellow: careful
        2: [255, 0, 0],  # blue: passable
        3: [0, 0, 255]  # red: impassable
    }

    rgb_image = np.zeros((*pred_mask.shape, 3), dtype=np.uint8)

    for key in color_map:
        rgb_image[pred_mask == key] = color_map[key]

    return rgb_image


def main():
    args = parse_args()

    model_mmseg = init_model(args.config, args.checkpoint, device=args.device)

    for imgs in tqdm(read_filepath(args.img)):
        result = inference_model(model_mmseg, imgs)
        pred_mask = result.pred_sem_seg.data.squeeze(0).detach().cpu().numpy().astype(np.uint8)

        colored_mask = apply_colormap(pred_mask)

        save_path = os.path.join(args.save_dir, f"{os.path.basename(args.config).split('.')[0]}")
        if not os.path.exists(save_path):
            os.makedirs(save_path)

        cv2.imwrite(os.path.join(save_path, f"{os.path.basename(result.img_path).split('.')[0]}.png"), colored_mask,
                    [cv2.IMWRITE_PNG_COMPRESSION, 0])


if __name__ == '__main__':
    main()

MMLab相关指令:

【目标检测】MMDetection常用指令_model.show_result_ericdiii的博客-优快云博客文章浏览阅读1.6k次,点赞2次,收藏5次。目标检测MMDetection库常用指令_model.show_resulthttps://blog.youkuaiyun.com/ericdiii/article/details/125722277?spm=1001.2014.3001.5502【目标检测】使用MMDetection训练自定义COCO格式数据集_mmdetection训练自己的coco数据集-优快云博客文章浏览阅读1.9k次,点赞3次,收藏19次。使用MMDetection训练自定义COCO格式数据集_mmdetection训练自己的coco数据集https://blog.youkuaiyun.com/ericdiii/article/details/126812948?spm=1001.2014.3001.5501

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

### 使用 Swin Transformer 进行语义分割训练自定义数据集 #### 配置环境与依赖 为了使用 Swin Transformer 进行语义分割任务,首先需要安装必要的库和工具包。推荐基于 MMSegmentation 或者其他支持 Swin Transformer 的开源框架来构建实验环境[^1]。 ```bash pip install mmcv-full mmdet mmsegmentation ``` 上述命令会安装 `mmcv` 和其扩展版本 `mmcv-full`,以及用于目标检测的 `mmdetection` 和专门针对语义分割的 `mmsegmentation` 工具链[^2]。 --- #### 数据集准备 对于自定义数据集,需按照标准格式(如 COCO、Pascal VOC 等)进行标注处理。以下是具体步骤: 1. **创建数据目录结构** 自定义数据集应遵循如下路径布局: ``` custom_dataset/ ├── images/ │ ├── train/ │ └── val/ ├── annotations/ │ ├── train.json │ └── val.json ``` 2. **转换为 JSON 文件** 如果原始标签不是 COCO 格式,则可以利用脚本将其转化为兼容的标准格式。例如,MMSegmentation 提供了多种工具帮助完成这一操作[^3]。 --- #### 修改配置文件 Swin Transformer 的配置文件通常以 YAML 格式编写,包含了模型架构、优化器设置以及其他重要参数的信息。下面是一个典型的配置模板示例: ```yaml model: type: EncoderDecoder backbone: type: SwinTransformer embed_dims: 96 depths: [2, 2, 6, 2] num_heads: [3, 6, 12, 24] dataset: data_root: ./custom_dataset/ img_dir: images/train ann_dir: annotations/train.json pipeline: - type: LoadImageFromFile - type: Resize scale: (512, 512) optimizer: type: AdamW lr: 0.0001 weight_decay: 0.05 lr_config: policy: 'poly' power: 0.9 min_lr: 1e-07 runner: max_epochs: 50 batch_size: 8 log_level: INFO work_dir: ./runs/custom_experiment/ ``` 此部分描述了如何通过修改配置文件适配特定需求,比如调整输入分辨率 (`scale`)、选择合适的优化算法及其初始学习率等超参。 --- #### 开始训练 当一切准备工作完成后,可以通过以下命令启动训练流程: ```bash python tools/train.py configs/swin_transformer/semantic_segmentation_custom.yaml ``` 其中 `configs/swin_transformer/semantic_segmentation_custom.yaml` 是之前编辑好的配置文档位置。 注意,在实际运行前可能还需要额外指定 GPU 设备数量或者分布式模式下的节点信息等内容。 --- #### 测试与评估 训练结束后可执行测试阶段验证性能指标: ```bash python tools/test.py \ configs/swin_transformer/semantic_segmentation_custom.yaml \ work_dirs/custom_experiment/latest.pth --eval mIoU ``` 这里指定了要加载的最佳权重文件路径,并计算交并比(Mean Intersection over Union, mIoU),作为衡量模型效果的关键参考依据之一。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值