13.11.2 初始化转置卷积层

首先介绍一下双线性插值。现在有一个三维空间,\(z=f(x,y)\),空间中已知(也就是知道\(z\)值)有四个点\(Q_{11}(x_1,y_1)\)\(Q_{21}(x_2,y_1)\)\(Q_{12}(x_1,y_2)\)\(Q_{22}(x_2,y_2)\),现在给定一个点\(P(x,y)\),求\(z_P\)
image
上面的定义公式,不难推导出来四个已知点的\(z\)值的权重

\[\begin{cases} w_{11} = (1 - \Delta x)(1 - \Delta y) \\ w_{21} = \Delta x (1 - \Delta y) \\ w_{12} = (1 - \Delta x) \Delta y \\ w_{22} = \Delta x \Delta y \\ \end{cases} \]

其中:

  • $ \Delta x = \frac{x - x_1}{x_2 - x_1} $(水平方向归一化距离)
  • $ \Delta y = \frac{y - y_1}{y_2 - y_1} $(垂直方向归一化距离)

权重的物理意义:

  • 距离越近,权重越大
    • 若 $ P $ 靠近 $ Q_{11} $,则 $ w_{11} \approx 1 $,其他权重 $ \approx 0 $。
    • 若 $ P $ 位于中心,四个权重均为 $ 0.25 $(对3×3核则是 $ [0.25, 0.5, 0.25] $ 的加权组合)。
  • 权重总和为1
    $ w_{11} + w_{21} + w_{12} + w_{22} = 1 $,保证插值结果不会超出原始值范围。

现在再来看这段代码:

  • 这段代码的整体作用是:给定卷积核的大小,将这个转置卷积核作用于输入的一个像素,输出一个大小为转置卷积核大小的矩阵,其中每一个元素的值都是这个像素乘以一个权重。在这里,我们的目的是找到\((x^{'},y^{'})\)最近的四个像素,并且还要将图片放大两倍,后者要求stride=2,在后者的要求下满足前者就要求kernel_Size=4
  • kernel_size是一个整数,表示转置卷积核的大小
  • factor相当于上面所说的\(x_2-x_1\)\(y_2-y_1\),因为这里把一个像素的中心当做平面上的一个点(而不是一个像素当成一个点)
  • 判断kernel_size是否为奇数的原因就是想确定中心点是哪里
    • -1-0.5是因为点的坐标从0开始计数,而kernel_size本身从1开始计数
  • ogfilt就是在计算上面的权重的
posted @ 2025-08-03 20:30  最爱丁珰  阅读(8)  评论(0)    收藏  举报