基于mmdetection3d的单目3D目标检测模型,效果远超CenterNet3D

这篇具有很好参考价值的文章主要介绍了基于mmdetection3d的单目3D目标检测模型,效果远超CenterNet3D。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


使用 mmDetection3D 进行 单目3D 目标检测:基于 KITTI 数据集的实践

引言

在计算机视觉领域,3D 目标检测一直是一个备受关注的研究方向。随着深度学习的发展,越来越多的工具和框架涌现出来,为研究者和开发者提供了更多的选择。本文将介绍如何使用 mmDetection3D 这一强大的框架进行 3D 目标检测,并以 KITTI 数据集为例进行实践。
话不多说,我们先看一下实现效果,然后开始这次的学习。基于mmdetection3d的单目3D目标检测模型,效果远超CenterNet3D,3d,目标检测,人工智能

1. 背景介绍和文章工作

1.1 MMdetection3D简介

MMdetection3D是一个基于PyTorch的开源框架,专门设计用于解决3D目标检测任务。它在深度学习和计算机视觉领域取得了显著的进展,为研究者和开发者提供了一系列强大的工具来处理和解决3D目标检测的挑战。
主要特点:1.以PyTorch基础。 2.3D目标检测重点,提供了多种经典的3D目标检测模型,如smoke等,以及相应的训练和测试算法。 3.支持多种3D数据集,框架支持常见的3D数据集,包括本文使用的kitti数据集。 4.灵活的配置和扩展.

1.2 KITTI数据集概述

KITTI数据集是一个用于自动驾驶和移动机器人领域的经典数据集,由德国卡尔斯鲁厄理工学院和丰田提供。该数据集包含大量的城市驾驶场景的多模态数据,涵盖图像、激光雷达和相机等信息。
数据集组成:

  1. 图像数据: 包含高分辨率的彩色图像,捕捉了城市环境中的不同交通场景。
  2. 激光雷达数据: 提供了点云数据,用于描述周围环境中的物体形状和位置。
  3. 相机数据: 包括相机参数和标定信息,有助于将图像和激光雷达数据进行准确的配准。

1.3 本文工作

本文实现将构建在mmdection3D-smoke之上。在smoke之前,其实也有很多尝试使用单目进行3d检测的网络模型,比如CenterNet3D等,相比起来,smoke在单目3d目标检测上展现出了更好的效果。
本文做的改进主要有:

  1. 原始版本只能从dataloader里面做inference,本文实现了直接输入单张图片,直接输入单个视频,使用摄像头三种方式;
  2. 版本有着各种各样的限制,而现在可以传入一个KITTI的video path,就可以直接匹配好kitii数据集对应的摄像头内参进行预测。
  3. 本文探索了模型在nucsenes数据上的效果,比如从nuscenes中下载的图片,采用预训练权重和nuscenes相机内参进行推理的效果

2. 环境准备

在开始之前,确保你已经安装了必要的软件和库,包括Python,PyTorch,MMdetection3D等。你可以按照官方文档提供的步骤进行安装。官方文档非常的详细,相信大家可以自行配置好。

3. 数据预处理

在进行训练之前,我们需要对KITTI数据集进行预处理,以符合MMdetection3D的要求。这包括数据的格式转换、标注文件的处理等。如果需要进行训练,则可以更具具体的步骤可以参考MMdetection3D文档中关于数据预处理的说明。而在本文中,只关注应用部分。
因此,在本文的3d目标检测任务中,我们从kitti数据集中下载得到了以下几种预处理的数据:

  1. 图片:KITTI数据集直接下载下来的都是图片,以及有对应好的内参等表述文件。
  2. 视频:作者花了一定的功夫下载下来了KITTI完整原始的几个视频数据集片段作为测试(真的很难找)
  3. 内参文件:对应于KITTI数据集使用的相机内参的pkl文件(这个文件内容很复杂,不必过分的在意内容,推理时只需要学会使用即可)

4. 代码编写

4.1预设值参数代码

