文章目录
单目深度估计与YOLOv8目标距离测量是计算机视觉领域内两个不同的任务,但它们可以结合使用来实现对场景中物体的识别以及它们到相机的距离估算。以下是关于这两个概念的简要介绍:
1.进入代码仓路径,终端依次运行
conda create -n nn -y python=3.9
conda activate nn
pip install -e .
pip install ultralytics opencv-python
#
2.运行代码
python demo.py
3.弹出图片 -->按Esc ---->保存
4.本地查看生成图片
5.更改自己图片,找到demo.py第6行
将car.jpeg 替换成自己的图片路径
效果战时
原图
深度图
距离测量图
单目深度估计
单目深度估计是指利用单一摄像头拍摄的一张图像来预测场景中每个像素点到相机的距离(即深度)。这项技术挑战性较大,因为它缺乏立体视觉提供的自然深度线索。然而,通过训练深度学习模型,可以从单个图像中学习到深度信息。
深度估计方法:
- 基于学习的方法:利用大量的带有深度标签的数据集来训练神经网络,使其能够从单张图像中推断出深度信息。这类方法通常依赖于卷积神经网络(CNN),如U-Net、DenseNet等架构。
- 几何和物理约束:利用场景中的几何或物理规律,比如平行线在无穷远处汇聚、物体大小随距离变化等规则,来辅助深度估计。
- 自监督和弱监督学习:减少对标注数据的依赖,通过光流、视差或其他图像变换来间接地指导模型学习深度信息。
原图
深度图
深度估计距离图
YOLOv8目标检测
YOLO(You Only Look Once)是一系列用于实时目标检测的算法,YOLOv8代表了该系列的最新迭代。它能够在一次推理过程中同时定位多个对象并分类。YOLOv8相比前代版本可能有更优化的架构、更快的速度或者更高的精度。
YOLOv8的特点:
- 快速检测:YOLO以其高速度著称,可以在保持高准确性的前提下实现实时检测。
- 多尺度预测:支持不同尺度的目标检测,提高了小物体检测性能。
- 改进的网络结构:采用先进的网络设计,例如CSPDarknet、PANet等,以增强特征提取能力。
结合单目深度估计与YOLOv8进行目标距离测量
将单目深度估计与YOLOv8相结合,可以通过以下方式实现目标距离的测量:
- 目标检测:首先使用YOLOv8对输入图像进行目标检测,得到感兴趣物体的位置和类别。
- 深度图生成:然后,应用一个训练好的单目深度估计模型来生成整个场景的深度图。
- 距离计算:最后,对于每一个由YOLOv8检测出来的目标边界框,通过平均其内部像素对应的深度值或选择特定位置(如中心点)的深度值,来估计目标到相机的实际距离。
这种组合不仅能够提供目标的类别信息,还能给出它们相对于观察者的距离,这对于自动驾驶、机器人导航、增强现实等领域具有重要意义。随着硬件加速器的进步和模型效率的提升,这样的系统有望在未来变得更加普及和高效。
主要代码
# Load and preprocess an image.
image, _, f_px = depth_pro.load_rgb(image_path)
image = transform(image)
# Run inference.
prediction = model.infer(image, f_px=f_px)
depth = prediction["depth"] # Depth in [m].
depth_np = depth.squeeze().cpu().numpy()
for x1, y1, x2, y2 in person_boxes:
center_x = (x1 + x2)//2
center_y = (y1 + y2)//2
depth_value = depth_np[center_y, center_x]