在MMDetection实战系列1
中我们介绍到根据自己的数据集魔改官方模型中的num_classes参数,在本文中将会结构化的介绍模型中的其他参数
mmdetection使用集成训练方法
在我们打开某一个模型文件mmdetection-master/configs/{方法名}/{方法名}.py
会发现里面的代码非常短
实际上,这是通过_base_
链接到了其他文件,往往这样的链接会有七八层。
提问:我们如何获取完整的配置文件代码,并对其参数进行修改?
获取完整的配置文件代码
第一步 查看完整的配置文件代码,包含所有字段
python tools/misc/print_config.py configs/{方法名}/{方法名}.py
第二步 将完整的配置文件代码导入到txt,生成在mmdetection-master主目录下
python tools/misc/print_config.py configs/{方法名}/{方法名}.py > config.txt
第三步 创建项目文件夹record,在其中保存训练结果、完整的配置文件代码
python tools/train.py configs/{方法名}/{方法名}.py --work-dir record
结构化介绍模型文件参数
详细的faster_rcnn_r50_fpn_1x.py的介绍文章:https://blog.csdn.net/hajlyx/article/details/85991400
模型文件名解析
config 配置文件夹
# faster_rcnn 方法名
# r50 50层训练
# caffe
# coco coco数据集
faster_rcnn_r50_caffe_c4_1x_coco.py
# fpn 目标检测进一步处理
# mstrain 多尺度训练策略
# 3x 3*12=36个epoch训练
faster_rcnn_r101_fpn_mstrain_3x_coco.py
models参数(一般改动不多)
models(一般改动不多)
每一个属性中的参数其实都是为了传递到mmdet/models下的模型类文件中去
参数type对应模型的类名,每一个类文件都会登记在mmdet/models/__init__里
常用参数:(参数和模型有关,每个模型参数不同)
backbone.depth 将50改成101,对应r50、r101
roi_head.numclass = 80 训练次数
model = dict(
# 类型
type = ...
#
backbone
# 后处理fpn
neck
# rpn层 和 roi层
rpn_head
roi_head
# 设置
train_cfg
test_cfg
)
datasets参数---数据处理(自定义成分高)
sample_per_gpu = 2 # batch size of each gpu 每个gpu上的sample,类似pytorch dataloader上的参数
work_per_gpu = 2 # 子线程
train
type 同上,传参到对应的类文件 mmdet/datasets/..... 类名在mmdet/datasets/__init__里登记过
ann_file 标注文件路径json文件
img_prefix 标注文件的图片前缀
pipeline = .. 数据处理流
val
test
schedules(自定义成分高)
optimizer
lr
checkpoint 多少个epoch保存一个log
log_config 多少个epoch打印一次当前epoch的log
load_from 重新跑
resume_from 从断点继续跑,参数效果覆盖load_from
worckflow = [{(train, 12),(val, 1),(test, 1)}] train 12次,val 1次, test 1次 (这个参数有问题*)
work_dir