卷积神经网络--目标检测

nxf-rabbit75 nxf-rabbit75     2023-01-13     558

关键词:

本章介绍目标定位和目标检测(包含多目标检测)。

1. Object Localization

技术分享图片

原始图片经过CONV卷积层后,Softmax层输出4 x 1向量,分别是:
技术分享图片

注意,class label也可能是概率。上述四个向量分别对应pedestrain,car,motorcycle和background四类。
对于目标定位和目标检测问题,其模型如下所示:
技术分享图片

原始图片经过CONV卷积层后,Softmax层输出8 x 1向量。除了包含上述一般CNN分类3 x 1向量(class label)之外,还包含了(bx, by),表示目标中心位置坐标;还包含了bh和bw,表示目标所在矩形区域的高和宽;还包含了Pc,表示矩形区域是目标的概率,数值在0~1之间,且越大概率越大。一般设定图片左上角为原点(0, 0),右下角为(1, 1)。在模型训练时,bx、by、bh、bw都由人为确定其数值。例如上图中,可得bx=0.5,by=0.7,bh=0.3,bw=0.4。
技术分享图片
输出label可表示为:
技术分享图片
若Pc=0,表示没有检测到目标,则输出label后面的7个参数都可以忽略。
对于损失函数Loss function,若使用平方误差形式,有两种情况:
技术分享图片
当然,除了使用平方误差之外,还可以逻辑回归损失函数,类标签c1,c2,c3c1,c2,c3也可以通过softmax输出。比较而言,平方误差已经能够取得比较好的效果。

2. Landmark Detection

除了使用矩形区域检测目标类别和位置外,我们还可以仅对目标的关键特征点坐标进行定位,这些关键点被称为landmarks
例如人脸识别,可以对人脸部分特征点坐标进行定位检测,并标记出来,如下图所示:
技术分享图片
该网络模型共检测人脸上64处特征点,加上是否为face的标志位,输出label共有64x2+1=129个值。通过检测人脸特征点可以进行情绪分类与判断,或者应用于AR领域等等。

除了人脸特征点检测之外,还可以检测人体姿势动作,如下图所示:
技术分享图片

3. Object Detection

目标检测的一种简单方法是滑动窗算法。这种算法首先在训练样本集上搜集相应的各种目标图片和非目标图片。注意训练集图片尺寸较小,尽量仅包含相应目标,如下图所示:
技术分享图片
然后,使用这些训练集构建CNN模型,使得模型有较高的识别率。

最后,在测试图片上,选择大小适宜的窗口、合适的步进长度,进行从左到右、从上倒下的滑动。每个窗口区域都送入之前构建好的CNN模型进行识别判断。若判断有目标,则此窗口即为目标区域;若判断没有目标,则此窗口为非目标区域。

技术分享图片
滑动窗算法的优点是原理简单,且不需要人为选定目标区域(检测出目标的滑动窗即为目标区域)。但是其缺点也很明显,首先滑动窗的大小和步进长度都需要人为直观设定。滑动窗过小或过大,步进长度过大均会降低目标检测正确率。而且,每次滑动窗区域都要进行一次CNN网络计算,如果滑动窗和步进长度较小,整个目标检测的算法运行时间会很长。所以,滑动窗算法虽然简单,但是性能不佳,不够快,不够灵活。

4. Convolutional Implementation of Sliding Windows

滑动窗算法可以使用卷积方式实现,以提高运行速度,节约重复运算成本。

首先,单个滑动窗口区域进入CNN网络模型时,包含全连接层。那么滑动窗口算法卷积实现的第一步就是将全连接层转变成为卷积层,如下图所示:
技术分享图片
全连接层转变成卷积层的操作很简单,只需要使用与上层尺寸一致的滤波算子进行卷积运算即可。最终得到的输出层维度是1 x 1 x 4,代表4类输出值。

