这节是从"图像分类"正式迈向"定位 + 分类"的关键过渡,要把这几点讲清楚:
-
物体检测和图像分类的区别
-
边界框是什么
-
为什么检测更难
-
常见应用场景
-
为后续锚框、SSD、YOLO 做铺垫
1. 前言
在前面的学习中,我们接触的大多是图像分类任务 。
图像分类要解决的问题比较简单:给定一张图片,判断图片中属于哪一类目标。
例如,输入一张猫的图片,模型输出"猫";输入一张狗的图片,模型输出"狗"。
但是在很多真实场景中,问题并没有这么简单。因为一张图里往往不止一个目标,而且这些目标所处的位置、大小都不一样。仅仅告诉我们"图里有猫"还不够,我们更希望知道:
-
猫在图片的什么位置;
-
图片里是否还有别的目标;
-
每个目标分别属于什么类别。
这就引出了本节要学习的重要任务:物体检测(Object Detection)。
2. 什么是物体检测
物体检测的目标是:
找出图像中的目标,并给出每个目标所属类别和所在位置。
也就是说,物体检测不仅要"分出来是什么",还要"框出来在哪里"。
比如下面这张图中有一只狗和一只猫,那么检测模型需要输出类似这样的结果:
-
狗:在图像左侧某个区域
-
猫:在图像右侧某个区域
通常我们会用一个矩形框把目标圈起来,这个矩形框就叫做边界框(bounding box)。
所以,物体检测的输出一般包含两部分:
-
类别(class)
-
边界框(bounding box)
3. 物体检测与图像分类的区别
很多初学者容易把图像分类和物体检测混淆,其实两者有明显区别。
3.1 图像分类
图像分类只需要回答:
这张图主要是什么?
例如:
-
输入:一张猫的照片
-
输出:猫
它不关心猫在图中的具体位置。
3.2 物体检测
物体检测需要回答:
图中有哪些目标?它们分别在哪里?
例如:
-
输出1:猫,位置坐标为
(x1, y1, x2, y2) -
输出2:狗,位置坐标为
(x1, y1, x2, y2)
因此可以看出:
分类只做"识别",检测要同时做"识别 + 定位"。
这也是为什么物体检测明显比图像分类更难。
4. 为什么物体检测更难
物体检测比图像分类难,主要体现在以下几个方面。
4.1 目标位置不固定
在分类任务中,图片通常默认只有一个主要目标。
而在检测任务中,目标可能出现在任意位置:
-
左上角
-
右下角
-
中间
-
部分遮挡
模型不仅要认出它,还要找到它。
4.2 目标数量不固定
一张图中可能有:
-
1 个目标
-
3 个目标
-
10 个目标
-
甚至一个都没有
这使得模型输出不再是固定的单个类别,而是可变数量的检测结果。
4.3 目标大小差异大
有些目标很大,比如整辆汽车;
有些目标很小,比如远处的行人。
尤其在无人机、小目标场景中,小目标检测会更加困难,因为目标像素少、特征弱、容易漏检。
4.4 背景复杂
真实场景中的背景往往非常复杂,目标可能和背景颜色接近,也可能被遮挡,甚至多个目标互相重叠。
因此,检测模型要有更强的特征提取与定位能力。
5. 边界框:如何表示目标的位置
在物体检测中,我们通常使用一个矩形框来标记目标位置,这个矩形框就叫做边界框。
一个边界框一般可以通过左上角和右下角坐标来表示:
-
左上角:
(x_min, y_min) -
右下角:
(x_max, y_max)
也可以写成:
(x1, y1, x2, y2)
其中:
-
x1, y1表示左上角坐标 -
x2, y2表示右下角坐标
这样,一个目标的位置就被唯一确定了。
举个例子
假设一张图片中有一只狗,它的边界框为:
(60, 45, 378, 516)
这表示:
-
左上角横坐标为 60,纵坐标为 45
-
右下角横坐标为 378,纵坐标为 516
有了这个框,我们就能把目标从整张图片中圈出来。
6. 物体检测任务的基本流程
一个完整的物体检测任务,通常包含以下流程:
6.1 输入图像
模型接收一张原始图片作为输入。
6.2 提取图像特征
通过卷积神经网络提取图像中的语义信息,例如边缘、纹理、形状等。
6.3 预测候选区域
模型需要在图像中找到可能存在目标的位置区域。
6.4 分类 + 回归
对于每个候选区域:
-
判断属于哪个类别
-
调整边界框的位置,使其更准确
6.5 输出最终检测结果
最终输出多个结果,每个结果包括:
-
类别名称
-
置信度
-
边界框坐标
7. 物体检测的典型应用场景
物体检测在实际中用途非常广泛,几乎是计算机视觉中最核心的任务之一。
7.1 自动驾驶
自动驾驶汽车需要实时识别道路中的:
-
行人
-
车辆
-
红绿灯
-
路标
-
自行车
只有检测到这些目标,系统才能做出安全决策。
7.2 安防监控
监控系统中常常需要检测:
-
人员
-
车辆
-
可疑物品
-
越界行为
物体检测是智能安防的重要基础。
7.3 医学图像分析
在医学影像中,可以利用检测模型定位:
-
病灶区域
-
肿瘤位置
-
异常组织
帮助医生提高诊断效率。
7.4 无人机与遥感场景
例如你现在在做的 VisDrone 小目标检测 ,就属于非常典型的物体检测应用。
在无人机场景下,模型需要检测:
-
行人
-
汽车
-
卡车
-
巴士
-
自行车等
而且这些目标常常很小、很密集,对模型要求很高。
8. 物体检测中的核心难点
学习到这里,我们已经知道检测任务的目标了。但真正实现起来,还会遇到许多挑战。
8.1 小目标检测困难
目标太小,卷积网络经过多次下采样后,目标特征容易丢失。
这也是无人机检测、遥感检测中最突出的难题之一。
8.2 多尺度问题
同一张图中可能同时出现大目标和小目标。
如果模型只对某一种尺度敏感,就会导致另一种尺度检测效果差。
8.3 遮挡问题
目标可能只露出一部分,例如:
-
半个人
-
被车挡住的行人
-
被树遮住的交通标志
这会增加检测难度。
8.4 密集场景问题
在拥挤场景中,多个目标彼此靠得很近,边界框容易重叠,造成误检或漏检。
9. 从本节开始,我们要学什么
"物体检测"这一节更像是一个章节总引子,它本身主要是建立整体认知。
后面真正的重点内容通常包括:
-
边界框的表示与绘制
-
锚框(Anchor Box)
-
交并比(IoU)
-
多尺度目标检测
-
SSD
-
R-CNN 系列
-
YOLO 系列
也就是说,这一节是在回答:
物体检测到底在做什么,为什么重要,为什么难。
而后面几节会逐渐回答:
检测模型具体是怎么做的。
10. 本节总结
本节我们初步认识了物体检测任务,核心内容可以概括为以下几点:
10.1 检测与分类不同
图像分类只输出类别,
物体检测既要输出类别,又要输出位置。
10.2 边界框是检测任务的基础表示
物体位置通常通过矩形框表示,
常用格式是:
(x1, y1, x2, y2)
10.3 检测任务更复杂
因为目标数量、位置、大小都不固定,
而且背景复杂、遮挡严重,所以检测明显比分类更难。
10.4 检测应用非常广泛
自动驾驶、安防监控、医疗影像、无人机场景等都离不开物体检测。
11. 学习感悟
如果说图像分类是在回答:
"这是什么?"
那么物体检测回答的是:
"这是什么?它在哪里?"
这看似只是多了一步定位,但实际上让任务复杂度大幅提升。
也正因为如此,物体检测才成为深度学习视觉方向中最重要、最有实用价值的研究领域之一。
对于我们后面学习 YOLO、SSD、锚框等内容来说,这一节就是最基础的起点。只有先理解"为什么需要检测、检测到底在解决什么问题",后面的模型原理才会更容易看懂。