BEVFormer
BEVFormer是一个一个采用纯视觉做感知任务的算法模型,其通过提取环视相机采集到的图像特征,并将提取的环视特征通过模型学习的方式转换到BEV空间(模型去学习如何将特征从图像坐标系转化到BEV坐标系),从而实现3D目标检测和地图分割任务。
BEVFormer的Pipline
BEVFormer的pipline分为下面几个部分:
Backbone + Neck (ResNet-101-DCN
+FPN)提取环视图像的多尺度特征;
Encoder模块(包括Temporal Self-Attention模块和Spatial
Cross-Attion模块)完成环视图像特征向BEV特征的建模;
Decoder模块完成3D目标检测的分类和定位任务;
正负样本的定义(采用Transformer 中常用的匈牙利匹配算法,Foacal Loss
+ L1 loss的总损失最小);
损失的计算(Focal Loss分类损失 + L1 Loss回归损失);
反向传播,更新网络模型参数
输入数据格式
BEVFormer网络模型的输入是一个6维的张量:
(bs,queue,cam,C,H,W)
bs ...
视觉BEV综述
感知BEV综述
什么是BEV
BEV的意思是鸟瞰图,也就是我们会将环视摄像机,激光雷达,甚至是毫米波雷达的数据,经过特征提取之后,统统通过视角变换,转换到鸟瞰图这种场景下,然后会在这些场景下,做一些多传感器数据融合就很方便了,之后我们就可以接各种任务头,做3D目标检测,车道线检测,语义分割,障碍物检测等等,都是可以的。
对于低成本的自动驾驶系统,以视觉为中心的BEV感知是一个长期的挑战,因为摄像头通常放置在自车上,与地面平行,面向外部。图像在与BEV正交的透视图(PV)中获取,并且两个视图之间的变换是不适定问题。最早工作[用单应矩阵以物理和数学方式将平坦地面从PV转换为BEV。多年来,这种方法一直占据主导地位,直到平地硬约束无法满足复杂真实场景的自主驾驶要求。随着计算机视觉中数据驱动方法的发展,近年来出现了许多基于深度学习的方法,通过求解PV-BEV变换来促进以视觉为中心的BEV感知。
BEV方法
基于视图变换,当前BEV视觉感知工作可分为两大类:基于几何的变换和基于网络的变换。如图1所示:
前者充分利用摄像头的物理原理以可解释的方式迁移视图。除了经典的基于homograph的方法外 ...
DETR代码解读
DETR代码解析
一、源代码
https://link.zhihu.com/?target=https%3A//github.com/facebookresearch/detr
二、代码解析
1.前言
二维位置编码:
构造位置矩阵x_embed、y_embed,这里用python函数cumsum,对一个矩阵的元素进行累加,那么累加以后最后一个元素就是对所以累加元素的和,省去了求和的步骤,直接用这个和做归一化,对应x_embed[:,:,-1:]和y_embed[:,-1:,:]。
代码中一些变量的shape:
tensor_list的类型是NestedTensor,内部自动附加mask,用于表示动态shape,是pytorch新特性,全是false。
x:(b,c,H,W)
mask: (b,H,W),全是False。
not_mask:(b,H,W),全是True。
首先出现的y_embed:(b,H,W),具体是1,1,1,1,......,2,2,2,2,......,3,3,3,3,......
首先出现的x_embed:(b,H,W),具体是1,2,3,4,......,1 ...
DETR_Start
DETR原理解读
原理解读
DETR任务是Object
detection,用到的工具是transformers,特点是End-to-end。而目标检测的任务是要预测一系列的Bounding
Box的坐标及Label,当下大多数检测器通过定义一些proposal或者anchor,将问题构建成一个分类及回归问题来间接完成这个任务。DETR的工作则是将transfoemers运用到目标检测领域,取代了现在模型需要手工设计的工作,并且取得了不错的结果。
DETR是第一个使用端到端的方法解决检测问题,解决的方法是检测问题视为一个set
prediction 问题,如下图所示:
网络的主要组成:CNN和Transformer。
DETR工作两个关键部分:
用transformer的encoder-decoder架构一次性生成N个box
prediction。(N是一个事先设定的、远远大于image中object个数的一个整数)
设计了bipartite matching loss,基于预测的box和ground
truthboxes的二分图匹配计算loss大小,从而使 ...