Maison  >  Article  >  Périphériques technologiques  >  Transformateur multimodal : pour une détection d'objets 3D rapide et robuste

Transformateur multimodal : pour une détection d'objets 3D rapide et robuste

王林
王林avant
2023-10-10 22:53:161069parcourir

Transformateur multimodal : pour une détection dobjets 3D rapide et robuste

Actuellement, les véhicules autonomes sont équipés de divers capteurs de collecte d'informations, tels que le lidar, le radar à ondes millimétriques et les capteurs de caméra. Du point de vue actuel, une variété de capteurs ont montré de grandes perspectives de développement dans les tâches de perception de la conduite autonome. Par exemple, les informations d'image 2D collectées par la caméra capturent de riches caractéristiques sémantiques, et les données de nuages ​​de points collectées par lidar peuvent fournir des informations de position précises et des informations géométriques de l'objet pour le modèle de perception. En utilisant pleinement les informations obtenues par différents capteurs, l'apparition de facteurs d'incertitude dans le processus de perception de la conduite autonome peut être réduite, tandis que la robustesse de détection du modèle de perception peut être améliorée. Aujourd'hui, nous présentons un article sur la perception de la conduite autonome de Megvii. et a été accepté à la conférence visuelle ICCV2023 de cette année. La principale caractéristique de cet article est un algorithme de perception BEV de bout en bout similaire au PETR (il ne nécessite plus l'utilisation d'opérations de post-traitement NMS pour filtrer les cases redondantes dans les résultats de perception. ). Dans le même temps, les informations du nuage de points du lidar sont également utilisées pour améliorer les performances de perception du modèle. Il s'agit d'un très bon article sur l'orientation de la perception de la conduite autonome. Le lien vers l'article et l'entrepôt open source officiel. Les liens sont les suivants :

Lien papier : https://arxiv.org/pdf/2301.01283.pdf
  • Lien code : https://github.com/junjie18/CMT
Structure globale du modèle d'algorithme CMT

Ensuite, nous examinerons la structure du réseau du modèle de perception CMT. Une introduction générale est donnée, comme le montre la figure ci-dessous :

Transformateur multimodal : pour une détection dobjets 3D rapide et robusteComme le montre l'ensemble du schéma fonctionnel de l'algorithme, l'ensemble du modèle d'algorithme comprend principalement trois parties

Réseau fédérateur Lidar + réseau fédérateur de caméra (Image Backbone + Lidar Backbone) : Utilisation Pour obtenir les caractéristiques du nuage de points et des images surround, nous pouvons obtenir Point Cloud Token** (PC Tokens)
    et Image Token
  • (Im Tokens)**Génération du codage de position : Pour les informations de données collectées par différents capteurs,
  • Im Tokens
  • Générez le code de position de coordonnées correspondant Im PE, PC Tokens générez le code de position de coordonnées correspondant PC PE et Object Queries génèrent également le code de position de coordonnées correspondantQuery EmbeddingTransformer Decoder+FFN network : L'entrée est
  • Object Queries
  • + Query Embedding et les Im Tokens et codés en position. Les jetons PC sont utilisés pour calculer l'attention croisée, et FFN est utilisé pour générer la prédiction finale des boîtes 3D + catégorie
  • Présentation en détail du réseau Après la structure globale, les trois sous-parties mentionnées ci-dessus seront présentées en détail

Réseau fédérateur Lidar + réseau fédérateur de caméra (Image Backbone + Lidar Backbone)

Réseau fédérateur Lidar
    Extraction du réseau fédérateur Lidar habituellement utilisé Les fonctionnalités de données de nuage de points comprennent les cinq parties suivantes

Voxélisation des informations sur les nuages ​​de points
  • Encodage des fonctionnalités Voxel
  • Le Backbone 3D (réseau VoxelResBackBone8x couramment utilisé) extrait les caractéristiques 3D du résultat de l'encodage des caractéristiques voxel
  • Le Backbone 3D extrait l'axe Z de la caractéristique et le compresse pour obtenir les caractéristiques dans l'espace BEV
  • Utilisez le Backbone 2D pour effectuez un ajustement supplémentaire des fonctionnalités sur les fonctionnalités projetées dans l'espace BEV
  • Étant donné que le nombre de canaux de la carte de fonctionnalités générée par le backbone 2D est différent de la sortie de l'image, le nombre de canaux est incohérent et une couche convolutive est utilisée pour aligner le nombre de canaux (pour le modèle de cet article, un alignement du nombre de canaux est effectué, mais il n'appartient pas à la catégorie originale d'extraction d'informations sur les nuages ​​de points)
