配置文件(config)
- 由于在大型项目中,一种模型需要分:tiny、small、big等很多种,而它们的区别主要在网络结构,数据的加载,训练策略等,且差别很多都很小,所以如果每个模型都手动从头写一份,很麻烦,为了方便,现在都是直接采用配置文件的形式来定义
- 如yaml文件、py文件等
MMdetection的配置文件构成
- 在MMdection的配置文件中,我们根据字段来定义模型训练的各部分
- 配置文件的运作方式
使用MMdection来训练自己的检测模型
-
coco数据集的组织形式
-
coco数据集的标注格式
-
所有标注信息存储在一个JSON对象中,包含以下信息:images–所有原始图像信息、annotations–所有标注信息、categories–全部物体类别信息
-
其中:name表示当前的物体类别,supercategories表示当前物体的超类,如car的超类为vehicle
-
我们将自己的数据集按照以上的格式整理好后,还需要更改模型的配置文件(有些模型是继承coco_instance.py,需要仔细查找),如下:
-
重点是需要修改:数据集的路径、batch_size、进程数
-
在将原始图像输入进模型之前,我们可能还需要对图像进行:随机裁剪与缩放、水平翻转、像素值归一化、转换为PyTorch Tensor等操作,这些操作我们统一放在数据处理流水线,即pipeline中。对于微调训练,通常情况是不需要进行更改的
-
下图为分类的pipeline:
-
由于检测有框,所以多了一个annotations,对于框也需要进行跟原始图片一样的操作,下图是检测的:
-
下图是训练策略,默认情况下优化器和训练策略在optimizer中定义,我们需要修改的是epoch,其他基本不需要修改:
-
对于YOLOv3的模型来说,主干网络、neck、head的结构如下:
MMdetection的注意事项
- 现在不使用BACKBONES、NECKS、HEADS来注册模型,而是全部使用MODELS,如下:
- 在config文件中,注意检查backbone的输出阶段个数和neck的输入通道的个数是否匹配,如下:
Build模式和Registry模式
- 对于大型项目来说,我们可以将项目的构建和表示分离,即抽象出相同的构建部分,使用不同的表示来生成不同的项目
- 对应到深度学习的模型中就是,我们将模型分为:backbone、neck、head、optimize等模块。将它们分别生成好后,再统一合并到一起,组合成一个模型。
- 同时,对于深度学习中的模型,各个模块都需要很多的参数,如果直接写在模块中,对于后续的对比试验等不友好,因此我们可以借助注册器,用字典的形式来创建模型,就只需要在字典中写参数,不需要在代码中改参数了