计算机视觉系列(3):目标检测的基础与实现

部署运行你感兴趣的模型镜像

计算机视觉系列(3):目标检测的基础与实现

前言

欢迎来到“计算机视觉系列”的第三篇!在前两篇中,我们分别探讨了图像处理的基础和图像分类的原理。本篇将聚焦于目标检测(Object Detection),这是计算机视觉中的一个核心任务。目标检测不仅要识别图像中的物体类别,还要定位它们的位置,通常以边界框(Bounding Box)的形式输出结果。本文将带你从基础概念入手,逐步走向代码实现。

“计算机视觉系列”共分为7个专题:

  1. 图像处理基础
  2. 图像分类入门
  3. 目标检测的基础与实现(本文)
  4. 图像分割技术
  5. 视频分析与跟踪
  6. 深度学习在计算机视觉中的应用
  7. 计算机视觉的未来趋势

什么是目标检测?

目标检测的任务是在图像或视频中找到感兴趣的对象,并标注其位置和类别。例如,在自动驾驶场景中,目标检测可以识别行人、车辆和交通标志。相比图像分类(仅输出类别),目标检测多了一个“定位”的要求,因此难度更高。

常见的目标检测算法分为两类:

  • 两阶段检测:如 Faster R-CNN,先生成候选区域(Region Proposal),再分类和定位。
  • 单阶段检测:如 YOLO 和 SSD,直接预测边界框和类别,速度更快。

目标检测的核心概念

  1. 边界框(Bounding Box)
    边界框通常由四个参数定义:左上角坐标 (x_min, y_min) 和右下角坐标 (x_max, y_max),或者中心点坐标 (x_center, y_center) 加宽高 (w, h)

  2. IOU(交并比)
    IOU 是衡量预测边界框与真实边界框重合程度的重要指标,计算公式为:

    IOU = (交集面积) / (并集面积)
    

    IOU 值越高,说明预测越准确。

  3. 非极大值抑制(NMS)
    NMS 用于去除重叠的边界框,保留置信度最高的框。

一个简单的代码示例:使用 OpenCV 进行目标检测

以下是一个基于 OpenCV 的简单目标检测示例,使用预训练的 SSD 模型检测图像中的常见物体。

环境准备

确保你已安装以下库:

pip install opencv-python numpy

代码实现

import cv2
import numpy as np

# 加载预训练 SSD 模型
net = cv2.dnn.readNetFromCaffe("deploy.prototxt", "mobilenet_ssd.caffemodel")

# 加载图像
image = cv2.imread("example.jpg")
(h, w) = image.shape[:2]

# 图像预处理
blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 0.007843, (300, 300), 127.5)

# 输入模型并检测
net.setInput(blob)
detections = net.forward()

# 类别标签(COCO 数据集部分)
CLASSES = ["background", "aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair"]

# 处理检测结果
for i in range(detections.shape[2]):
    confidence = detections[0, 0, i, 2]
    if confidence > 0.5:  # 置信度阈值
        idx = int(detections[0, 0, i, 1])
        box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
        (startX, startY, endX, endY) = box.astype("int")

        # 绘制边界框和标签
        label = f"{CLASSES[idx]}: {confidence:.2f}"
        cv2.rectangle(image, (startX, startY), (endX, endY), (0, 255, 0), 2)
        cv2.putText(image, label, (startX, startY - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

# 显示结果
cv2.imshow("Output", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码说明

  1. 模型加载:使用 MobileNet SSD 预训练模型,您需要下载 deploy.prototxtmobilenet_ssd.caffemodel 文件(可在 OpenCV 官方 GitHub 获取)。
  2. 图像预处理:将图像调整为 300x300 并转换为 Blob 格式。
  3. 结果处理:遍历检测结果,绘制置信度高于 0.5 的边界框和标签。

运行结果

运行代码后,程序会在输入图像上绘制绿色边界框,并标注物体类别和置信度。如果您想测试,可以用一张包含常见物体的照片(如汽车、猫等)替换 example.jpg

进阶方向:YOLO 与 Faster R-CNN

  • YOLO(You Only Look Once)
    YOLO 将图像分成网格,直接预测每个网格中的边界框和类别,速度快,适合实时应用。推荐使用 YOLOv5 或 YOLOv8(PyTorch 实现)。

  • Faster R-CNN
    通过区域建议网络(RPN)生成候选区域,再进行分类和边界框回归,精度更高但速度较慢。

如果您想尝试 YOLO,可以参考以下伪代码:

from yolov5 import YOLOv5

model = YOLOv5("yolov5s.pt")  # 加载预训练模型
results = model.predict("example.jpg")
results.show()  # 显示检测结果

总结

目标检测是计算机视觉中的关键技术,广泛应用于自动驾驶、安防监控等领域。本文介绍了目标检测的基础概念,并通过 OpenCV 提供了一个入门示例。下一期(系列4),我们将探讨图像分割技术,敬请期待!

如果您有任何问题或建议,欢迎在评论区留言!

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值