因为工作关系,接触到了mmdetection。它是商汤科技和香港中文大学开源的一款基于pytorch底层的目标检测工具箱,隶属于mmlab项目。

 mmdetection 2.7文件结构。其中configs文件夹下为网络模型文件,checkpoints文件夹下为模型权重文件(.pth)

1. 模型训练

在模型训练之前,要先配置好参数。配置参数是通过修改文件的方式完成的,主要包括三部分:配置数据,配置模型和配置训练策略。下面将以训练模型faster_rcnn_r50_fpn_1x_coco为例进行说明(其中faster_rcnn表示算法名称,r50表示backbone使用resnet50,fpn表示使用fpn的neck,1x标识训练12个epoch,coco表示数据用coco的格式)

具体的参数解释说明可以参考mmdetection的configs中的各项参数具体解释_藏云阁主的博客-CSDN博客_workers_per_gpu

1)配置数据

在configs里找到faster_rcnn_r50_fpn_1x_coco.py

 好吧,套娃模式。让我们先找到../_base_/datasets/coco_detection.py。这个文件主要是为了定义一个data字典,其中包括train,val,test

 data_root 数据的根目录(数据按照文件中/train2017的方式摆放)。

image_scale 图像统一缩放的尺寸。

 samples_per_gpu :batch_size

evaluation : 每隔1轮评估一次,以bbox为评估对象。

2)配置模型

打开../_base_/models/faster_rcnn_r50_fpn.py

 model[pretrained]: 

 model[roi_head][bbox_head][num_classes] :分类类别数量,这里有几个类别就是几个,不用+1表示背景。

3)配置训练策略

打开'../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'

 optimizer : 优化器

 total_epochs :epochs

 load_from : 预训练权重文件(.pth)

 4) 修改类名称

打开文件/mmdetection/mmdet/datasets/coco.py

把这里的CLASSES修改成自己对应的类别名称。

在coco.py文件里找到evaluate函数,更改参数classwise=True可在训练时看到每一个类别的AP值。

def evaluate(self,
                 results,
                 metric='bbox',
                 logger=None,
                 jsonfile_prefix=None,
                 classwise=False,
                 proposal_nums=(100, 300, 1000),
                 iou_thrs=None,
                 metric_items=None):

然后打开文件/mmdetection/mmdet/core/evaluation/class_name.py

 

 把这里的return的类别换成自己的类别名称,注意和coco.py里保持一致。

然后就可以训练模型,模型训练使用命令

python tools/train.py configs/xxx.py --work-dir xxx --gpus 1

configs/xxx.py是需要训练的模型定义文件。参数--work-dir表示训练模型保存的目录。

2. 模型测试

模型训练完了,训练的过程中也得了验证集的map。mmdetection也提供了测试测试集的方法(带标注的),还记得在configs/xxx.py里定义的测试数据的类型吗

先要修改数据配置,让程序找到测试文件图片和标注

然后跟训练时一样修改类名称coco.py, class_name.py

运行命令

python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE.pkl}] 
  • config_file:模型配置文件的路径
  • checkpoint_file:模型参数文件的路径
  • gpu_num:使用的 GPU 数量
  • --out:设置输出 pkl 测试结果文件的路径
  • --eval:设置评价指标(vocmAP, recall | cocobbox, segm, proposal
  • --show:显示带预测框的测试集图像
  • --show-dir:设置存放带预测框的测试集图像的目录路径
  • --show-score-thr:设置显示预测框的阈值,默认值为 0.3

上面命令得到文件.pkl,然后对模型进行评估,就可以得到每个类别的AP了

python tools/eval_metric.py ${CONFIG_FILE} ${PKL_RESULTS} [--eval ${EVAL_METRICS}]
  • config_file:模型配置文件的路径
  • pkl_resultspkl 测试结果文件的路径
  • --eval:设置评价指标(vocmAP, recall | cocobbox, segm, proposal

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