【学习笔记】动手学深度学习task09

一、目标检测基础

squeeze()和unsqueeze()函数理解

torch.clamp理解

numpy.meshgrid理解

np.stack理解

1.真实边界框(ground-truth bounding box)

通俗讲,ground-truth bounding box也就是人工对数据集标注的边界框,也就是y_labels

anchor box是要计算的边框数值,也就是y_predict(最后计算和y_labels的loss),有以下几个主要参数:

输入图像高h, 宽W, 大小为s(0~1), 宽高比为r>0。再利用r计算anchor box的宽高

给大家详细阐述一下各个符合的含义,再配一个例子,可能更好理解一些。
w,h 整个feature map的宽和高,下面均以 w = 728, h = 561 为例进行阐述
代码中的ss1,代表的是anchor的宽,是相对于整个feature map的宽w的一个归一化系数。
例如 ss1 = 0.75,则anchor的实际大小为 ss1 = 728 * 0.75 = 546
ss2 同理,代表的是anchor的高,是相对于整个feature map的高h的一个归一化系数。
r 代表anchor的宽高比,因为本身就是一个比例,所以这个符合不会有什么争议。
显然 r = anchor的宽 / anchor的高 = ss1 / ss2
最有问题的标注出现在这里!!! s
s 应该理解为 anchor的 宽=高 时ss1和ss2的一个基准大小
也可以证明理解 s^2 为 anchor 的面积相对于 整个feature map的比例
也就是说 s^2 = ss1 * ss2
当 r = 1时,s = ss1 = ss2; 当r = 2时,ss1 = sqrt(2) * s, ss2 = s / sqrt®
因此才有的代码中的 ss1 = s * sqrt®, ss2 = s / sqrt® 的定义
举个例子,假设 s = 0.5, r = 1
代表的含义是 anchor的面积 = s ^ 2 = 0.25 也就是整个feature map的 1/4
面积有了,长宽比有了,anchor的尺寸也就确定了。 ss1 = ss2 = 0.25
明确了最开始的定义,后面的部分就好理解很多了。

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

2. 锚框(anchor box)

MultiBoxPrior作用是生成输入的batch的数据集的anchor box,形状为(1, num_anchors, 4),这里形成anchor box数量为hw(n+m-1),
这里的n为图像的大小size,m为图像的宽高比r。
这里的4维是(左上x,左上y,右下x,右下y)

生成多个锚框

假设输入图像高为 h ,宽为 w 。我们分别以图像的每个像素为中心生成不同形状的锚框。 大小为s(0~1), 宽高比为r>0。那么锚框的宽和高将分别为 wssqrt® 和 hssqrt®。当中心位置给定时,已知宽和高的锚框是确定的。

以相同像素为中心的锚框的数量为 n+m−1 。对于整个输入图像,我们将一共生成 wh(n+m−1) 个锚框。

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

具体过程:
在这里插入图片描述
在这里插入图片描述
如果一个锚框 A 被分配了真实边界框 B ,将锚框 A 的类别设为 B 的类别,并根据 B 和 A 的中心坐标的相对位置以及两个框的相对大小为锚框 A 标注偏移量。

偏移量的公式设置如下:
在这里插入图片描述
在这里插入图片描述
如果一个锚框没有被分配真实边界框,我们只需将该锚框的类别设为背景。类别为背景的锚框通常被称为负类锚框,其余则被称为正类锚框。

3.交并比

jaccard系数可以衡量两个集合的相似度。即两个集合的交集大小除以二者并集大小。

交并比的取值范围在0和1之间:0表示两个边界框无重合像素,1表示两个边界框相等。

4.多尺度目标检测

如果以图像每个像素为中心都生成锚框,很容易生成过多锚框而造成计算量过大。

减少锚框个数并不难。一种简单的方法是在输入图像中均匀采样一小部分像素,并以采样的像素为中心生成锚框。此外,在不同尺度下,我们可以生成不同数量和不同大小的锚框。值得注意的是,较小目标比较大目标在图像上出现位置的可能性更多。

二、图像风格迁移

1.特征抽取

首先,我们初始化合成图像,例如将其初始化成内容图像。
该合成图像是样式迁移过程中唯一需要更新的变量,即样式迁移所需迭代的模型参数。
然后,我们选择一个预训练的卷积神经网络来抽取图像的特征,其中的模型参数在训练中无须更新。深度卷积神经网络凭借多个层逐级抽取图像的特征。**一般选取靠近输入的层来抽取样式特征。**我们可以选择其中某些层的输出作为内容特征或样式特征。以图为例,这里选取的预训练的神经网络含有3个卷积层,其中第二层输出图像的内容特征,而第一层和第三层的输出被作为图像的样式特征。接下来,我们通过正向传播(实线箭头方向)计算样式迁移的损失函数,并通过反向传播(虚线箭头方向)迭代模型参数,即不断更新合成图像。

最后,当模型训练结束时,我们输出样式迁移的模型参数,即得到最终的合成图像。
在这里插入图片描述

2.损失函数

样式迁移常用的损失函数由3部分组成:

  • 内容损失(content loss)使合成图像与内容图像在内容特征上接近
  • 样式损失(style loss)令合成图像与样式图像在样式特征上接近
  • 总变差损失(total variation loss)则有助于减少合成图像中的噪点
  • 内容损失通过平方误差函数衡量合成图像与内容图像在内容特征上的差异。

  • 样式损失也一样通过平方误差函数衡量合成图像与样式图像在样式上的差异。
    假设该输出的样本数为1,通道数为 c ,高和宽分别为 h 和 w ,我们可以把输出变换成 c 行 hw 列的矩阵 X 。矩阵 X 可以看作是由 c 个长度为 hw 的向量 x1,…,xc 组成的。其中向量 xi 代表了通道 i 上的样式特征。用格拉姆矩阵表达样式层输出的样式。

  • 总变差损失:一种常用的降噪方法是总变差降噪,降低总变差损失,能够尽可能使邻近的像素值相似。
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值