万字长文解析:计算机视觉领域的目标检测与图像分割(不断更新)

纯干货,没废话。写一遍是为了让我自己能彻底清楚明白的建立知识体系。本人在澳洲上班,工作之余写文档的时间特别多。
全部搞成一篇文章,是为了方便大家转发,存档和阅读。建议大家初步学习的时候以读为主,深入学习的时候以写(写代码+写文档为主)。
欢迎大家在文章里提出任何问题,也很乐意和同样喜欢编程的大家成为朋友。有任何问题可以在这下头留言。

请注意,任何文章都会犯错!

还准备写几个:

  1. 大模型(我读lLama的代码的总结)
  2. 大模型(我读vLLM的代码的总结)
  3. NLP
  4. 我谈Florence模型
  5. 从模型到工程:如何结合云计算和大模型解决大型的数据工程问题?
  6. Play with Huggingface:让大模型变得丝滑而简单

1,开宗明义:什么是目标检测与图像分割?

在这部分,我们需要明白以下几个最核心的问题:

(1). 目标检测与图像分割的定义,研究的内容以及如何评价目标检测算法做的好坏。

目标检测(Object Detection)是一种计算机视觉技术,用于在图像或视频中自动识别和定位物体。目标检测不仅需要识别图像中的物体类别,还需要预测每个物体的边界框位置,即物体的大小和位置。与图像分类不同,图像分类只需给出整个图像的类别,而目标检测必须在图像中准确定位每个目标。

目标检测研究以下这些问题:
目标识别(Object Recognition):识别图像或视频中的某种物体类型,如人、车辆、动物等。
目标定位(Object Localization):确定物体在图像中的具体位置,通过边界框(Bounding Box)表示目标的大小和位置。
多目标检测(Multi-object Detection):同时识别并定位多个目标。

要评价目标检测算法的好坏,需要引入两个指标:
mAP(Mean Average Precision):衡量模型检测准确率的主要指标,计算多个类别的平均精度 [1]。
IoU(Intersection over Union):用于评估预测的边界框与真实边界框的重叠程度 [2]。

图像分割(Image Segmentation)是计算机视觉中的一种技术,旨在将图像划分为多个区域或对象,每个区域代表不同的物体、背景或其他特征。与目标检测不同,图像分割需要对图像中的每一个像素进行分类,即确定每个像素属于哪一类或哪一个对象。

(2). 我们需要明确:计算机视觉是一门工程。从计算机视觉的工程的角度上来说:目标检测与图像分割可以解决什么问题?

目标检测和图像分割是计算机视觉中的核心技术,能够解决多种实际问题,尤其是在自动化、智能系统、医疗、工业等领域具有广泛的应用。

(3). 这两个问题,到底难在哪里?

目标检测的难点包括:

  1. 小目标检测的问题
  2. 遮挡和复杂背景的问题
  3. 数据集不均衡的问题
  4. 实时监测的问题
  5. 多目标检测的问题

图像分割的难点包括:

  1. 复杂背景的问题
  2. 光照的问题
  3. 图像噪声的问题

(4). 在工程上,通过案例学思想:目标检测与图像分割可以用来解决什么问题?以案例说明

(generted by ChatGPT):
图像分割和目标检测是计算机视觉中两项重要的技术,它们广泛应用于多个领域,帮助解决许多现实世界中的问题。以下是它们可以解决的一些问题:

1. 自动驾驶

  • 目标检测:可以实时检测道路上的车辆、行人、交通信号灯、标志等,为自动驾驶系统提供决策依据,防止交通事故。
  • 图像分割:可以精确分割车道、道路边缘、障碍物等,为自动驾驶系统提供准确的环境感知,确保车辆的安全行驶。

2. 医疗影像分析

  • 目标检测:可以检测出CT、MRI、X光片中的病灶或异常区域,帮助医生快速定位肿瘤、炎症等病变区域。
  • 图像分割:可以精确划分出器官、组织或病灶区域,用于疾病诊断、治疗计划、手术导航等。比如,分割肿瘤的边界,帮助医生判断其大小和位置。

3. 安防监控

  • 目标检测:可以检测并识别监控视频中的入侵者、车辆、人脸等,广泛用于安防系统,提高安全性。
  • 图像分割:通过分割前景和背景,可以过滤掉不必要的信息,更准确地分析目标行为,提高监控的自动化程度。

4. 智能零售

  • 目标检测:可以在零售店中实时检测商品位置、货架上缺少的产品、顾客的行为等,提升库存管理和销售分析的效率。
  • 图像分割:可以精确分割出商品的轮廓,帮助智能零售系统分析商品摆放和顾客与商品的互动。

5. 工业检测与质量控制

  • 目标检测:可以检测生产线上的产品是否存在缺陷,自动识别出不合格的产品。
  • 图像分割:在质检过程中,可以精确分割出产品表面或结构的缺陷区域,保证产品质量。

6. 遥感图像处理

  • 目标检测:可以在卫星或无人机拍摄的图像中,检测地貌变化、城市发展、自然灾害等。
  • 图像分割:可以精确分割出地形中的不同区域,如水体、森林、城市区域等,帮助环境监测、农业分析、灾害评估。

7. 增强现实(AR)与虚拟现实(VR)

  • 目标检测:可以检测用户的动作、手势、面部表情等,增强现实系统可根据这些信息进行互动和反馈。
  • 图像分割:在AR/VR应用中,能够将用户与背景分割,或分割虚拟对象与现实场景,提供更沉浸式的体验。

8. 智能交通系统

  • 目标检测:可以在交通监控中识别车辆、行人和交通灯,优化交通流量管理,减少拥堵和交通事故。
  • 图像分割:可以分割道路和车道线,帮助车辆保持在正确的车道上,辅助驾驶员进行操作。

9. 农业与环境监测

  • 目标检测:可以检测农田中的作物、杂草或病虫害,帮助农民更有效地管理农作物。
  • 图像分割:可以分割出不同的植物类型或区域,帮助进行精准农业操作,如灌溉、施肥和病害控制。

10. 人脸识别与行为分析

  • 目标检测:可以在照片或视频中检测出人脸和五官特征,应用于身份验证、考勤系统等。
  • 图像分割:可以分割出人的面部细节,如皮肤、眼睛、嘴巴等,用于美颜、虚拟化妆等应用,或者分析面部表情用于情感识别。

11. 文档处理与字符识别

  • 目标检测:可以检测文档图像中的文本区域,帮助自动化文本扫描和数据提取。
  • 图像分割:可以分割出表格、段落、字符等,用于光学字符识别(OCR)和文档管理系统,提高文档处理效率。

总结:

  • 目标检测:主要解决物体的识别与定位问题,能够识别图像或视频中的多个目标,并标记它们的位置,适用于自动驾驶、安防监控、智能零售等需要实时定位的场景。
  • 图像分割:则侧重于精细划分图像中的不同区域,能够逐像素地将目标与背景或其他区域区分开,适用于医疗影像、遥感、工业检测等需要精确分析的场景。

这两项技术经常结合使用,提供更完整的视觉感知和分析能力。

2,复习一下人工神经网络与卷积神经网络

(1). 复习一下人工神经网络
(2). 复习一下卷积神经网络
(3). 复习一下几个经典的卷积神经网络

3,目标检测:三大类,共18种(第一部分)

一个表格总结这些算法(第一次总结)

(1). 如何把目标检测算法分成几类?什么是端到端算法与非端到端算法?
(2). R-CNN算法
(3). SPP-Net算法
(4). fast-RCNN算法
(5). faster-RCNN算法
(6). R-FCN算法
(7). 简述三代R-CNN算法的进化史和进步史

(2). R-CNN算法
目标检测算法,只有两大类:深度学习以前的目标检测以及深度学习以后的目标检测。

R-CNN就是第一种成熟的基于深度学习的目标检测算法。

那么,R-CNN是如何工作的?一图[3]以蔽之:
在这里插入图片描述
从这张图里我们首先可以看到:采用R-CNN以后,准确率(指标是mAP)大幅度提升。

那么,在这里,我们就一步步讲解R-CNN的工作原理。R-CNN等于Regional+CNN。指的是这类算法的两个最核心点:区域化,以及采用了卷积神经网络(做特征提取)。

步骤一:生成regional proposal
regional proposal指的是可能存在目标的区域(又名regional candidate)。R-CNN 本身并不生成这些区域提议;相反,它依赖于外部方法,如选择性搜索(Selective Search)或边缘框(EdgeBoxes)来生成区域提议。

生成regional proposal的过程如图所示:
在这里插入图片描述
步骤二:特征提取与特征分类
第一步会生成大约2000个regional proposals。之后,经过图像的放缩,变形。图片就可以输入到一个CNN网络里。原版的网络用的是AlexNet。

在提取完特征之后,在R-CNN里,SVM被用于分类。

图为AlexNet的网络架构。
在这里插入图片描述
步骤三:方框回归(bounding box regression)
除了对物体进行分类外,R-CNN 还执行边界框回归。对于每个类别,会训练一个独立的线性回归模型,以优化检测到的物体周围边界框的位置和大小。边界框回归通过调整最初提出的边界框,使其更好地贴合物体的实际边界,从而提高物体定位的准确性。

方框回归,让方框“框的更准”的示意图。红色方框就是回归以后的结果。
在这里插入图片描述

步骤四:非极大值抑制(Non-maximum Supperison)
在对每个区域提议进行分类和边界框回归后,R-CNN 应用非极大值抑制(NMS)来消除重复或高度重叠的边界框。NMS 确保只有最有置信度且非重叠的边界框被保留下来,作为最终的目标检测结果。

NMS的过程如图所示:
在这里插入图片描述
其本质目的在于消除预测中的冗余。

总结一下R-CNN:这是目标检测领域第一种成功的深度学习算法。具有很高的准确性。问题在于这是一种很复杂的算法,需要耗费大量的资源,而且运算速度很慢。这也为后来的算法创新创造了空间[4]。

因此,目标检测领域的创新就是两个:1,不断提升准确率(包括分类准确率以及方框回归的准确率);2,降低算法的复杂度,提升算法的运行时间。尤其是使之能够进行实时检测,并且能够被装载在嵌入式设备上做实时监测。

(3). SPP-Net[5][6]
SPP-Net是2015年由Kaiming He, Jian Sun等提出的,对R-CNN的重大优化和改进。我们知道R-CNN有处理速度的问题,输入图像灵活性的问题以及特征提取的效率问题。SPP-Net就是用于解决这些问题的。

  1. 加速特征提取
    R-CNN 的问题:在 R-CNN 中,每个候选区域(Region Proposal)都需要单独提取特征。具体来说,R-CNN 会对每个区域提议进行尺寸归一化(通常是缩放到 227x227),然后通过 CNN 网络逐个计算特征。这种重复的特征提取过程非常耗时,因为一张图像可能有数千个区域提议。
    SPP-Net 的改进:SPP-Net 提出了一种更加高效的方式:它首先对整个图像进行卷积操作,只需要提取一次全图的特征,而不是每个候选区域都重复卷积计算。然后,在最后的卷积层上使用空间金字塔池化(SPP),在不同大小的候选区域上应用池化操作,以获得定长的特征向量。这一改进大幅减少了冗余的计算,使得整个过程显著加快。
  2. 允许输入任意尺寸的图像
    R-CNN 的问题:R-CNN 强制要求所有输入的候选区域都必须被缩放到固定的尺寸(如 227x227),这不仅会导致图像的失真,还会损失重要的细节信息,特别是对于大小不一的目标对象。
    SPP-Net 的改进:SPP-Net 使用了空间金字塔池化层(SPP),它可以将不同尺寸的输入区域池化到相同的输出大小(通过多尺度的池化操作,如 1x1、2x2、4x4 池化)。这意味着 SPP-Net 可以直接处理任意大小的输入图像和候选区域,无需强制缩放到统一尺寸。这样可以更好地保留图像的细节信息,同时提升灵活性。
  3. 多尺度信息捕捉
    R-CNN 的问题:R-CNN 在特征提取过程中对输入区域的缩放是单尺度的,这会导致网络只能在某一固定尺度上进行学习和识别,无法很好地捕捉到不同尺度的上下文信息。
    SPP-Net 的改进:SPP-Net 通过 SPP 层引入了多尺度池化机制,即在同一特征图上进行多个不同尺度的池化(例如 1x1、2x2、4x4),从而获得多种不同尺度的信息。这种多尺度特征的提取方式可以让网络更好地理解对象在不同尺度下的表现形式,增强目标检测和分类的鲁棒性。
  4. 显著提升速度
    R-CNN 的问题:由于每个区域提议都要单独通过 CNN 进行卷积运算,R-CNN 的特征提取过程非常缓慢。对于每张图像,数千个区域提议的重复计算使得处理速度大大下降。
    SPP-Net 的改进:SPP-Net 通过先对整张图像进行一次卷积运算,然后对每个区域提议应用 SPP 层进行池化,大大减少了计算量。这样一来,SPP-Net 的特征提取速度比 R-CNN 快得多,同时还保留了高质量的特征。
  5. 从局部到全局的特征表示
    SPP-Net 通过多尺度池化层捕获了从局部到全局的多层次特征,帮助模型更好地识别目标对象,而 R-CNN 则局限于单一尺度特征,不能有效地表征目标的多尺度信息。

在这里插入图片描述

SPP-Net这些算法上的优化,在后来的算法(fast R-CNN,faster R-CNN,以及YOLO系列产品上均有体现)。

以下两张图片是SPP-Net(Spatial Pyramid Pooling Network)的工作过程的可视化。
在这里插入图片描述
在这里插入图片描述
SPP层的工作原理:SPP 层的工作原理:SPP 层对卷积特征图进行多尺度池化,即将特征图划分为多个网格,分别应用池化操作。例如,SPP 可以按照 1x1、2x2、4x4 等不同尺度进行池化。这样即使输入图像的大小不同,经过 SPP 层之后,输出的特征向量的大小是固定的。

(4). Fast-RCNN[7]
很多人(尤其是初学者,包括曾经的我)在总结深度学习算法的时候都会忘掉SPP-Net的重要地位。

Fast R-CNN=R-CNN+SPP-Net

Fast-RCNN结合了R-CNN以及SPP-Net的很多优点。是一个典型的“杂交品种。”

其工作流程如下:
步骤一:使用CNN,一次运行,从图片里提取出特征图(feature map)。这是一个创新。也就是不再像R-CNN那样,对每个regional proposal(also named as regional candidate)进行单独处理。

步骤二:和R-CNN一样,进行“regional proposal。”使用的也是selective search这样的外部算法。

步骤三:使用类似于SPP-Net的RoI 池化层(RoI Pooling Layer)将特征图中对应的区域映射为固定大小的特征块。

ROI层的工作过程(本质上ROI层就是SPP-Net的一个特例):
在这里插入图片描述

步骤四:RoI 池化后的特征向量通过全连接层进行进一步处理,并进行分类和边界框回归。这一点与R-CNN是一样的。

