快速上手MMDetection学习笔记

原博文链接:MMDetection框架入门教程(二):快速上手教程_mmdetection教程_Maples丶丶的博客-CSDN博客

一、MMDetection是什么

  MMDetection是OpenMMLab家族中的一员,主要负责2D目标检测领域(比如MMDetection3D则负责3D目标检测)。首先我们需要知道为什么会出现MMDetection这个框架。当前目标检测算法众多,方法复杂,细节较多,个人复现起来难度很大,而且由于缺少共享平台和统一规范,就算有人成功实现了某一个算法,也很难被其他人复用。
       于是商汤和港中文大学集中了一批人,使用统一的代码规范复现了当前大部分主流和前沿的模型,比如Faster R-CNN系列、YOLO系列,以及较新的DETR等(如下图所示),并提供了预训练模型。其他人只需要遵循这个规范,就能直接“白嫖”,不需要自己再重新实现一遍,而这个规范就是MMDetection。

 二、算法整体流程

所有目标检测算法都可以按照训练和测试抽象成若干模块,初学者来说只要理解各个模块的输入输出以及实现的功能即可。

1、 训练流程

 2、测试流程

相较于训练流程,测试时只有模型的前向推理过程,因此不需要正负样本分配、平衡、计算loss等操作,流程会更简单一些。

 三、算法搭建流程

        以训练流程为例,对于Tensorflow和Pytorch,我们需要编写数据读取、数据预处理、数据增强、算法模型、loss函数、训练策略的代码,最后将其整合进train()函数中开始训练,过程十分繁琐。由于MMDetection已经实现了上述步骤中的绝大部分方法,我们只需要调用现成的函数即可,具体是在Config文件中配置好相应方法的参数,并将Config文件传给MMDetection自带的train()函数,然后框架就会解析Config文件,自动调用配置好的方法,完成训练流程。所以在MMDetection上搭建一个算法,我们要做的事情只有3件:准备数据集、编写Config文件、调用框架自带的train.py开始训练。

 1、准备数据集

        MMDetection已经实现了COCO数据集的处理,我们这里就直接使用COCO 2014数据集。下载好的数据集目录结构如下图所示,annotations文件夹中以json文件格式存放了标注数据,其中目标框的标注信息在instances文件中。

 2、编写Config文件

        RetinaNet的配置文件位于MMDetection源码的./configs/retinanet路径下,打开目录会发现里面有很多Config文件,文件命名规则遵循:

{model}_[model setting]_{backbone}_{neck}_[norm setting]_[misc]_[gpu x batch_per_gpu]_{schedule}_{dataset}

其中大括号表示必选,大括号表示可选。比如我们接下来要使用的配置文件retinanet_r50_fpn_1x_coco.py含义就是:模型名称是RetinaNet,主干是ResNet50,Neck是FPN,训练12个Epoch(1个x是12,2个x就是24),使用COCO数据集。更详细的字段说明可以在官方说明文档中查阅。

 但当我们打开配置文件retinanet_r50_fpn_1x_coco.py时,发现里面只有几行代码:

       其实MMDetection中配置文件是通过继承 + 修改的方式完成用户自定义配置文件的。配置文件开头的_base_ = list()表示你需要继承的配置文件,然后通过重写的方式完成对应属性的修改。如果想要查看完整的配置文件信息,不需要依据_base_一级一级往上查找,可以通过官方给定的工具./tools/misc/print_config.py来打印配置文件:

      然后就可以看到retinanet_r50_fpn_1x_coco.py对应的完整的配置文件内容,第二节提到的各个模块都可以在配置文件中找到对应的定义。配置文件由一串字典dict和变量的定义组成,经由Config.fromfile(filepath)函数加载后会返回一个Config类型的变量(MMCV的一个数据结构),然后MMDetection框架就能根据这个Config调用相关的build_detector()方法构建对应的模块。
        具体地,build_detector()方法首先会根据字典中的type找到对应的类(Class),这个类的类名就是type字符串的值,且这个类一定是事先注册(Registry) 好的,MMDetection能够根据type值查询到具体的类,否则就会报错。比如在下面配置文件中,model的type值为RetinaNet,我们可以在./mmdet/models/detectors/retinanet.py中找到定义。

 ..........

3、训练网络

        写完配置文件后,就可以直接调用./tools/train.py指定配置文件进行训练。train.py包含了模型配置、数据集配置、训练配置、Hook配置等的解析,以及根据配置信息构造训练,用户的自定义操作可以通过Hook进行配置,一般无需修改train.py文件。

 四、总结

       本文利用MMDetection已经实现的RetinaNet模型在COCO上进行训练作为示例,演示了MMDetection的模型训练流程。总的来说分为三个步骤:

1、准备数据集
2、准备配置文件:配置文件由一系列dict组成,dict中的type键值代表注册的类别,build函数可以通过识别dict中的type来初始化对应的类。配置文件一般会继承一个通用配置文件,然后在此基础上根据需求调整。
3、开始训练:调用MMDetection自带的train.py进行训练。

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于快速上手STM32外设的学习,以下是一些建议: 1. 学习基础知识:了解STM32微控制器的体系结构、寄存器的功能以及外设的工作原理等基础知识。可以参考官方提供的文档和教程,例如STM32Cube系列的参考手册和应用笔记。 2. 利用开发板和示例代码:使用STM32开发板和官方提供的示例代码进行实验和学习。可以选择一款适合自己的开发板,并下载相应的开发环境和示例代码。通过运行示例代码,可以快速了解外设的使用方法和配置方式。 3. 学习外设的驱动库:了解STM32外设的驱动库,例如标准外设库(Standard Peripheral Library,SPL)或者HAL库(Hardware Abstraction Layer)。这些库提供了一系列的API函数,简化了外设的配置和操作过程。 4. 参考资料和社区:积极参与STM32相关的论坛、社区和开发者社群。在这些地方可以获取到其他开发者的经验分享、问题解答以及项目案例等。同时,可以阅读一些相关的书籍和教程,深入理解STM32外设的原理和使用方法。 5. 实践项目:选择一些简单的项目,例如LED灯控制、串口通信等,通过实践项目来加深对外设的理解和掌握。可以先从基础的外设开始,逐步扩展到更复杂的外设和功能。 总的来说,快速上手STM32外设的学习需要结合理论知识和实践项目,并积极参与社区和资料的交流与学习。通过不断的实践和学习,可以逐步提高对STM32外设的掌握程度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值