动手学深度学习——物体检测
这节是从“图像分类”正式迈向“定位 分类”的关键过渡要把这几点讲清楚物体检测和图像分类的区别边界框是什么为什么检测更难常见应用场景为后续锚框、SSD、YOLO 做铺垫1. 前言在前面的学习中我们接触的大多是图像分类任务。图像分类要解决的问题比较简单给定一张图片判断图片中属于哪一类目标。例如输入一张猫的图片模型输出“猫”输入一张狗的图片模型输出“狗”。但是在很多真实场景中问题并没有这么简单。因为一张图里往往不止一个目标而且这些目标所处的位置、大小都不一样。仅仅告诉我们“图里有猫”还不够我们更希望知道猫在图片的什么位置图片里是否还有别的目标每个目标分别属于什么类别。这就引出了本节要学习的重要任务物体检测Object Detection。2. 什么是物体检测物体检测的目标是找出图像中的目标并给出每个目标所属类别和所在位置。也就是说物体检测不仅要“分出来是什么”还要“框出来在哪里”。比如下面这张图中有一只狗和一只猫那么检测模型需要输出类似这样的结果狗在图像左侧某个区域猫在图像右侧某个区域通常我们会用一个矩形框把目标圈起来这个矩形框就叫做边界框bounding box。所以物体检测的输出一般包含两部分类别class边界框bounding box3. 物体检测与图像分类的区别很多初学者容易把图像分类和物体检测混淆其实两者有明显区别。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多尺度目标检测SSDR-CNN 系列YOLO 系列也就是说这一节是在回答物体检测到底在做什么为什么重要为什么难。而后面几节会逐渐回答检测模型具体是怎么做的。10. 本节总结本节我们初步认识了物体检测任务核心内容可以概括为以下几点10.1 检测与分类不同图像分类只输出类别物体检测既要输出类别又要输出位置。10.2 边界框是检测任务的基础表示物体位置通常通过矩形框表示常用格式是(x1, y1, x2, y2)10.3 检测任务更复杂因为目标数量、位置、大小都不固定而且背景复杂、遮挡严重所以检测明显比分类更难。10.4 检测应用非常广泛自动驾驶、安防监控、医疗影像、无人机场景等都离不开物体检测。11. 学习感悟如果说图像分类是在回答“这是什么”那么物体检测回答的是“这是什么它在哪里”这看似只是多了一步定位但实际上让任务复杂度大幅提升。也正因为如此物体检测才成为深度学习视觉方向中最重要、最有实用价值的研究领域之一。对于我们后面学习 YOLO、SSD、锚框等内容来说这一节就是最基础的起点。只有先理解“为什么需要检测、检测到底在解决什么问题”后面的模型原理才会更容易看懂。