3D-BoundingBox 项目简介
项目概述
3D-BoundingBox 项目旨在通过深度学习和几何学技术,实现对物体的三维边界框估计。该项目基于 PyTorch 实现,并通过结合 YOLOv3 检测算法来处理和分析输入图像。项目的主旨在于,通过对给定物体进行三维定位和可视化,提升自动驾驶和计算机视觉等领域的表现。
运行需求
为了顺利运行该项目,用户需要在设备上安装以下软件:
- PyTorch:用于神经网络的训练与推理。
- Cuda:用于加速深度学习运算。
- OpenCV >= 3.4.3:用于图像处理和计算机视觉任务。
使用方法
权重下载
要使用该预训练模型,需要下载相关权重。用户可以通过执行以下命令来获取预训练权重:
cd weights/
./get_weights.sh
该命令会下载 3D BoundingBox 网络的预训练权重,以及 YOLOv3 的权重。
运行程序
用户可以通过以下命令运行主程序,并选择性绘制 2D 边界框:
python Run.py [--show-yolo]
在默认目录 (eval/image_2/) 中依次处理图像,按空格键可查看下一张图像,按其他任意键可退出程序。
用户还可以从 Kitti 数据集中下载默认视频,或指定视频与对应的标定文件位置进行处理:
python Run.py --video [--hide-debug]
模型训练
要训练该模型,首先需要从 Kitti 数据集中下载左视角彩色图像、训练标签和相机标定矩阵,总计大约 13GB。下载并解压到 Kitti/ 目录后,可使用以下命令启动训练过程:
python Train.py
默认情况下,模型会每隔 10 个 epoch 保存一次,其损失值会每 10 批次输出一次。需要注意的是,损失值不会收敛至 0,尤其是方向性损失,期望为负值。此外,用户可以通过调整 α 和 w 这两个超参数来优化模型性能。
实现原理
该项目的 PyTorch 神经网络会输入尺寸为 224x224 的图像,预测物体相对于其类别平均值的方向和相对尺寸。为了实现这些功能,项目使用了 YOLOv3 检测算法通过 OpenCV 提供 2D 边界框和物体类别,然后汇总得出的方向和尺寸信息来计算物体的 3D 位置,并将其投影回图像当中。
在项目中,有两个重要假设:
- 2D 边界框紧贴物体。
- 物体在水平面上的俯仰角和滚转角接近 0(适用于路面上的车辆)。
未来发展目标
团队计划在未来实现以下目标:
- 在 Kitti 数据集上训练自定义的 YOLO 网络。
- 实现某种姿态可视化(例如 ROS)。
项目致谢
该项目的开发起始于某个 GitHub 代码仓库的分支,部分初始代码仍保留在训练脚本中。同时,项目借鉴了 2D-3D 几何转换相关的研究成果。