首页 > 编程语言 >零基础,快速学YOLO目标检查算法(YOLO—v1,2,3快速学习)

零基础,快速学YOLO目标检查算法(YOLO—v1,2,3快速学习)

时间:2024-07-20 13:00:25浏览次数:11  
标签:卷积 物体 YOLO 网络 v1 V2 特征 快速

一.深度学习经典检测方法

1.two-stage(两阶段):Faster-rcnn Mask-Rcnn系列,先有预选,预选完之后再通过预选得到最终结果。速度通常较慢,但效果不错

2.one-stage(单阶段):YOLO系列,普通回归任务。最核心的优势,速度非常快,适合做实时检测任务,但效果通常情况不会太好

二.指标分析

map指标:综合衡量检测效果。精度:检测到的一个东西跟实际是否吻合。recall:有没有一些没检测到。IOU:(真实值和预测值)交集/并集

precision=tp/(tp+fp)

recall=tp/(tp+fn

tp:在做对的情况下判断成正例.本来是正例,并且预测成了正例

fp:做错的情况下把它判断成了正例。本身是一个负例,错误地判断成正例

fn:错误地把它判断成了负例,本来是一个正例,错误判断成了正例

tn:错误地判断成了正例,本身是一个负例,正确判断成了负例

置信度:比如当前这个框是一个人脸的可能性

三.YOLO-v1

经典的one-stage方法,You Only Look Once 

把检测问题转化为回归问题 比如经典检测问题中,我们需要起始位置,再需要一个长,宽(x,y,w,h),一个CNN搞定(卷积神经网络)

提出两种候选框,那个IOU大就选哪个微调

需要预测Bounding boxes(x,y,w,h) + confidence(置信度,这个点对应的是物体的可能性是多大)

核心思想:

分为s*s的格子,在每一个格子中产生两种候选框,每个格子要预测一个置信度,置信度大于我们所设置的阈值留下。再对留下的格子产生的两种候选框做一个筛选,IOU大的那一个留下,算出xywh,即把这个框算出来了

整体网络架构解读:

首先第一步我们拿到一个输入图像(v1版本中指定输入大小为448*448*3) 

卷积神经网络都有

conv1  conv2  conv3  Fc1  Fc2  x

因为全连接层,所以我们必须限制输入数据的大小

最终的7*7*30   (7*7)表示格子大小,30=5+5+20

5=x1,y1,w1,h1,c1(置信度)            ------第一个框的

5=x2,y2,w2,h2,c2(置信度)            ------第二个框的

20=可能是各种事物的概率(是狗的概率,是汽车的概率,是自行车的概率.......)

计算机凭什么这么去做:我们会指定一个损失函数,在损失函数中我们会告诉它我们希望的值是什么的时候损失函数最小,计算机在做的时候就能逐渐地去猜到你每个值到底要表示什么意思,怎么样去做能迎合你这个损失值,让损失最小

一个算法主要关注两点:网络结构最终输出值你希望得到什么,损失函数该怎么定义 

前景:感兴趣地物体

背景:不感兴趣地物体

所以confidence 得分两种情况讨论,一种情况下预测的是前景的,一种情况下预测的是背景的损失函数主要由三个误差,第一个是位置的误差(位置上的偏移),第二个是置信度(预测前景和背景是不是一个物体的误差),最终的分类误差(这个物体是什么)

NMS(非极大值抑制)

很多框都是重叠的时候,IOU满足一定值的时候,把最大值拿出来,其他的不要了

YOLO-v1问题

1.重合在一起的东西很难进行检测的

2.小物体检测不到

3.多标签不好预测

四.YOLO-v2

YOLO-v2与YOLO-v1可以说整体的一个网络架构和整体的一个基本思想这些是没有变的,只不过说在网络的一些细节,实践的一些小细节这些方面做了一些改进

1.YOLO-V2-Batch Normalization

V2版本舍弃Dropout(在实验网络当中,我们一般情况下在全连接层的时候,经常用到dropout,使得这个网络别太过拟合),卷积后全部加入Batch Normalization(当我们做每一层的时候,我为了使得他最终的结果别跑偏了,每一层都限制限制)

dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。dropout是CNN中防止过拟合提高效果的一个大杀器,但对于其为何有效,却众说纷纭。

网络的每一层的输入都做了归一化,收敛相对更容易

经过Batch Normalization处理后的网络会提升2%的MAP

从现在的角度来看,Batch Normalization已经成网络必备处理

2.YOLO-V2-更大的分辨率

V1训练时用的是224*224,测试时使用448*448(为了使得测试时大物体,小物体能检测好一点)

可能导致模型水土不服,V2训练时额外又进行了10次448*448的微调(不考虑训练时间了)

使用高分辨率分类器后,YOLO-v2的MAP提升了约4%

3.YOLO-V2-网络结构

DarkNet(借鉴了VGG,Restnet),实际输入为416*416

没有FC层(好处:全连接层容易过拟合,,全连接层训练慢(全连接层参数多),因为最终的母的不就是提特征吗),5次降采样(w/2^5,h/2^5),(13*13)

1*1卷积(只改变了特征层个数,没有去改变其他东西)节省了很多参数

优势:1.网络模型全是卷积的,不需要全连接了,省参数也比较快

           2.卷积核小,感受野大

4.YOLO-V2-聚类提取先验框

faster-rcnn系列选择的先验比例都是常规的,但是不一定完全适合数据集

将许多个真实数据中的框使用K-means做出来5类结果 

K-means聚类中的距离 d=1-IOU

5.偏移量计算方法

bbox:中心为(xp,yp);宽和高为(wp,hp),则

x=xp+wp*tx

y=yp+hp*ty

tx=1,则bbox在x轴向右移动wp;tx=-1则将其向左移动wp

这样会导致收敛问题,模型不稳定,尤其时刚开始进行训练的时候

V2中并没有直接使用偏移量,而是选择相对gird cell的偏移量

这样中心点无论如何都不会飘出中间那个格子

6.对感受野的新的认识 

概述来说就是特征图上的点能看到原始图像多大区域(相当于卷积核大小区域(前一个特征图))

很明显,堆叠小的卷积核所需的参数更小一些,并且卷积过程越多,特征提取也会越细致,加入的非线性变换也会随着增多,还不会增大权重参数个数,这就是VGG网络的基本出发点,用小的卷积核来完成体特征提取操作

最后一层感受野太大了,擅长去找一些大物体,小目标可能丢失了,所以可以把前面的特征图拿过来,它的感受野没那么大

 需融合之前的特征

7.YOLO-V2-Multi-Scale

没有全连接层,都是卷积层,所以什么样的输入都能去玩

一定iterations(迭代次数)之后改变输入图片大小

五.YOLO-V3

YOLO-V3相对于YOLO-V2就一点,整体的核心网络架构能不能再进行升级,YOLO-V3不论是速度还是MAP值都比当年其他算法强太多

V3最大的改进就是网络结构,使其更适合小目标检测

特征做的更细致,融入多持续特征图信息来预测不同规格物体

先验框更丰富了,3种scale,每种3个规格,一共9种

softmax改进,预测多标签任务

多scale方法改进与特征融合

 为了能检测到不同大小的物体,设计了3个scale

之前将1.最后一个特征图与2.前面的特征图相融合以检测不同大小的物体可能会导致这两部分相互干扰,作用不好。既然我们的目标是有大,中,小这三种不同的物体,那就术业有专攻。那就让感受野大的预测大目标,感受野中的预测中目标,感受野小的预测小目标

即再感受野大,中,小的特征图上分别产生3中候选框box1,box2,box3 

预测中目标的26会从预测小目标的13上借鉴一些思想

scale经典变换方法

左图将图像分辨率resize,自然可以得到不同大小特征图,但是速度慢 

 

13要给26做一个融合,首先尺度不匹配,上采样,把13*13的特征图变成26*26与自身26*26的特征图融合,同理,26*26的特征图做上采样与本来52*52的特征图融合

残差连接-为了更好的特征 

56层的卷积层效果比20层的还差,为了使得能把好的利用起来,坏的不用,使用残差链接,使得网络提特征效果至少不比原来差

核心网络架构 

没有池化(特征图做压缩反而效果不好)和全连接层,全部卷积(省时省力,效果好)

下采样通过stride为2实现

3种scale,更多先验框

基本当下经典做法全融入了

 

YOLO-V2聚类提取5个先验框,而 YOLO-V3聚类提取9个先验框

且把大的先验框交给 13*13的,其他同理

softmax层替代

物体检测可能一个物体有多个标签

logistic激活函数来完成,这样就能预测每一个类别是/不是

标签:卷积,物体,YOLO,网络,v1,V2,特征,快速
From: https://blog.csdn.net/2301_80355452/article/details/140469067

相关文章

  • [深度学习]基于yolov10+streamlit目标检测演示系统设计
    YOLOv10结合Streamlit构建的目标检测系统,不仅极大地增强了实时目标识别的能力,还通过其直观的用户界面实现了对图片、视频乃至摄像头输入的无缝支持。该系统利用YOLOv10的高效检测算法,能够快速准确地识别图像中的多个对象,并标注其边界框和类别。用户无需深入了解复杂的后端处理......
  • Java NIO 快速入门:Java 非阻塞 IO 编程详解
    一、NIO简介1.概述介绍:JavaNIO(NewInput/Output)是从Java1.4开始引入的一组新的IO库,旨在替代传统的阻塞式IO。NIO提供了更高效的IO操作,支持非阻塞模式和多路复用,适用于高并发场景。概述:NIO中通过Buffer作为缓存区,Channel作为数据通道来传输数据进行数据通讯,通过S......
  • 快速排序quicksort
    #include<iostream>usingnamespacestd;intpartition(inta[],intlow,inthigh){ intpivot=a[low]; while(low<high) { while(low<high&&a[high]>=pivot)//先从high开始 high--; a[low]=a[high]; while(low<high......
  • 【YOLOv5/v7改进系列】引入SAConv——即插即用的卷积块
    一、导言《DetectoRS:使用递归特征金字塔和可切换空洞卷积进行物体检测》这篇文章提出了一种用于物体检测的新方法,结合了递归特征金字塔(RecursiveFeaturePyramid,RFP)和可切换空洞卷积(SwitchableAtrousConvolution,SAC)。以下是对该研究的优缺点分析:优点:机制灵感来源于人......
  • python实现快速幂
    若需要计算a^b,如果使用循环来计算显然效率是很低的以下有三种方法实现快速幂方法一,python自带函数pow(a,b,mod),其中a为底数,b为指数,mod是对该数取模,mod参数有时候可以不传a=pow(5,9)方法二,利用递归实现快速幂,该方法需要注意分类讨论,考虑到指数为0,指数为1以及指数是奇数的情......
  • 从零开始部署yolov8到安卓手机详细教程 ——使用YOLOV8大模型开发的物体检测Android手
    1.使用了yolov8大模型来进行物体检测android手机APP⒉.使用了coco数据集进行训练,app可以检测出“人类"∵"自行车"."汽车"∵"摩托车"."飞机","公共汽车"∵"火车","卡车"∵."船","红绿灯","消防栓","停车标志"∵,"停车收费表&......
  • YOLOv10有效涨点专栏目录 | 包含卷积、主干、检测头、注意力机制、Neck、二次创新、独
     ......
  • PHP 快速入门:构建动态网站的基础
    引言PHP,全称HypertextPreprocessor,是一种广泛用于创建动态网站的服务器端脚本语言。它易于学习,功能强大,能够与多种数据库系统(如MySQL)集成,是Web开发者的常用工具之一。本文将带你快速了解PHP的基本概念和用法。基础语法输出PHP中没有专门的输入语句,但可以通过多种......
  • YOLOV8自定义数据集训练过程中遇到的问题
    书接上回,在弄好了Labelimg了以后,便开始了图像的标注。按照官网推荐的格式,建好文件夹。文件夹格式:dataset下为train和val两个文件夹,两个文件夹中的内容均为images和labels。images里放的就是图像了,labels为标注的数据。接下里就是创建自己的yaml文件,文件的内容指定数据集的根......
  • docker-compose教程(安装,使用, 快速入门)
    docker-compose教程(安装,使用,快速入门)一、docker-compose介绍DockerCompose是一个用来定义和运行多个复杂应用的Docker编排工具。例如,一个使用Docker容器的微服务项目,通常由多个容器应用组成。那么部署时如何快速启动各个微服务呢,一个个手动启动?假如有上百个微服务呢,显然不现......