步骤五:Fast R-CNN 通过两个输出分支完成目标检测任务:分类分支将每个候选区域提议分类为某个类别(如“猫”、“狗”等)或“背景”,而边界框回归分支则预测边界框的回归参数,以调整候选区域的边界,使其更精确地框住目标对象。为了同时优化分类和边界框回归,Fast R-CNN 使用多任务损失函数,该损失函数由两个部分组成:分类损失(softmax loss)和边界框回归损失(smooth L1 loss),这两部分损失共同驱动模型的训练,既确保了分类的准确性,又提高了边界框的定位精度。也就是说,Fast R-CNN也采用了类似于R-CNN的回归算法来优化边界框的位置。

Fast R-CNN的优点在于两点:

  1. 提高了准确性
  2. 相比于SPP-Net和R-CNN,减少了大量的冗余步骤,提升了计算速度。

下图是fast R-CNN的工作过程:
在这里插入图片描述

(5). Faster R-CNN[8]
Faster R-CNN是进一步的优化和升级。主要是引入了RPN(regional proposal network)网络。RPN网络的目的在于降低生成检测框这个过程的耗时。也就是利用神经网络,直接生成RPN。

Faster R-CNN工作过程的图示:
在这里插入图片描述

首先我们介绍一下RPN网络的工作过程:

  1. 输入特征图:RPN 接收来自卷积神经网络(CNN)的特征图,特征图是通过对输入图像进行卷积操作获得的,包含了图像中的丰富信息。
  2. 锚框生成:在特征图的每个位置,RPN 生成多个锚框(anchor boxes)。这些锚框具有不同的大小和纵横比,目的是覆盖不同形状和尺寸的目标对象。通常,RPN 会在每个位置生成 9 个锚框(例如:3 种不同的尺度和 3 种不同的纵横比)。

anchor box的生成过程:
在这里插入图片描述

  1. 二分类:RPN 为每个锚框预测其是否包含目标对象,即进行前景/背景的二分类。这个过程通过一个小的全连接层实现,输出一个包含两类(前景和背景)的概率。
  2. 边界框回归:RPN 同时为每个锚框预测边界框的回归参数,以优化锚框的位置和大小,使其更好地拟合目标对象。这通常通过回归模型来实现,输出边界框的坐标调整量。
  3. 非极大值抑制(NMS):RPN 会生成多个锚框,经过前景/背景分类后,使用非极大值抑制算法来去除重复的或重叠度过高的锚框,最终保留较少且具有高置信度的候选区域提议。

RPN的工作过程
在这里插入图片描述

除了使用了RPN生成框以外,faster R-CNN大部分的步骤与fast R-CNN是一样的。

步骤一:采用CNN提取,得到特征图(与fast R-CNN一致)。
步骤二:使用RPN网络,生成合适的区域建议(与R-CNN,fast R-CNN采用外部算法不同,faster R-CNN直接采用内部的神经网络来实现这个目的)。
步骤三:RoI 池化:对 RPN 输出的候选区域进行 RoI 池化,转换为固定大小的特征,以便后续处理。(与fast R-CNN一致)。
步骤四:分类和回归。使用全连接层对每个候选区域进行分类,并预测其边界框的调整值。关于其中的损失函数,Faster R-CNN 使用一个多任务损失函数,结合了 RPN 的分类和回归损失以及检测网络的损失,进行联合优化。(与fast R-CNN一致)。

相比于fast R-CNN,faster R-CNN算法速度进一步提高。然而,这种算法也面临着几个重要的问题:尤其是还是比较吃计算资源。

(6). R-FCN算法[9]
R-FCN是针对faster R-CNN的一次再创新。其主要的创新点在于引入了位置敏感得分图(position-sensitive score maps)这一理念。

位置敏感得分图(Position-Sensitive Score Map)[10] 是 R-FCN(Region-based Fully Convolutional Networks)算法中的一个关键概念,旨在提高目标检测的精度。它的主要作用是为每个候选区域生成针对每个类别的空间分布得分,从而使得网络能够更好地定位目标。

Position sensitive score map的结构:
在这里插入图片描述

