MMdetection框架速成系列 第01部分:学习路线图与步骤+优先学习的两个目标检测模型代码+loss计算流程+遇到问题如何求助+Anaconda3下的安装教程(mmdet+mmdet3d)

mmdetection 学习目录

  • 1 mmdetection 学习建议
    • 1.1 mmdetection 学习的第一件事
    • 1.2 mmdetection学习路线图
      • 1.2.1 优先看的两个库
      • 1.2.2 阅读代码
      • 1.2.3 代码学习步骤
      • 1.2.4 建议优先学习的两个目标检测模型代码
      • 1.2.5 loss计算流程的攻坚克难
    • 1.3 遇到问题如何求助
  • 2 Anaconda3下的安装教程(mmdet+mmdet3d)
    • 1.1 Anaconda虚拟环境搭建
    • 1.2 Pytorch安装
    • 1.3 MMCV安装
    • 1.4 MMDetection安装
    • 1.5 MMDetection3D安装

1 mmdetection 学习建议

在这里插入图片描述

1.1 mmdetection 学习的第一件事

对于任何一个开源框架,找到 GitHub 地址后第一件事情应该是阅读 docs。

MMDetection 2.26.0 文档中文版:https://mmdetection.readthedocs.io/zh_CN/latest/index.html

Tip:目前 MMDetection 实现的算法中主要包括 one-stage 和 two-stage 算法,而 two-stage 算法可以简单认为是 one-stage + pool + one-stage 步骤。

1.2 mmdetection学习路线图

1.2.1 优先看的两个库

简单来说学习 MMDetection 主要是学习两个库:MMCV 和 MMDectection,

MMCV 是面向整个OpenMMLab所有的开源库,均为通用类和工具类,方便下游各个 codebase 复用

1.2.2 阅读代码

在打好基础后,下一步就是深入阅读源码。

由于模型训练过程涉及的内容比较复杂,建议按照如下顺序进行学习:

1.2.3 代码学习步骤

先选择经典算法对前向过程进行深入分析,阅读部分主要包括 DataLoader 构建过程、数据前处理流程、Backbone、Neck、Head 和后处理模块。重点是理解网络输出形式以及后处理的具体步骤,暂时忽略 loss 计算部分。

1.2.4 建议优先学习的两个目标检测模型代码

本阶段目标:充分理解 RetinaNet 和 Faster R-CNN 的前向推理流程

① 优先阅读one-stage模型RetinaNet,多看几遍 RetinaNet 算法后,对 MMDetection 算法的实现方式就会有一个非常清晰的认识。

链接地址:https://zhuanlan.zhihu.com/p/346198300

② 深入阅读 Faster R-CNN 算法

以上两个经典算法可以说是后续所有算法的 baseline,后续大部分算法都或多或少的继承了这个算法,同时实现方式也是非常类似。

1.2.5 loss计算流程的攻坚克难

充分理解前向推理流程后,下一步深入阅读训练过程中 loss 计算流程了,重点关注正负样本定义规则、bbox 编解码规则和 loss 计算函数

阅读顺序:深入理解 RetinaNet 后,再看 Faster R-CNN。

1.3 遇到问题如何求助

①在阅读过程中,可以再次去查看知乎相关源码解读文章,对照看,多看几遍,应该会加快理解。

②存在问题,去github的issue查找

③如果在阅读过程中有疑问,可以在社区中提问

2 Anaconda3下的安装教程(mmdet+mmdet3d)

MMDetection是MMLab家族的一员,是由香港中文大学和商汤科技共同推出的,以一个统一的架构支撑了15个大方向的研究领域。MMDetection依赖Pytorch和MMCV,因此安装之前需要先安装这两个库。

在这里插入图片描述

1.1 Anaconda虚拟环境搭建

conda create -n mmlab python=3.6
# 然后切换到该环境下
activate mmlab

1.2 Pytorch安装

# 注意根据自己电脑的CUDA版本选择。在命令行运行nvcc -V查看当前cuda版本:
nvcc -V
# 当前(2021.10.23)MMCV最新仅支持到pytorch-1.9,安装最新的pytorch1.10会导致MMDetection无法使用,因此安装的时候需要指定pytorch版本为1.9。
conda install pytorch==1.9.1 torchvision torchaudio cudatoolkit=10.2 -c pytorch
# 验证pytorch安装成功:
python

在这里插入图片描述

1.3 MMCV安装

MMCV有两mmcv-full和mmcv两个版本,两者差别在于是否包含CUDA操作,如果不需要使用CUDA可以安装mmcv,不过官方还是推荐安装完整版的mmcv-full。

pip install mmcv-full# 如果处于服务器这类无法联网的环境,可以参照官方说明使用源码安装
# https://mmcv.readthedocs.io/en/latest/get_started/build.html

1.4 MMDetection安装

