YOLO v2推理过程介绍

这大概是在2017年底的时候写的,当时还研究了一下faster rcnn和ssd的推理过程。后来YOLO v3出来了,这个就放在一边没理了。现在发出来凑个篇数。

YOLO (You only look once) 是业界第一个端到端的图像目标检测方法,和Faster RCNN相比,不再需要RPN(region proposal network)来生成候选区域ROIs,因此,检测速度更快,更加可以满足实时检测的要求。YOLO第一版本算法 将一张图片均分为SxS个网格(grid),每个网格对应B个bounding box,但是,对目标概率的检测是基于每个网格进行,而不是基于每个bounding box进行,因此,碰到目标不是落在单个网格中的情况,检测准确性有所下降。YOLO v2 做了很多改进,再次确定了YOLO在图像目标检测领域的重要地位,和SSD(single shot multibox detector) 并列为端到端图像目标检测的两大流派。

YOLO 算法都已由作者基于Darknet 实现并开源 ,本文基于YOLO v2的例子程序,以yolo.cfg 为网络模型,yolo-voc.weights 为模型参数(支持80种分类),dog.jpg 为待检测图像,分析了YOLO v2算法的推理过程。这三个文件的网址是:
https://github.com/pjreddie/darknet/blob/master/cfg/yolo.cfg
https://pjreddie.com/media/files/yolo-voc.weights
https://github.com/pjreddie/darknet/blob/master/data/dog.jpg

  • YOLOv2整体网络结构

上述例子使用的网络模型在推理时候的结构如下所示。


YOLOv2整体网络结构

此网络由32层组成,分别记为layer0到layer31,如上图所示。由于网络模型要求输入的图像是固定大小,因此,待检测的原始图像首先被缩放到608x608,最终进入网络模型的数据尺寸是608x608x3,其中3表示红绿蓝三个通道。经过由卷积层和池化层组成的17个layer后(layer0至layer16),数据尺寸变成了38x38x512,这表示有512个feature map,每个feature map的大小是38x38。而layer25将此数据分别传递给上下两条路径,其中上面路径再经过由卷积层和池化层组成的8个layer后(layer17至layer24),数据尺寸变成了19x19x1024;而下面路径先经过layer26卷积层再进行layer27重排,数据尺寸变成了19x19x256。然后,上下两条路径经过layer28合并为19x19x1280的数据,再经过两个卷积层layer29和layer30,得到数据尺寸为19x19x425,表示有425个feature map,每个feature map大小是19x19。最后的layer31,则根据确定网络模型时候的假设,为输入的19x19x425数据赋予相应的物理意义,再进行整合得到最终检测结果。总之,网络模型非常简洁而且直截了当,主要通过若干卷积和池化层来提取图像特征并生成检测所需数据,最后通过结果整合层来得到最终的目标检测结果。

其中,卷积层,除了包括普通意义卷积层的功能外,还可以包括批归一化(Batch Normalize )和激活函数(activation);池化层都是普通的2x2的max pooling;重排层则是将38x38的feature map中2x2区域的数据,重排成4个19x19的feature map;合并层只做简单的数据归并;结果整合层的功能,除了在网络模型配置文件中指定的region层外,还包括分散在Darknet实现中的代码,从而组成了一个逻辑完整独立的结果整合层。卷积层和结果整合层将在后面详述。

  • 卷积层和批归一化

在Darknet的网络模型配置参数中,卷积层由卷积、批归一化(Batch Normalize)和激活函数(activation)组成,其中,批归一化又包括归一化和缩放平移两个功能,如下图所示。


卷积层

在本网络模型中,除了最后一个卷积层layer30的激活函数是线性函数外,其他卷积层的激活函数都是leaky ,即:return (x>0) ? x : 0.1x。

当机器学习通过样本数据进行有监督的学习时,学到的参数,除了和模型本身相关外,还和样本数据本身的分布有关。所以,假如样本数据的分布不停发生变化,将会使训练非常困难,这种情况就发生在神经网络中的每一个隐含层,因为,每调整一次参数,隐含层的输入数据的分布都会因为前一层网络参数的变化而变化,这被称为Internal Covariate Shift,也是BN(batch normalize)希望解决的问题。个人认为,BN尚未从理论上进行完美的解释,主要是将输入数据归一化到正态分布N(0,1),数学公式如下所示,其中,epsilon可以近似当0看待。另一方面,考虑到这样的归一化可能是错误的,在某些情况下更加不利于参数的学习,BN又加了数据的缩放平移功能,可以将数据还原恢复到归一化之前的输入(即下面公式的反函数),当然,通过训练学习得到的缩放平移参数,也可能会将数据缩放平移到更加合适的另外一种分布。在训练时,针对每个batch的所有数据进行归一化,也就是说,公式中的均值E和方差Var是基于batch数据得到,这也是BN名称中batch的来源;而在推理时,则是根据所有的训练数据进行归一化,也就是说,此时公式中用到的均值和方差,是来自所有样本数据的无偏估计。


BN公式
  • 结果整合层

结果整合层的输入数据尺寸是19x19x425,即425个feature map,每个feature map大小是19x19。这意味着,本网络模型将图片均分为19x19的网格,feature map中的每个坐标的元素对应着一个网格grid,而每个网格又被细化为5个bounding box,后一段会具体解释。

将这些feature map按下图从左到右从上到下的视角来看,每行有85个feature map,是因为每个bounding box对应着4个调整参数、属于背景的可能性、以及属于80种分类的概率可能性,即一共4+1+80=85个数值。而因为每个网格被细化为5个bounding box,所以,图中一共有5行。这就是85x5=425个feature map的物理意义。


425个featuremap的物理意义

任取feature map中的一个元素,不妨假设为图中的圆圈位置,记其坐标为该feature map的第i列第j行(zero-based),那么,对应的bounding box计算公式 如下:

    bx = (i + x0) / w;
    by = (j + x1) / h;
    bw = exp(x2) * biases[2*n]   / w;
    bh = exp(x3) * biases[2*n+1] / h;

其中,bx、by、bw和bh分别对应bounding box中心的坐标和宽高,x0、x1、x2和x3则对应着第0、1、2、3列的feature map在该坐标位置的数值;w、h是feature map的宽高,这里即19;biases数组是模型参数,其数值随网络模型的确定而确定,对应着网络模型文件中的region层的anchors参数;n取值为0到4,对应着行数,因此,上图5行中的每一行都对应着一个不同的bounding box(不同的宽高),所以,bounding box总数达到了19x19x5=1805个,因为一张图片被分成了19x19个网格,而每个网格又被细化为5个bounding box,这也使得检测准确性得到了更多的提高,当然,不可以无限制提高n的值,那会影响检测速度,这是个权衡的结果。

由于上述公式还对bounding box做了规格化处理,最后结果处于[0,1]范围,因此,第0、1列的feature map的数据要先经过LOGISTIC激活函数,将数据映射到[0,1]范围,然后才代入上述公式。而从第4列开始,表示的是这个bounding box属于背景、属于80种不同分类的可能性,那么,所有可能性累加应该是1,所以,这里的概率数据还进行了softmax处理。不过,这里的代码实现,只对80种不同分类的概率值进行softmax处理,而没有包括背景概率,背景概率只是进行了LOGISTIC处理。

最后,结合NMS(non-max suppress)算法,根据属于80个不同分类的可能性概率和bounding box的重叠情况,给出本图像中的目标位置和目标类别。

以上内容是本人业余时间兴趣之作,限于水平,差错难免,仅代表个人观点,和本人任职公司无关。

本文首发于微信公众号:那遁去的一

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

推荐阅读更多精彩内容