目标检测 — one-stage检测之YOLO

  目前主流的目标检测算法主要是基于深度学习模型,其可以分成两大类:two-stage检测算法;one-stage检测算法。本文主要介绍第二类检测算法。

  目标检测模型的主要性能指标是检测准确度和速度,对于准确度,目标检测要考虑物体的定位准确性,而不单单是分类准确度。一般情况下,two-stage算法在准确度上有优势,而one-stage算法在速度上有优势。不过,随着研究的发展,两类算法都在两个方面做改进。

  one-stage检测算法,其不需要region proposal阶段,直接产生物体的类别概率和位置坐标值,经过单次检测即可直接得到最终的检测结果,因此有着更快的检测速度,比较典型的算法如YOLO,SSD,Retina-Net。

1、YOLO(15)

  YOLO直接在输出层回归bounding box的位置和bounding box所属的类别(整张图作为网络的输入,把 Object Detection 的问题转化成一个 Regression 问题)。直接通过整张图片的所有像素得到bounding box的坐标、box中包含物体的置信度和class probabilities。通过YOLO,每张图像只需要看一眼就能得出图像中都有哪些物体和这些物体的位置。

  

 

  网络设计:

  网络结构借鉴了 GoogLeNet 。24个卷积层,2个全链接层。(用1×1 reduction layers 紧跟 3×3 convolutional layers 取代Goolenet的 inception modules )。

  (1)YOLO将输入图像划分为S*S的网格,某个物体落在这个网格中,该网格就负责预测这个物体,并且每个网格只预测一种object;

  (2)每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。 这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息。每一个bounding box包含5个值:x,y,w,h和confidence。公式如下,其中如果有object落在一个grid cell里,第一项取1,否则取0。 第二项是预测的bounding box和实际的groundtruth之间的IoU值。

  

  (3)每一个网格还要预测 C 个 conditional class probability(条件类别概率):Pr(Classi|Object),记为C类,当类别数为20时,一个网格的输出30个信息。则SxS个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是S x S x (5*B+C)的一个张量。注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的

  (4)测试时,每个网格预测的class信息和bounding box预测的confidence信息得到每个bbox的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。

2、YOLO-v2(16)

  1、通过一系列的方法提升准确率。

(1)Batch Normalization:对所有的conv层采用BN能够让网络更好的收敛,同时可以替代掉一些其他形式的regularization,而且可以去掉防止overfitting的dropout层而不会出现过拟合。

(2)High resolution classifier:YOLO从224*224增加到了448*448,这就意味着网络需要适应新的输入分辨率,使用448*448图片对网络微调。

(3) Convolutional With Anchor Boxes:预测偏移(offsets) 而不是直接预测坐标(coordinates) 能够简化问题,让网络更加容易学习,所以去除全连接层,利用Anchor Boxes预测BB。

  在设置anchor 的比例时,相比于直接手工的设计比例,先用k-means聚类对原训练集进行聚类后再设置比例,能够获得更好的IOU,因为这相当于增加了一些先验信息。而获得更好的IOU,则有助于网络的训练。而在k-means选择现在度量距离的时候,并不是直接选择欧氏距离,而是选择 d(box, centroid) = 1 – IOU(box, centoid), 因为我们关心的是IOU,这无关于box的大小,而欧氏距离会受box大小的影响。最终选择k =5.

(4)Direct location prediction:约束位置预测,相对于网格左上角点的位置偏移。

(5)Fine-Grained Features:跨层连接,YOLO则还是采用13x13 的feature map上,但另外增加了一个passthrough layer 将一个earlier layer at 26x26 resolution 连接到 最末端的13x13的 feature map上。具体是,类似于ResNet的 identitymappings,将 26x26x512的feature map 转换成 13x13x2048的feature map. 最终提高1%的性能。

(6)Multi-Scale Training:网络是一个权值共享的网络,但是输入的图片大小可以是{320, 352, …, 608} ,训练时每10个batches 随机选取一种size。这样使得模型不需要固定一种输入尺寸,选取小尺寸时,可以获得更快的速度,大尺寸可以获得更高的精度。十分灵活。

  2、提升速度

