MMDetrction使用自己的数据集进行训练
为了方便写配置文件,我们需要找一个配置文件作为基准,在mmdetection/configs找到自己想跑的模型,然后选一个基准的配置文件,命名规则是{algorithm name}:算法的名称。它可以是检测器名称,例如 faster-rcnn、mask-rcnn等。也可以是半监督或知识蒸馏算法,例如 soft-teacher、lad等等{component names}:算法中使用的组件名称,如
1.选择基准配置文件
为了方便写配置文件,我们需要找一个配置文件作为基准,在mmdetection/configs找到自己想跑的模型,然后选一个基准的配置文件,命名规则是
{algorithm name}_{model component names [component1]_[component2]_[...]}_{training settings}_{training dataset information}_{testing dataset information}.py
{algorithm name}:算法的名称。 它可以是检测器名称,例如 faster-rcnn、mask-rcnn等。也可以是半监督或知识蒸馏算法,例如 soft-teacher、lad等等
{component names}:算法中使用的组件名称,如 backbone、neck 等。例如 r50-caffe_fpn_gn-head
表示在算法中使用 caffe 版本的 ResNet50、FPN 和 使用了 Group Norm 的检测头。
{training settings}: 训练设置的信息,例如 batch 大小、数据增强、损失、参数调度方式和训练最大轮次/迭代。 例如:4xb4-mixup-giou-coslr-100e 表示使用 8 个 gpu ,每个 gpu 4 张图、mixup 数据增强、GIoU loss、余弦退火学习率,并训练 100 个 epoch。
{gpu x batch_per_gpu}: GPU 数和每个 GPU 的样本数。bN 表示每个 GPU 上的 batch 大小为 N。例如 4x4b 是 4 个 GPU 每个 GPU 4 张图的缩写。如果没有注明,默认为 8 卡每卡 2 张图。
{schedule}: 训练方案,选项是 1x、 2x、 20e 等。1x 和 2x 分别代表 12 epoch 和 24 epoch,20e 在级联模型中使用,表示 20 epoch。对于 1x/2x,初始学习率在第 8/16 和第 11/22 epoch 衰减 10 倍;对于 20e ,初始学习率在第 16 和第 19 epoch 衰减 10 倍。
{training dataset information}: 训练数据集,例如 coco, coco-panoptic, cityscapes, voc-0712, wider-face。
{testing dataset information} (可选): 测试数据集,用于训练和测试在不同数据集上的模型配置。 如果没有注明,则表示训练和测试的数据集类型相同。
2.写自己的配置文件
# 新配置继承了基本配置,并做了必要的修改(可以是绝对路径或者相对路径,我觉得绝对路径不会出错)
# _base_ = '../mask_rcnn/mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco.py'
_base_ = '/mmdetection/configs/faster_rcnn/faster-rcnn_r50-caffe_fpn_ms-1x_coco.py'
# 我们还需要更改 head 中的 num_classes 以匹配数据集中的类别数,比如我这里是3个类别
model = dict(
backbone=dict(
init_cfg=None # 取消所有预训练初始化
),
roi_head=dict(
bbox_head=dict(num_classes=3), mask_head=None,)
# mask_head=dict(num_classes=3))
)
# 修改数据集相关配置(默认是类别1,类别2,类别3,如果有类别0需要用coco_cat_ids指明)
data_root = '/tmp/MMDection/mmdetection/final_loss_enhance'
metainfo = {
'classes': ('water', 'cola', 'fenda'),
'coco_cat_ids': [0, 1, 2], # <— 关键
'palette': [
(0, 0, 0), # void,黑色
(0, 255, 255), # water_void,红色
(255, 0, 0), # loss,青色
]
}
# 这里需要修改ann_file和data_prefix的文件路径,
train_dataloader = dict(
batch_size=4,
dataset=dict(
data_root=data_root,
metainfo=metainfo,
#选择训练集的annotations里面的json文件
ann_file='/tmp/MMDection/mmdetection/mydata/train/annotations/result.json',
#选择训练集图片所在的文件夹
data_prefix=dict(img='/tmp/MMDection/mmdetection/mydata/train/images')))
val_dataloader = dict(
dataset=dict(
data_root=data_root,
metainfo=metainfo,
ann_file='/tmp/MMDection/mmdetection/final_loss_enhance/val/annotations/result.json',
data_prefix=dict(img='/tmp/MMDection/mmdetection/final_loss_enhance/val/images')))
test_dataloader = val_dataloader
# 修改评价指标相关配置
val_evaluator = dict(ann_file=data_root + '/val/annotations/result.json')
test_evaluator = val_evaluator
3.修改epoch,checkpoint等参数
在/mmdetection/configs/_base_里有三个py文件:default_runtime.py里面可以修改检查点保存等默认参数
/mmdetection/configs/_base_/schedules/schedule_1x.py(或者20e等,具体看你用了哪个基准模型)可以改最大轮次,优化器等,改好之后就可以运行训练了, --work-dir可以指定保存的文件夹
python tools/train.py /tmp/MMDection/mmdetection/configs/ANEW/fasterrcnn_r50_fpn.py --work-dir /your/file/path
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)