YOLO v2和V3 关于设置生成anchorbox,Boundingbox边框回归的个人理解

news/2024/5/20 8:34:07 标签: 深度学习, 人工智能, 聚类, cv, 计算机视觉

虽然阅读量不是很多,但是没想到居然能得到这么多收藏和赞,大家提出的问题,我会不断更新,尽量把过程解释得让大家都能了解清楚。

PS:这篇文章是自己学习纪录下的笔记,主要是通过阅读paddle复现的yolov3源码,其中代码注释和图例非常详细。

https://www.paddlepaddle.org.cn/tutorials/projectdetail/356456#anchor-21

不对的地方还请指正!!感谢

网上有很多优秀博客,介绍了yolov2的设计思想以及实现过程。绝大部分我都翻阅了一遍,也看了论文,找了视频看了。

这篇文章只说明anchorbox 和boundingbox之间的关系,想学习YOLOv2和v3整体的过程可参考这个:https://zhuanlan.zhihu.com/p/47575929

https://www.jianshu.com/p/d13ae1055302

正文:

前言:

首先看了 yolov1 过程都比较直接,直接对框位置进行回归,选择最大IOU,还算好理解。随后我看了yolov2的博客和论文,卡在了聚类生成anchorbox,框回归得到偏移值t后,如何确定位置这里。

我一直以为是类似RCNN中,先对每一个anchor点周围生成9种anchorbox,再框回归得到偏移量去调整框的位置得到boundingbox,最后利用BBox和GT的IOU去筛选框。深受这种思想的影响,所以我带着这种主观意识去看YOLO真的看得我头昏脑大。

 

先上论文的图:

 

yolo v2 借鉴了RPN的技巧,但是是略有不同的。

Anchor box:上图的黑色虚线框,Pw和Ph代表它的长宽,

问题1:anchor box的中心点在哪?

BoundingBox:上图蓝色框,通过回归得到偏移值后,以anchor box为基准进行尺度缩放变换后的框,bw和bh是根据anchor box的pw和ph来变化的。

问题2:Boundingbox 的值是如何变化的呢?

我觉得上面这个图有点误导人,这个是框回归产生偏移之后的结果。因为 anchor box作为参考基准,它的整体位置和中心点应该是不变的,但是图里面居然也随着变动了位置,具体原因见下面的分析。

分析与解释:

yolo通过聚类得到的9种先验框 [又称:锚框(anchorbox)] 的高宽(是一个固定值 参考上图设为:Pw,Ph),(网上有些博客把anchorBox和boudingBox混淆了,让我以为anchorbox是每一次都在变化调整的,搞晕了),只是用几个固定的宽高比例来描述anchorbox的尺寸信息的,所以论文中聚类得到的是5种box的高宽,不需要中心坐标!那么"中心坐标"在哪呢? 回忆,我们在yolo中是将图片划分成N*N的块,每一块都是原图片的一小块(如上图的红色小块),而anchorbox的这个所谓的中心点其实可以看作是每一块的左上角坐标,如上图的箭头所指点C,其中Cx和Cy是C点的坐标,这里先假设tx,ty,tw,th是网络输出的预测值,代表坐标的偏移值(图上的σ定义为sigmoid激活函数(将函数值约束到[0,1]),就可以使得偏移后的C点也就是中心点落在红色这一块中)按上图公式进行计算σ(t)+C就是以C点为基准进行σ(t) (取值0-1)不超过一个框大小的偏移。而计算bw和bh就是唯一用到'anchorbox'的地方,只用到了‘anchorbox’的宽高(Pw和Ph)。exp(tw),exp(th)代表着缩放比例,将exp(tw),exp(th) 和(Pw,Ph)相乘后得到缩放后的长宽(参考上图),最后得到的这个(bx,by,bw,bh)就是描述的BoundingBox(预测框)的信息。

那么如何去描述他们的损失呢? 

