在语义分割中,要求输入输出的分辨率一样大
在特征提取的时候,需要进行下采样,所以在encode过程中,要进行相应的上采样。
上采样,即扩充图像的h和w。
常见的上采样方法有双线性插值、转置卷积、上采样(unsampling)和上池化(unpooling)。
其中前两种方法较为常见,后两种用得较少。
1. 插值法
双线性插值是目前在语义分割中用的最多的一种方式,其特点是不需要学习,运行速度快,
接着,同样的方法,在Y方向上插值,就可以推导出P点处的像素值。
在pytorch中的API调用
卷积核kernel尺寸为3X3
设strides=1, padding=0,
按照卷积计算公式
所以输出的output尺寸为 2X2
2.2
用矩阵乘法描述卷积
把input 的元素矩阵展开为一个列向量
输出output展开为一个列向量
用矩阵运算描述整个过程
通过推导,可以得到稀疏矩阵
2.3 反卷积
反卷积就是要对这个矩阵运算进行逆运算,即通过C和Y得到X
所以反卷积也叫转置卷积
需要注意的一点是,反卷积只是恢复了矩阵X的大小,不能恢复其数值
反卷积输入输出的关系
正常卷积:
o = (i + 2*p - k)/s + 1
反卷积相当于输入输出对调:
i = s * (o - 1) + k - 2*p
所以反卷积的输出为
o = s * (i - 1) + k - 2*p
pytorch 中API调用
self.up_output = nn.ConvTranspose2d(num_classes, num_classes, kernel_size=4, stride=2, bias=False)
3. Upsampling 和 Uppooling
uppooling 用的比较少,具体如下图示意
图片来源:上采样方法原理简介 - 简书 (jianshu.com)