mmdetection 类别出错问题+训练+测试

mmdetection 是时下比较常用的目标检测工具箱,集成了faster ,cascade,yolo 等性能比较好的检测算法,熟练使用mmdetection进行自定义数据的目标检测就成为了很多AIer的必经之路。

项目仓库地址:https://github.com/open-mmlab/mmdetection

安装,装环境就略过了。

装完之后,想要训练自己的数据集,首先要将自己的数据整理成COCO的格式:

--------data

---------------coco

-----------------------annotations

---------------------------------------train.json,val.json

------------------------images

---------------------------------------......jpg

annotations文件夹下包含了train.json和val.json,images文件夹下则为全部图像数据。

自己的数据标签格式需要整理为json才行,具体的转换方法可以直接去搜程序,也可以自己写。这里给出一部分,可能不适应直接用。

1.xml转coco

import os.path as osp
import xml.etree.ElementTree as ET

import mmcv

from mmdet.core import sea_classes

from glob import glob
from tqdm import tqdm
from PIL import Image

label_ids = {name: i + 1 for i, name in enumerate(sea_classes())}


def get_segmentation(points):
    return [points[0], points[1], points[2] + points[0], points[1],
            points[2] + points[0], points[3] + points[1], points[0], points[3] + points[1]]


def parse_xml(xml_path, img_id, anno_id):
    tree = ET.parse(xml_path)
    # print(str(xml_path))
    root = tree.getroot()
    annotation = []
    for obj in root.findall('object'):
        try:
            name = obj.find('name').text
            # if name in ['lighter','powerbank','zippooil','firecrackers','handcuffs','pressure','slingshot','nailpolish']:
            #    continue

            category_id = label_ids[name]
            bnd_box = obj.find('bndbox')
            xmin = int(bnd_box.find('xmin').text)
            ymin = int(bnd_box.find('ymin').text)
            xmax = int(bnd_box.find('xmax').text)
            ymax = int(bnd_box.find('ymax').text)
            if xmin >= xmax or ymin >= ymax:
                continue
            w = xmax - xmin + 1
            h = ymax - ymin + 1
            area = w * h
            segmentation = get_segmentation([xmin, ymin, w, h])
            annotation.append({
                "segmentation": segmentation,
                "area": area,
                "iscrowd": 0,
                "image_id": img_id,
                "bbox": [xmin, ymin, w, h],
                "category_id": category_id,
                "id": anno_id,
                "ignore": 0})
            anno_id += 1
        except:
            continue
    return annotation, anno_id


def cvt_annotations(img_path, xml_p
<think>好的,我现在需要帮助用户解决如何使用MMDetection框架配置和训练SOLOv2模型训练自定义数据集的问题。首先,我需要回顾一下SOLOv2的基本知识,确保自己理解正确。SOLOv2是基于实例分割的模型,v1版本之后v2引入了动态卷积,可能涉及到网络结构的变化。用户提到了MMDetection框架,所以需要回忆一下该框架的配置方式和数据准备流程。 接下来,用户的问题可以分为几个步骤:数据准备、配置文件修改、训练测试。我需要逐一考虑每个步骤的具体操作。 首先,数据准备。MMDetection通常使用COCO格式的数据集,所以用户需要将自己的数据集转换成COCO的格式,包括图片和对应的annotations.json文件。可能需要提醒用户安装必要的库,比如pycocotools,并确认数据目录结构是否正确。 然后是配置文件的修改。MMDetection模型配置通常基于configs目录下的现有文件。用户需要找到SOLOv2的配置文件,比如solov2_r50_fpn_1x_coco.py。然后根据自定义数据集的类别数修改num_classes参数,可能是在mask_head部分。同时,数据路径需要调整,指向用户的数据集。这里可能需要修改data字典中的train、val、test的ann_file和img_prefix。 接下来是训练部分。用户需要知道如何启动训练命令,通常使用tools/train.py脚本,并指定配置文件。可能需要调整学习率或其他超参数,尤其是当数据集与COCO差异较大时。 验证和测试阶段,用户可能需要使用tools/test.py脚本,并指定检查点文件和评估指标,如bbox、segm等。 另外,用户可能需要了解如何调试和可视化结果,比如使用demo/image_demo.py来测试单张图片,并确认模型是否训练正确。 在思考过程中,还要考虑可能遇到的问题。例如,数据格式正确导致训练出错,这时候需要检查annotations文件是否正确,类别ID是否从1开始。还有,如果显存足,可能需要调整batch_size或输入图片的大小。 需要确保所有的路径配置正确,尤其是当用户的数据集存放在非默认目录时。可能还要提醒用户修改work_dir以保存训练日志和模型权重。 最后,生成相关问题,需要围绕SOLOv2的配置、训练、优化以及MMDetection的使用来展开,帮助用户进一步深入理解。</think>以下是使用MMDetection框架训练SOLOv2模型适配自定义数据集的详细步骤: ### 1. 环境准备 安装MMDetection及相关依赖: ```bash pip install mmcv-full pip install "mmdet>=3.0.0" ``` ### 2. 数据集配置 1. 创建数据集目录结构: ``` mmdetection ├── data │ └── custom_dataset │ ├── annotations │ │ ├── train.json │ │ └── val.json │ └── images │ ├── train │ └── val ``` 2. 修改类别定义: 在配置文件中修改`classes`参数: ```python dataset_type = 'CocoDataset' classes = ('class1', 'class2', ...) # 自定义类别 ``` ### 3. 修改配置文件 以`configs/solov2/solov2_r50_fpn_1x_coco.py`为例: ```python # 修改模型参数 model = dict( mask_head=dict( num_classes=5)) # 改为实际类别数 # 修改数据路径 data = dict( train=dict( ann_file='data/custom_dataset/annotations/train.json', img_prefix='data/custom_dataset/images/train/'), val=dict( ann_file='data/custom_dataset/annotations/val.json', img_prefix='data/custom_dataset/images/val/'), test=dict( ann_file='data/custom_dataset/annotations/val.json', img_prefix='data/custom_dataset/images/val/')) ``` ### 4. 训练配置 调整训练参数: ```python # 学习率调整(根据GPU数量) optimizer = dict(lr=0.02/8) # 默认8卡配置,单卡需除以8 # 训练epoch数 runner = dict(max_epochs=24) ``` ### 5. 启动训练 ```bash ./tools/dist_train.sh configs/solov2/solov2_r50_fpn_1x_coco.py 8 --work-dir work_dirs/solov2_custom ``` ### 6. 关键参数说明 1. 动态卷积配置: ```python dyn_convs=dict( # 动态卷积配置[^1] type='DynamicConv', in_channels=256, feat_channels=64, out_channels=256, input_feat_shape=14) ``` 2. 掩膜特征配置: ```python mask_feature_head=dict( # 特征图尺寸配置 start_level=0, end_level=3, out_channels=256) ``` ### 7. 常见问题处理 - 显存足:在配置文件中修改`img_scale`参数缩小输入尺寸 ```python img_scale=(640, 640) # 原配置为(1333, 800) ``` - 类别平衡:在`dataset`配置中添加`class_weight`参数 - 训练收敛:尝试减小学习率(lr=0.0025)
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DZZ!!!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值