其生成过程是:

  1. 特征提取:输入图像通过卷积神经网络(CNN)提取特征图。
  2. RoI 池化:候选区域通过 RoI 池化操作映射到固定大小的特征图上。
  3. 得分图输出:对每个类别,网络输出一个得分图,这些得分图与特征图的空间维度一致。例如,如果有 C 个类别,网络将生成 C 个位置敏感得分图。

介绍完了position-sensitive score maps, 我们接下来讲解一下R-FCN的流程:

步骤一:类似于faster R-CNN,用卷积神经网络提取出特征(和faster R-CNN一样)
步骤二:使用RPN生成regional proposal(和faster R-CNN一样)
步骤三:使用position-sensitive score maps生成位置敏感得分图,输出每个区域在每个类别上的得分
步骤四:使用ROI池化。(和faster R-CNN一样)
步骤五:使用全连接层对特征图进行分类,并进行边界框的回归,调整候选区域的大小和位置。(和faster R-CNN一样)

R-FCN的结构:
在这里插入图片描述
目前,R-FCN是目标检测领域最高效,最准确的算法之一。但是,他仍然面临“资源消耗比较大”这个问题。

4, 目标检测:三大类,共18种(第二部分)

(1). yolo v1: 第一代yolo
(2). Joseph Redmon大神其人
(3). 总结yolo v1-v3
(4). yolo现在(2024年9月)的两个经典产品:yolo v5以及yolo v8
(5). yolo v4-v10做了那些调整?
(6). yolo算法是如何进化的?
(7). 为啥Yolo是目前最好的目标检测解决方案?

5, SSD系列(Faster-RCNN和YOLO的杂交品种)

(1). SSD算法:综述
(2). 中国人对目标检测算法的贡献

6, 目 标检测:总结目标检测

(1). 跟Dijango/Flask/FastAPI之类的Python后端框架结合做开发
(2). 跟C#+.Net结合做开发
(3). 如何将YOLO装载在无人机或者照相机上?

7,图像分割?

(1). U-Net
(2). Seg-Net
(3). Mask
(4). 图像分割可以用来做什么?

8,总结全文

9, 引用文献,代码和博客

[1]. 详细介绍了mAP的定义以及计算方法:https://www.v7labs.com/blog/mean-average-precision
[2]. 介绍了深度学习中IoU的定义和计算方法:
https://blog.csdn.net/gaoyu1253401563/article/details/86484851
[3]. Girshick, R., Donahue, J., Darrell, T., & Malik, J. (2014). Rich feature hierarchies for accurate object detection and semantic segmentation. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 580-587).
[4]. 介绍RCNN算法的英文博客:https://blog.roboflow.com/what-is-r-cnn/
[5]. He, K., Zhang, X., Ren, S., & Sun, J. (2015). Spatial pyramid pooling in deep convolutional networks for visual recognition. IEEE transactions on pattern analysis and machine intelligence, 37(9), 1904-1916.
[6]. 介绍SPP-Net。https://medium.com/coinmonks/review-sppnet-1st-runner-up-object-detection-2nd-runner-up-image-classification-in-ilsvrc-906da3753679
[7]. Girshick, R. (2015). Fast r-cnn. arXiv preprint arXiv:1504.08083.
[8]. Ren, S., He, K., Girshick, R., & Sun, J. (2016). Faster R-CNN: Towards real-time object detection with region proposal networks. IEEE transactions on pattern analysis and machine intelligence, 39(6), 1137-1149.
[9]. Dai, J., Li, Y., He, K., & Sun, J. (2016). R-fcn: Object detection via region-based fully convolutional networks. Advances in neural information processing systems, 29.
[10]. Lu, H. F., Du, X., & Chang, P. L. (2018). Toward scale-invariance and position-sensitive region proposal networks. In Proceedings of the European Conference on Computer Vision (ECCV) (pp. 168-183).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值