《深度学习》之 目标检测 最全详解 (一)

本文深入探讨了目标检测的概念、发展历程,包括传统方法和深度学习方法,特别是R-CNN系列与YOLO的对比。文章阐述了目标检测的基本思路、步骤,以及两阶段和一阶段算法的差异,强调了基于候选区域方法在准确性和定位精度上的优势,以及端到端方法的速度优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标检测

一.简介

在这里插入图片描述
目标检测,也叫目标提取,是一种基于目标几何和统计特征的图像分割,它将目标的分割和识别合二为一,其准确性和实时性是整个系统的一项重要能力。尤其是在复杂场景中,需要对多个目标进行实时处理时,目标自动提取和识别就显得特别重要。
随着计算机技术的发展和计算机视觉原理的广泛应用,利用计算机图像处理技术对目标进行实时跟踪研究越来越热门,对目标进行动态实时跟踪定位在智能化交通系统、智能监控系统、军事目标检测及医学导航手术中手术器械定位等方面具有广泛的应用价值。

在这里插入图片描述
(图片来自网络)

二.发展历程

在这里插入图片描述
(图片来自网络)在这里插入图片描述
(图片来自网络)
在这里插入图片描述
(图片来自网络)

1、基于传统图像处理和机器学习算法的目标检测与识别方法

传统的目标检测与识别方法主要可以表示为:目标特征提取->目标识别->目标定位。

这里所用到的特征都是认为设计的,例如SIFT (尺度不变特征变换匹配算法Scale Invariant Feature Transform), HOG(方向梯度直方图特征Histogram of Oriented Gradient), SURF( 加速稳健特征Speeded Up Robust Features),等。通过这些特征对目标进行识别,然后再结合相应的策略对目标进行定位。

2、基于深度学习的目标检测与识别方法

如今,基于深度学习的目标检测与识别成为主流方法,主要可以表示为:图像的深度特征提取->基于深度神经网络的目标识别与定位,其中主要用到深度神经网络模型是卷积神经网络CNN。

目前可以将现有的基于深度学习的目标检测与识别算法大致分为以下三大类:

基于区域建议的目标检测与识别算法,如R-CNN, Fast-R-CNN, Faster-R-CNN;
基于回归的目标检测与识别算法,如YOLO, SSD;
基于搜索的目标检测与识别算法,如基于视觉注意的AttentionNet,基于强化学习的算法。

在这里插入图片描述

三.目标检测基本思路与步骤

3.1 基本思路在这里插入图片描述

目标检测的基本思路:同时解决定位(localization) + 识别(Recognition)。
多任务学习,带有两个输出分支。一个分支用于做图像分类,即全连接+softmax判断目标类别,和单纯图像分类区别在于这里还另外需要一个“背景”类。另一个分支用于判断目标位置,即完成回归任务输出四个数字标记包围盒位置(例如中心点横纵坐标和包围盒长宽),该分支输出结果只有在分类分支判断不为“背景”时才使用。详细结构如下图所示:

在这里插入图片描述
(图片来自网络)

3.2 步骤在这里插入图片描述

传统的目标检测框架,主要包括三个步骤:

  1. 利用不同尺寸的滑动窗口框住图中的某一部分作为候选区域;
  2. 提取候选区域相关的视觉特征。比如人脸检测常用的Harr特征;行人检测和普通目标检测常用的HOG特征等;
  3. 利用分类器进行识别,比如常用的SVM模型。

3.3 两类深度学习 方法

目前目标检测领域的深度学习方法主要分为两类:两阶段(Two Stages)的目标检测算法;一阶段(One Stage)目标检测算法。

两阶段(Two Stages):首先由算法(algorithm)生成一系列作为样本的候选框,再通过卷积神经网络进行样本(Sample)分类。

常见的算法有R-CNN、Fast R-CNN、Faster R-CNN等等。

一阶段(One Stage ):不需要产生候选框,直接将目标框定位的问题转化为回归(Regression)问题处理(Process)。

常见的算法有YOLO、SSD等等。

这些算法又可以根据是否基于候选区来划分成两类

3.4 基于候选区的算法

基于候选区域(Region Proposal)的,如R-CNN、SPP-net、Fast R-CNN、Faster R-CNN、R-FCN;
使用候选区域方法(region proposal method)创建目标检测的感兴趣区域(ROI)。在选择性搜索(selective search,SS)中,首先将每个像素作为一组。然后,计算每一组的纹理,并将两个最接近的组结合起来。但是为了避免单个区域吞噬其他区域,首先对较小的组进行分组。继续合并区域,直到所有区域都结合在一起。下图第一行展示了如何使区域增长,第二行中的蓝色矩形代表合并过程中所有可能的 ROI。
在这里插入图片描述
(图片来自网络)

基于区域的全卷积网络检测目标在这里插入图片描述

3.5 基于端到端的算法

端到端指的是输入是原始数据,输出是最后的结果,原来输入端不是直接的原始数据,而是在原始数据中提取的特征,这一点在图像问题上尤为突出,因为图像像素数太多,数据维度高,会产生维度灾难,所以原来一个思路是手工提取图像的一些关键特征,这实际就是就一个降维的过程。
  
端到端的目标检测算法
在这里插入图片描述
基于端到端(End-to-End),无需候选区域(Region Proposal)的,如YOLO、SSD。

对于上述两种方式,基于候选区域(Region Proposal)的方法在检测准确率和定位精度上占优,基于端到端(End-to-End)的算法速度占优。相对于R-CNN系列的“看两眼”(候选框提取和分类),YOLO只需要“看一眼”。总之,目前来说,基于候选区域(Region Proposal)的方法依然占据上风,但端到端的方法速度上优势明显。

四.目标检测精准度的评价指标

在这里插入图片描述
    在这里插入图片描述
(图片来自网络)

P-R 曲线
    在这里插入图片描述在这里插入图片描述

计算 mAP 过程

对于一张图片中的c类目标

算法检测出来 T 个c类的目标

而真值是 TP+FN 个c类的目标

检测结果中有 TP 个结果和真值的 IOU 达到某个设定的阈值

那么Precision定义为:
在这里插入图片描述

对所有图片求平均得到Average Precision 的定义值:

在这里插入图片描述

对所有类求平均就得到mean Average Precision的定义值:
在这里插入图片描述

参考:《深度学习》 花书
复旦大学 《深度学习》

### Java 中数组全排列问题的解决方案 对于给定的个不含重复数字的数组 `nums`,目标是返回其所有的排列情况。此问题可以借助回溯算法来高效求解。 #### 回溯算法简介 回溯是种通过构建所有潜在候选解答并逐步排除不符合条件的选择从而找到最终答案的方法。当应用于全排列问题时,每次选取尚未被使用的元素加入当前路径直到形成完整的排列为止[^1]。 #### 示例代码展示 下面是份基于上述思路编写的用于计算全排列的具体实现: ```java import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class Solution { private List<List<Integer>> result = new ArrayList<>(); public List<List<Integer>> permute(int[] nums) { backtrack(nums, new boolean[nums.length], new LinkedList<>()); return result; } private void backtrack(int[] options, boolean[] used, LinkedList<Integer> path){ if(path.size() == options.length){ // 当前路径长度等于选项数量,则已构成种排列方式 result.add(new ArrayList<>(path)); return ; } for (int i = 0; i < options.length ;i++) { if(used[i]) continue;// 已经使用过的元素不再考虑 // 做选择 path.add(options[i]); used[i]=true; // 进入下层决策树 backtrack(options, used, path); // 取消选择 path.removeLast(); used[i]=false; } } } ``` 这段程序定义了个名为 `Solution` 的类,其中包含了两个主要方法:个是对外提供接口的 `permute()` 方法;另个则是内部递归调用的核心逻辑函数 `backtrack()` 。每当发现个新的有效排列就会将其保存到列表 `result` 中去。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DFCED

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值