目标检测算法发展史


前言

比起图像识别,现在图片生成技术要更加具有吸引力,但是要步入AIGC技术领域,首先不推荐一上来就接触那些已经成熟闭源的包装好了再提供给你的接口网站,会使用别人的模型生成一些图片就能叫自己会AIGC了吗?那样真正成为了搬运工了,而且是最廉价的。 生成图片技术更多是根据一些基础的图像处理技术来演变而来,从最基础的图像处理技术学习,你就能明白图片生成是怎么一回事。最近看了很多关于目标检测的文章和博客,也在学习AIGC技术,从基础手工设计特征到如今的深度学习模型,二者技术发展历史其实可以说是有比较共同性的。

在本文中,我们将探索目标检测算法的发展历程,从早期依赖于人工设计特征的传统方法,到深度学习技术的崛起,以及目标检测在各个领域中取得的巨大成就。我们将回顾这一漫长而精彩的历程,探讨各个阶段的重要算法和方法,以及它们在实际应用中的价值。


一、目标检测概述

目标检测无非做两个事情,一是检测出该目标在图片或者视频里面所处的位置以及该目标的类别。二是对于有多个目标的图片,检测出所有目标所处的位置及其类别。那么对于第一个要解决的问题,我们可以来了解具体需要干什么事情。

1.定位和分类

首先我们知道图片都是由无数个像素点构成,而视频也可以理解为每一帧的图片连贯形成的,也就是点到线,线到面之间的关系。定位和分类问题就是分类到目标检测的一个过度问题,从单纯的图片分类后给出目标所处的问题,再到多目标的类别和位置。

 关于分类问题,我们清楚只要有相应的特征,检测的目标在不同场景里面都有一些相同的通性,细化来说也就是像素组合的形状纯在一定的可归类性,我们可以利用该类特征进行分类。关于定位问题,则需要模型返回目标所在的外界矩形框,即目标的(x,y,w,h)四元组。将二者组合起来,我们可以理解为一个同时使用分类和回归得到分类和定位的结果,只不过该回归是定位问题,返回的是四个值。

2.目标检测

目标检测需要获取图片中所有目标的位置以及类别,我们一般会想到用滑窗的方法来依次检测图片,但是我们又得设计多大的尺寸的滑框来解决问题呢,平均要检测多少次呢,显然这个计算量非常大不是很符合预期效果。有没有什么方法是得我们能快速定位到目标的位置呢?

不少领域专家在此设计出了很多算法,比较有名的方法有selective search方法,此方法可以从图片选出潜在物体候选框(Regions of Interest,ROI)。有了获取ROI的方法,接下来就可以通过分类和合并的方法来获取最终的目标检测结果。

算法逻辑可以分为一下几步,像此类滑窗方法做目标检测存在的问题:滑窗的尺寸、大小、位置不同将产生非常大的计算量。:

二、目标检测算法总览

1.目标检测算法发展史

传统方法的起步(20世纪90年代至2000年代初)

  • 1990s:早期的目标检测方法主要依赖于手工设计的特征提取器(如Haar特征、SIFT特征等)结合基于滑动窗口的分类器进行目标定位。
  • 2001年:Viola-Jones算法通过使用积分图像和强分类器(Cascade of Classifiers)实现了高效的人脸检测。

基于机器学习的方法(2000年代至2010年代初)

  • 2000s:出现了使用机器学习算法(如支持向量机、随机森林等)进行目标检测的方法,同时特征的选取也逐渐从手工设计转向了可学习的特征。
  • 2005年:Felzenszwalb等人提出了基于图像分割的目标检测方法,它能够检测不同尺寸和形状的目标。

深度学习革新(2010年代至今)

  • 2010s:随着深度学习的兴起,特别是卷积神经网络(CNN)的成功,目标检测取得了显著的进展。
  • 2012年:AlexNet在ImageNet图像分类比赛中获得胜利,标志着深度学习在计算机视觉领域的崛起。
  • 2013年:RCNN(Region-based Convolutional Neural Networks)首次将卷积神经网络应用于目标检测,将目标定位任务转化为区域建议的问题。
  • 2015年:Faster R-CNN提出了一种联合训练目标区域提取器和目标分类器的方法,实现了更高的速度和准确性。
  • 2016年:YOLO(You Only Look Once)算法引入了单次前向传播的思想,实现了实时目标检测。

目标检测的细粒度和多模态发展

  • 最近几年,研究者们开始关注细粒度目标检测(如人体姿态检测、物体部位检测等)以及多模态目标检测(结合图像、文本、语音等信息)。

实时和端侧目标检测

  • 随着硬件技术的提升和优化算法的发展,实时和端侧(Edge)目标检测在嵌入式设备和边缘计算中得到了广泛的应用。

2.目标检测算法类别

主流目标检测算法大致分为one-stage与two-stage两类,前者单阶段目标检测器,这类方法一次性完成目标定位和分类,通常使用密集的滑动窗口或锚框(anchor box)来进行检测。YOLO(You Only Look Once)和SSD(Single Shot Multibox Detector)是代表性的单阶段检测器。

后者两阶段目标检测器,这类方法首先生成目标的候选区域,然后对每个区域进行分类和微调以得到最终的检测结果。经典的方法包括RCNN系列(如Fast R-CNN、Faster R-CNN)。这类方法通常具有更高的准确性,但可能会牺牲一些速度,它们通常能够精准地定位和识别目标,选择合适的两阶段目标检测器取决于具体的应用场景和性能要求。

 3.R-CNN算法

 R-CNN可以说作为目标检测具有革命性的算法,后续两阶段目标检测器的思想基本上都是根据R-CNN的算法原理衍生出来的。R-CNN训练过程可以分为四步,我们以R-CNN用于ImageNet数据集上训练为1例:

(1).选出潜在目标候选框(ROI)

objecctness、selective search、category-independent object proposals等很多论文都讲述了此算法,R-CNN使用selective search的方法选出了2000个潜在物体候选框ROI(Region of Interest)。

ROI代表“Region of Interest”,即感兴趣区域。ROI通常指的是在图像中的一个区域,该区域被认为可能包含一个目标物体。在两阶段目标检测器(如RCNN系列)中,首先会通过一个区域建议网络(Region Proposal Network,RPN)生成候选的ROI。这些候选区域将被用于后续的分类和位置微调。ROI的选择是目标检测过程中的关键步骤,它可以帮助算法聚焦在可能包含目标的区域上,从而提高检测的效率和准确性。

(2).训练特征提取器

提取特征使用AlexNet、VGGNet、GoogLeNet等都可以做到。为了获取到一个更好的特征提取器,会在ImageNet预训练好的模型基础上调整,唯一的改动就是将ImageNet中的1000个类别输出改为(C+1)个输出,其中C是真实需要预测的类别个数,1是背景类。新特征的训练方法是使用随机梯度下降,与前几章介绍的普通神经网络的训练方法相同。

提到训练,就一定要有正样本和负样本,这里先抛出一个用于衡量两个矩形交叠情况的指标:联合之上的交集其实就是两个矩形面积的交集除以并集,一般情况下,当欠条>=0.5时,可以认为两个矩形基本相交,所以在这个任务中,假定在两个矩形框中,1个矩形代表投资回报率,另一个代表真实的矩形框,那么当投资回报率和真实矩形框的欠条>=0.5时则认为是正样本,其余为负样本。

 需要注意的是,需要对负样本进行采样,因为训练数据中证样本太少会导致正负样本季度不平衡。最终在该步得到的是一个卷积神经网络的特征提取器,其特征是一个4096维度的特征向量。

(3).训练最终分类器

R-CNN的提出者做了一个实验来选择最优IOU阈值,最终选择真实值的矩形框作为正样本。正负样本选择有规则,Fast R-CNN和Faster R-CNN都是根据IOU的大小选取正负样本。

(4).训练回归模型

为每一个类训练一个回归模型,用来微调ROI与真实矩形框位置和大小的偏差:

关于IOU指标的计算方式为:

def calculate_iou(box1, box2):
    # box1和box2的格式为 (xmin, ymin, xmax, ymax)

    # 计算交集的坐标范围
    x1 = max(box1[0], box2[0])
    y1 = max(box1[1], box2[1])
    x2 = min(box1[2], box2[2])
    y2 = min(box1[3], box2[3])

    # 计算交集的面积
    intersection_area = max(0, x2 - x1 + 1) * max(0, y2 - y1 + 1)

    # 计算两个边界框的面积
    area_box1 = (box1[2] - box1[0] + 1) * (box1[3] - box1[1] + 1)
    area_box2 = (box2[2] - box2[0] + 1) * (box2[3] - box2[1] + 1)

    # 计算并集的面积
    union_area = area_box1 + area_box2 - intersection_area

    # 计算IOU值
    iou = intersection_area / union_area

    return iou

 预测阶段可以分为:

  1. 使用selective search方法先选出2000个ROI。
  2. 所有ROI调整为特征提取网络所需的输入大小并进行特征提取,得到与2000个ROI对应的2000个4096维的特征向量。
  3. 将2000个特征向量分别输入到SVM中,得到每个ROI预测的类别
  4. 通过回归网络微调ROI的位置
  5. 最终使用非极大值抑制 (Non-MaximumSuppression,NMS) 方法对同一个类别的ROI进行合并得到最终检测结果。NMS的原理是得到每人矩形框的分数 (置信度),如果两个矩形框的IOU超过指定闻值,则仅仅保留分数大的那个矩形框。

还是可以看出R-CNN存在很多问题,比如按照以上流程去训练会花费很长的时间。

4.Fast R-CNN

Firshick等人于2015年提出的Fast R-CNN,它非常巧妙地解决了RCNN的几个主要问题。

1)将整张图片和ROI直接输入到全卷积的CNN中,得到特征层和对应在特征层上的ROI (特征层的ROI信息可用其几何位置加卷积坐标公式推导得出)。

2)与R-CNN类似,为了使不同尺寸的ROI可以统一进行训练,Fast R-CNN将每块候选区域通过池化的方法调整到指定的M*N,此时特征层上将调整后的ROI作为分类器的训练数据。与R-CNN不同的是,这里将分类和回归任务合并到一起进行训练,这样就将整个流程串联起来。Fast R-CNN的池化示意图如图9-11所示,即先将整张图通过卷积神经网络进行处理,然后在特征层上找到ROI对应的位置并取出,对取出的ROI进行池化(此处的池化方法有很多) 。池化后,全部2000个M*N个训练数据通过全连接层并分别经过2个head: softmax分类以及L2回归,最终的损失函数是分类和回归的损失函数的加权和。利用这种方式即可实现端到端的训练。

Fast R-CNN极大地提升了目标检测训练和预测的速度,如图9-12所示。从图:

中我们可以看出,Fast R-CNN将训练时长从R-CNN的84小时下降到了8.75小时,每张图片平均总预测时长从49秒降低到2.3秒。从图:

中我们还可以看出,在Fast R-CNN预测的这2.3秒中,真正的预测过程仅占0.32秒,而Regionproposal占用了绝大多数的时间。

 5.YOLO

由于在R-CNN的系列算法中需要先获取大量的proposal,但是proposal之间又有很大的重叠,会带来很多重复的工作。YOLO[5]一改基于proposal的预测思路,将输入图片划分成S*S个小格子,在每个小格子中做预测,最终将结果合并。

 YOLOv1(You Only Look Once)

步骤和原理:

  1. 将图像划分成网格

    YOLOv1将输入图像划分为 S x S 个网格单元。每个网格单元负责检测该区域内的物体。
  2. 生成预测

    每个网格单元负责预测 B 个边界框(Bounding Box)以及每个边界框的置信度(Confidence Score)和类别概率。
  3. 计算边界框的位置

    边界框的位置信息由相对于该网格单元的坐标和宽高来表示。这些信息经过sigmoid函数变换,以确保它们在0到1之间。
  4. 计算置信度和类别概率

    置信度表示该边界框内是否存在目标物体,类别概率表示物体属于哪个类别。
  5. 计算损失函数

    YOLOv1使用综合的损失函数来平衡置信度、位置和类别概率的预测,其中包括分类损失、定位损失和置信度损失。
  6. 非极大值抑制(NMS)

    通过非极大值抑制来移除重叠较大的边界框,保留最准确的预测。

YOLOv2/v3(YOLO9000)

YOLOv2(Darknet-19)和YOLOv3是YOLO系列的进化版本,带来了一些重要的改进:

  • Darknet-19网络:YOLOv2引入了一个更深的神经网络(Darknet-19)作为特征提取器,提高了特征的表达能力。

  • Anchor Boxes:引入了锚定框(Anchor Boxes)的概念,使得模型能够更好地适应不同尺度和宽高比的目标。

  • 多尺度检测:YOLOv3在输出层使用了三个不同尺度的特征图来提高小物体的检测性能。

  • YOLO9000:YOLOv2和v3引入了多类别检测,能够在更广泛的类别上进行检测。

YOLOv4/v5

  • Backbone网络:YOLOv4引入了更强大的特征提取网络,如CSPDarknet53。

  • 数据增强和技巧:引入了一系列的数据增强和训练技巧,进一步提升了模型性能。

  • YOLOv5:YOLOv5是YOLO系列的最新版本,引入了一些创新性的设计和模型架构优化。

总的来说,YOLO系列算法通过将目标检测任务转化为单次前向传播,实现了实时目标检测的目标。随着版本的更新和算法的改进,YOLO系列在性能和速度上不断取得突破,成为了目标检测领域的重要研究方向之一。


目标检测技术的发展离不开数不尽的研究者们的不懈努力和创新,也离不开硬件技术的进步和大量标注数据集的贡献。

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/109746.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

0001net程序设计-net大学校园二手交易平台

文章目录 摘 要目 录系统设计开发环境 摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生&…

数据结构───链表

花费一个周时间学完了链表(的一部分),简单总结一下。 链表的学习离不开画图,将其抽象成一种逻辑模型,可以减少思考时间,方便理解。 链表大致分为8种结构,自己学习并实现了两种结构,也…

UE5 日记(人物连招:蒙太奇动画通知(含视频链接))

教程https://www.youtube.com/watch?vsWpENaVGj2M&listPLiSlOaRBfgkcPAhYpGps16PT_9f28amXi&index10&ppiAQB 相关蓝图 连招逻辑 动画通知类 逻辑分析 1.用户输入 已搭载战斗系统模块,可以收到输入指令 2.连击 第一次攻击: 第一次攻击,…

初探802.11协议(6)——Wi-Fi 6新特性简介

目录 前言 场景需求 Trigger Frames 一. BSS Color 1.1 机制 1.1.1 Color Collision 1.2 Frame Format 1.2.1 BSS Color Information 二. TWT 2.1 节能 2.1.1 PSM 2.1.2 从PSM到TWT 2.1.2.1 TWT模式 2.2 Frame Format REF 前言 802.11ax以前强调"高吞吐量…

基于 Appium 的 Android UI 自动化测试!

自动化测试是研发人员进行质量保障的重要一环,良好的自动化测试机制能够让开发者及早发现编码中的逻辑缺陷,将风险前置。日常研发中,由于快速迭代的原因,我们经常需要在各个业务线上进行主流程回归测试,目前这种测试大…

@CallSuper注解方法学习

CallSuper注解方法学习 CallSuper注解是什么?CallSuper注解使用CallSuper 值得一提的事总结 CallSuper注解是什么? CallSuper 是 Android 开发中使用的一个注解,它的主要用途是确保在子类重写父类的方法时,调用 super 方法。这在…

【Qt】绘图与绘图设备

文章目录 绘图设备QPainter绘图实例案例1案例2-高级设置案例3:利用画家画资源图片 点击按钮移动图片 QtPaintDevice实例Pixmap绘图设备QImage 绘图设备QPicture 绘图设备 QPainter绘图 Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系…

云安全—K8S API Server 未授权访问

0x00 前言 master节点的核心就是api服务,k8s通过REST API来进行控制,在k8s中的一切都可以抽象成api对象,通过api的调用来进行资源调整,分配和操作。 通常情况下k8s的默认api服务是开启在8080端口,如果此接口存在未授…

RPC与HTTP的关系

首选理清楚关系 RPC与HTTP是两个不同维度的东西 HTTP 协议(Hyper Text Transfer Protocol),又叫做超文本传输协议,是一种传输协议,平时通过浏览器浏览网页网页,用到的就是 HTTP 协议。 而 RPC&#xff0…

【java】【MyBatisPlus】【三】【完】MyBatisPlus扩展

目录 一、分页查询lambdaQueryWrapper 二、自定义分页查询 1、UserMapper 2、UserMapper.xml 3、测试方法 三、MybatisX插件 1、安装 2、MybatisX代码快速生成 2.1 连接数据库 2.2 操作需要生成代码的表 3、MybatisX快速生成CRUD(前提步骤2生成&#xff…

【算法练习Day32】 斐波那契数爬楼梯使用最小花费爬楼梯

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 斐波那契数爬楼梯使用最小花…

探讨下前端测试的常见场景

前端测试 场景 这边指的测试是指白盒测试,用代码来测试代码。 测试有利于提升代码质量。 代码功能和需求一致。根据需求,写测试。测试通过了,则表明需求实现了。保证代码重构后,未改坏以前的功能。代码重构后,能通过…

[C++入门系列]——类和对象下篇

​作者主页 📚lovewold少个r博客主页 ⚠️本文重点:C类和对象下篇知识点讲解 👉【C-C入门系列专栏】:博客文章专栏传送门 😄每日一言:宁静是一片强大而治愈的神奇海洋! 目录 前言 再谈构造函数…

解决方案|法大大电子合同加速互联网家装服务升级

随着互联网的快速发展以及政策的不断推动,家装行业“互联网”趋势也不断凸显。行业内很多企业已经开始在全链条业务中使用电子合同,基于电子合同合规化、无纸化、线上化、智能化的价值赋能,实现家装从需求沟通、家装设计、选材、装修施工、验…

【MySQL--->内外连接】

文章目录 [TOC](文章目录) 一、内连接二、左外连接三、右外连接 一、内连接 内连接就是将两个表连接进行笛卡尔积查询 显示SMITH的名字和部门名称 二、左外连接 左外连接就是以左面的表为主,即便是右边的表没有而左边表项中有的,依然显示 查询所有学…

jenkins详细安装教程

这里写目录标题 一、Jenkins安装与部署1-1、Jenkins的简介1-2、下载需要的软件1-2-1 jekins.war1-2-2 tomcat安装方式 1-3、使用11版本的jdk1-4、开启jenkins1-5、获取密码1-5 修改镜像(可改可不改) 二、卸载Jenkins 一、Jenkins安装与部署 1-1、Jenkins的简介 Jenkins是一个…

Linux 基础入门

Linux 简介 Linux 是一种自由和开放源码的类 UNIX 操作系统。 Linux 英文解释为 Linux is not Unix。 Linux 是在 1991 由林纳斯托瓦兹在赫尔辛基大学上学时创立的,主要受到 Minix 和 Unix 思想的启发。 Linux 内核最初只是由芬兰人林纳斯托瓦兹(Linus T…

基于SSM的n省出口基地公共信息服务平台设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Spring Cloud Gateway + Knife4j 4.3 实现微服务网关聚合接口文档

目录 前言Spring Cloud 整合 Knife4jpom.xmlapplication.ymlSwaggerConfig.java访问单服务接口文档 Spring Cloud Gateway 网关聚合pom.xmlapplication.yml访问网关聚合接口文档 接口测试登录认证获取登录用户信息 结语源码 前言 youlai-mall 开源微服务商城新版本基于 Spring…

评估在线不平衡学习的PAUC

评估在线不平衡学习的PAUC 原始论文《Prequential AUC: properties of the area under the ROC curve for data streams with concept drift》 由于正常的AUC需要计算整体数据集上,每个数据的预测置信度的排名。那么我们首先要求我们的在线学习算法在进行预测时也返…
最新文章