# ①:首先从github上下载mmdetection的源码,然后根据requirements.txt安装所需的依赖库,最后执行setup.py安装mmdetection
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -r requirements.txt
python setup.py develop# 使用官方Demo验证安装是否成功,位于./demo文件夹下。
# 先新建一个demo_test工程,下载预训练模型(下载链接)放至test_demo\checkpoints文件下,新建main.py并运行:

main.py

import osfrom mmdet.apis import init_detector, inference_detectordef demo_mmdet():base_dir = r'D:\Program Files\Third_Part_Lib\mmdetection'       # mmdetection的安装目录config_file = os.path.join(base_dir, r'configs\faster_rcnn\faster_rcnn_r50_fpn_1x_coco.py')# download the checkpoint from model zoo and put it in `checkpoints/`# url: https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pthcheckpoint_file = r'checkpoints\faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'# 根据配置文件和 checkpoint 文件构建模型model = init_detector(config_file, checkpoint_file, device='cuda:0')# 测试单张图片并展示结果img = os.path.join(base_dir, r'demo\demo.jpg') # 或者 img = mmcv.imread(img),这样图片仅会被读一次result = inference_detector(model, img)# 在一个新的窗口中将结果可视化model.show_result(img, result, out_file=None, show=True)if __name__ == '__main__':demo_mmdet()

运行成功效果如下:

在这里插入图片描述

1.5 MMDetection3D安装

MMDetection3D依赖MMSegmentation,先安装MMSegmentation:

git clone https://github.com/open-mmlab/mmsegmentation.git
cd mmsegmentation
pip install -r requirements.txt
python setup.py develop

然后再安装MMDetection3D,这一步编译时间可能会久一点

git clone https://github.com/open-mmlab/mmdetection3d.git
cd mmdetection3d
pip install -r requirements.txt
python setup.py develop

最后再利用官方提供的Demo,先下载预训练模型(下载链接)放至test_demo\checkpoints文件下,然后运行下面代码:

import os
from mmdet3d.apis import inference_detector, init_model, show_result_meshlabdef demo_mmdet3d():base_dir = r'D:\Program Files\Third_Part_Lib\mmdetection3d'  # mmdetection3d的安装目录config_file = os.path.join(base_dir, r'configs\second/hv_second_secfpn_6x8_80e_kitti-3d-car.py')# download the checkpoint from model zoo and put it in `checkpoints/`# url: https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pthcheckpoint_file = r'checkpoints\hv_second_secfpn_6x8_80e_kitti-3d-car_20200620_230238-393f000c.pth'# build the model from a config file and a checkpoint filemodel = init_model(config_file, checkpoint_file, device='cuda:0')# test a single binpcd = os.path.join(base_dir, r'demo/data/kitti/kitti_000008.bin')result, data = inference_detector(model, pcd)# show the resultsshow_result_meshlab(data,result,'',0,show=True,snapshot=False,task='det')if __name__ == '__main__':demo_mmdet3d()

运行成功效果如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人循迹小车资料

前言 我记得在大学的时候,参加电子比赛,我们有一个题目是平衡小车项目,那个对基础要求还是比较高的,总结了一些平衡车机器的资料,希望对大家有帮助。 正文 关注公众号,回复【机器人资料】获取

单片机实现环形队列_稀疏数组和队列(二)

队列的介绍队列以一种先入先出(FIFO)的线性表,还有一种先入后出的线性表(FILO)叫做栈。教科书上有明确的定义与描述。类似于现实中排队时的队列(队尾进,队头出),队列只在线性表两端进行操作,插入元素的一端称为表尾,删…

漫画-Linux中断子系统综述

1、中断引发的面试教训2、什么是中断?中断: (英语:Interrupt)指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即…

SQL强化(二) 在Oracle 中写代码

一 : 关于查询中的转换 -- 字符串转换 一 : decode 函数 转换 SELECT DECODE ( PROTYPE.PRO_TYPE_DATE, L, 长, m, 短, 默认值 )FROM PROTYPE -- 字符串转换 二 : case 转换 SELECT T1.PRO_TYPE_ID, T1.PRO_TYPE_NAME, CASE T1.PRO_TYPE_DATEWHEN S THEN 短WHEN L THEN 长EL…

vue 非es6 写法怎么按须加载_Vue源码必学指南:flow(语法检查)以及rollup(模板打包)...

点击上方蓝色字关注我们~一、前言虽然 Vue3 已经公开了代码,但是Vue3.0还处于开发阶段,直接上手使用Typescript是不合适的 , 对于前端的老手是不错的选择, 但是如果没有研究源码经验的开发者还是建议使用完善, 成熟的源码进行入手. 而 Vue 2.x 中使用的 flow 是一个…

漫画|创业到底有多难?

我有一群同事,我们一起经历了一个产品从无到有的过程,从开始的斗志满满到最后跟老板的不欢而散,其中的辛酸苦楚也许只能我们自己能体味,在这过程中,我们共同经历过的事情,有快乐的,悲伤的&#…

生成step文件_利用opencv给彦女王生成一副蒙太奇画像

大家好呀,前两天烈阳天道1上映了,不知道大家看没看呢,里面还有一小段彦穿越虫洞与猴哥相遇的画面,彦女王啊啊啊~~所以我去网上爬了二百来张我大学的风景画,然后找了以前存的彦女王的图片,生成了一幅蒙太奇画…

浪漫情人节|C语言画心型

1.前言新年第一天上班,先祝大家新年快乐,巧的是,今天刚好又是情人节,所以想了下用C实现画心形符号~过年的时候,跟我表哥去接新娘,实地看了下,如果一个汉字内心没有点浪漫的细胞,很难…

CS190.1x Scalable Machine Learning

这门课是CS100.1x的后续课,看课程名字就知道这门课主要讲机器学习。难度也会比上一门课大一点。如果你对这门课感兴趣,可以看看我这篇博客,如果对PySpark感兴趣,可以看我分析作业的博客。 Course Software Setup 这门课的环境配置…

./4.sh: No such file or directory

sh push到目标板后提示出错 #!/bin/bash echo "ladjfaosdjfoia"头bin/bash 我们要看,sh在哪里 130|rk3399_idpad:/data # which sh /system/bin/sh rk3399_idpad:/data # 所以上面的代码应该写成 #!/system/bin/sh echo "ladjfaosdjfoia"修…

Spring总结四:IOC和DI 注解方式

首先我们要了解注解和xml配置的区别: 作用一样,但是注解写在Bean的上方来代替我们之前在xml文件中所做的bean配置,也就是说我们使用了注解的方式,就不用再xml里面进行配置了,相对来说注解方式更为简便。 IOC获取对象注…

和后台如何对接_业务系统如何对接第三方服务?

在产品工作中,我们时常要对接第三方服务。本文作者从过往的对接项目经历中,提炼的关于业务系统,如何对接第三方服务的方法论,希望能对你有所帮助。随着公司业务的发展,我们有时会遇到,需要在自身业务系统中…

adb 启动某个apk

有时候需要用apk来启动某个apk adb shell am start -n com.android.launcher3/com.android.launcher3.Launcher 具体查看~ /rk3399_7in1/packages/apps/Launcher3/AndroidManifest.xml

Makefile 文件中的:obj-$(CONFIG_TEST) += test.o,这一类的是什么意思?

1、obj-$ $(CONFIG_TEST) 是一个整体,$(bbb)表示引用变量 bbb 比如定义 CONFIG_TESTy $(CONFIG_TEST) 就是 y obj-$(CONFIG_TEST) 就是 obj-y 又比如定义 CONFIG_TESTm $(CONFIG_TEST) 就是 m obj-$(CONFIG_TEST) 就是 obj-m obj-y foo.o 该例子告诉Kbuild在这目…

Kconfig中的“depends on”和“select”

在Kconfig文件中: config Adepends on Bselect C它的含义是:CONFIG_A配置与否,取决于CONFIG_B是否配置。一旦CONFIG_A配置了,CONFIG_C也自动配置了。 参考资料:“select” vs “depends” in kernel Kconfig。 所以去…

数组的合并和升序排列_leetcode 33 搜索旋转排序数组

给你一个升序排列的整数数组 nums ,和一个整数 target 。假设按照升序排序的数组在预先未知的某个点上进行了旋转。(例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请你在数组中搜索 target ,如果数组中存在…

[LeetCode] [C++] 206 Reverse Linked List 反转单项链表

题目要求 Reverse a singly linked list.LeetCode 206在线测试 问题描述 给定一个单项链表,将其反转后返回链表头节点。 思路分析1 可以完整的遍历一遍链表,将链表的每个节点的值存在数组中,然后反向遍历数组重新生存一个新 链表。这样做需要…

qq面板(仿版,未完待续中。。。。)---2017-04-24

主要实现效果: 1、点击对话,显示对话;点击联系人,显示联系人 2、在联系人界面: 实现好友列表的展开与折叠;(图12) 实现鼠标移到好友列表上的背景颜色的变化;(…

苹果企业证书_苹果签名经常掉签原因大汇总

苹果签名就是数字签名,是基于非对称加密算法来实现的,对称加密就是通过非对称加密算法实现的,对称加密是通过同一份秘钥加密解密数据,非对称加密有两份秘钥,分别是公钥和私钥,用公钥进行加密的数据只能使用…

漫画|Linux 并发、竞态、互斥锁、自旋锁、信号量都是什么鬼?

1. 锁的由来?学习linux的时候,肯定会遇到各种和锁相关的知识,有时候自己学好了一点,感觉半桶水的自己已经可以华山论剑了,又突然冒出一个新的知识点,我看到新知识点的时候,有时间也是一脸的懵逼…