当前位置: 首页 > news >正文

Yolov1--v3目标检测解读

Yolo v1
YOLO把目标检测设计成一个回归问题,使用一个神经网络直接在整张图上预测bounding box和类别概率。因为整个检测的流水线是单独的网络,所以可以端到端地优化。YOLO可以实时处理图像,达到45帧每秒

检测原理

在这里插入图片描述
1.将图像resize到448 * 448作为神经网络的输入。
2.运行神经网络,得到一些bounding box坐标、box中包含物体的置信度和class probabilities。
3.进行非极大值抑制,筛选Boxes。
扩展:
非极大值抑制(Non-maximum suppression,NMS)是一种去除非极大值的算法,常用于计算机视觉中的边缘检测、物体识别等。
算法流程:
给出一张图片和上面许多物体检测的候选框(即每个框可能都代表某种物体),但是这些框很可能有互相重叠的部分,我们要做的就是只保留最优的框。假设有N个框,每个框被分类器计算得到的分数为Si, 1<=i<=N。
a. 建造一个存放待处理候选框的集合H,初始化为包含全部N个框;建造一个存放最优框的集合M,初始化为空集。
b. 将所有集合 H 中的框进行排序,选出分数最高的框 m,从集合 H 移到集合 M
c. 遍历集合 H 中的框,分别与框 m 计算交并比(Interection-over-union,IoU),如果高于某个阈值(一般为0~0.5),则认为此框与 m 重叠,将此框从集合 H 中去除。
d. 回到第1步进行迭代,直到集合 H 为空。集合 M 中的框为我们所需。
需要优化的参数:
IoU 的阈值是一个可优化的参数,一般范围为0~0.5,可以使用交叉验证来选择最优的参数。
示例:
比如人脸识别的一个例子:
在这里插入图片描述
已经识别出了 5 个候选框,但是我们只需要最后保留两个人脸。
首先选出分数最大的框(0.98),然后遍历剩余框,计算 IoU,会发现露丝脸上的两个绿框都和 0.98 的框重叠率很大,都要去除。
然后只剩下杰克脸上两个框,选出最大框(0.81),然后遍历剩余框(只剩下0.67这一个了),发现0.67这个框与 0.81 的 IoU 也很大,去除。
至此所有框处理完毕,算法结果
在这里插入图片描述
•本文中NMS:针对某一类别,选择得分最大的bounding box,然后计算它和其它bounding box的IOU值,如果IOU大于0.5,说明重复率较大,该得分设为0,如果不大于0.5,则不改;这样一轮后,再选择剩下的score里面最大的那个bounding box,然后计算该bounding box和其它bounding box的IOU,重复以上过程直到最后。
•它在整图上进行训练并且直接优化,具有以下三个好处:
1)非常快。把检测问题建模成一个回归问题就无需复杂的pipeline。每秒45帧(更快的版本每秒150帧)。
2)YOLO在预测时可以推理整张图片。也就是说,它能够在训练和预测阶段看到整幅图的信息,即包含类别及其外观的语义信息。这是个滑动窗方法不一样的地方。Fast RCNN会把背景误判为目标因为他不能看到大的场景信息。YOLO的background error比Fast RCNN少了一半。
3)YOLO能够学习到目标更加泛化的特征。当它被应用到新的场景或者输入不寻常的图像时,性能不会下降得很厉害
在这里插入图片描述
首先,把输入图片分为S×S个格子,如果目标的中心落入到一个网格内,则这个网格负责检测该目标。每个网格预测出B个bounding boxes和分数,分数反映了这个box包含一个模型的置信度和这个模型预测的准确性。定义置信度为:
在这里插入图片描述
Pr(Object),当边界框包含目标时,为1,不包含目标时,为0.如果那个网格不包含这个目标,则置信度为0,如果包含,则置信度为预测的box和ground truth之间的IOU。
每个bounding box包含5个预测:x,y,w,h和confidence。(x,y)是box的中心相对于网格的坐标。注意,(x,y)是相对于每个单元格左上角坐标点的偏移值,单位是相对于单元格的大小。而边界框的宽高也是相对于整张图片的宽高的比例,这四个值的大小应该都在0-1之间。
每个网格也预测了C个条件类别概率,Pr(Classi|Object) .一个网格不论有多少个Bboxes,都只预测一组条件类别概率。
公式:在这里插入图片描述
计算每个box的特定类别的分数:该类别出现在这个box内的概率,以及这个box和目标的匹配程度。

网路设计

在这里插入图片描述
网络的初始卷积层从图像中提取特征,而全连接层预测输出概率和坐标。
网络架构受到GoogLeNet图像分类模型的启发。网络有24个卷积层,后面是2个全连接层。只使用1x1降维层,然后跟着3x3的卷积层,而不是GoogLeNet使用的Inception模块。
在ImageNet分类任务上以一半的分辨率(224x224的输入图像)预训练卷积层,然后将分辨率加倍来进行检测。最终输出是7x7x30的预测张量。

