深入浅出pytorch -03 计算机视觉CV 读书笔记

基础图像变换操作

1 空间域

  1. Gamma Correction 伽马校正
    v = α v γ v' = \alpha v^{\gamma} 第一:图像像素值代表着亮度(Brightness)
    第二: γ > 1 \gamma>1 的时候,高亮度区域的变化即细节增加,低亮度细节减少。

  2. sober算子
    边缘检测
    具体可以搜索百度百科

2 频域
傅里叶变化
高频为细节,为轮廓。
低通滤波可以过滤细节。

图像特征提取

  1. SIFT:scale-invariant feature Transform
    1. 首先计算 金字塔表示(Pyramid Representation)
      高斯滤波 + 下采样
    2. 找到图像金字塔中的特征点:
      拉普拉斯滤波器
      通过之前的高斯滤波和拉普拉斯整合可以成为, LoG高斯拉普拉斯滤波器。
      LoG 计算代价高,用DoG近似。

卷积层

  1. 卷积
  2. 转置卷积,反卷积
    【如果想了解怎么卷积?怎么反卷积?如何形成卷积矩阵和数据列向量的乘积???请看Im2Col GEMM
    我就搬运图,过程如下:

在这里插入图片描述
图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
### 转置卷积
在这里插入图片描述
二维卷积下,默认的pytorch输入张量为 N,C,H,W
dilation 扩张卷积,增加感受野
transposed 控制是否进行转置卷积,也就是反卷积
摘自:https://www.zhihu.com/question/54149221

归一化层(Normalization Layer)

归一化都采取以下公式:
y = γ x E ( x ) V a r ( x ) + ϵ + β \bold y = \gamma \frac{\bold x - E(\bold x)}{\sqrt{\bold{Var(x)+\epsilon}}} + \beta

批次归一化:Batch Normalization Layer

BatchNorm1d BatchNorm2d BatchNorm3d

class troch.nn.BactchNorm2d(num_features, eps=1e-5, momentum=0.1, affine =True, track_running_states = True)
  1. nums_features: 输入通道数目C

  2. eps: 防止父母为0

  3. momentum 控制指数移动平均计算 E ( x ) V a r ( x ) E(\bold x) 和 Var(\bold x)
    x t = ( 1 α ) x t 1 + α x t ^ x_{t} = (1-\alpha)x_{t-1} + \alpha \hat{x_t}
    E ( x c ) = 1 N × H × W N , H , W x c E(\bold{x_c} )= \frac{1}{N \times H \times W}\sum_{N,H,W}\bold{x_c}
    V a r ( x ) = 1 N × H × W N , H , W ( x c E ( x c ) ) 2 Var(x) = \frac{1}{N \times H \times W}\sum_{N,H,W}\bold{(\bold{x_c} - E(x_c))^2}

    x t ^ \hat{x_t} 是基于当前 E ( x ) E(\bold x) V a r ( x ) Var(\bold x) 计算所得,相对于批次维度的!!

  4. affine: 是否应用 γ \gamma β \beta 形成仿射变换

  5. 缓存值:track_running_stats

    1. running_mean 缓存均值张量
    2. running_var 缓存方差张量
    3. num_batches_tracked 当前迷你批次的数目
  6. 迷你批次不能太小,不然均值和方差波动大,减少稳定性

  7. 批归一化层一般在激活函数前,因此卷积中的bias可以设置为false,因为会在减平均中被消去

组归一化:group normalization

组归一化,减少了对批次大小的统计依赖。

class torch.nn.GroupNorm(num_groups, num_channels, eps=1e-05, affine= True)
  1. 输入张量通道数 分成 num_groups组
  2. 每组分别归一化.
  3. 注意由于代码没有指数移动平均,因此就没有缓存张量
    E ( x c g ) = 1 C g × H × W C g , H , W x c g E(\bold{x_{c_g}} )= \frac{1}{C_g\times H \times W}\sum_{C_g,H,W}\bold{x_{c_g}}
    V a r ( x c g ) = 1 C g × H × W C g , H , W ( x c E ( x c g ) ) 2 Var(x_{c_g}) = \frac{1}{C_g \times H \times W}\sum_{C_g,H,W}\bold{(\bold{x_c} - E(x_{c_g}))^2}

实例归一化: instance normalization

由于之前批次归一化都是参考了其他图片的信息,也就是一个批次中很多图片进行去均值除标准拆,而对于风格迁移或者对抗网络来说,不需要参考同一批次中的图像,所以可以用实例归一化。

class torch.nn.InstanceNorm2d(num_features, eps=1e-05, momentum = 0.1. affine =False, track_running_state = False)

E ( x ) = 1 H × W H , W x E(\bold{x} )= \frac{1}{ H \times W}\sum_{H,W}\bold{x}
V a r ( x ) = 1 H × W H , W ( x c E ( x ) ) 2 Var(x) = \frac{1}{ H \times W}\sum_{H,W}\bold{(\bold{x_c} - E(x))^2}

层归一化: layer normalization

适用于 循环神经网络RNN
求除了迷你批次维度(N)以外的所有维度的平均值和方差

class torch.nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=False)
$$x_{t} = (1-\alpha)x_{t-1} + \alpha \hat{x_t}$$
$$E(\bold{x} )= \frac{1}{C \times H \times W}\sum_{C,H,W}\bold{x}$$
$$Var(x) = \frac{1}{C \times H \times W}\sum_{C,H,W}\bold{(\bold{x} - E(x))^2}$$

局部相应归一化: Local Response Normalization

引用 深入浅出Pytorch-从模型到源码

未完待续。。。。

猜你喜欢

转载自blog.csdn.net/weixin_43702920/article/details/107233388
今日推荐