在上一篇博文中,博主完成了MMDetection框架的环境部署与推理过程,下面进行该框架的训练过程,训练的入口文件为tools/train.py
,我们需要配置的内容如下:
修改Train.py文件
确定自己要用的模型
parser.add_argument('--config',default="/home/ubuntu/programs/mmdetection/configs/faster_rcnn/faster-rcnn_r50_fpn_2x_coco.py", help='train config file path')
parser.add_argument('--work-dir',default="output/", help='the dir to save logs and models')
首先是指明要训练模型的配置文件,这里博主使用的是Faster-RCNN,该模型的骨干网络为ResNet50,使用的是COCO数据集,随后指明保存的路径。
此外,我们可以指定预训练模型,即指定resume
参数,由于博主使用的是自制数据集,直接使用其权重模型会报错,所以我们就直接从头开始训练。
自定义数据集
博主使用的是自定义数据集,那么就需要修改几个内容:
首先是数据集的配置,修改mmdet文件下的datasets/coco.py
:
随后修改mmdet/evaluation/functional/
下的class_names.py
:
def coco_classes() -> list:
"""Class names of COCO."""
return [
'pedestrains'
]
这里需要一提的是,在MMdetection文件下有一个mmdet文件,而我们配置的环境中也有一个mmdet文件,默认是使用系统里的文件的,因此博主先前一直是修改的mmdetetcion里面的mmdet文件,这会报错:
data_bytes = np.concatenate(data_list) File "<__array_function__ internals>", line 6, in concatenate
这时就要修改环境中mmdet文件了,当然也可以把这个包删掉,但对博主而言无所谓,因为博主并不打算在上面修改代码。该包的路径:
/home/ubuntu/.conda/envs/mmdet/lib/python3.7/site-packages/mmdet/
模型修改
完成上面的配置后,只需要再修改faster-rcnn
中的类别数目即可,默认是80,我们改为1:
训练设置
MMDetection的训练参数设置需要主要是调整scheduler.py
文件,其中max_epochs
为训练的epoch次数,有时也会用total_epoch,随后便是val_interva
l参数,这个参数是比较重要的,其含义为每多少个epoch次数进行验证,默认为1,每次验证之后便会保留一次权重文件,之所以要注意的原因在于如果训练次数较多,那么就有可能保留很多权重文件,这些文件可能要占用大量的磁盘空间,因此,这个参数要谨慎设置,此外,该参数也关系到模型的学习情况,每次验证都会对参数进行修正,而修正的次数过少,那么结果也可能受影响。
train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=100, val_interval=1)
val_cfg = dict(type='ValLoop')
test_cfg = dict(type='TestLoop')
# learning rate
param_scheduler = [
dict(
type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, end=500),
dict(
type='MultiStepLR',
begin=0,
end=100,
by_epoch=True,
milestones=[78, 91],
gamma=0.1)
]
# optimizer
optim_wrapper = dict(
type='OptimWrapper',
optimizer=dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001))
训练开始
随后便可以运行了,完成一个epoch用时大约50分钟,还是可以接受的。不过值得主要的是,使用该框架的显存占用较大,此外,显存占用还有上升趋势。
GPU占用情况: