0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

图解目标检测算法的网络架构和基本流程

新机器视觉 来源:新机器视觉 作者:新机器视觉 2022-05-07 15:34 次阅读

YOLO v3 是目标检测各类算法中非常经典的一款,本文试着图解它的网络架构和基本流程,给想快速了解它的童鞋提供一些参考。

6ccc0604-cd42-11ec-bce3-dac502259ad0.png

1引 言

近年来,由于在海量数据与计算力的加持下,深度学习对图像数据表现出强大的表示能力,成为了机器视觉的热点研究方向。图像的表示学习,或者让计算机理解图像是机器视觉的中心问题。

具体来说,图像理解包括分类、定位、检测与分割等单个或组合任务,如下图所示。

6d05cbdc-cd42-11ec-bce3-dac502259ad0.png

本篇关注目标检测,它可以认为是一个将分类和回归相结合的任务。

目标检测的核心问题可以简述为图像中什么位置有什么物体。

1)定位问题:目标出现在图像中哪个位置(区域)。

2)分类问题:图像的某个区域里的目标属于什么类别。

当然,目标(物体)在图像中还存在其他问题,如尺寸问题,即物体具有不同大小;还有形状问题,即物体在各种角度下可以呈现各种形状。

基于深度学习的目标检测算法目前主要分为两类:Two-stage和One-stage。

Tow-stage

先生成区域(region proposal,简称 RP),即一个可能包含待检物体的预选框,再通过卷积神经网络进行分类。

任务流程:特征提取 --> 生成 RP --> 分类/定位回归。

常见Two-stage目标检测算法有:R-CNN、Fast R-CNN、Faster R-CNN、SPP-Net 和 R-FCN 等。

One-stage

直接用网络提取图像特征来预测物体位置和分类,因此不需要 RP。

任务流程:特征提取–> 分类/定位回归。

常见的One-stage目标检测算法有:YOLO 系列、SSD 和 RetinaNet 等。不过,为了得到最终目标的定位和分类,往往需要后处理。

本篇主要来看 YOLO 系列中的 v3 版本。

2基本原理

首先,我们先从整体上来看一下 YOLO v3 是如何工作的。YOLO v3 算法通过将图像划分为个网格(grid)单元来工作,每个网格单元具有相同大小的区域。这个网格单元中的每一个都负责对包含该网格的目标的检测和定位。

相应地,这些网格预测个相对于它们所在单元格的包围盒相对坐标,以及目标标签和目标出现在单元格中的概率。

由于网格的分辨率比起原图来说已经大大降低,而检测和识别步骤都是针对网格单元来处理的,因此这个方案大大降低了计算量。但是,由于多个单元格用不同的包围盒来预测同一个对象,因此会带来了很多重复的预测框。YOLO v3 使用非最大值抑制(Non-Maximum Suppression,NMS)来处理这个问题。

下图给出了一个例子,展示了当时的个网格以及由此检测图中目标的大致流程。会涉及很多个包围盒,最后选出三个包围盒来定位和识别目标。

6d1e8a14-cd42-11ec-bce3-dac502259ad0.png

另外,为了兼顾图像中各种尺度的目标,可以使用多个不同分辨率的个网格。很快将会看到,YOLO v3 中使用了 3 个尺度。

3总体架构

先看一下网络架构,注意它有三个不同分辨率的输出分支。

6d431ae6-cd42-11ec-bce3-dac502259ad0.png

从 Yolo v3 的流程图可以看到,总共有 106 层,实现了对每张图像在大、中、小三个尺度上检测目标。这个网格有三个出口,分别是 82 层、94 层、106 层。

下面看一下更加详细的网络架构图,注意有三个检测结果(Detection Result)。

6d563928-cd42-11ec-bce3-dac502259ad0.png

上图左边是 DarkNet-53,是一个深度为 53 层的卷积神经网络,具体的残差块和卷积层如下图所示。

6d6afa0c-cd42-11ec-bce3-dac502259ad0.png

输入图像通过 Darknet 得到三个尺度的特征图,从上往下为(52×52×256), (26×26×512), (13×13×1024),也就是在三种尺度上进行以便检测到不同大小的目标。也可以结合下面这个更加精炼图来理解。

6da32ff8-cd42-11ec-bce3-dac502259ad0.png

4关键步骤

目标检测也可以看作是对图像中的背景和前景作某种理解分析,即从图像背景中分离出感兴趣的目标,得到对于目标的描述<位置,类别>。

由于可能有多个目标存在,模型输出是一个列表,包含目标的位置以及目标的类别。目标位置一般用矩形检测框(包围盒)的中心和宽高来表示。

¸模型输出值

分辨率最低的输出分支对应的结果是,下图展示了在特征图上的检测结果,特征图上的一个像素对应一个网格,每个网格会有 3 个预测框,每个预测框具有(5 + C)个值,其中前 5 个数对应包围盒的位置以及属于目标的可能性,C 表示类别数。

6db94d7e-cd42-11ec-bce3-dac502259ad0.png

具体来看,最后输出的结果为:每个网格单元对应一个维向量,表示一个网格可以预测包围盒的数目,上面已经说了,个数值中的前个对应包围盒的中心位子和宽高值和个目标置信度。

这个结果的含义大致清楚了,但是还有个小问题,就是这个输出是根据什么信息计算而来呢?

如下图所示,在前一层得到的特征图上再接一个核大小为的卷积层得到最终的输出,即由每个网点的特征向量(1024 维)转化为我们需要的输出,即包围盒、目标置信度以及类别信息。

6dcd969e-cd42-11ec-bce3-dac502259ad0.png

上面说了,在这个尺度上会检测 3 个预测框,把它们拼接在一起,得到完整的结果示意图如下。

6e22d686-cd42-11ec-bce3-dac502259ad0.png

另外两个尺度上类似,它们对应的分支输出如下两个图所示。

6e43f1cc-cd42-11ec-bce3-dac502259ad0.png

网络会在 3 个尺度上分别检测,每个尺度上每个网格点都预设 3 个包围盒,所以整个网络共检测到13×13×3 + 26×26×3 + 52×52×3 = 10647个包围盒。

那么这里的 3 个预设包围盒又是怎么回事呢?

其实每个网格单元可以对目标的包围盒进行一定数量的猜测,比如下图中的示例,黄色网格单元进行两次包围盒(蓝色框)预测以定位人的位置。

6e59c45c-cd42-11ec-bce3-dac502259ad0.png

而 YOLO v3 中采用3 个预设包围盒,但值得注意的是这里限定只能检测同一个目标。

¸先验包围盒

还有一个问题,每个网格对应的包围盒怎么取呢?理论上,包围盒可以各种各样,但是这样的话就需要大量计算。

为了节省计算,不妨预先了解一下在图像中出现的目标一般具有怎么样的包围盒。可以通过在数据集 VOC 和 COCO 上使用聚类法寻找一般目标的包围盒尺寸。

6e8018fa-cd42-11ec-bce3-dac502259ad0.png

在包围盒的维度上运行 k-means 聚类,以获得良好先验。左图显示了我们在选择时得到的平均 IOU。在 YOLO v2 中,作者选择,此时在模型的召回率与复杂性之间具有较好的平衡。右图显示了 VOC 和 COCO 的相对质心。两组先验都倾向于更薄、更高的盒子,而 COCO 的尺寸变化比 VOC 更大。

而在 YOLO v3 中,通过聚类选出了个先验包围盒:(10×13),(16×30),(33×23),(30×61),(62×45),(59×119),(116×90),(156×198),(373×326)。

¸包围盒预测

有了预设的先验包围盒,怎么来计算实际包围盒呢?总不能直接套到每个网格单元处就完事了吧。

YOLO v3 引入一个机制,可以适当调整预设包围盒来生成实际的包围盒。下图中的公式将网络输出值转换得到实际的包围盒信息。

6e93df66-cd42-11ec-bce3-dac502259ad0.png

或者参考下图,

6ea617a8-cd42-11ec-bce3-dac502259ad0.png

预测出包围盒中心点相对于网格单元左上角的相对坐标。通过和可以将包围盒中心点限制于网格单元内。另外,为了得到训练数据的值,只需要反算即可。

¸包围盒后处理

YOLO v3 模型的输出并没有直接给出包含目标的包围盒,而是包含所有网格单元对应结果的张量,因此需要一些后处理步骤来获得结果。

首先,需要根据阈值和模型输出的目标置信度来淘汰一大批包围盒。而剩下的包围盒中很可能有好几个围绕着同一个目标,因此还需要继续淘汰。这时候就要用到非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以认为求局部最优解。用在此处的基本思路就是选择目标置信度最大的包围盒,然后排除掉与之 IoU 大于某个阈值的附近包围盒。

6ebb56c2-cd42-11ec-bce3-dac502259ad0.png

而两个包围盒的 IoU 计算如下,

6ed5e5a0-cd42-11ec-bce3-dac502259ad0.png

¸损失函数

由于网络的输出值比较多,因此损失函数也具有很多项,但总体还是清晰的,这里不作展开。

5实 验

网上基于PyTorch[1]或者TF[2]等库的 YOLO v3 实现版本很多,可以直接拿来把玩。下面是网上随手下载的几个图像的测试结果,看着效果是不是还可以呢。

6ef1b14a-cd42-11ec-bce3-dac502259ad0.png

6f111e22-cd42-11ec-bce3-dac502259ad0.png

6f375f10-cd42-11ec-bce3-dac502259ad0.png

6f71364a-cd42-11ec-bce3-dac502259ad0.png

6小 结

先回顾下面这个图,看看是否了解每个步骤的含义。

6f990ce2-cd42-11ec-bce3-dac502259ad0.png

然后再用一个图来总结一下流程,

6fb8aeee-cd42-11ec-bce3-dac502259ad0.png

接下来根据输出的目标置信度淘汰一大批包围盒,在使用非极大值抑制继续淘汰一批,最后剩下检测到的目标,下图是这些步骤的简化版本演示图。

70109de8-cd42-11ec-bce3-dac502259ad0.png

参考代码

[1]

PyTorch 实现:https://github.com/eriklindernoren/PyTorch-YOLOv3

[2]

TensorFlow 实现:https://machinelearningmastery.com/how-to-perform-object-detection-with-yolov3-in-keras/

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 检测算法
    +关注

    关注

    0

    文章

    119

    浏览量

    25212
  • 网络架构
    +关注

    关注

    1

    文章

    92

    浏览量

    12567