首先,yolo按照上面同样的方式先用GroundTruth(真实框)和anchorbox(先验框,锚框)反向算出偏移和缩放比,设为dx,dy,dh,dw,这个即标签label

然后网络输出的BoundingBox(预测框)是tx,ty,th,tw四个值(代表相较于anchorbox(先验框,锚框)的偏移和缩放比),这个是网络输出预测值predict

我们的目标是通过网络不断学习得到的(tx,ty,tw,th)这四个值,然后用这四个值去微调(平移,缩放)anchorbox(先验框,锚框)得到BoundingBox(预测框),使得BoundingBox不断接近GroundTruth(真实框),也就是(tx,ty,tw,th)不断的接近(dx,dy,dh,dw),梯度下降的目标也就是缩小这两者的LOSS,这就是yolov2中的回归方法。 (具体YOLO损失函数可以网上搜索)

图片来源:https://zhuanlan.zhihu.com/p/77051828

 

 

 

 

 

 


http://www.niftyadmin.cn/n/811297.html

相关文章

一道发散思维题,有1000个一模一样的瓶子,其中有999瓶是普通的水,有一瓶是毒........

题目:有1000个一模一样的瓶子,其中有999瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有10只小白鼠和一星期的时间,如何检验出那个瓶子里有毒药? 最近在知乎上看到很火的…

实践-汇总大量EXCEL-Pandas

实践-汇总大量EXCEL-Pandas1.背景介绍2.手动复制到excel2.1 处理统计表2.2 处理作业表2.3 处理签到表2.4 期中,期末成绩表2.5 汇总-总成绩3.使用PythonPandas处理excel文件3.1 Pandas-读取excel3.1.1 读取总表3.1.2 读取作业表,签到表3.1.3 读取期中,期末…

使用padlle hub进行BERT Fine-Tune 中文-文本分类/蕴含 下游任务

使用padlle hub进行BERT Fine-Tune 中文-文本分类/蕴含 下游任务写在前面1.相关技术PaddleHub:预训练模型:Bert_chinese_L-12_H-768_A-12Bert下游任务2.使用步骤-以文本蕴含为例环境准备数据处理数据集解压数据集数据集展示处理数据集自定义Hub数据集PaddleHub分类数…

浪潮服务器NF5280m5 配置,raid和系统 安装纪录

遇到的问题:新到了一台服务器浪潮服务器NF5280m5 。用u盘装ubantu系统,一开始就找不到硬盘,对于服务器0概念的新手来说太难弄了,折腾了很久最后问客服解决了问题。 服务器情况: 2张机械硬盘,一张固态 总结…

关于SRL(semantic role label;Semantic Role Labeling)语义角色标注标签的含义

各个标签的意义如下: 具体的srl介绍参考这个:https://zhuanlan.zhihu.com/p/35789254 我通过Allennlp的SRL工具生成的角色标注的例子如下: 原句:‘Everyone really likes the newest benefits’ {‘verbs’: [{‘verb’: ‘lik…

linux screen窗口 jupyter notebook 激活环境后无法切换到指定虚拟环境

linux 使用screen窗口 jupyter notebook 激活环境后无法切换到指定虚拟环境,始终是Base 使用screen 命令新开窗口,使用source activate激活环境发现notebook中的包位置始终对应的Base环境下的包。无论如何切换都没用。 问题源头: 在新建或者进入scree…

spacy 用已经token化,分词的list 列表作为输入

2022/1/11更新 针对新版3.0处理 import spacy nlp spacy.load(en_core_web_sm) from spacy.tokens import Doc doc Doc(nlp.vocab, words[Conceptually, cream, skimming, has, two, basic, dimensions, -, product, and, geography, .]) # Tagger(doc) for name,tool in n…

python 字典转对象 dict to obj

借助python的方法:setattr(obj, name, value, /) 给obj对象设置name属性其值为value。 Signature: setattr(obj, name, value, /) Docstring: Sets the named attribute on the given object to the specified value.setattr(x, y, v) is equivalent to x.y v Typ…