首页 > 编程知识 正文

yolo算法,yolo算法用的什么框架

时间:2023-05-05 16:29:07 阅读:186267 作者:1792

一、YOLOv1:

YOLOv1构建了yolo系列算法“分而治之”的基调。 在YOLOv1中,输入图像如下图所示被分割为77的网络。

网格只是为了物体中心点位置的划分并不是对图片进行切片不使网格脱离整体关系。

YOLOv1的结构图:

预测框的位置、大小和物体分类都通过CNN暴力predict出来。

输出为7x7x30的wndgz,7x7表示将输入图像分割为7x7的网格,各小单位的其他维度等于30。 30=(2*520 )。代表能预测2个框的5个参数(x,y,w,h,score)和20个种类

可见输出wndgz的深度影响yolo_v1可检测目标类型。 v1的输出深度只有30,意味着每个单元只能预测2个框(而且只能识别20种物体),这对于密集型目标检测和小物体检测都不能很好适用。

yolo是一种端到端的训练,对预测框的位置、size、种类、置信度(score )等信息的预测都是在一个损失函数中训练的。

二、yolov2:

v2在v1上的提升:

1.batch normalization:BN给模型的收敛带来了明显的提高,同时也消除了其他形式的正则化的需要。 作者在每层卷积层后加入BN后,用mAP上升2%。 BN对规范化模型也很有帮助。 有了BN,就可以消除在dropout中避免模型过拟合的操作。 BN层的加入直接超过了mAP个百分点,但这一操作在yolo_v3上仍然悬而未决,BN层成为v2到yolo算法的标配。

在33558www.Sina.com/yolo_v2的优化尝试中引入了anchor机制。 作者2.Convolutional With Anchor Boxes:首先,作者去除了池化层以保证卷积输出的分辨率较高。 作者把448X448的图像缩小到416的大小。 作者想定为http://www.Sina.com/(416/32=13,13为奇数),这样就变成了3358 www.Sina.com/(centercell )。 因为物体(特别是大的物体)多占据图像的中心,所以正好位于中心位置的单独位置可以很好地预测物体。 如果在YOLO卷积层对这些图像进行下采样,则输出feature map为13x13,因为32 (即2525 )是采样因子(416/32=13 )。

去除了YOLO的全连接层,使用anchor框来预测bounding box作者对yolo使用anchor机制时遇到了两个问题。 1、模板框(prior )的大小是手动选择的(指anchor prior的大小最初是手动设定的,在Faster R-CNN中k=9,大小共有3x3种)。 盒的规格可以在后期通过线性回归进行调整,但是如果从一开始就选择更合适的prior (模板盒),可以使网络学习变得更轻松。 作者没有手动设置prior,而是在训练集的b-box中使用k均值聚类自动找到prior。

在33558www.Sina.com/yolo中使用anchor boxes机制时遇到了第二个问题。 模型不稳定。 特别是初期反复的时候。 不稳定的因素主要来自预测box的(x,y )位置时。

此公式为输出特征图的维度是奇数,因此任何anchor box都可以偏移到图像中的任意位置。 要随机初始化模型,需要一个中间单元格,这样可以稳定地生成可靠偏移。

3.Dimension Clusters:

我们没有“预测偏移量”,而是遵循了YOLO的方法。4.Direct location prediction:

直接预测(x,y )与yolo_v1的方法类似,只是如上图所示,v2是预测相对位置的相对单元左上角的坐标。 当(x,y )被直接预测时,其整个bounding box还需要确定w和h是不够的。 yolo_v2的方法既有保守又有激进,x和y直接用暴力预测,但w和h是通过bounding box prior的调整来确定的。

从上面的公式可以看出,b-box的宽度和高度也同时决定,不像RPN那样由regression决定。 pw和ph都是k均值聚类后prior (模板盒)的宽度和高度,yolo直接预测了偏移量tw和th,相当于直接预测了bounding box的宽度和高度。 使用没有加以限制条件的操作,使模型上升了5个百分点。