单个窗口区域卷积网络结构建立完毕之后,对于待检测图片,即可使用该网络参数和结构进行运算。例如16 x 16 x 3的图片,步进长度为2,CNN网络得到的输出层为2 x 2 x 4。其中,2 x 2表示共有4个窗口结果。对于更复杂的28 x 28 x3的图片,CNN网络得到的输出层为8 x 8 x 4,共64个窗口结果。
技术分享图片
之前的滑动窗算法需要反复进行CNN正向计算,例如16 x 16 x 3的图片需进行4次,28 x 28 x3的图片需进行64次。而利用卷积操作代替滑动窗算法,则不管原始图片有多大,只需要进行一次CNN正向计算,因为其中共享了很多重复计算部分,这大大节约了运算成本。值得一提的是,窗口步进长度与选择的MAX POOL大小有关。如果需要步进长度为4,只需设置MAX POOL为4 x 4即可。
技术分享图片

5. Bounding Box Predictions

滑动窗口算法有时会出现滑动窗不能完全涵盖目标的问题,如下图蓝色窗口所示。
技术分享图片
YOLO(You Only Look Once)算法可以解决这类问题,生成更加准确的目标区域(如上图红色窗口)。
YOLO算法首先将原始图片分割成n x n网格,每个网格代表一块区域。为简化说明,下图中将图片分成3 x 3网格。
技术分享图片
然后,利用上一节卷积形式实现滑动窗口算法的思想,对该原始图片构建CNN网络,得到的的输出层维度为3 x 3 x 8。其中,3 x 3对应9个网格,每个网格的输出包含8个元素:
技术分享图片
技术分享图片
划分的网格可以更密一些。网格越小,则多个目标的中心坐标被划分到一个网格内的概率就越小,这恰恰是我们希望看到的。

6. Intersection Over Union

IoU,即交集与并集之比,可以用来评价目标检测区域的准确性。
技术分享图片
如上图所示,红色方框为真实目标区域,蓝色方框为检测目标区域。两块区域的交集为绿色部分,并集为紫色部分。蓝色方框与红色方框的接近程度可以用IoU比值来定义:
技术分享图片
IoU可以表示任意两块区域的接近程度。IoU值介于0~1之间,且越接近1表示两块区域越接近。

7. Non-max Suppression

YOLO算法中,可能会出现多个网格都检测出到同一目标的情况,例如几个相邻网格都判断出同一目标的中心坐标在其内。
技术分享图片
上图中,三个绿色网格和三个红色网格分别检测的都是同一目标。那如何判断哪个网格最为准确呢?方法是使用非最大值抑制算法。

非最大值抑制(Non-max Suppression)做法很简单,图示每个网格的Pc值可以求出,Pc值反映了该网格包含目标中心坐标的可信度。首先选取Pc最大值对应的网格和区域,然后计算该区域与所有其它区域的IoU,剔除掉IoU大于阈值(例如0.5)的所有网格及区域。这样就能保证同一目标只有一个网格与之对应,且该网格Pc最大,最可信。接着,再从剩下的网格中选取Pc最大的网格,重复上一步的操作。最后,就能使得每个目标都仅由一个网格和区域对应。如下图所示:
技术分享图片

技术分享图片

总结一下非最大值抑制算法的流程:

    1. 剔除Pc值小于某阈值(例如0.6)的所有网格;
    1. 选取Pc值最大的网格,利用IoU,摒弃与该网格交叠较大的网格;
    1. 对剩下的网格,重复步骤2.

8. Anchor Boxes

到目前为止,我们介绍的都是一个网格至多只能检测一个目标。那对于多个目标重叠的情况,例如一个人站在一辆车前面,该如何使用YOLO算法进行检测呢?方法是使用不同形状的Anchor Boxes。

如下图所示,同一网格出现了两个目标:人和车。为了同时检测两个目标,我们可以设置两个Anchor Boxes,Anchor box 1检测人,Anchor box 2检测车。也就是说,每个网格多加了一层输出。原来的输出维度是 3 x 3 x 8,现在是3 x 3 x 2 x 8(也可以写成3 x 3 x 16的形式)。这里的2表示有两个Anchor Boxes,用来在一个网格中同时检测多个目标。每个Anchor box都有一个Pc值,若两个Pc值均大于某阈值,则检测到了两个目标。
技术分享图片