def parse_args():
parser = ArgumentParser()
# 图片推理模式使用的图片路径
parser.add_argument('--img', help='image file', default="./demo/data/nuscenes/image/2.jpg")
# 内参pkl文件
parser.add_argument('--ann', help='ann file', default="./demo/data/nuscenes/calib/mono3d_nuscenes.pkl")
# 视频推理模式的视频路径
parser.add_argument('--video_img', help='video file', default="./demo/data/kitti/video/4.mp4")
# 视频推理时使用的相机内参
parser.add_argument('--video_ann', help='ann file', default="./demo/data/kitti/calib/000008.pkl")
# parser.add_argument('--video_img', help='video file', default="./demo/data/nuscenes/video/3.mp4")
# parser.add_argument('--video_ann', help='ann file', default="./demo/data/nuscenes/calib/mono3d_nuscenes.pkl")
# 预训练配置路径,不用改
parser.add_argument('--config', help='Config file', default="./configs/smoke/smoke_dla34_dlaneck_gn-all_4xb8-6x_kitti-mono3d.py")
# 预训练权重
parser.add_argument('--checkpoint', help='Checkpoint file', default="./checkpoints/smoke_dla34_pytorch_dlaneck_gn-all_8x4_6x_kitti-mono3d_20210929_015553-d46d9bb0.pth")
parser.add_argument(
    '--device', default='cuda:0', help='Device used for inference')
parser.add_argument(
    '--cam-type',
    type=str,
    default='CAM_FRONT',
    help='choose camera type to inference')
# 推理模式选择
parser.add_argument("--mode", type=int, default=1, help="image, video or camara")
parser.add_argument(
    '--score-thr', type=float, default=0.30, help='bbox score threshold')
parser.add_argument(
    '--show',
    action='store_true',
    help='show online visualization results')
parser.add_argument(
    '--snapshot',
    action='store_true',
    help='whether to save online visualization results')
args = parser.parse_args()
return args

4.2 推理坐标代码

# 单张图片推理
result = inference_mono_3d_detector(model, args.img, args.ann,
                                    args.cam_type)
file_name = args.img.split('/')[-1].split('.')[0]
# 提取预测实例信息
pred_instances_3d = result.get('pred_instances_3d', None)

上面代码中:

pred_instances_3d

是我们得到的推理结果,则我们可以从这个推理结果中得到画在图上的长方体的坐标。

def calculate_rotated_corners(box_instance):
    if box_instance is not None:
        coordinates = box_instance.tensor[0].cpu().numpy()
        x1, y1, z1, x2, y2, z2, yaw = coordinates

        # Calculate half sizes in each dimension
        half_x = (x2 - x1) / 2
        half_y = (y2 - y1) / 2
        half_z = (z2 - z1) / 2

        # Calculate the rotation matrix for the yaw angle
        rotation_matrix = np.array([[np.cos(yaw), -np.sin(yaw), 0],
                                    [np.sin(yaw), np.cos(yaw), 0],
                                    [0, 0, 1]])

        # Define the eight corners of the box
        corners = [
            [half_x, half_y, half_z],
            [half_x, half_y, -half_z],
            [half_x, -half_y, half_z],
            [half_x, -half_y, -half_z],
            [-half_x, half_y, half_z],
            [-half_x, half_y, -half_z],
            [-half_x, -half_y, half_z],
            [-half_x, -half_y, -half_z]
        ]

        # Rotate the corners based on the yaw angle and return the rotated corners
        rotated_corners = []
        for corner in corners:
            rotated_corner = np.dot(rotation_matrix, corner)
            rotated_corners.append(rotated_corner + np.array([x1, y1, z1]))

        return rotated_corners

    return None

4.3 利用接口可视化

visualizer.add_datasample(
    'result',
    data_input,
    data_sample=result,
    draw_gt=False,
    show=args.show,
    wait_time=-1,
    out_file='./demo/output/{}_result.png'.format(file_name),
    pred_score_thr=args.score_thr,
    vis_task='mono_det')

可以利用mmdection3d的接口进行可视化。

当有了以上代码,我们便可以进行我们的推理了。

5.结果可视化

5.1图像结果

基于mmdetection3d的单目3D目标检测模型,效果远超CenterNet3D,3d,目标检测,人工智能

5.2视频结果

基于mmdetection3d的单目3D目标检测模型,效果远超CenterNet3D,3d,目标检测,人工智能

6.总结