(1)model–Darknet19,有19个卷积层和5个maxpooling层,基本采用3x3 filter 和 每次pooling后通道数加倍的方法;

(2)采用data augmentation,随机裁剪,旋转,以及色调,饱和度和曝光偏移。

(3)去掉原网络最后一个卷积层,增加了三个 3 * 3 (1024 ?lters)的卷积层,并且在每一个卷积层后面跟一个1 * 1的卷积层,输出维度是检测所需数量。

  

3、YOLO-v3(18)

  相比第二版本的改进点:使用残差模型和采用FPN架构(多尺度预测 )。

(1)特征提取器是一个残差模型,因为包含53个卷积层,所以称为Darknet-53,从网络结构上看,相比Darknet-19网络使用了残差单元,所以可以构建得更深。

(2)采用了3个尺度的特征图(当输入为416*416  时): (13*13),(26*26),(52*52),其中红色部分为各个尺度特征图的检测结果。YOLOv3每个位置使用3个先验框,所以使用k-means得到9个先验框,并将其划分到3个尺度特征图上,尺度更大的特征图使用更小的先验框,和SSD类似。

  • 尺度1: 在基础网络之后添加一些卷积层再输出box信息.
  • 尺度2: 从尺度1中的倒数第二层的卷积层上采样(x2)再与最后一个16x16大小的特征图相加,再次通过多个卷积后输出box信息.相比尺度1变大两倍.
  • 尺度3: 与尺度2类似,使用了32x32大小的特征图.

(3)Softmax可被独立的多个logistic分类器替代,且准确率不会下降。分类损失采用binary cross-entropy loss。

参考博客:https://blog.csdn.net/xiaohu2022/article/details/79600037

       http://www.voidcn.com/article/p-ksgrxafo-w.html

       https://blog.csdn.net/hysteric314/article/details/53909408

       https://www.cnblogs.com/makefile/p/YOLOv3.html ? 康行天下

原文地址:https://www.cnblogs.com/eilearn/p/9061814.html

时间: 2024-11-05 20:30:02

目标检测 — one-stage检测之YOLO的相关文章

JavaScript浏览器检测之客户端检测

客户端检测一共分为三种,分别为:能力检测.怪癖检测和用户代理检测,通过这三种检测方案,我们可以充分的了解当前浏览器所处系统.所支持的语法.所具有的特殊性能. 1.能力检测:能力检测又称作为特性检测,检测的目标不是识别特定的浏览器,而是识别浏览器的能力.能力检测不必估计特定的浏览器,只需要确定当前的浏览器是否支持特定的能力,就可以给出可行的解决方案. var width = window.innerWidth; //如果是非 IE 浏览器 if (typeof width != 'number')

unity3d 赛车游戏——复位点检测优化、反向检测、圈数检测、赛道长度计算

接着上一篇文章说 因为代码简短且思路简单 所以我就把这几个功能汇总为一篇文章 因为我之前就是做游戏外挂的 经过验证核实,**飞车的复位点检测.圈数检测就是以下的方法实现的 至于反向检测和赛道长度计算,没去深入研究,不过应该也八九不离十 在告诉大家个小秘密: **飞车的复位点检测和圈数检测利用以下文章中的代码思路可以做出外挂 感兴趣的可以试试!我只是技术交流,不是传播外挂,别打我 复位点检测优化: 首先感谢 @太粗难进 他的原话: “不过 你知道 高架桥么?就是 如果大的轮船经过 会 把 桥 中间

【OpenCV入门指南】第七篇 线段检测与圆检测

[OpenCV入门指南]第七篇 线段检测与圆检测 在<[OpenCV入门指南]第五篇轮廓检测上>与<[OpenCV入门指南]第六篇轮廓检测下>讲解了OpenCV的轮廓检测.本篇将讲解在OpenCV中使用线段检测与圆检测. 线段检测与圆检测主要运用Hough变换,Hough变换是一种利用图像的全局特征将特定形状的边缘连接起来,形成连续平滑边缘的一种方法.它通过将源图像上的点影射到用于累加的参数空间,实现对已知解析式曲线进行识别. 在OpenCV编程中,线段检测和圆检测已经封装成函数了