在使用YOLO算法时,只需对每个Anchor box使用上一节的非最大值抑制即可。Anchor Boxes之间并行实现。
技术分享图片
顺便提一下,Anchor Boxes形状的选择可以通过人为选取,也可以使用其他机器学习算法,例如k聚类算法对待检测的所有目标进行形状分类,选择主要形状作为Anchor Boxes。

技术分享图片

9.YOLO Algorithm

这一节主要介绍YOLO算法的流程,算是对前几节内容的回顾。网络结构如下图所示,包含了两个Anchor Boxes。

  1. For each grid call, get 2 predicted bounding boxes.
  2. Get rid of low probability predictions.
  3. For each class (pedestrian, car, motorcycle) use non-max suppression to generate final predictions.
    技术分享图片
    技术分享图片
    技术分享图片

10. Region Proposals

之前介绍的滑动窗算法会对原始图片的每个区域都进行扫描,即使是一些空白的或明显没有目标的区域,例如下图所示。这样会降低算法运行效率,耗费时间。
技术分享图片
为了解决这一问题,尽量避免对无用区域的扫描,可以使用Region Proposals的方法。具体做法是先对原始图片进行分割算法处理,然后支队分割后的图片中的块进行目标检测。
技术分享图片

Region Proposals共有三种方法:
R-CNN: 滑动窗的形式,一次只对单个区域块进行目标检测,运算速度慢。
Fast R-CNN: 利用卷积实现滑动窗算法,类似第4节做法。
Faster R-CNN: 利用卷积对图片进行分割,进一步提高运行速度。
比较而言,Faster R-CNN的运行速度还是比YOLO慢一些。

卷积网络应用于目标检测算法

...处于研究的热门领域。近年来,随着深度学习和卷积神经网络的兴起,传统的目标检测算法的性能已不能满足现今的指标要求而被基于卷积网络的目标检测算法所取代。本文在对传统目标检测算法简单介绍的基础上,... 查看详情

吴恩达深度学习工程师04.卷积神经网络第三周目标检测基本的对象检测算法

该笔记介绍的是《卷积神经网络》系列第三周:目标检测(1)基本的对象检测算法主要内容有:1.目标定位2.特征点检测3.目标检测   目标定位使用算法判断图片中是不是目标物体,如果是还要再图片中标出其位置并... 查看详情

卷积神经网络(cnn)/目标检测领域相关名词解释

卷积神经网络(CNN)/目标检测领域相关名词解释//2022.1.13日下午15:44开始总结ROIPooling解释:ROI Pooling的过程就是将大小不同的区域proposals(一堆矩形候选框框)转换为同样大小的区域。详细说明:在Fa... 查看详情

深度卷积神经网络在目标检测中的进展

...获得授权,非商业转载请注明出处。近些年来,深度卷积神经网络(DCNN)在图像分类和识别上取得了很显著的提高。回顾从2014到2016这两年多的时间,先后涌现出了R-CNN,FastR-CNN,FasterR-CNN,ION,HyperNet,SDP- 查看详情

使用caffe完成图像目标检测和caffe全卷积网络

一、【用Python学习Caffe】2.使用Caffe完成图像目标检测标签: pythoncaffe深度学习目标检测ssd2017-06-2222:08 207人阅读 评论(0) 收藏 举报 分类:机器学习(22)  深度学习(12) 版权声明:本文为博主原... 查看详情

sigai深度学习第十集卷积神经网络4

...)、图像分割(确定每个像素它属于哪一个目标)。卷积神经网络应用简介先简单介绍一下CNN的应用情况。它最早是应用在机器视觉/图像领域里边的,更具体来说 查看详情

deeplearning.ai学习笔记卷积神经网络--week3目标检测

