STEP-7:Pytorch-目标检测和边界框

感谢伯禹学习平台,本次学习将记录记录如何使用Pytorch高效实现网络,熟练掌握Pytorch的基础知识。记录不包含理论知识的细节展开。

这部分比较特殊,主要讲解了目标检测中框的设定,不涉及主流的目标检测网络。主要使梳理其中的锚框。由于刚好最近导师项目需要,梳理该部分的基础知识。主要使概念理解,不涉及代码部分,以下内容参考以下链接。
学习代码可以参考

一:锚框生成

    假设输入图像高为 h,宽为w。我们分别以图像的每个像素为中心生成不同形状的锚框。设大小为s\in (0,1]且宽高比为r > 0,那么锚框的宽和高将分别为ws\sqrt{r}hs/\sqrt{r}。当中心位置给定时,已知宽和高的锚框是确定的。

    下面我们分别设定好一组大小s_1,\ldots,s_n和一组宽高比r_1,\ldots,r_m。如果以每个像素为中心时使用所有的大小与宽高比的组合,输入图像将一共得到whnm个锚框。虽然这些锚框可能覆盖了所有的真实边界框,但计算复杂度容易过高。因此,我们通常只对包含s_1r_1的大小与宽高比的组合感兴趣,即

(s_1, r_1), (s_1, r_2), \ldots, (s_1, r_m), (s_2, r_1), (s_3, r_1), \ldots, (s_n, r_1).

    也就是说,以相同像素为中心的锚框的数量为n+m-1。对于整个输入图像,我们将一共生成wh(n+m-1)个锚框。
    这里需要注意的是,其实不同的方法使用的生成锚框的方法不同,具体实现细节可以参考论文。

二:交并比(IoU)

我们刚刚提到某个锚框较好地覆盖了图像中的狗。如果该目标的真实边界框已知,这里的“较好”该如何量化呢?一种直观的方法是衡量锚框和真实边界框之间的相似度。我们知道,Jaccard系数(Jaccard index)可以衡量两个集合的相似度。给定集合\mathcal{A}\mathcal{B},它们的Jaccard系数即二者交集大小除以二者并集大小:

J(\mathcal{A},\mathcal{B}) = \frac{\left|\mathcal{A} \cap \mathcal{B}\right|}{\left| \mathcal{A} \cup \mathcal{B}\right|}.

实际上,我们可以把边界框内的像素区域看成是像素的集合。如此一来,我们可以用两个边界框的像素集合的Jaccard系数衡量这两个边界框的相似度。当衡量两个边界框的相似度时,我们通常将Jaccard系数称为交并比(Intersection over Union,IoU),即两个边界框相交面积与相并面积之比,如图所示。交并比的取值范围在0和1之间:0表示两个边界框无重合像素,1表示两个边界框相等。

IoU计算图示

三:标注训练集的锚框

在训练集中,我们将每个锚框视为一个训练样本。为了训练目标检测模型,我们需要为每个锚框标注两类标签:一是锚框所含目标的类别,简称类别;二是真实边界框相对锚框的偏移量,简称偏移量(offset)。在目标检测时,我们首先生成多个锚框,然后为每个锚框预测类别以及偏移量,接着根据预测的偏移量调整锚框位置从而得到预测边界框,最后筛选需要输出的预测边界框。

我们知道,在目标检测的训练集中,每个图像已标注了真实边界框的位置以及所含目标的类别。在生成锚框之后,我们主要依据与锚框相似的真实边界框的位置和类别信息为锚框标注。那么,该如何为锚框分配与其相似的真实边界框呢?

假设图像中锚框分别为A_1, A_2, \ldots, A_{n_a},真实边界框分别为B_1, B_2, \ldots, B_{n_b},且n_a \geq n_b。定义矩阵\boldsymbol{X} \in \mathbb{R}^{n_a \times n_b},其中第i行第j列的元素x_{ij}为锚框A_i与真实边界框B_j的交并比。
首先,我们找出矩阵\boldsymbol{X}中最大元素,并将该元素的行索引与列索引分别记为i_1,j_1。我们为锚框A_{i_1}分配真实边界框B_{j_1}。显然,锚框A_{i_1}和真实边界框B_{j_1}在所有的“锚框—真实边界框”的配对中相似度最高。接下来,将矩阵\boldsymbol{X}中第i_1行和第j_1列上的所有元素丢弃。找出矩阵\boldsymbol{X}中剩余的最大元素,并将该元素的行索引与列索引分别记为i_2,j_2。我们为锚框A_{i_2}分配真实边界框B_{j_2},再将矩阵\boldsymbol{X}中第i_2行和第j_2列上的所有元素丢弃。此时矩阵\boldsymbol{X}中已有两行两列的元素被丢弃。
依此类推,直到矩阵\boldsymbol{X}中所有n_b列元素全部被丢弃。这个时候,我们已为n_b个锚框各分配了一个真实边界框。
接下来,我们只遍历剩余的n_a - n_b个锚框:给定其中的锚框A_i,根据矩阵\boldsymbol{X}的第i行找到与A_i交并比最大的真实边界框B_j,且只有当该交并比大于预先设定的阈值时,才为锚框A_i分配真实边界框B_j

如下图所示,假设矩阵\boldsymbol{X}中最大值为x_{23},我们将为锚框A_2分配真实边界框B_3。然后,丢弃矩阵中第2行和第3列的所有元素,找出剩余阴影部分的最大元素x_{71},为锚框A_7分配真实边界框B_1。接着如图(中)所示,丢弃矩阵中第7行和第1列的所有元素,找出剩余阴影部分的最大元素x_{54},为锚框A_5分配真实边界框B_4。最后如图(右)所示,丢弃矩阵中第5行和第4列的所有元素,找出剩余阴影部分的最大元素x_{92},为锚框A_9分配真实边界框B_2。之后,我们只需遍历除去A_2, A_5, A_7, A_9的剩余锚框,并根据阈值判断是否为剩余锚框分配真实边界框。

image

现在我们可以标注锚框的类别和偏移量了。如果一个锚框A被分配了真实边界框B,将锚框A的类别设为B的类别,并根据BA的中心坐标的相对位置以及两个框的相对大小为锚框A标注偏移量。由于数据集中各个框的位置和大小各异,因此这些相对位置和相对大小通常需要一些特殊变换,才能使偏移量的分布更均匀从而更容易拟合。设锚框A及其被分配的真实边界框B的中心坐标分别为(x_a, y_a)(x_b, y_b)AB的宽分别为w_aw_b,高分别为h_ah_b,一个常用的技巧是将A的偏移量标注为

\left( \frac{ \frac{x_b - x_a}{w_a} - \mu_x }{\sigma_x}, \frac{ \frac{y_b - y_a}{h_a} - \mu_y }{\sigma_y}, \frac{ \log \frac{w_b}{w_a} - \mu_w }{\sigma_w}, \frac{ \log \frac{h_b}{h_a} - \mu_h }{\sigma_h}\right),

其中常数的默认值为\mu_x = \mu_y = \mu_w = \mu_h = 0, \sigma_x=\sigma_y=0.1, \sigma_w=\sigma_h=0.2。如果一个锚框没有被分配真实边界框,我们只需将该锚框的类别设为背景。类别为背景的锚框通常被称为负类锚框,其余则被称为正类锚框。

三:预测锚框

在模型预测阶段,我们先为图像生成多个锚框,并为这些锚框一一预测类别和偏移量。随后,我们根据锚框及其预测偏移量得到预测边界框。当锚框数量较多时,同一个目标上可能会输出较多相似的预测边界框。为了使结果更加简洁,我们可以移除相似的预测边界框。常用的方法叫作非极大值抑制(non-maximum suppression,NMS)。

我们来描述一下非极大值抑制的工作原理。对于一个预测边界框B,模型会计算各个类别的预测概率。设其中最大的预测概率为p,该概率所对应的类别即B的预测类别。我们也将p称为预测边界框B的置信度。在同一图像上,我们将预测类别非背景的预测边界框按置信度从高到低排序,得到列表L。从L中选取置信度最高的预测边界框B_1作为基准,将所有与B_1的交并比大于某阈值的非基准预测边界框从L中移除。这里的阈值是预先设定的超参数。此时,L保留了置信度最高的预测边界框并移除了与其相似的其他预测边界框。
接下来,从L中选取置信度第二高的预测边界框B_2作为基准,将所有与B_2的交并比大于某阈值的非基准预测边界框从L中移除。重复这一过程,直到L中所有的预测边界框都曾作为基准。此时L中任意一对预测边界框的交并比都小于阈值。最终,输出列表L中的所有预测边界框。

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

推荐阅读更多精彩内容