Daily Tips
小技巧积累
- 参数的显存占用。只有有参数的层,才会有显存占用。这部分的显存占用和输出无关,模型加载完成之后就会占用。
有参数的层主要包括:
- 卷积
- 全连接层
- BatchNorm
- Embedding层
无参数的层:
- 多数的激活层(Sigmoid/ReLU)
- 池化层
- Dropout
- … …
梯度与动量的显存占用 模型与输入无关的显存占用:
- 参数W
- 梯度dW(一般与参数一样)
- 优化器的动量(普通SGD没有动量,momentum-SGD动量与梯度一样,Adam优化器动量的数据量是梯度的两倍)
深度学习中神经网络的显存占用,有如下公式:
显存占用=模型显存占用 + batch_size x 每个样本的显存占用
-
实时查看nvidia显卡是使用情况:
nvidia-smi -l 1
即每隔1秒刷新一次 -
PyTorch官方推荐:具有学习参数的(例如,conv2d, linear, batch_norm)采用
nn.XXX
的方式,没有学习参数的(例如,maxpool, loss func, activate func)等根据个人选择使用nn.functional.xxx
或者nn.XXX
方式。但是关于dropout
,推荐使用nn.Xxx
方式,因为一般情况下只有训练阶段才进行dropout,在eval阶段都不会进行dropout。使用nn.Xxx
方式定义dropout,在调用model.eval()
后,model中所有的dropout layer都会关闭,但是以nn.functional.dropout
方式定义dropout,在调用model.eval()
后并不能关闭dropout。参考地址 -
图像对比度是通过灰度级范围来度量的,而灰度级范围可通过观察灰度直方图得到,灰度级范围越大代表对比度越高;反之对比度越低,低对比度的图像在视觉上给人的感觉是看起来不够清晰,所以通过算法调整图像的灰度值,从而调整整个图像的对比度是很有必要的。
-
自适应直方图均衡化首先将图像划分为不重叠的区域块,然后对每一个块分别进行直方图均衡化。显然,在没有噪声影响的情况下,每一个小区域的灰度直方图会被限制在一个小的灰度级范围内;但是如果有噪声,每一个分割的区域块执行直方图均衡化后,噪声会被放大。为了避免出现噪声的情况,提出了”限制对比度(Contrast Limiting)”, 如果直方图的bin超过了提前预设好的“限制对比度”,那么会被裁剪,然后将裁减的部分均匀分布到其他的Bin,这样就重构了直方图。
-
在进行图像处理时所称的梯度通常是指梯度的模。
-
图像的边缘与频域中的高频分量相对应,高通滤波器可以抑制低频分量,从而达到图像锐化的目的。
-
一些边缘检测的经验:
-
突变型细节,通过一阶微分的极大值点,二阶微分的零点可以检测出来
-
细线型细节,通过一阶微分的零点,二阶微分的极小值点可以检测出来
-
渐变型细节,一般情况下突变幅度小,定位难,不易检测,但二阶微分的信息比一阶微分多,需要综合考虑
边缘信息具有方向性,不同的锐化/边缘检测算子也可能具有方向性,因此同一个算子对不同的图像检测的效果可能不同,应对不同图像使用不同的算子进行检测。
-