一、目标定位这一小节视频主要介绍了我们在实现目标定位时标签该如何定义。上图左下角给出了损失函数的计算公式(这里使用的是平方差)如图示,加入我们需要定位出图像中是否有pedestrian,car,motorcycles。注意在这里我们假... 查看详情

第06课:cnn在机器视觉中的应用——目标检测

在上一节课中,我们介绍了卷积神经网络发展的历史以及图像分类的应用。本节课的内容将在上一节课的基础上,为大家介绍机器视觉中另一类经典案例——目标检测。本节课核心内容包括:卷积神经网络的应用:图像目标检测... 查看详情

part4w1卷积神经网络介绍

参考技术A一个是图像分类:如猫脸识别等;一个是目标检测:如无人驾驶技术中的各种交通信号检测技术1.卷积操作及过滤器/卷积核的概念如上图所示:最左侧矩阵是一个灰度图像,中间是一个3*3的小矩阵,称为“卷积核”或... 查看详情

fasterr-cnn:使用rpn实时目标检测

...物体在候选区域的可能性还是比较大的。然后对这些区域卷积,找到目标物体,虽然大多数区域都是无用的。与寻找几乎个区域比起来,这种方法要高效的多。FastR-CNN,不在原始图像生成备选区域,而是先整张图片通过卷积网络... 查看详情

人脸检测—retinanetface

...由DW(depthwise)和PW(pointwise)组成这里我们通过对比普通卷积神经网络来解释,深度可分离卷积是如何减少参数我们先看图中DW部分,在这一个部分每一个卷积核通道数1,每一个卷积 查看详情

使用卷积神经网络进行四边形/矩形检测的想法

】使用卷积神经网络进行四边形/矩形检测的想法【英文标题】:ideasonquadrangle/rectangledetectionusingconvolutionalneuralnetworks【发布时间】:2017-11-0216:02:54【问题描述】:几周以来,我一直在尝试进行四边形检测和定位,我的目标是找到... 查看详情

卷积神经网络-初步认识

卷积神经网络是一种前馈网络,它由若干卷积层和池化层组成,在图像处理方面表现十分出色。可应用于图像分类,目标识别,目标检测,语义分割等等。一、认识卷积神经网络基本结构首先准备一个1(通道)x28࿰... 查看详情

毕设系列-检测专题-基于卷积神经网络的动物识别系统

我们之前做过一期基于Yolov5的口罩检测系统(​​手把手教你使用YOLOV5训练自己的目标检测模型-口罩检测-视频教程_dejahu的博客-博客​​),里面的代码是基于YOLOV56.0开发的,并且是适用其他数据集的,只需要修改数据集之后... 查看详情

yolo目标检测实战项目『原理篇』

...YOLO网络借鉴了GoogLeNet分类网络结构,不同的是YOLO使用1x1卷积层和3x3卷积层替代inceptionmodule。如下图所示,整个检测网络包括24个卷积层和2个全连接层。其中,卷积层用来提取图像特征,全连接层用来预测图像位置和类别概率值... 查看详情

最为详细的卷积神经网络笔记--吴恩达深度学习课程笔记

卷积神经网络(三)三.目标检测3.1目标定位对于分类定位问题,通常只有一个较大的物体在图片的中央,我们需要识别该物体的类别并标记物体的位置。而对象检测问题在一张图片中可能会有多个不同类别的对象... 查看详情

深度学习卷积神经网络(cnn)简介(入门级好文)

卷积神经网络CNN简介学习目标1.更复杂抽象的数据2.激活函数的选择2.1为什么需要非线性的激活函数2.2更多发展3.为什么需要卷积神经网络3.1感受野4.边缘检测学习目标目标了解线性网络以及多层网络模型缺陷知道为什么需要非线... 查看详情

实战深度学习目标检测:rcnn

...;代替原来的selectivesearch)。RPN的核心思想是使用卷积神经网络直接产生regionproposal,使用的方法本质上就是滑 查看详情