当前位置: 首页 > article >正文

PETR- Position Embedding Transformation for Multi-View 3D Object Detection

旷视 ECCV 2022

纯视觉BEV方案transformer网络3D检测

paper:[2203.05625] PETR: Position Embedding Transformation for Multi-View 3D Object Detection

code:GitHub - megvii-research/PETR: [ECCV2022] PETR: Position Embedding Transformation for Multi-View 3D Object Detection & [ICCV2023] PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images

目标:环视相机的2D特征,加3D位置编码,转成3D表征

  1. 相机视椎空间离散化成栅格坐标点
  2. 坐标点用相机参数转到自车空间3D坐标
  3. 从相机抽特征,加上3D坐标,作为位置encoder输入,输出带3D位置的特征
  4. 上面特征输入transformer decoder,和object query交互,输出检测结果

和DETR3D区别

DETR3D:

Detr3DHead__init__self.query_embedding = nn.Embedding(self.num_query, self.embed_dims * 2)forwardquery_embeds = self.query_embedding.weighths, init_reference, inter_references = self.transformer(mlvl_feats,query_embeds,reg_branches=self.reg_branches if self.with_box_refine else None,  # noqa:E501img_metas=img_metas,)Detr3DTransformer__init__self.embed_dims = self.decoder.embed_dimsself.reference_points = nn.Linear(self.embed_dims, 3)forward(self, mlvl_feats, query_embed, reg_branches=None, **kwargs):query_pos, query = torch.split(query_embed, self.embed_dims , dim=1)query_pos = query_pos.unsqueeze(0).expand(bs, -1, -1)reference_points = self.reference_points(query_pos).sigmoid()

PETR:

PETRHead__init__num_query=900self.embed_dims = 256self.reference_points = nn.Embedding(self.num_query, 3)nn.init.uniform_(self.reference_points.weight.data, 0, 1)self.query_embedding = nn.Sequential(nn.Linear(self.embed_dims*3//2, self.embed_dims),nn.ReLU(),nn.Linear(self.embed_dims, self.embed_dims),)forwardreference_points = self.reference_points.weightquery_embeds = self.query_embedding(pos2posemb3d(reference_points))reference_points = reference_points.unsqueeze(0).repeat(batch_size, 1, 1) #.sigmoid()outs_dec, _ = self.transformer(x, masks, query_embeds, pos_embed, self.reg_branches)PETRDNTransformer__init__forward(self, x, mask, query_embed, pos_embed, attn_masks=None, reg_branch=None)query_embed = query_embed.transpose(0, 1)  # [num_query, dim] -> [num_query, bs, dim]out_dec = self.decoder(query=target,key=memory,value=memory,key_pos=pos_embed,query_pos=query_embed,key_padding_mask=mask,attn_masks=[attn_masks, None],reg_branch=reg_branch,)

组成

  1. 生成3D坐标
    1. 输入:栅格坐标点各相机外参
      1. 用CaDDN的LID采样空间
    2. 输出:3D坐标点
    3. 过程:
      1. 计算3D坐标点
      2. min-max正则化
  2. 3D位置encoder
    1. 输入:2D特征,3D坐标点
    2. 输出:3D特征
    3. 过程:
      1. 3D坐标点输入MLP编码,输出3D位置embedding
      2. 2D特征输入1*1卷积,和3D位置embedding相加,得到3D特征
        1. 提特征:ResNet、SwinTR、VoVNetV2
      3. flatten 3D特征
  3. object query
    1. 输入:参考点 nn.Embedding(self.num_query, 3) PETRHead.reference_points
    2. 输出:object query Q0  query_embeds
      1. 过程:正态分布初始化,余弦位置编码(pos2posemb3d),MLP(PETRHead.query_embedding)
  4. decoder
    1. 包含mha,ffn,训练中object query提取出障碍物高维特征
  5. head,loss函数
    1. 分类头:出障碍物类别,focal loss
    2. 框头:输出相对于参考点的偏移量,L1 loss
    3. Hungarian匹配gt
    4. ,和DETR3D一样

http://www.lryc.cn/news/2386910.html

相关文章:

  • Prompt Tuning与自然语言微调对比解析
  • 二十七、面向对象底层逻辑-SpringMVC九大组件之HandlerAdapter接口设计
  • QT软件开发环境及简单图形的绘制-图形学(实验一)-[成信]
  • 项目部署一次记录
  • 单例模式,饿汉式,懒汉式,在java和spring中的体现
  • 一文带你彻底理清C 语言核心知识 与 面试高频考点:从栈溢出到指针 全面解析 附带笔者手写2.4k行代码加注释
  • 【Redis】第1节|Redis服务搭建
  • 数据结构第5章 树与二叉树(竟成)
  • # 深入解析BERT自然语言处理框架:原理、结构与应用
  • ai学习--python部分-1.变量名及命名空间的存储
  • Cadence学习笔记之---PCB过孔替换、封装更新,DRC检查和状态查看
  • Java基础 Day21
  • 系统开发和运行知识
  • Elasticsearch 分片驱逐(Shard Exclusion)方式简析:`_name`、`_ip`、`_host`
  • 【C++高级主题】异常处理(四):auto_ptr类
  • STM32CubeMX配置使用通用定时器产生PWM
  • WebSphere Application Server(WAS)8.5.5教程第十四讲:JPA
  • Linux系统调用深度剖析
  • 动态规划-918.环形子数组的最大和-力扣(LeetCode)
  • Docker 镜像标签(Tag)规范与要求
  • STM32:Modbus通信协议核心解析:关键通信技术
  • 线程封装与互斥
  • 鸿蒙OSUniApp 开发实时天气查询应用 —— 鸿蒙生态下的跨端实践#三方框架 #Uniapp
  • 第十一天 5G切片技术在车联网中的应用
  • Spring AI 系列之一个很棒的 Spring AI 功能——Advisors
  • Vue3 + TypeScript + el-input 实现人民币金额的输入和显示
  • 2.1 C++之条件语句
  • ZYNQ实战:可编程差分晶振Si570的配置与动态频率切换
  • Linux `ls` 命令深度解析与高阶应用指南
  • 【MPC控制 - 从ACC到自动驾驶】5. 融会贯通:MPC在ACC中的优势总结与知识体系构建