1.图像分割

语义分割:为每个像素都打上标签,只区分类别,但不区分类别中的具体单位。

实例分割:不光要区别类别,还要区分类别中的每一个个体。

2.Focal loss

focal loss从样本难易分类角度出发,解决样本非平衡带来的模型训练问题。

focal loss的具体形式:

注:

1.$\large\gamma$通常设置为2,$\large(1-y_{pred})^{\gamma}$相当于样本的难易度权值,$\large\alpha$为正负样本的比例

2.为了防止难易样本的频繁变化,应当选取小的学习率。防止学习率过大,造成w变化较大从而引起 $\large y_{pred}$的巨大变化,造成难易样本的改变。

3.转置卷积

转置卷积:用来增大输入的高宽

3.1 转置卷积的计算方式

计算方式一:

1

计算方式二(填充为0,步幅为1):

2

一般情况:

3

基本的转置卷积运算:

1
2
3
4
5
6
7
def trans_conv(X, K):
h, w = K.shape
Y = torch.zeros((X.shape[0] + h - 1, X.shape[1] + w - 1))
for i in range(X.shape[0]):
for j in range(X.shape[1]):
Y[i:i + h, j:j + w] += X[i, j] * K
return Y

高级API:

1
2
3
4
5
6
7
8
9
10
11
X = torch.tensor([[0.0, 1.0], [2.0, 3.0]])
K = torch.tensor([[0.0, 1.0], [2.0, 3.0]])
X, K = X.reshape(1, 1, 2, 2), K.reshape(1, 1, 2, 2)
tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, bias=False)
tconv.weight.data = K
tconv(X)

out:
tensor([[[[ 0., 0., 1.],
[ 0., 4., 6.],
[ 4., 12., 9.]]]], grad_fn=<ConvolutionBackward0>)

填充:

1
2
3
4
5
6
tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, padding=1, bias=False)#padding=1将输出的行列减小1
tconv.weight.data = K
tconv(X)

out:
tensor([[[[4.]]]], grad_fn=<ConvolutionBackward0>)

步幅:

1
2
3
4
5
6
7
8
9
tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, stride=2, bias=False)#增大stride会将输出变大
tconv.weight.data = K
tconv(X)

out:
tensor([[[[0., 0., 0., 1.],
[0., 0., 2., 3.],
[0., 2., 0., 3.],
[4., 6., 6., 9.]]]], grad_fn=<ConvolutionBackward0>)

多通道:

1
2
3
4
5
6
7
X = torch.rand(size=(1, 10, 16, 16))
conv = nn.Conv2d(10, 20, kernel_size=5, padding=2, stride=3)
tconv = nn.ConvTranspose2d(20, 10, kernel_size=5, padding=2, stride=3)
tconv(conv(X)).shape == X.shape

out:
True

3.2 转置卷积的棋盘效应

棋盘效应:在转置卷积操作中,生成的输出特征图中出现的不规则、重叠和错位的图案,类似于棋盘格子

棋盘效应的主要原因:kernel size不能够被stride整除(不均匀重叠

解决方法:

方法一:使kernel size能够被stride整除(无法完全避免该问题)

方法二:插值法+卷积

4.双线性插值

双线性插值:通过待求像素点在源图像中4个最近邻像素值的加权和计算得到

4

优势:没有灰度不连续的缺点,结果基本令人满意

劣势:双线性内插法的计算比最邻近点法复杂,计算量较大。它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。

5.Batch Normalization

优点:
1.可以用更大学习率,加速模型收敛
2.可以不用精心设计权值初始化
3.可以不用dropout或较小的dropout
4.可以不用L2或者较小的weight decay
5.可以不用LRN(local response normalization)

5

注:

1.由于归一化后的xi基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:γ,β。 γ和β是在训练时网络自己学习得到的。

2.Batch Normalization将数据移到激活函数中心区域,对于大多数的激活函数而言,这个区域的梯度都是最大的或者是有梯度的,因而这种方法是一种对抗梯度消失的有效手段。