卷积和转置卷积
- 基础图像变换操作
- 图像特征提取
- 卷积层
- 转置卷积
- 归一化层(Normalization Layer)
- 批次归一化:Batch Normalization Layer
- 组归一化:group normalization
- 实例归一化: instance normalization
- 层归一化: layer normalization
- 局部响应归一化: Local Response Normalization
- 附录
- 未完待续。。。。
基础图像变换操作
1 空间域
- Gamma Correction 伽马校正
第一:图像像素值(v)代表着亮度(Brightness)
第二:的时候,高亮度区域的变化大即细节增加,低亮度细节减少。
- sober算子
边缘检测
具体可以搜索百度百科
2 频域
傅里叶变化
高频为细节,为轮廓。
低通滤波可以过滤细节。
图像特征提取
- SIFT:scale-invariant feature Transform
- 首先计算 金字塔表示(Pyramid Representation)
高斯滤波 + 下采样 - 找到图像金字塔中的特征点:
拉普拉斯滤波器
通过之前的高斯滤波和拉普拉斯整合可以成为, LoG高斯拉普拉斯滤波器。
LoG 计算代价高,用DoG近似。
卷积层
- 卷积
- 转置卷积,反卷积
我就搬运图,过程如下:
转置卷积
二维卷积下,默认的pytorch输入张量为 N,C,H,Wdilation 扩张卷积,增加感受野
transposed 控制是否进行转置卷积,也就是反卷积
归一化层(Normalization Layer)
归一化都采取以下公式:
批次归一化:Batch Normalization Layer
对于全连接层:
进入神经元前的输入,进行批归一化。
因此你针对的是每个神经元!,每个神经元的输入进行多数据平均。
图中表示的就是输入到第一个神经元的输出,
就是批次里第一个数据。
- BatchNorm1d | BatchNorm2d | BatchNorm3d |
class troch.nn.BactchNorm2d(num_features, eps=1e-5, momentum=0.1, affine =True, track_running_states = True)
- nums_features: 输入通道数目C
- eps: 防止分母为0
- momentum 控制指数移动平均计算
, 如果不用,则
track_running_stats=False
,就用如下更新:是基于当前
和
计算所得,相对于批次维度的!!
- affine: 是否应用
和
形成仿射变换
- 缓存值:track_running_stats
- running_mean 缓存均值张量
- running_var 缓存方差张量
- num_batches_tracked 当前迷你批次的数目
- 迷你批次不能太小,不然均值和方差波动大,减少稳定性
- 批归一化层一般在激活函数前,因此卷积中的bias可以设置为false,因为会在减平均中被消去
组归一化:group normalization
组归一化,减少了对批次大小的统计依赖。
如果num_of_goups=1那就是层归一化layer norm.
class torch.nn.GroupNorm(num_groups, num_channels, eps=1e-05, affine= True)
- 输入张量通道数 分成 num_groups组,
- 每组分别归一化
- 注意由于代码没有指数移动平均,因此就没有缓存张量
实例归一化: instance normalization
简易记忆:实例实例,就是具体某个例子,聚焦在图片,甚至关注到某个图片某个通道。
由于之前批次归一化都是参考了其他图片的信息,也就是一个批次中很多图片进行去均值除标准拆,而对于风格迁移或者对抗网络来说,不需要参考同一批次中的图像,所以可以用实例归一化。
class torch.nn.InstanceNorm2d(num_features, eps=1e-05, momentum = 0.1. affine =False, track_running_state = False)
层归一化: layer normalization
适用于 循环神经网络RNN
求==除了迷你批次维度(N)==以外的所有维度的平均值和方差
class torch.nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=False)
局部响应归一化: Local Response Normalization
附录
未完待续。。。。