本文介绍了如何使用 MMdetection3D 框架进行单目3D目标检测,以 KITTI 数据集为例进行实践。以下是文章的主要内容和亮点总结:

  1. 背景介绍: 介绍了 MMdetection3D 框架,这是一个基于 PyTorch 的开源框架,专注于解决3D目标检测任务。同时,对
    KITTI 数据集进行了概述,该数据集是自动驾驶和移动机器人领域的经典数据集。
  2. 文章工作: 文章在 MMdection3D 的 smoke
    模型基础上进行改进,使得推理过程更加灵活,支持单张图片、单个视频和摄像头输入。还探索了模型在 nuscenes 数据集上的效果。
  3. 环境准备: 提供了环境准备的步骤,确保读者已经安装了必要的软件和库,包括 Python、PyTorch、MMdetection3D。
  4. 数据预处理: 强调了在进行训练之前需要对 KITTI 数据集进行预处理,以满足 MMdetection3D
    的要求。文章列举了预处理过程中涉及到的几种数据,包括图片、视频和相机内参文件。
  5. 代码编写: 提供了预设值参数代码、推理坐标代码和利用接口可视化的代码片段。这些代码展示了如何使用 MMdetection3D
    进行推理,并将结果可视化。
  6. 结果可视化: 展示了推理结果的图像和视频可视化效果,通过长方体坐标展示了检测到的3D目标位置。

需要源代码的请大家关注收藏后然后评论区评论,或者私信我噢!


以往干货链接:
SH?Termius?一篇文章教你使用远程服务器训练!

Jetson nano开机自启动python程序文章来源地址https://www.toymoban.com/news/detail-856210.html

到了这里,关于基于mmdetection3d的单目3D目标检测模型,效果远超CenterNet3D的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 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)
  • mmdetection3d系列--(1)安装步骤(无坑版)

      最近在看一些基于点云3d目标检测的文章,需要复现甚至修改一些算法,就找到了mmlab开源的mmdetection3d目标检测框架,方便后续学习。     在安装的时候遇到一点坑,比如环境问题,安装完能跑demo但是不能跑训练测试问题等。在解决问题后还是完成了安装。在这里记录一

    2024年02月02日
    浏览(37)
  • MMdetection3D学习系列(一)——环境配置安装

    MMdetion3D是是mmlab在3d目标检测方面提供的相关检测模型,可以实现点云、图像或者多模态数据上的3D目标检测以及点云语义分割。 GitHub地址:https://github.com/open-mmlab/mmdetection3d/ 目前mmdetection3d 支持21种不同的算法,100多个预训练模型,7个数据集: mmdetection3D安装比较简单,之前

    2024年02月01日
    浏览(44)
  • MMDetection3D库中的一些模块介绍

    本文目前仅包含2个体素编码器、2个中间编码器、1个主干网络、1个颈部网络和1个检测头。如果有机会,会继续补充更多模型。 若发现内容有误,欢迎指出。   MMDetection3D的点云数据一般会经历如下步骤/模块:   下面分别介绍每个部分的一些典型模型。   在介绍体素

    2023年04月17日
    浏览(45)
  • 3D目标检测框架 MMDetection3D环境搭建 docker篇

    本文介绍如何搭建3D目标检测框架,使用docker快速搭建MMDetection3D的开发环境,实现视觉3D目标检测、点云3D目标检测、多模态3D目标检测等等。 需要大家提前安装好docker,并且docker版本= 19.03。 1、下载MMDetection3D源码 https://github.com/open-mmlab/mmdetection3d  git clone https://github.com/ope

    2024年02月08日
    浏览(44)
  • mmdetection3d可视化多模态模型推理结果

    参考文献: 带你玩转 3D 检测和分割 (三):有趣的可视化 - 知乎 (zhihu.com) Welcome to MMDetection3D’s documentation! — MMDetection3D 1.0.0rc4 文档 让我们看一下ChatGPT的回答[手动狗头]: mmdetection3D是基于PyTorch框架的3D目标检测工具包,它是mmdetection的3D扩展版本。它提供了一个灵活且高效的

    2024年02月16日
    浏览(41)
  • 点云检测框投影到图像上(mmdetection3d)

    原模型检测时候只有点云的检测框,本文主要是将demo文件中的pcd_demo.py中的代码,将点云检测出的3d框投影到图像上面显示。   

    2024年02月13日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包