原文标题:图解目标检测算法之 YOLO

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何制定一套优质的工业视觉检测算法方案?

    在现代工业生产中,视觉检测技术的应用正变得越来越广泛,它在提高产品质量、优化生产流程方面发挥着至关重要的作用。然而,与人脸识别、交通监控、安防监控等应用场景相比,工业视觉检测项目的场景更为特殊,它
    的头像 发表于 11-14 01:05 123次阅读
    如何制定一套优质的工业视觉<b class='flag-5'>检测算法</b>方案?

    在树莓派上部署YOLOv5进行动物目标检测的完整流程

    目标检测在计算机视觉领域中具有重要意义。YOLOv5(You Only Look One-level)是目标检测算法中的一种代表性方法,以其高效性和准确性备受关注,并且在各种
    的头像 发表于 11-11 10:38 352次阅读
    在树莓派上部署YOLOv5进行动物<b class='flag-5'>目标</b><b class='flag-5'>检测</b>的完整<b class='flag-5'>流程</b>

    RISC-­V架构目标和特点

    RISC-­V架构目标 RISC-­V架构目标如下 成为一种完全开放的指令集,可以被任何学术机构或商业组织所自由使用 成为一种真正适合硬件实现且稳定的标准指令集 RISC-­V
    发表于 08-23 00:42

    旗晟机器人环境检测算法有哪些?

    硬件支撑,更离不开强大的算法库作为软件核心,二者相辅相成,缺一不可。今天就来了解旗晟机器人环境检测算法。 1、设施异常监测 通过集成高精度传感器与智能图像识别技术。它不仅能检测A字梯是否存在变形,还能精确评估梯脚
    的头像 发表于 07-19 17:54 501次阅读
    旗晟机器人环境<b class='flag-5'>检测算法</b>有哪些?

    慧视小目标识别算法 解决目标检测中的老大难问题

    随着深度学习和人工智能技术的兴起与技术成熟,一大批如FasterR-CNN、RetinaNet、YOLO等可以在工业界使用的目标检测算法已逐步成熟并进入实际应用,大多数场景下的目标检测
    的头像 发表于 07-17 08:29 396次阅读
    慧视小<b class='flag-5'>目标</b>识别<b class='flag-5'>算法</b>   解决<b class='flag-5'>目标</b><b class='flag-5'>检测</b>中的老大难问题

    基于深度学习的小目标检测

    在计算机视觉领域,目标检测一直是研究的热点和难点之一。特别是在小目标检测方面,由于小目标在图像中所占比例小、特征不明显,使得
    的头像 发表于 07-04 17:25 741次阅读

    bp神经网络算法的基本流程包括哪些

    BP神经网络算法,即反向传播神经网络算法,是一种常用的多层前馈神经网络训练算法。它通过反向传播误
    的头像 发表于 07-04 09:47 482次阅读

    BP神经网络算法的基本流程包括

    、自然语言处理等。本文将详细介绍BP神经网络算法的基本流程,包括网络结构、激活函数、前向传播、反向传播、权重更新和训练过程等。 网络结构 B
    的头像 发表于 07-03 09:52 403次阅读

    口罩佩戴检测算法

    口罩佩戴检测算法基于YOLOv5在图像识别检测领域的优异性能,本文研究基于基于YOLOv5的口罩佩自动戴检测方法。首先从网络和真实生活中中寻找并采集不同场景人群口罩佩戴的图片约500张
    的头像 发表于 07-01 20:20 285次阅读
    口罩佩戴<b class='flag-5'>检测算法</b>

    人员跌倒识别检测算法

    人员跌倒识别检测算法是基于视频的检测方法,通过对目标人体监测,当目标人体出现突然倒地行为时,自动监测并触发报警。人员跌倒识别检测算法基于计算
    的头像 发表于 06-30 11:47 425次阅读
    人员跌倒识别<b class='flag-5'>检测算法</b>

    安全帽佩戴检测算法

    安全帽佩戴监控是铁路工程施工人员安全管理中的重点和难点,它对检测算法的准确 率与检测速度都有较高的要求。本文提出一种基于神经网络架构搜索的安全帽佩戴
    的头像 发表于 06-26 22:22 360次阅读
    安全帽佩戴<b class='flag-5'>检测算法</b>

    咳嗽检测深度神经网络算法

    [10]。许多咳嗽检测算法在临床行业中流行,用于识别和检测咳嗽声音,以获得有价值的见解。但是,从实时音频流中检测咳嗽的方法仍然很少。医生利用咳嗽声和非咳嗽声的良好辨别性[11]有助于早期诊断慢性咳嗽
    发表于 05-15 19:05

    OpenVINO™ C# API部署YOLOv9目标检测和实例分割模型

    YOLOv9模型是YOLO系列实时目标检测算法中的最新版本,代表着该系列在准确性、速度和效率方面的又一次重大飞跃。
    的头像 发表于 04-03 17:35 722次阅读
    OpenVINO™ C# API部署YOLOv9<b class='flag-5'>目标</b><b class='flag-5'>检测</b>和实例分割模型

    网络社交机器人检测的关键技术

    在线社交网络面临着网络社交机器人操控的威胁,而现有的检测算法还不能缓解这种威胁。如何有效利用人工智能技术检测社交机器人,规避其潜在的风险并保障网络
    的头像 发表于 12-28 17:05 990次阅读
    <b class='flag-5'>网络</b>社交机器人<b class='flag-5'>检测</b>的关键技术

    柔性印刷线路板缺陷检测方法指南

    现有的FPC缺陷检测算法多衍生于PCB检测算法,但受本身独特性限制,FPC板缺陷要求更高,检测样板尺寸更大,样板成像易变形,使得针对PCB板的缺陷检测算法不能直接套用FPC板的
    发表于 11-30 15:29 491次阅读