熟悉mmdetection3d数据在模型中的处理流程

这篇具有很好参考价值的文章主要介绍了熟悉mmdetection3d数据在模型中的处理流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 本图文数据集采取KITTI数据集
  • 配置文件的介绍可以参考博主上一篇图文
  • 本图文旨在利用一条数据,走完整个多模态数据处理分支,获得bbox,并可视化在图像上

1、搭建模型

  • 本次教程选用的模型为MVXNet,是一个多模态融合的3D目标检测模型

  • 配置文件: mmdetection3d/configs/mvxnet/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class.py

  • 本次使用预训练模型,可以在mmdetection3d的mozel zoo中下载 MVXNet模型

from mmdet3d.apis import init_model
config_file = '/home/wistful/work/mmdetection3d/configs/mvxnet/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class.py'
checkpoint_file = '/home/wistful/ResultDir/my_pth/mxvnet/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class_20210831_060805-83442923.pth'

model = init_model(config_file, checkpoint_file, 'cuda:1')

熟悉mmdetection3d数据在模型中的处理流程,深度学习,计算机视觉,目标检测

2、读取数据

from mmdet3d.datasets import build_dataset
from mmcv import Config

cfg = Config.fromfile(config_file)
# 读取数据集
datasets = [build_dataset(cfg.data.train)]
# 我们取其中的一条数据,作为演示用例
one_data = datasets[0][0]
  • 根据我们的配置文件,我们得到的datasets为一个长度为7424(KITTI训练集长度)的列表,每一项包括4个字段:[‘img_metas’, ‘points’, ‘img’, ‘gt_bboxes_3d’, ‘gt_labels_3d’]

  • 接下来所有数据均使用这一个one_data

3、运行流程

MVXNet结构图如下:

熟悉mmdetection3d数据在模型中的处理流程,深度学习,计算机视觉,目标检测

MVXNet简化版模型结构:

model = dict(
    type='DynamicMVXFasterRCNN',
    img_backbone=dict(), # 图像骨干
    img_neck=dict(), # 图像neck
    pts_voxel_layer=dict(), # 体素层
    pts_voxel_encoder=dict(), # 体素编码层
    pts_middle_encoder=dict(), # 中间编码层
    pts_backbone=dict(), # 点云骨干
    pts_neck=dict(), # 点云neck
    pts_bbox_head=dict() # bbox head)

结合结构图,以上配置文件的最简理解是,图像经过骨干、neck得到图像特征;点云经过体素、编码得到点云特征;查看原版配置文件就可以看到,会在一个层融合图像和点云特征;随后经过head,产出bbox。接下来,我们先来获取图像特征:

3.1 图像特征获取

extract_img_feat = model.extract_img_feat
# 获取图像特征,此处获取的是图像经过骨干和neck之后的数据,为5个通道数为256的特征
img_feats = extract_img_feat((one_data.get('img').data).unsqueeze(dim=0).cuda(), [one_data.get('img_metas').data])
for i in img_feats:
    print(i.shape)
    
# extrac_img_feat代码:
def extract_img_feat(self, img, img_metas):
    """Extract features of images."""
    if self.with_img_backbone and img is not None:
        input_shape = img.shape[-2:]  # 获取图片的尺寸
        # update real input shape of each single img
        for img_meta in img_metas:
            img_meta.update(input_shape=input_shape)  # 更新一下img_metas

        if img.dim() == 5 and img.size(0) == 1:  # 维度等于5的话去除一个维度(只取一个图片)
            img.squeeze_()
        elif img.dim() == 5 and img.size(0) > 1:  # 取出批量、图片个数、通道、高、宽
            B, N, C, H, W = img.size()
            img = img.view(B * N, C, H, W)  # 重构为 [批量*数量, 通道, 高, 宽]
        img_feats = self.img_backbone(img)  # 送入骨干
    else:
        return None
    if self.with_img_neck:
        img_feats = self.img_neck(img_feats)  # 将骨干再送入neck
    return img_feats

输出如下:

熟悉mmdetection3d数据在模型中的处理流程,深度学习,计算机视觉,目标检测

3.2 点云特征获取

extract_pts_feat = model.extract_pts_feat
# 获取点云特征,此处同上面各个字段的类型需要去代码里看定义
img_feat_list = list(img_feats)
pts_feats = extract_pts_feat([one_data.get('points').data.cuda()], img_feat_list, [one_data.get('img_metas').data])

# extract_pts_feat代码:
def extract_pts_feat(self, pts, img_feats, img_metas):
    """Extract features of points."""
    if not self.with_pts_bbox:
        return None
    voxels, num_points, coors = self.voxelize(pts)  # 体素化
    # 体素编码器
    voxel_features = self.pts_voxel_encoder(voxels, num_points, coors,
                                            img_feats, img_metas)
    batch_size = coors[-1, 0] + 1
    x = self.pts_middle_encoder(voxel_features, coors, batch_size)
    x = self.pts_backbone(x)
    if self.with_pts_neck:
        x = self.pts_neck(x)
    return x

此时,我们已经得到图像特征和点云特征了,下面将特征送入head

3.3 head

# 此处的head为Anchor3DHead,返回值有三个: cls_score, bbox_pred, dir_cls_preds
# 其中,clas_score 通道数为  num_classes * num_anchors, num_classes在配置文件中
# bbox_pred 通道数为 num_anchors * box_code_size
# dir_cls_preds 通道数为 num_anchors * 2
# 得到head的输出后,还需要运行一下解码模块,才能得到最终的bbox和分类情况
pts_bbox_head = model.pts_bbox_head
pts_out = pts_bbox_head(pts_feats)  # tuple[list[torch.Tensor]]
cls_score, bbox_pred, dir_cls_preds = pts_out
print("cls_score:", cls_score[0].shape)
print("bbox_pred:", bbox_pred[0].shape)
print("dir_cls_preds:", dir_cls_preds[0].shape)

熟悉mmdetection3d数据在模型中的处理流程,深度学习,计算机视觉,目标检测

3.4 编码bbox

# 将head得到的输出编码为bboxer
bboxes = model.pts_bbox_head.get_bboxes(cls_score, bbox_pred, dir_cls_preds, [one_data.get('img_metas').data])
print(type(bboxes[0][0]))  # 是在LiDAR坐标系下
bboxes_data = bboxes[0][0]  # 得到了n个预测框
bboxes_data

熟悉mmdetection3d数据在模型中的处理流程,深度学习,计算机视觉,目标检测

以上是最简版的一条数据在模型里的流动过程,还有n多实现细节,需要去深扒代码

4、可视化

这一部分,我们可视化我们在3.4中得到的bbox,程序自己看吧

import cv2
from mmdet3d.core import show_multi_modality_result

img_metas = one_data.get('img_metas').data
img_file_path = img_metas['filename'] # 获取one_data对应的图像文件名

img = cv2.imread(img_file_path) # 读取图像
front_mat = one_data.get('img_metas').data.get('lidar2img') # 获取投影矩阵

gt_boxes = one_data.get('gt_bboxes_3d').data # 从one_data中获取gt_bboxes
print(gt_boxes)
print(bboxes_data)
# gt_bboxes_cam
bboxes_data = bboxes_data.to('cpu')
# 保存可视化图像到out_dir
show_multi_modality_result(img=img,
                           box_mode='lidar',
                           gt_bboxes=gt_boxes,
                           img_metas=img_metas,
                           pred_bboxes=bboxes_data,
                           proj_mat=front_mat,
                           out_dir="/home/wistful/work/mmdetection3d/visual_img/",
                           filename="test",
                           show=False)

熟悉mmdetection3d数据在模型中的处理流程,深度学习,计算机视觉,目标检测

这里我得到了四个输出,是因为我改动了一下show_multi_modality_result方法,加了一个将地面真相bbox和预测bbox绘制到一张图像上的方法。如下图所示,橙色为地面真相bbox,蓝色为预测框

熟悉mmdetection3d数据在模型中的处理流程,深度学习,计算机视觉,目标检测

5、总结

简单画了一个流程图,橙色代表我们获取的数据内容,蓝色代表网络,绿色代表我们得到的东西

熟悉mmdetection3d数据在模型中的处理流程,深度学习,计算机视觉,目标检测文章来源地址https://www.toymoban.com/news/detail-655455.html

到了这里,关于熟悉mmdetection3d数据在模型中的处理流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mmdetection3d SUN RGB-D数据集预处理

    本文为博主原创文章,未经博主允许不得转载。 本文为专栏《python三维点云从基础到深度学习》系列文章,地址为“https://blog.csdn.net/suiyingy/article/details/124017716”。         SUN RGB-D是普林斯顿大学发布的一种关于室内场景理解的数据集,共包含了10335个样本,其中训练样本

    2023年04月15日
    浏览(42)
  • mmdetection3d-之(三)--FCOS3d训练waymo数据集

    本内容分为两部分 1. waymo数据集转KITTI格式 2. FCOS3D训练KITTI格式的waymo数据集 1.1.1 waymo数据集下载 waymo数据集v1.2.0可以从这里下载。其中,train(32个压缩包),test(8个压缩包),val(8个压缩包)。这里的文件都是压缩包,每个都有20个G左右。 如果不想下载压缩包,可以下载

    2024年01月16日
    浏览(46)
  • MMDetection3D简单学习

    我们通常把模型的各个组成成分分成 6 种类型: 编码器(encoder):包括 voxel encoder 和 middle encoder 等进入 backbone 前所使用的基于体素的方法,如  HardVFE  和  PointPillarsScatter 。 骨干网络(backbone):通常采用 FCN 网络来提取特征图,如  ResNet  和  SECOND 。 颈部网络(neck):

    2024年02月13日
    浏览(41)
  • 【MMDetection3D】环境搭建,使用PointPillers训练&测试&可视化KITTI数据集

    2D卷不动了,来卷3D,之后更多地工作会放到3D检测上 本文将简单介绍什么是3D目标检测、KITTI数据集以及MMDetection3D算法库,重点介绍如何在MMDetection3D中,使用PointPillars算法训练KITTI数据集,并对结果进行测试和可视化。   对于一张输入图像,2D目标检测旨在给出物体类别并标

    2024年02月03日
    浏览(49)
  • MMDetection3D框架环境配置

    MMDetection3D是一个基于PyTorch的开源3D目标检测框架。下面是MMDetection3D的环境配置步骤: 安装Anaconda,教程很多不在说明。 1.创建Python环境 使用以下命令创建一个Python 3.8环境: 使用以下命令激活Python环境:  2.安装gpu版本的torch、torchvision 2.1 下载对应的torch、torchvision安装包:

    2024年02月09日
    浏览(46)
  • mmdetection3d-之(一)--FCOS3d训练nuscenes-mini数据集

    参考网上的博客,出现各种错误,最大的是: AssertionError: Samples in split doesn\\\'t match samples in predictions. 给了解决方案,也不知道那个数字是怎么来的。索性自己来一遍,参考了github issue。   第一步,下载数据集并解压: 第二步,修改代码 tools/create_data.py   第三步,制作数据

    2024年02月15日
    浏览(46)
  • mmdetection3d nuScenes (持续更新)

    本文为博主原创文章,未经博主允许不得转载。 本文为专栏《python三维点云从基础到深度学习》系列文章,地址为“https://blog.csdn.net/suiyingy/article/details/124017716”。         Mmdetection3d集成了大量3D深度学习算法,其中很大一部分可以在智能驾驶nuScenes数据集上运行。在算法

    2023年04月15日
    浏览(42)
  • win10 mmdetection3d环境搭建

    官网:mmdetection3d/README_zh-CN.md at master · open-mmlab/mmdetection3d · GitHub 安装过程参照:win10 mmdetection3d 训练KITTI_树和猫的博客-CSDN博客_pointnet训练kitti 官网安装过程 3D目标检测框架综述-知乎中描述了当前3D目标检测的数据和模型状况,为了能将数据和评价标准等统一,介绍了4个比

    2023年04月18日
    浏览(37)
  • 【MMDetection3D】MVXNet踩坑笔记

    原文 代码 MVXNet(CVPR2019) 最近许多关于3D target detection的工作都集中在设计能够使用点云数据的神经网络架构上。虽然这些方法表现出令人鼓舞的性能,但它们通常基于单一模态,无法利用其他模态(如摄像头和激光雷达)的信息。尽管一些方法融合了来自不同模式的数据,这些方

    2024年01月18日
    浏览(48)
  • 新版mmdetection3d将3D bbox绘制到图像

    使用 python mmdet3d/utils/collect_env.py 收集环境信息 以前写过mmdetection3d中的可视化,但mmdetection3d更新后代码已经不适用了,正好我把我的工作全转移到新版mmdetection3d上来了,因此重新写了一下推理结果可视化。整体思路还是构建模型、构建数据、推理、绘制,下面分步讲解 我用

    2024年04月15日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包