mmd_hook
MMCV核心组件:Hook
0 摘要
mmd_hook
MMDetection3D:注册模型
train.py的开头中,已经开始注册必要的模块了
from mmcv import Config
from mmdet import __version__
from mmdet.datasets import build_dataset
from mmdet.apis import (train_detector, init_dist, get_root_logger,
set_random_seed)
from mmdet.models import build_detector
看mmdet文件夹下的__init__.py,以及datasets , apis , models
下的__init__.py文件,发现: mmdet.__init__py:
from .backbones import * # noqa: F401,F403 from .necks import * # noqa: F401,F403 from .roi_extractors import * # n ...
Registry
Registry
Registry
类可以提供一种完全相似的对外装饰函数来管理构建不同的组件,例如
backbones、head 和 necks 等等,Registry 类内部其实维护的是一个全局
key-value 对。通过 Registry
类,用户可以通过字符串方式实例化任何想要的模块。
Registry
类最大好处是:解耦性强、可扩展性强,代码更易理解。
回到 Registry 类本身,有如下几种用法:
# 0. 先构建一个全局的 CATS 注册器类
CATS = mmcv.Registry('cat')
# 通过装饰器方式作用在想要加入注册器的具体类中
#===============================================================
# 1. 不需要传入任何参数,此时默认实例化的配置字符串是 str (类名)
@CATS.register_module()
class BritishShorthair:
pass
# 类实例化
CATS.get('BritishShorthair')(* ...
PETR_code_note
PETR code note
cfg = Config.fromfile(args.config)
#从args更新读取的config文件,args优先级>cfg优先级,args定义了cfg文件中没有定义的work_dir等参数,还有一部分需要覆盖cfg的参数
cfg.merge_from_dict()
合并字典到配置 通过 cfg.merge_from_dict
函数接口可以实现对字典内容进行合并,典型用法如下:
cfg_file = osp.join(data_path, 'config/a.py')
cfg = Config.fromfile(cfg_file)
input_options = {'item2.a': 1, 'item2.b': 0.1, 'item3': False}
cfg.merge_from_dict(input_options)
# 原始 a.py 内容为:
item1 = [1, 2]
item2 = {'a': 0}
item3 = True
item4 = 'test'
# 进行合并后, cfg 内容
item1 = [1, 2]
...
PETR
PETR初学习
前言
当前基于BEV的纯视觉3D检测中,划分的方式有很多,按照单目、环视、视觉+Lidar的融合等等。然后,从2D到3D的投影方式也有不同方式来划分,比如IPM方式、Lifg-Splat、MLP、Transformer等。
目前主流的方法中,按照BEV特征的构建方式来划分,主要可以分为两大方向:
1、LSS框架,例如BEVDet等采用2D向3D的投影方式,先Lift->再Splat;
2、BEVFormer和DETR3D的框架,采用3D空间点向2D空间查询的方式。
而PETR提出了一种新的2D和3D的融合方式,也可以另算第三种方法,其不是简单的2D到3D投影,也不是3D到2D的查询,是直接将3D位置空间变换成和2D特征相同尺度的特征,然后将2D和3D特征融合后得到新的特征。
关于DETR和PETR3D的网络框架:
DETR框架,单图片2D目标检测,首先采用CNN网络提取图片特征,然后加入2D
position encoding,送入到transformer
decoder结构中预测2D目标位置和类别;
DETR3D,multi-view环视图像的3D目标检 ...
MMDetection整体构建流程二
MMDetection 整体构建流程(二)
本文核心内容是按照抽象到具体方式,从多个层次进行训练和测试流程深入解析,从最抽象层讲起,到最后核心代码实现,希望帮助大家更容易理解
MMDetection 开源框架整体构建细节
一、第一层整体抽象
上图为 MMDetection
框架整体训练和测试抽象流程图。按照数据流过程,训练流程可以简单总结为:
给定任何一个数据集,首先需要构建Dataset类,用于迭代输出数据
在迭代输出数据的时候需要通过数据pipeline对数据进行各种处理,最典型的处理流是训练中的数据增强操作,测试中的数据预处理等
通过Sampler采样器可以控制Dataset输出的数据顺序,最常用的是随机采样器RandomSampler。由于Dataset中输出的图片大小不一样,为了尽可能减少后续组成batch时pad的像素个数,MMDetection引入了分组采样器GroupSampler和DistributedGroupSampler,相当于在RandomSampler基础上额外新增了根据图片宽高比进行group功能
将Sampler和Dataset都输入给DataLoa ...
mmdetection3d
MMDetection3D 整体框架介
[TOC]
一、前言
由于3D本身数据的复杂性和MMDetection3D支持任务(电云D检测、单目3D检测、多模态3D检测和点云3D语义分割等)和场景(室内和外)的多样性,整个框架结构相对复杂,门槛高,这里对MMDetection3D整个框架进行整体的了解,包括设计流程,核心组件,数据集处理方法等。
整个框架的代码库目录结构如下:
# MMDetection3D 代码目录结构,展示主要部分
mmdetection3d
|
|- configs # 配置文件
|- data # 原始数据及预处理后数据文件
|- mmdet3d
| |- ops # cuda 算子(即将迁移到 mmcv 中)
| |- core # 核心组件
| |- datasets # 数据集相关代码
| | ...
mmdetection整体构建流程
MMDetection 整体构建流程
一、摘要
众所周知,目标检测算法比较复杂,细节比较多,难以复现,而我们推出的
MMDetection 开源框架则希望解决上述问题。目前 MMdetection
已经复现了大部分主流和前沿模型,例如 Faster R-CNN 系列、Mask R-CNN
系列、YOLO 系列和比较新的 DETR 等等,模型库非常丰富,star 接近
13k,在学术研究和工业落地中应用非常广泛。
本文主要是从整体框架构建角度来解析,不会涉及到具体算法和代码,希望通过本文讲解:
MMDetection 整体构建流程和思想
目标检测算法核心组件划分
目标检测核心组件功能
二、目标检测算法抽象流程
按照目前目标检测的发展,可以大概归纳为如下所示:
img
注意上面仅仅写了几个典型算法而已,简单来说目标检测算法可以按照 3
个维度划分:
按照 stage 个数划分,常规是 one-stage 和
two-stage,但是实际上界限不是特别清晰,例如带 refine 阶段的算法
RepPoints,实际上可以认为是1.5 stage 算法,而 Cascade R-CN ...
Attention:从NLP到CV再到BEV
一、Transformer
Transformer源于17年谷歌的文章Attention Is All You Need“”
Transformer最开始应用于NLP领域的机器翻译任务。
它是一个编码器-解码器结构:编码器将原始语言的句子作为输入并生成基于注意力的表征,解码器则关注编码信息并以自回归方式生成翻译的句子。
Transformer中最重要的是Attention机制。
Attention(注意力)机制如果浅层的理解,跟他的名字非常匹配。他的核心逻辑就是「从关注全部到关注重点」。
Attention机制的实质其实就是一个寻址(addressing)的过程,如下图所示:给定一个和任务相关的查询Query向量
q,通过计算与Key的注意力分布并附加在Value上,从而计算Attention
Value,这个过程实际上是Attention机制缓解神经网络模型复杂度的体现:不需要将所有的N个输入信息都输入到神经网络进行计算,只需要从X中选择一些和任务相关的信息输入给神经网络。
举个例子:
图书管(source)里有很多书(value),为了方便查找,我们给书做了编号(key) ...
Attention
一、注意力机制:Attention
1.1什么是注意力机制?
我们先来看一张图片
那么,大家的目光是更多注意在美少女古河渚身上,还是花草风景身上呢?可能对于热爱动漫的人来说他会关注logo------CLANNAD
1和主人公古河渚,对于喜欢花的人来说可能更关注樱花,对于喜欢制服的人来说可能更关注jk装......
再举几个例子:
看人-->看脸
看文章-->看标题
看段落-->看开头
注意力机制其实是源自于人对于外部信息的处理能力。由于每一时刻接受的信息都是无比庞大且复杂万分的,远远超过了人脑的处理能力,因此人在处理信息的时候,会将注意力放在需要关注的信息上,对于其他无关的外部信息进行过滤,这种处理方式被称为注意力机制。
通俗而言,注意力对于人而言可以理解为“关注度”,对于没有感情的机器而言就是赋予多少权重(0-1间的小数),越重要的地方或者越相关的地方就赋予越高的权重。
1.2如何运用注意力机制?
1.2.1 Query、Key和Value
首先,三者概念:
查询(Query):是指查询的范围,自主提示,即主观意识的特征向量
键(Key):是被对比的项, ...