Yolov1

贴两个yolov1写的比较好的链接:

目标检测|YOLO原理与实现:https://zhuanlan.zhihu.com/p/32525231

你一定从未看过如此通俗易懂的YOLO系列(从v1到v5)模型解读:https://zhuanlan.zhihu.com/p/183261974

1 传统的目标检测

在Yolo之前我们使用分类器的思想检测目标,分类的结果是one-hot向量,而目标检测的结果是一个框(Bounding Box),目标检测输出vector和分类模型输出的vector本质上没有区别,目标检测就是利用滑动窗口多次执行分类任务,所以我们可以使用滑动窗口+分类执行目标检测任务,这就是传统的目标检测。但是有一个问题,如果一张400*400的图片,则需要检测160000个位置,而每个目标的大小不同,我们又需要设置不同大小的遍历框,这个遍历的次数会是无限次

2 Yolov0

到现在为止,我们用分类的算法设计了一个检测器,它存在着各种各样的问题,现在是优化的时候了。YOLO的作者当时是这么想的:你分类器输出一个one-hot vector,那我把它换成(c,x,y,w,h),c表示confidence置信度,把问题转化成一个回归问题,直接回归出Bounding Box的位置不就好了吗?

传统的方法为什么没有这么做呢?我想肯定是效果不好,终其原因是算力不行,conv操作还没有推广。


那如何组织训练呢?找1000张图片,把label设置为(1,x*,y*,w*,h*) ,x*代表真值。有了数据和标签,就完成了设计。我们会发现,这种方法比刚才的滑动窗口分类方法简单太多了。这一版的思路我把它叫做YOLO v0,因为它是You Only Look Once最简单的版本。

3 Yolov1简介

yolov0只能输出一个目标,那如果多目标应该怎么办呢,有人可能会提出让yolov0输出多个向量,但具体输出多少呢?我们可以使输入目标数目N尽量的大,但这不是最优的,yolov1就提出了把图片切分成7*7的网格(grid),每个网格生成B个框负责预测一个目标。但是如果一个目标占据多个网格应该设置哪个网格的c为1呢(一个目标仅有一个网格的c为1)?答:我们看这个目标的中心落在哪个网格就设置该网格的c为1。


图1 Yolov1

4 Yolov1原理

Yolo采用卷积网络来提取特征,然后使用全连接层来得到预测值。网络结构参考GooLeNet模型,包含24个卷积层和2个全连接层,如图8所示。对于卷积层,主要使用1x1卷积来做channle reduction,然后紧跟3x3卷积。对于卷积层和全连接层,采用Leaky ReLU激活函数: max(x,0.1x) 。但是最后一层却采用线性激活函数。网络的最后输出为7*7*30大小的张量。

图2 网络结构

对于每一个单元格,前20个元素是类别概率值,然后2个元素是边界框置信度,两者相乘可以得到类别置信度,最后8个元素是两个边界框的box

整体来看,Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测,整个系统如图3(预测阶段)所示:首先将输入图片resize到448x448,然后送入CNN网络,最后处理网络预测结果得到检测的目标。相比R-CNN算法,其是一个统一的框架,其速度更快,而且Yolo的训练过程也是end-to-end的。

图3  Yolo检测系统

具体来说,Yolo的CNN网络将输入的图片分割成S*S网格,然后每个单元格负责去检测那些中心点落在该格子内的目标,如图4所示,可以看到狗这个目标的中心落在左下角一个单元格内,那么该单元格负责预测这个狗。每个单元格会预测B个边界框(bounding box)以及边界框的置信度(confidence score)。所谓置信度其实包含两个方面,一是这个边界框含有目标的可能性大小,二是这个边界框的准确度。前者记为Pr(Object),当该边界框是背景时(即不包含目标),此时Pr(Object)=0,而当该边界框包含目标时,Pr(Object)=1边界框的准确度可以用预测框与实际框(ground truth)的IOU(intersection over union,交并比)来表征,记为IOU_{pred}^{true},因此置信度可以定义为Pr(Object)*IOU_{pred}^{true}。还有一点要注意,中心坐标的预测值(x,y)是相对于每个单元格左上角坐标点的偏移值,并且单位是相对于单元格大小的,单元格的坐标定义如图6所示。而边界框的wh预测值是相对于整个图片的宽与高的比例,这样理论上4个元素的大小应该在[0,1]范围。这样,每个边界框的预测值实际上包含5个元素:(x,y,w,h,c),其中前4个表征边界框的大小与位置,而最后一个值是置信度。

图4 网格划分

还有分类问题,对于每一个单元格其还要给出预测出C个类别概率值,其表征的是由该单元格负责预测的边界框其目标属于各个类别的概率。但是这些概率值其实是在各个边界框置信度下的条件概率,即 

Pr(class_{i} |object) 。值得注意的是,不管一个单元格预测多少个边界框,其只预测一组类别概率值,这是Yolo算法的一个缺点,在后来的改进版本中,Yolo9000是把类别概率预测值与边界框是绑定在一起的。同时,我们可以计算出各个边界框类别置信度(class-specific confidence scores):

Pr(class_{i} |object)*Pr(Object)*IOU_{pred}^{true}=Pr(class_{i})*IOU_{pred}^{true}

边界框类别置信度表征的是该边界框中目标属于各个类别的可能性大小以及边界框匹配目标的好坏。后面会说,一般会根据类别置信度来过滤网络的预测框。总结一下,每个单元格需要预测(B*5+C)个值。如果将输入图片划分为S*S网格,那么最终预测值为S*S*(B*5+C)大小的张量。整个模型的预测值结构如下图所示。对于PASCAL VOC数据,其共有20个类别,如果使用S=7,B=2,那么最终的预测结果就是7*7*30大小的张量。在下面的网络结构中我们会详细讲述每个单元格的预测值的分布位置。

图5 模型预测值结构

如何生成目标lables?

答:遍历每个网格,在每个网格中遍历每个标记框,如果有标记框的中心点落在该网格中,设置该网格为(1,x,y,w,h),xy为标记框的中心点相对于当前网格的偏移量。如果多个标记框落入一个网格,则后一个标记框的box的覆盖前一个标记框的box。

5 Yolov1训练

yolo的训练与预测是分开进行的,yolov1训练时候,首先利用模型对每个网格预测2个回归框的坐标、置信度和类别,然后要找出目标框的坐标、置信度、类别(具体做法是:遍历7*7个网格,每次遍历中再去遍历每个标记框,若该标记框的中心落在该网格中,再去该网格中找一个预测出的回归框与该标记框IOU最大的那个位置(第i个网格第j个预测框),将该位置对应的目标框的置信度设为1(即1_{ij}^{obj} =1)并将标记框的坐标赋给目标框,即说明该目标框负责预测物体,而其他的目标框置信度默认为0,坐标值也不用回归),最后利用loss函数做梯度下降,使预测出的值更准确。最终的损失函数计算如下:

图6 Yolov1 loss函数

6 Yolov1预测

yolov1预测时候,使用NMS找到最优的识别框。首先从所有的检测框中找到置信度最大的那个框,然后挨个计算其与剩余框的IOU,如果其值大于一定阈值(重合度过高),那么就将该框剔除;然后对剩余的检测框重复上述过程,直到处理完所有的检测框。

图7 NMS应用在人脸检测

yolov1具体预测如图8:对于98个boxes,首先将小于置信度阈值的值归0,然后分类别地对置信度值采用NMS,这里NMS处理结果不是剔除,而是将其置信度值归为0。最后才是确定各个box的类别,当其置信度值不为0时才做出检测结果输出。

图8 yolov1预测
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容