Réseau fédérateur de caméras
    Le réseau fédérateur de caméras généralement utilisé pour L'extraction des caractéristiques de l'image 2D comprend les deux parties suivantes :

  • Entrée : cartes de caractéristiques de sous-échantillonnage 16x et 32x produites par le backbone 2D
  • Sortie : sous-échantillonnage 16x et 32x Fusion des caractéristiques de l'image pour obtenir une carte de caractéristiques sous-échantillonnée 16 fois
  • Tenseur([bs * N, 1024, H/16, W/16])
  • Tensor([bs * N, 1024, H / 16, W / 16])

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

  • 需要重新写的内容是:张量([bs * N,256,H / 16,W / 16])

    Tenseur([bs * N, 3, H, W])Tensor([bs * N,3,H,W])

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

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

  • 需要进行改写的内容是:2D骨架提取图像特征

  • Neck(CEFPN)

位置编码的生成

根据以上介绍,位置编码的生成主要包括三个部分,分别是图像位置嵌入、点云位置嵌入和查询嵌入。下面将逐一介绍它们的生成过程

  • 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()
    Tenseur de sortie : Tensor([bs * N, 1024, H/16, W/ 16] )


    Tenseur de sortie : ``Tensor([bs * N, 2048, H/32, W/32])`
  • Le contenu qui doit être réécrit est : Extraction du squelette 2D Image fonctionnalités

    Cou (CEFPN)

Génération du code de position
Selon l'introduction ci-dessus, la génération du code de position comprend principalement trois parties, à savoir l'intégration de la position de l'image et le nuage de points Intégration d’emplacement et intégration de requêtes. Ce qui suit présentera leur processus de génération un par un
    • Incorporation de position d'image (Im PE)Le processus de génération d'intégration de position d'image est le même que la logique de génération d'encodage de position d'image dans PETR (pour plus de détails, veuillez vous référer à l'article PETR original, qui ne sera pas fait ici Trop d'élaboration), qui peut être résumé dans les quatre étapes suivantes :


      Générer un nuage de points de tronc d'image 3D dans le système de coordonnées de l'image

      Nuage de points du tronc de l'image 3D Utilisez la matrice de paramètres internes de la caméra pour transformer le système de coordonnées de la caméra afin d'obtenir le point de coordonnées de la caméra 3D

      Le point 3D dans le système de coordonnées de la caméra est converti en système de coordonnées BEV à l'aide du Matrice de transformation de coordonnées cam2ego

      Utilisez les coordonnées 3D BEV converties pour effectuer l'encodage de position à l'aide de la couche MLP. Obtenez l'encodage final de la position de l'image
    • Incorporation de position du nuage de points (PC PE)

      Le processus de génération du nuage de points L'intégration de position peut être divisée en deux étapes suivantes

      Points de coordonnées de la grille dans l'espace BEV Utiliser

      pos2embed()

      La fonction transforme les deux- points de coordonnées horizontales et verticales dimensionnelles dans un espace de caractéristiques de grande dimension

      Intégration de requêtes

    • Pour effectuer des calculs similaires entre les requêtes d'objet, le jeton d'image et le jeton Lidar. L'intégration de requêtes dans le document sera générée en utilisant la logique du Lidar et de la caméra pour générer un encodage de position spécifiquement, l'intégration de requêtes. = Incorporation de la position de l'image (identique à rv_query_embeds ci-dessous) + Incorporation de la position du nuage de points (identique à bev_query_embeds ci-dessous).


      logique de génération bev_query_embeds

      Étant donné que la requête d'objet dans l'article est initialement initialisée dans l'espace BEV, l'encodage de position et la fonction bev_embedding() dans la logique de génération d'incorporation de position de nuage de points sont directement réutilisés, c'est-à-dire que oui, le code clé correspondant est le suivant :

      # 点云位置编码`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_sizebatch_y = (batch_y + 0.5) / y_sizecoord_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.pipos = pos * scaledim_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_tpos_y = pos[..., 1, None] / dim_tpos_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维的高维向量
      🎜🎜🎜🎜🎜🎜rv_query_embeds la logique de génération doit être réécrite🎜🎜🎜🎜Dans le contenu susmentionné, Object Query est le point initial dans le système de coordonnées BEV. Afin de suivre le processus de génération de l'incorporation de position d'image, le document doit d'abord projeter les points de l'espace 3D dans le système de coordonnées BEV sur le système de coordonnées d'image, puis utiliser la logique de traitement de la génération précédente d'incorporation de position d'image pour garantir que la logique du processus de génération est la même. Voici le code de base : 🎜
      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)
      🎜Grâce à la transformation ci-dessus, le point dans le système de coordonnées spatiales BEV est d'abord projeté sur le système de coordonnées de l'image, puis le processus de génération de rv_query_embeds à l'aide de la logique de traitement pour générer l'intégration de la position de l'image est terminé. . 🎜🎜Intégration de la dernière requête = rv_query_embeds + bev_query_embeds🎜🎜🎜🎜
    Transformer Decoder+FFN network
    • Transformer Decoder
      La logique de calcul ici est exactement la même que celle du décodeur dans Transformer, mais les données d'entrée sont un peu différentes
    • Le premier point est la mémoire : la mémoire ici est l'image Token Le résultat après concat avec Lidar Token (peut être compris comme la fusion des deux modalités
    • Le deuxième point est l'encodage de position : l'encodage de position ici est le résultat de la concat entre rv_query_embeds et bev_query_embeds, query_embed est rv_query_embeds + bev_query_embeds ;
    • Réseau FFN
      La fonction de ce réseau FFN est exactement la même que celle du PETR. Les résultats de sortie spécifiques peuvent être trouvés dans le texte original du PETR, je n'entrerai donc pas trop dans les détails ici

    Le. les résultats expérimentaux de l'article

    seront mis en premier. Des expériences comparatives entre CMT et d'autres algorithmes de perception de conduite autonome ont été publiées. Les auteurs de l'article ont effectué des comparaisons sur les ensembles de test et de val de nuScenes.

      Comparaison des résultats de perception de chaque algorithme de perception sur l'ensemble de test de nuScenes
    • Dans le tableau, la modalité représente la catégorie de capteur entrée dans l'algorithme de perception, C représente le capteur de la caméra et le modèle alimente uniquement les données de la caméra. capteur, et le modèle alimente uniquement les données de nuages ​​de points. LC représente les capteurs lidar et caméra, et le modèle entre plusieurs données modales. Il peut être vu à partir des résultats expérimentaux que les performances du modèle CMT-C sont supérieures à celles du modèle CMT-C. BEVDet et DETR3D Les performances du modèle CMT-L sont supérieures à celles des modèles d'algorithmes de perception lidar purs tels que CenterPoint et UVTR. Après avoir utilisé les données de nuages ​​de points lidar et les données de caméra, il a surpassé toutes les méthodes monomodales existantes et obtenu des résultats SOTA. . Comparaison des résultats de perception du modèle sur l'ensemble val de nuScenes
      à travers des résultats expérimentaux. On peut voir que les performances du modèle de perception de CMT-L surpassent FUTR3D et UVTR lors de l'utilisation simultanée des données de nuages ​​de points lidar et des données de caméra. CMT surpasse largement les algorithmes de perception multimodaux existants, tels que FUTR3D, UVTR, TransFusion et BEVFusion, qui ont obtenu des résultats SOTA sur val set

    Transformateur multimodal : pour une détection dobjets 3D rapide et robuste

      La prochaine étape est l'expérience d'ablation qui fait partie de l'innovation CMT

    Tout d'abord, nous avons mené une série d'expériences d'ablation pour déterminer s'il fallait utiliser le codage de position. Grâce aux résultats expérimentaux, il a été constaté que les indicateurs NDS et mAP obtenaient les meilleurs résultats en utilisant à la fois la position de l'image et la position lidar. codage. Ensuite, dans (c) et (c) de l’expérience d’ablation, partie f), nous avons expérimenté différents types et tailles de voxels du réseau fédérateur de nuages ​​de points. Dans les expériences d'ablation des parties (d) et (e), nous avons fait différentes tentatives sur le type de réseau fédérateur de caméra et la taille de la résolution d'entrée. Ce qui précède n'est qu'un bref résumé du contenu expérimental. Si vous souhaitez connaître des expériences d'ablation plus détaillées, veuillez vous référer à l'article originalTransformateur multimodal : pour une détection dobjets 3D rapide et robuste

    Enfin, voici un affichage des résultats visuels des résultats de perception CMT sur l'ensemble de données nuScenes. Il ressort des résultats expérimentaux que CMT Il existe encore de meilleurs résultats de perception.

    Transformateur multimodal : pour une détection dobjets 3D rapide et robuste

    Résumé

    Actuellement, la fusion de diverses modalités pour améliorer les performances perceptuelles du modèle est devenue une direction de recherche populaire (en particulier dans les véhicules autonomes, équipés de divers capteurs). Parallèlement, CMT est un algorithme de perception entièrement de bout en bout qui ne nécessite aucune étape de post-traitement supplémentaire et atteint une précision de pointe sur l'ensemble de données nuScenes. Cet article présente cet article en détail, j'espère qu'il sera utile à tout le monde

    Transformateur multimodal : pour une détection dobjets 3D rapide et robusteLe contenu qui doit être réécrit est : Lien original : https://mp.weixin.qq.com/s/Fx7dkv8f2ibkfO66-5hEXA

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer