成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

跨模態Transformer:面向快速魯棒的3D目標檢測

人工智能 新聞
目前將各個模態融合在一起去提升模型的感知性能已經是一個比較火熱的研究方向(畢竟自動駕駛汽車上配備了多種傳感器),同時CMT又是一個完全End-to-End的感知算法。

本文經自動駕駛之心公眾號授權轉載,轉載請聯系出處。

圖片

目前,在自動駕駛的車輛中已經配備了多種信息采集傳感器,如激光雷達、毫米波雷達以及相機傳感器。目前來看,多種傳感器融合在自動駕駛的感知任務中顯示出了巨大的發展前景。比如:相機采集到的2D圖像信息捕獲了豐富的語義特征,激光雷達采集到的點云數據可以為感知模型提供物體的準確位置信息和幾何信息。通過將不同種傳感器獲取到的信息充分利用起來可以減少自動駕駛感知過程中的不確定性因素的發生,同時使感知模型具有更好的檢測魯棒性。

今天介紹的是一篇來自曠視的自動駕駛感知論文,并且中稿了今年的ICCV2023 視覺頂會,該文章的主要特點是類似PETR這類End-to-End的BEV感知算法(不再需要利用NMS后處理操作過濾感知結果中的冗余框),同時又額外使用了激光雷達的點云信息來提高模型的感知性能,是一篇非常不錯的自動駕駛感知方向的論文,文章的鏈接和官方開源倉庫鏈接如下:

  • 論文鏈接:https://arxiv.org/pdf/2301.01283.pdf
  • 代碼鏈接:https://github.com/junjie18/CMT

CMT算法模型整體結構

接下來先整體介紹一下CMT感知模型的網絡結構,如下圖所示:

圖片

通過整個算法框圖可以看出,整個算法模型主要包括三個部分

  • 激光雷達主干網絡+相機主干網絡(Image Backbone + Lidar Backbone):用于獲取點云和環視圖像的特征得到Point Cloud Token**(PC Tokens)以及Image Token(Im Tokens)**
  • 位置編碼的生成:針對不同傳感器采集到的數據信息,Im Tokens生成對應的坐標位置編碼Im PE,PC Tokens生成對應的坐標位置編碼PC PE,同時Object Queries也生成對應的坐標位置編碼Query Embedding
  • Transformer Decoder+FFN網絡:輸入為Object Queries + Query Embedding 以及完成位置編碼的Im TokensPC Tokens進行交叉注意力的計算,利用FFN生成最終的3D Boxes + 類別預測

在介紹完網絡整體結構之后,接下來就詳細介紹一下上述提到的三個子部分

激光雷達主干網絡+相機主干網絡(Image Backbone + Lidar Backbone)
  • 激光雷達主干網絡
    通常采用的激光雷達主干網絡提取點云數據特征包括以下五個部分
  • 點云信息體素化
  • 體素特征編碼
  • 3D Backbone(常用VoxelResBackBone8x網絡)對體素特征編碼后的結果進行3D特征的提取
  • 將3D Backbone提取到特征的Z軸進行壓縮,得到BEV空間下的特征
  • 利用2D Backbone對投影到BEV空間的特征做進一步的特征擬合
  • 由于2D Backbone輸出的特征圖的通道數與Image輸出的通道數不一致,用了一個卷積層進行通道數的對齊(針對本文模型而言,做了一個通道數量的對齊,但并不屬于原有點云信息提取的范疇)
  • 相機主干網絡
    一般采用的相機主干網絡提取2D圖像特征包括以下兩個部分:
  • 輸入:2D Backbone輸出的降采樣16倍和32倍的特征圖

  • 輸出:將下采樣16倍和32倍的圖像特征進行融合,獲取降采樣16倍的特征圖

  • Tensor([bs * N, 1024, H / 16, W / 16])

  • Tensor([bs * N,2048,H / 16,W / 16])

  • Tensor([bs * N,256,H / 16,W / 16])

  • 輸入:采用ResNet-50網絡提取環視圖像特征

  • 輸出:輸出下采樣16倍和32倍的圖像特征

  • 輸入張量:Tensor([bs * N,3,H,W])

  • 輸出張量:Tensor([bs * N,1024,H / 16,W / 16])

  • 輸出張量:``Tensor([bs * N,2048,H / 32,W / 32])`

  • 2D Backbone提取圖像特征

  • Neck(CEFPN)

位置編碼的生成

根據上面的介紹可知,位置編碼的生成主要包括三個部分,分別是Image Position Embedding,Point Cloud Position Embedding以及Query Embedding;接下來分別介紹一下他們的生成過程。

  • Image Position Embedding(Im PE)
    Image Position Embedding的生成過程與PETR中圖像位置編碼的生成邏輯是一樣的(具體可以參考PETR論文原文,這里不做過多的闡述),可以總結為以下四個步驟:
  • 在圖像坐標系下生成3D圖像視錐點云
  • 3D圖像視錐點云利用相機內參矩陣變換到相機坐標系下得到3D相機坐標點
  • 相機坐標系下的3D點利用cam2ego坐標變換矩陣轉換到BEV坐標系下
  • 將轉換后的BEV 3D 坐標利用MLP層進行位置編碼得到最終的圖像位置編碼
  • Point Cloud Position Embedding(PC PE)
    Point Cloud Position Embedding的生成過程可以分為以下兩個步驟
  • 在BEV空間的網格坐標點利用pos2embed()函數將二維的橫縱坐標點變換到高維的特征空間

    # 點云位置編碼`bev_pos_embeds`的生成
    bev_pos_embeds = self.bev_embedding(pos2embed(self.coords_bev.to(device), num_pos_feats=self.hidden_dim))
    
    def coords_bev(self):
        x_size, y_size = (grid_size[0] // downsample_scale,grid_size[1] // downsample_scale)
        meshgrid = [[0, y_size - 1, y_size], [0, x_size - 1, x_size]]
        batch_y, batch_x = torch.meshgrid(*[torch.linspace(it[0], it[1], it[2]) for it in meshgrid])
        batch_x = (batch_x + 0.5) / x_size
        batch_y = (batch_y + 0.5) / y_size
        coord_base = torch.cat([batch_x[None], batch_y[None]], dim=0)   # 生成BEV網格.
        coord_base = coord_base.view(2, -1).transpose(1, 0)  
        return coord_base  # shape: (x_size *  y_size, 2)
    
    def pos2embed(pos, num_pos_feats=256, temperature=10000):
        scale = 2 * math.pi
        pos = pos * scale
        dim_t = torch.arange(num_pos_feats, dtype=torch.float32, device=pos.device)
        dim_t = temperature ** (2 * (dim_t // 2) / num_pos_feats)
        pos_x = pos[..., 0, None] / dim_t
        pos_y = pos[..., 1, None] / dim_t
        
        pos_x = torch.stack((pos_x[..., 0::2].sin(), pos_x[..., 1::2].cos()), dim=-1).flatten(-2)
        pos_y = torch.stack((pos_y[..., 0::2].sin(), pos_y[..., 1::2].cos()), dim=-1).flatten(-2)
        
        posemb = torch.cat((pos_y, pos_x), dim=-1)
        return posemb  # 將二維的x,y坐標編碼成512維的高維向量


  • 利用一個MLP網絡進行空間轉換,保證通道數量的對齊


  • Query Embedding

    為了讓Object Queries、Image Token以及Lidar Token之間計算相似性更加的準確,論文中的Query Embedding會利用Lidar和Camera生成位置編碼的邏輯來生成;具體而言Query Embedding = Image Position Embedding(同下面的rv_query_embeds) + Point Cloud Position Embedding(同下面的bev_query_embeds)。


  • bev_query_embeds生成邏輯

    由于論文中的Object Query原本就是在BEV空間進行初始化的,所以直接復用Point Cloud Position Embedding生成邏輯中的位置編碼和bev_embedding()函數即可,對應關鍵代碼如下:

    def _bev_query_embed(self, ref_points, img_metas):
        bev_embeds = self.bev_embedding(pos2embed(ref_points, num_pos_feats=self.hidden_dim))
        return bev_embeds  # (bs, Num, 256)


  • rv_query_embeds生成邏輯

    上面剛剛提到,Object Query是在BEV坐標系下初始的點,所以論文中為了可以遵循Image Position Embedding的生成過程,就需要先將BEV坐標系下的3D空間點投影到圖像坐標系下,然后再利用之前生成Image Position Embedding的處理邏輯,保證生成過程的邏輯相同,核心代碼如下:

    def _rv_query_embed(self, ref_points, img_metas):
        pad_h, pad_w = pad_shape
        
        # 由歸一化坐標點映射回正常的roi range下的3D坐標點
        ref_points = ref_points * (pc_range[3:] - pc_range[:3]) + pc_range[:3]
        points = torch.cat([ref_points, ref_points.shape[:-1]], dim=-1)
        
        points = bda_mat.inverse().matmul(points)
        points = points.unsqueeze(1)
        points = sensor2ego_mats.inverse().matmul(points)
        points =intrin_mats.matmul(points)
        proj_points_clone = points.clone()
     
        # 選擇有效的投影點
        z_mask = proj_points_clone[..., 2:3, :].detach() > 0
        proj_points_clone[..., :3, :] = points[..., :3, :] / (
            points[..., 2:3, :].detach() + z_mask * 1e-6 - (~z_mask) * 1e-6
        )
        proj_points_clone = ida_mats.matmul(proj_points_clone)
        proj_points_clone = proj_points_clone.squeeze(-1)
        mask = (
            (proj_points_clone[..., 0] < pad_w)
            & (proj_points_clone[..., 0] >= 0)
            & (proj_points_clone[..., 1] < pad_h)
            & (proj_points_clone[..., 1] >= 0)
        )
        mask &= z_mask.view(*mask.shape)
    
        coords_d = (
            1 + torch.arange(depth_num).float() * (pc_range[4] - 1) / depth_num)
        projback_points = (ida_mats.inverse().matmul(proj_points_clone))
        projback_points = torch.einsum("bvnc, d -> bvndc", projback_points, coords_d)
        projback_points = torch.cat(
            [projback_points[..., :3], projback_points.shape[:-1]], dim=-1)
        projback_points = (sensor2ego_mats.matmul(intrin_mats).matmul(projback_points))
        projback_points = (bda_mat@ projback_points)
        projback_points = (projback_points[..., :3] - pc_range[:3]) / (pc_range[3:] - self.pc_range[:3])
        rv_embeds = self.rv_embedding(projback_points)
        rv_embeds = (rv_embeds * mask).sum(dim=1)
        return rv_embeds

    通過上述的變換,即完成了BEV空間坐標系下的點先投影到圖像坐標系,再利用之前生成Image Position Embedding的處理邏輯生成rv_query_embeds的過程。

    最后Query Embedding = rv_query_embeds + bev_query_embeds


Transformer Decoder+FFN網絡
  • Transformer Decoder
    這里與Transformer中的Decoder計算邏輯是完全一樣的,但在輸入數據上有點不同
  • 第一點是Memory:這里的Memory是Image Token和Lidar Token進行Concat后的結果(可以理解為兩種模態的融
  • 第二點是位置編碼:這里的位置編碼是rv_query_embeds和bev_query_embeds進行concat的結果,query_embed是rv_query_embeds + bev_query_embeds;
  • FFN網絡
    這個FFN網絡的作用與PETR中的作用是完全相同的,具體的輸出結果可以看PETR原文,這里就不做過多的贅述了。

論文實驗結果

首先先放出來CMT和其他自動駕駛感知算法的比較實驗,論文作者分別在nuScenes的test和val集上進行了比較,實驗結果如下

  • 各個感知算法在nuScenes的test set上的感知結果對比
    表格中的Modality代表輸入到感知算法中的傳感器類別,C代表相機傳感器,模型只喂入相機數據。L代表激光雷達傳感器,模型只喂入點云數據。LC代表激光雷達和相機傳感器,模型輸入的是多模態的數據。通過實驗結果可以看出,CMT-C模型的性能要高于BEVDet和DETR3D。CMT-L模型的性能要高于CenterPoint和UVTR這類純激光雷達的感知算法模型。而當CMT采用激光雷達的點云數據和相機數據后超越了現有的所有單模態方法,得到了SOTA的結果。

  • 模型在nuScenes的val set上的感知結果對比
    通過實驗結果可以看出,CMT-L的感知模型的性能超越了FUTR3D和UVTR。當同時采用激光雷達的點云數據和相機數據后,CMT較大幅度超越了現有的采用多模態的感知算法,像FUTR3D、UVTR、TransFusion、BEVFusion等多模態算法,取得了在val set上的SOTA結果。

接下來是CMT創新點的消融實驗部分

首先(a)是做了是否采用位置編碼的消融實驗,通過結果可以看出當同時采用圖像和激光雷達的位置編碼后,NDS和mAP指標實現了最好的效果。(c)和(f)部分的消融實驗主要是對點云主干網絡的主干網絡類型和體素大小進行了不同的嘗試。(d)和(e)部分的消融實驗主要是對相機主干網絡的類型和輸入分辨率的大小進行了不同的嘗試。這部分只是做了粗略的概括,如果想要看更多詳細消融實驗的話,大家可以看下論文原文。

最后放一張CMT的感知結果在nuScenes數據集上可視化結果的展示,通過實驗結果可以看出,CMT還是有較好的感知結果的。

總結

目前將各個模態融合在一起去提升模型的感知性能已經是一個比較火熱的研究方向(畢竟自動駕駛汽車上配備了多種傳感器),同時CMT又是一個完全End-to-End的感知算法(不需要額外的后處理步驟)并在nuScenes數據集上有著SOTA的精度,本文就是對這篇文章進行了較為細致的介紹,希望對大家有所幫助。

原文鏈接:https://mp.weixin.qq.com/s/Fx7dkv8f2ibkfO66-5hEXA

責任編輯:張燕妮 來源: 自動駕駛之心
相關推薦

2024-01-26 10:02:51

自動駕駛3D

2022-12-29 11:57:43

3D框架

2023-10-27 09:57:54

2024-12-10 09:40:00

AI3D模型

2024-01-15 10:38:24

3D框架

2024-05-24 10:16:01

2023-12-12 10:09:33

3D框架模型

2024-10-15 13:07:38

2021-03-18 15:29:10

人工智能機器學習技術

2025-01-22 13:15:10

2022-12-13 10:17:05

技術目標檢測

2023-12-07 13:07:59

3D模型訓練

2023-09-11 11:27:34

自動駕駛3D

2012-07-06 15:03:43

跨平臺工具Ideaworks 3Marmalade

2023-12-14 11:18:16

視覺檢測

2022-12-14 10:21:25

目標檢測框架

2025-02-20 14:44:06

2021-09-18 15:35:00

模型人工智能深度學習

2023-05-03 09:01:41

CanvasWebGL

2024-04-19 12:38:20

3D檢測
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人av色 | 国产剧情一区 | 天堂一区二区三区 | 国产一区二区观看 | 成年人精品视频在线观看 | 亚洲情综合五月天 | 国产剧情一区 | 91一区| 国产日韩一区二区三区 | 亚洲精品久久久久久国产精华液 | 免费在线h视频 | 国产精品一区二区欧美黑人喷潮水 | 欧美午夜视频 | 大香在线伊779 | 亚洲精品久久久久久国产精华液 | 自拍偷拍亚洲视频 | av网站在线看 | 九九久久精品 | 国产日韩欧美激情 | 黄色亚洲网站 | 在线婷婷 | 国产91精品久久久久久久网曝门 | 精品国产一区二区在线 | 99国内精品| 午夜无码国产理论在线 | 欧美精品在欧美一区二区 | 天天影视亚洲综合网 | 亚洲黄色网址视频 | 在线视频 欧美日韩 | 日日操夜夜操天天操 | 国产成人精品999在线观看 | 操视频网站| 超碰在线人人 | www.4hu影院 | 久久久久无码国产精品一区 | 99精品视频免费观看 | 国产精品自产拍 | 中文字幕精品一区二区三区精品 | 欧美精品一区二区三区四区五区 | 精品欧美乱码久久久久久1区2区 | 欧美精品一区二区三区四区五区 |