训练

首先,在ImageNet1000类竞赛数据集上预训练前20层卷积层,然后,加了随机初始化的4层卷积层和2个全连接层。检测任务需要精细粒度的视觉信息,因此在检测的时候把网络的输入分辨率从224×224变成448×448。
为了防止过拟合,在第一个全连接层后面接了一个 ratio=0.5 的 Dropout 层。
在这里插入图片描述
最后一层预测类别概率和bound ing box的坐标。
在最后一层使用一个线性激活函数,其他层都使用leaky rectified线性激活函数:
在这里插入图片描述

损失函数

在这里插入图片描述
第一项是边界框的中心坐标误差,指的是第i个单元格存在目标,且该网格中的第j个边界框负责预测该目标。 第二项是边界框的宽高误差项。 第三项是包含目标的边界框的置信度误差项。 第四项是不包含边界框的置信度误差项。 最后一项是包含目标的单元格的分类误差项,指的是第i个单元格存在目标。
yolo v2改进
Batch Normalization
去掉了Dropout,在每个卷积层后面加了BN层,模型收敛速度有了很大提升,且不会过拟合。
-效果:mAP提升了2%
High Resolution Classifier
预训练尺寸从224224提高到448448
–效果:mAP提升了4%.
Convolutional With Anchor Boxes
YOLO直接使用卷积网络顶层的全连接层直接预测bounding box的坐标。
YOLOv2中,移除了全连接层并且使用anchor box来预测边界框。
首先,去掉了一个池化层来使得网络卷积层的输出具有更高的分辨率。
其次,调整网络输入为416×416,使得最后的feature map的宽高都为奇数,这样就只会产生一个center cell。原因是:大的物体一般都会占据图像的中心,这样在预测时就可以只使用中心cell,而不用周围的四个cell来预测,提高了效率。使用卷积层降采样,factor为32,这样最终得到(13×13)的输出特征图。
另外,使用anchor box之后,可以解耦类别预测和空间定位,由anchor box同时预测类别和坐标。
Dimension Cluster
由于使用anchor时,需要手动选择box的维度(个数,宽,高),因此设想能否一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就应该更容易学到准确的预测位置。
使用统计学习中的K-means聚类方法,通过对数据集中的ground truth box做聚类,找到ground truth box的统计规律。以聚类个数k为anchor boxs个数,以k个聚类中心box的宽高维度为anchor box的维度。
传统的K-means聚类方法使用的是欧氏距离函数,也就意味着较大的框会比较小的框产生更多的误差,聚类结果可能会偏离。为此,作者采用IOU得分作为评价标准,这样的话,误差就和框的尺度无关了。
–公式:
d(box,centroid)=1−IOU(box,centroid)
未完待续

相关文章:

  • ubuntu16.04系统安装teamview
  • caffe深度模式的组成模块:Blobs,Layers,and Nets
  • caffe安装 Ubuntu16.04 cuda 8.0 cudnn 7.6.4
  • ubuntu16.04安装为知笔记
  • windows下创建unistd.h
  • window下安装python_opencv
  • 海思AI芯片(35xx):验证daknet转caffe的yolov3模型是否正常(yolo层的实现)
  • ubuntu16.04下安装darknet(opencv3.2+cuda8.0)
  • daknet版本yolov3训练报错:Corrupt JPEG data问题
  • ubuntu darknet: ./src/cuda.c:36: check_error: Assertion `0' failed.
  • ubuntu下darknet版本YOLOv3训练时显示无法加载图片cannot load image
  • 海思AI芯片(35xx):yolov3的darknet模型转caffemodel模型
  • 海思AI芯片(35xx):linux下make交叉编译报错
  • window下虚拟机ubuntu与主机window系统复制粘贴文件的问题
  • 海思AI芯片(35xx):板端运行报错
  • php的引用
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • C++11: atomic 头文件
  • Electron入门介绍
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Laravel核心解读--Facades
  • Less 日常用法
  • mongodb--安装和初步使用教程
  • MySQL数据库运维之数据恢复
  • MySQL主从复制读写分离及奇怪的问题
  • node学习系列之简单文件上传
  • Python3爬取英雄联盟英雄皮肤大图
  • tensorflow学习笔记3——MNIST应用篇
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • windows-nginx-https-本地配置
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 将 Measurements 和 Units 应用到物理学
  • 免费小说阅读小程序
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 我有几个粽子,和一个故事
  • 写给高年级小学生看的《Bash 指南》
  • 用jQuery怎么做到前后端分离
  • 再谈express与koa的对比
  • 翻译 | The Principles of OOD 面向对象设计原则
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #define、const、typedef的差别
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #pragma once与条件编译
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (java)关于Thread的挂起和恢复
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (Python) SOAP Web Service (HTTP POST)
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (一) springboot详细介绍
  • (一)认识微服务