乐清网站制作哪家好,1688开山网一起做网站,电子商务主要是干嘛的,今天山东一例发生在哪里一、YOLO的背景及分类模型
1、YOLO的背景 上图中是手机中的一个app#xff0c;在任何场景下(工业场景#xff0c;生活场景等等)都可以试试这个app和这个算法#xff0c;这个app中间还有一个button#xff0c;来调节app使用的模型的大小#xff0c;更大的模型实时性差但精…一、YOLO的背景及分类模型
1、YOLO的背景 上图中是手机中的一个app在任何场景下(工业场景生活场景等等)都可以试试这个app和这个算法这个app中间还有一个button来调节app使用的模型的大小更大的模型实时性差但精度高更小的模型实时性好但精度差。 而YOLO v5其实一开始是以这一款app进入人们的视野的就是上图的这个叫i detection(图上标的是YOLO v4但其实算法是YOLO v5)值得一提的是这款app就是YOLO v5的作者亲自完成的。 读到这里你觉得YOLO v5的最大特点是什么 答案就是一个字快应用于移动端模型小速度快。 我们再看一张图 从图中可以看出YOLO的最大特点是速度快。YOLO在精度上仍然落后于目前最先进的检测系统。虽然它可以快速识别图像中的目标但它在定位某些物体尤其是小的物体上精度不高。进入到真正端到端的目标检测直接在网络中提取特征来预测物体分类和位置。因此YOLO的主要特点
速度快能够达到实时的要求。在 Titan X 的 GPU 上 能够达到 45 帧每秒。使用全图作为 Context 信息背景错误把背景错认为物体比较少。泛化能力强。
2、分类模型 在进入目标检测任务之前首先得学会图像分类任务这个任务的特点是输入一张图片输出是它的类别。 对于输入图片我们一般用一个矩阵表示。 对于输出结果我们一般用一个one-hot vector表示 【0,0,1,0,0,0】 例如我们有6个类别猫、狗、人、马、鸡、猪哪一维是1人这一维是1就代表图片属于哪一类人。 所以在设计神经网络时结构大致应该长这样 这里的cbrp指的是convbnrelupooling的串联。 由于输入要是one-hot形式所以最后我们设计了2个fc层(fully connencted layer)我们称之为“分类头”或者“决策层”。
二、YOLO系列思想的雏形YOLO v0
1、框的表示方式 x,y,w,h(如图) p1,p2,p3,p4(4个点坐标) cx,cy,w,h(cx,cy为中心点坐标) x,y,w,h,angle(还有的目标是有角度的这时叫做Rotated Bounding Box) ...... 所以框Bounding Box表示的方法很多但输出的结果一定是一个vector。
2、分类器和检测器 上面我提到了分类器模型用来分类分类器的输出是一个one-hot vector而检测器的输出是一个框(Bounding Box)也是一个向量是我们标注的结果。但二者的共同特点是结果都是向量。因此分类模型可以用来做检测用分类模型可以把检测的任务当做是遍历性的分类任务只是输出的结果是一个个one-hot vector而已。
3、遍历性的分类任务 如何遍历首先我们先预设一个框的大小然后在图片上用这个框遍历每遍历1次都对边框的区域进行二分类属于脸或者不属于脸。 这种方法其实就是RCNN全家桶的初衷专业术语叫做滑动窗口分类方法。 但问题是检测的耗时非常大。
4、改进思路 既然分类器输出一个one-hot vector【0,0,1,0,0,0】那我们把它换成(x,y,w,h,c)c表示confidence置信度此时输出是Bounding Box的位置(x,y,w,h,c)因此就把检测问题转化成一个回归问题而分类器也就可以变成了一个检测器。因此分类器变化如下 此时我们会发现这种方法比刚才的滑动窗口分类方法简单太多了。这一版的思路我把它叫做YOLO v0因为它是You Only Look Once最简单的版本。 因此YOLO的核心思想就是利用整张图作为网络的输入直接在输出层回归bounding box的位置和bounding box所属的类别。
5、YOLO v0的进化YOLO v1
5.1、问题分析 YOLO v0只能输出一个目标那比如下图多个目标怎么办呢为了保证所有目标都被检测到我们应该输出尽量多的目标。所以我们的模型需要进行改进。 我们进一步的改进让每个(c,x,y,w,h)去负责image某个区域的目标。因此我们需要对图片进行区域划分如上图中我们可以将图片划分成4x416个小的区域每个小的区域由1个(c,x,y,w,h)去负责image对应区域的目标。 因为conv操作是位置强相关的原来的目标在哪里卷积之后的feature map上还在哪里所以图片划分为16个区域结果也应该分布在16个区域上所以我们的结果(Tensor)的维度size是(5,4,4)。如下图所示 5.2、c的真值设置 c的真值如何设置呢c的真值取决于区域的中心点如大娃脸部跨了4个区域(grid)但4个区域(grid)只能某一个grid的c1其他的3个区域c0。那么该让哪一个grid的c1呢就看他的脸的中心落在了哪个grid里面。根据这一原则c的真值为下图所示 5.3、NMS(非极大值抑制) 上图中会发现7个葫芦娃c的真值只有6个1原因是第三行第三列的grid有2个目标。如何解决一个区域有多个目标的情况 解决方案 NMS(非极大值抑制)解决多目标检测。2个框重合度很高大概率是一个目标那就只取一个框。重合度的计算方法交并比IOU两个框的交集面积/两个框的并集面积。推荐 或者使用聚类但聚类容易将2个目标本身比较近聚成了1个类。不推荐 或者细化网格将网格细化如将 4x4 区域变成 40x40 或者更大使区域更密集就可以缓解多个目标的问题但无法从根本上去解决。不推荐
5.4、多类的目标 上面我将一直讲的是单类目标如检测葫芦娃的脸如果是多类目标如检测葫芦娃的脸且检测葫芦此时我们的设计改变为如下多个类的问题也解决了。 5.5、小目标检测 小目标总是检测不佳所以我们专门设计神经元去拟合小目标。对于每个区域我们用2个五元组(c,x,y,w,h)一个负责回归大目标一个负责回归小目标同样添加one-hot vectorone-hot就是[0,1],[1,0]这样子来表示属于哪一类(葫芦娃的头or葫芦娃的葫芦)。此时设计的检测器其实就是YOLO v1思路只是参数不同。 三、YOLO核心思想 YOLO是一种新的目标检测方法。以前的目标检测方法通过重新利用分类器来执行检测。后来使用深度学习算法从R-CNN到Fast R-CNN一直采用的思路是proposal分类 proposal 提供位置信息 分类提供类别信息精度已经很高但是速度还不行。 YOLO提供了另一种更为直接的思路 直接在输出层回归bounding box的位置和bounding box所属的类别(整张图作为网络的输入把 Object Detection 的问题转化成一个 Regression 问题)。 YOLO将目标检测看作回归问题从空间上定位边界框bounding box并预测该框的类别概率。使用单个神经网络在一次评估中直接从完整图像上预测边界框和类别概率。由于整个检测流程仅用一个网络所以可以直接对检测性能进行端到端的优化。
四、YOLO算法系列的演变过程 YOLO算法系列的演变过程YOLO-YOLO9000-YOLOv2-YOLOv3 五、YOLO结构 YOLO整体结构就是三部分组成GoogleNet4个卷积2个FC思路彩用的就是上面YOLO v0的进化思路只是参数不同而已。 六、YOLO流程 通过结构图中我们可以看到输入图片是4448x448输出结构是7x7x30YOLO是很简单直观的图像处理系统整体流程大体分为三步 1、把图像缩放到448X448图片分成7x7个网格(grid cell) 2、在图上运行卷积网络 3、根据模型的置信度对检测结果进行阈值处理
1、原始图片resize到448x448图片分成7x7个网格(grid cell) 原始图片resize到448x448图片分成7x7个网格(grid cell)某个目标物体的中心落在这些网格中的一个当中这个网格就负责预测这个物体。例如狗的中心点就落到这些网格中的红色的框5,2位置那么这个红色的框就负责狗这个物体的检测。 假如我们只检测一个目标狗此时红框5,2这个格子所对应的物体置信度标签为1而那些没有物体中心点落进来的格子对应的物体置信度标签为0。这个设定就好比该网络在一开始就将整个图片上的预测任务进行了分工一共设定7x7个按照方阵列队的检测人员每个人员负责检测一个物体大家的分工界线就是看被检测物体的中心点落在谁负责的格子里。当然是7x7还是9x9参数可以自己修改精度和性能会随之有些变化。
2、在图上运行卷积网络 CNN提取特征和预测卷积部分负责提特征。全链接部分负责预测。 在CNN提取特征后我们得到 feature maps 利用Anchor思想对 feature maps 中每个锚点对应原图中的某个区域都预定义 B 个 boublding box此处为了方便之后全链接部分负责预测每个网格单元都会预测B个边界框和这些框的置信度分数confidence scores。
3、根据模型的置信度对检测结果进行阈值处理 虽然通过CNN提取特征和预测但还是会有很多 boublding box但并不是每个都是我们需要的所以此时需要根据模型的置信度对检测结果进行阈值处理。
4、图示流程及概述 原始图片resize到448x448经过前面卷积网络之后将图片输出成了一个7x7x30的结构。 为了方便理解以图示的方式演示默认7 x 7个单元格这里用3 x 3的单元格图演示。 01、每个网格单元都会预测B个此处让B2边界框和这些框的置信度分数confidence scores 02、进行NMS筛选,筛选概率以及IOU 5、概念详解
单元格(grid cell) 上面第二步是理解YOLO网络的关键。图片输入到YOLO之后只会得到7 x 7 x 30的输出结果。每个网格单元都会预测B个边界框和这些框的置信度分数confidence scores这些置信度分数反映了该模型对那个框内是否包含目标的信心以及它对自己的预测的准确度的估量。 那么网络输出的 7 x 7 x 30 的特征图怎么理解 7x7x30 7x749个像素值理解成49个单元格也可以理解成 49个 1*1*30而每个1*1*30维度包含有类别预测和bbox坐标预测。 单元格需要做的两件事 每个单元格负责预测一个物体的类别并且直接预测物体的概率值 每个单元格预测两个默认bbox位置两个bbox有两个置信度confidence 30 的组成 30 2个 bbox 20个类别信息 1个bbox 4个坐标1个置信度xmin、ymin、xmax、ymax、confidence 2个bbox4 1 4 1 104个位置信息1个置信度 30 4 1 4 1 20个类别信息预测概率结果 注意20代表 20类类别的预测概率结果 2个bounding box共10个值对应 1*1*30维度特征中的前10个。 1个置信度(confidence)代表一个bbox的结果 xmin、ymin相对于对应的网格归一化到0-1之间xmax、ymax即 w,h用图像的width和height归一化到0-1之间 小结7*7*30的维度。每个 1*1*30的维度对应原图7*7个cell中的一个1*1*30中含有类别预测和bbox坐标预测。总得来讲就是让网格负责类别信息bounding box主要负责坐标信息(部分负责类别信息confidence也算类别信息)。 6、网格输出筛选
01 置信度比较02 预测位置大小-回归offset代替直接回归坐标
01、置信度比较 Pascal VOC上评估YOLO使用最终大小S7预测数量B2。 假如人工标记的狗的真实值中心点在 8 的单元格位置真实值信息如下图所示 如果我们以每个网格的中心点为中心每个网格单元都预测 2 个Bouding box则上图中标注的1-12个单元格会有24个Bouding box而这个 24 个 Bouding box 中8 的单元格中心点距离目标的中心点最近所以以 8 为单元格预测的两个 Bouding box 包含了人工标记的目标的中心点此时就用 8 这个单元格的两个 Bouding box 中的一个 Bouding box 负责检测。如下图 那么有两个 Bouding box 我们用哪一个 Bouding box 来负责检测呢此时需要通过置信度大小比较来确定。 根据上面定义的置信度公式 首先 2 个 Bouding box 的4个值位置坐标分别与 GTground turth进行IOU计算哪个结果比较大1x1x30中的概率就是对应的 Bouding box 的概率也由此 Bouding box 负责检测。 例如 Bouding box1 和 Bouding box2 与GT进行IOU计算结果分别是1.2 和0.35则概率就是对应的 Bouding box1 的概率就由 Bouding box2 负责检测。 其次使用 Bouding box1 的概率 和 计算IOU的结果相乘就是置信度分数。 因为每个单元格有两个Bbox上面评估计算是为了设置两个bbox的目标值如果该单元格有物体那么其中一个bbox的位置坐标与GT计算IOU值大的就是1。就由这个Bbox负责预测这个单元格的物体坐标。 下图是网络真实输出的置信度score和我们设置的目标值进行比较如下图对比。 02 预测位置大小-回归offset代替直接回归坐标 每个 bbox 包含5个预测值 (bx,by,bw,bh,bc)不直接回归中心点坐标数值而是回归相对于格点左上角坐标的偏移量 (bx,by) 表示 box 的中心相对于 grid cell 原点的偏移值(原点, 即每个 grid cell 的 top-left 顶点, yolo 将之设置为(0, 0), bottom-right顶点设置为(1, 1), 所以(bx,by) 取值范围一定在(0,1)之内)。 (bw,bh) 为相对于整张图片的宽和高, 即使用图片的宽和高标准化自己, 使之取值范围也在(0, 1)之间。 预测相对于网格单元位置的位置坐标这使得真实值的界限在0到1之间。由于我们限制位置预测从而使网络因此参数化更容易学习更加稳定。 举例理解 如前所述bx、by、bh、bw是相对于正在处理的网格单元计算而言的。下面通过一个例子来说明这一点。以包含汽车的网格为例由于bx、by、bh、bw将仅相对于该网格计算。此网格的y标签将为假设总共只有3个类别分别是行人c1、汽车c2和摩托车c3y(1, bx, by, bh, bw, 0, 1, 0)由于这个网格中有一个对象为汽车所以pc1, c21现在我们看看如何决定bx,by,bw,bh的取值论文中分配给所有网格的坐标如下图所示 bh是边界框的高度与相应单元网格的高度之比如图中假设bh0.9同理bw0.5。所以最后预测的结果应该为y(1, 0.4, 0.3, 0.9, 0.5, 0, 1, 0) 注bx和by将始终介于0和1之间因为中心点始终位于网格内而在边界框的尺寸大于网格尺寸的情况下bh和bw可以大于1。同时关于 yolo 的预测的 bbox 中心坐标是相对于 grid cell 左上角的偏移值, 不是直接预测而是预测偏移值, 但是, 预测的 x, y 可能为负数啊, 这样 (x, y) 就不在该 cell 中了, yolo v2 通过 (sigmoid(x), sigmoid(y)) 来解决这个问题。
7、测试阶段 yolo 预测的不是类的概率而是类的条件概率,即条件为如果这个 cell 中包含物体(条件)那么这个物体是N 类前景中每一类的概率即每个框有20个概率值但是并不会直接使用这个值这个概率可以理解为不属于任何一个bbox而是属于这个单元格所预测的值。 最终: 测试的时候条件类概率和每个框的预测的置信度值相乘得到每个框特定类别的置信度分数这些分数体现了该类出现在框中的概率以及预测框拟合目标的程度。 理解这个乘积即 encode 了预测的 box 属于某一类的概率也有该 box 准确度的信息。得到每个 box 的 class-specific confidence score 以后设置阈值滤掉得分低的 boxes对保留的 boxes 进行 NMS 处理就得到最终的检测结果。 非最大抑制(NMS) 每个Bbox的Class-Specific Confidence Score以后设置阈值滤掉概率的低的bbox对每个类别过滤IoU就得到最终的检测结果