**5.mult

i-scale training:**用多种分辨率的输入图片进行训练。

**6.Fine-Grained Features:**调整后的yolo将在13x13的特征图上做检测任务。虽然这对大物体检测来说用不着这么细粒度的特征图,但这对小物体检测十分有帮助。Fast R-CNN和SSD都是在各种特征图上做推荐网络以得到一个范围内的分辨率。我们采用不同的方法,只添加了一个passthrough层,从26x26的分辨率得到特征。

darknet-19:

评估:

召回率(Recall)= 系统检索到的相关文件 / 系统所有相关的文件总数
准确率(Precision)= 系统检索到的相关文件 / 系统所有检索到的文件总数
MAP:全称mean average precision(平均准确率)
假设有两个主题,主题1有4个相关网页,主题2有5个相关网页。某系统对于主题1检索出4个相关网页,其rank分别为1, 2, 4, 7;对于主题2检索出3个相关网页,其rank分别为1,3,5。对于主题1,平均准确率为(1/1+2/2+3/4+4/7)/4=0.83。对于主题 2,平均准确率为(1/1+2/3+3/5+0+0)/5=0.45。则MAP=(0.83+0.45)/2=0.64

三、YOLOv3:

darknet-53:

结构图:

各个模块:
DBL: 如图1左下角所示,也就是代码中的Darknetconv2d_BN_Leaky,是yolo_v3的基本组件。就是卷积+BN+Leaky relu。对于v3来说,BN和leaky relu已经是和卷积层不可分离的部分了(最后一层卷积除外),共同构成了最小组件。
resn:n代表数字,有res1,res2, … ,res8等等,表示这个res_block里含有多少个res_unit。这是yolo_v3的大组件,yolo_v3开始借鉴了ResNet的残差结构,使用这种结构可以让网络结构更深(从v2的darknet-19上升到v3的darknet-53,前者没有残差结构)。对于res_block的解释,可以在图1的右下角直观看到,其基本组件也是DBL。
concat:wndgz拼接。将darknet中间层和后面的某一层的上采样进行拼接。拼接的操作和残差层add的操作是不一样的,拼接会扩充wndgz的维度,而add只是直接相加不会导致wndgz维度的改变。

输出:
这个借鉴了FPN(feature pyramid networks),采用多尺度来对不同size的目标进行检测,越精细的grid cell就可以检测出越精细的物体。

y1,y2和y3的深度都是255,边长的规律是13:26:52
yolo v3设定的是每个网格单元预测3个box,所以每个box需要有(x, y, w, h, confidence)五个基本参数,然后还要有80个类别的概率。所以3*(5 + 80) = 255。

补充
Bounding Box Prediction

b-box预测手段是v3论文中提到的又一个亮点。先回忆一下v2的b-box预测:想借鉴faster R-CNN RPN中的anchor机制,但不屑于手动设定anchor prior(模板框),于是用维度聚类的方法来确定anchor box prior(模板框),最后发现聚类之后确定的prior在k=5也能够又不错的表现,于是就选用k=5。后来呢,v2又嫌弃anchor机制线性回归的不稳定性(因为回归的offset可以使box偏移到图片的任何地方),所以v2最后选用了自己的方法:直接预测相对位置。预测出b-box中心点相对于网格单元左上角的相对坐标。

v2相当直接predict出了b-box的位置大小和confidence。box宽和高的预测是受prior影响的,对于v2而言,b-box prior数为5,在论文中并没有说明抛弃anchor机制之后是否抛弃了聚类得到的prior,如果prior数继续为5,那么v2需要对不同prior预测出 。

对于v3而言,在prior这里的处理有明确解释:选用的b-box priors 的k=9,对于tiny-yolo的话,k=6。priors都是在数据集上聚类得来的,有确定的数值,如下:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。