目标检测之线段检测---lsd line segment detector

(1)线段检测应用背景 (2)线段检测简介 (3)线段检测实例 a line segment detector (4)hough 变换和 lsd 的区别 ---------------------author:pkf ------------------------------time:2015-1-26 -----------------------------------------qq:1327706646 (1)线段检测应用背景 线段检测在高铁电机机车顶部图像检测系统中有很大应用,像受电

目标检测之人头---人头检测,安全帽检测,头盔检测,人流检测

大致思路是: 该算法在行人检测算法的基础上,识别检测出来的行人的头部,并根据头部的颜色值,得到该行人所佩戴安全帽的颜色,然后根据生产规范中得到对应人的身份. gabor ,sobel,meanshift http://www.doc88.com/p-8088708062985.html http://www.pudn.com/downloads456/sourcecode/graph/texture_mapping/detail1919552.html 弊端: 这种算法在正确检测行人的前提下,能

paddlepaddle目标检测之水果检测(yolov3_mobilenet_v1)

一.创建项目 (1)进入到https://aistudio.baidu.com/aistudio/projectoverview/public (2)创建项目 点击添加数据集:找到这两个 然后创建即可. 会生成以下项目: 二.启动环境,选择GPU版本 然后会进入到以下界面 选择的两个压缩包在/home/aistudio/data/下,先进行解压: !unzip /home/aistudio/data/data15067/fruit.zip !unzip /home/aistudio/data/d

【pytorch-ssd目标检测】可视化检测结果

制作类似pascal voc格式的目标检测数据集:https://www.cnblogs.com/xiximayou/p/12546061.html 训练自己创建的数据集:https://www.cnblogs.com/xiximayou/p/12546556.html 验证自己创建的数据集:https://www.cnblogs.com/xiximayou/p/12550471.html 测试自己创建的数据集:https://www.cnblogs.com/xiximayou/p/125505

目标检测之指尖检测---指尖检测的新方法几种

指尖检测根据应用可以分为单指尖检测和多指尖检测. 下面是我在工作中想到的方法,希望对你有用或提供点儿灵感. 单指尖检测新方法:重心距离法 找到手的区域,我一般用肤色检测 计算手的区域的重心 在手的区域的边缘点集中寻找距离重心最远的点,该点即为指尖候选位置 判断找到的点是否为指尖.判据:候选点到重心的距离大于边缘到重心平均距离的1.6倍,即为指尖:否则不是指尖,也就是说没有手指伸出 下面是我在随便挑的几张图片上做的试验 下面是我在应用中的试验截图: 说明:红色圆是平均距离:蓝色为重心:绿色表示最远

TF项目实战(基于SSD目标检测)——人脸检测2

数据转化为VOC格式: 一.我们先看 VOC格式的数据是什么??? Annotations:存放xml 包括 文件夹信息   图片名称. 图片尺寸信息. 图片中object的信息. JPEGImages: 存放图片 二.分析Wider FACE数据集: 数据集中的txt中信息为:第一行: 图片路径第二行:多少个人脸第三行:bbox信息 存储的左上角 坐标 和 高度宽度 三.代码转换: 1 import os,cv2,sys,shutil 2 3 from xml.dom.minidom impo

【转】Root检测与反检测

0x00背景需要在手机上构建一个环境对root过的设备进行伪装,让设备里面的应用将该设备当成未root的设备.10x01 Root检测手段1.检查已安装的APK包:SuperSU应用程序或者一键root的程序:(例如One Click Root,iRoot,360一键root,kingroot)Root Apps:需要root权限才能使用其功能的应用程序.例如busybox,SetCPU,Titanium Backup.Root Cloakers:隐藏设备是否已植根的应用程序.例如Root Cl