Daily Tips

小技巧积累

  1. 参数的显存占用。只有有参数的层,才会有显存占用。这部分的显存占用和输出无关,模型加载完成之后就会占用。

有参数的层主要包括:

无参数的层:

梯度与动量的显存占用 模型与输入无关的显存占用

深度学习中神经网络的显存占用,有如下公式:

显存占用=模型显存占用 + batch_size x 每个样本的显存占用
  1. 实时查看nvidia显卡是使用情况:nvidia-smi -l 1 即每隔1秒刷新一次

  2. 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。参考地址

  3. 图像对比度是通过灰度级范围来度量的,而灰度级范围可通过观察灰度直方图得到,灰度级范围越大代表对比度越高;反之对比度越低,低对比度的图像在视觉上给人的感觉是看起来不够清晰,所以通过算法调整图像的灰度值,从而调整整个图像的对比度是很有必要的。

  4. 自适应直方图均衡化首先将图像划分为不重叠的区域块,然后对每一个块分别进行直方图均衡化。显然,在没有噪声影响的情况下,每一个小区域的灰度直方图会被限制在一个小的灰度级范围内;但是如果有噪声,每一个分割的区域块执行直方图均衡化后,噪声会被放大。为了避免出现噪声的情况,提出了”限制对比度(Contrast Limiting)”, 如果直方图的bin超过了提前预设好的“限制对比度”,那么会被裁剪,然后将裁减的部分均匀分布到其他的Bin,这样就重构了直方图。

  5. 在进行图像处理时所称的梯度通常是指梯度的模

  6. 图像的边缘与频域中的高频分量相对应,高通滤波器可以抑制低频分量,从而达到图像锐化的目的。

  7. 一些边缘检测的经验:

    • 突变型细节,通过一阶微分的极大值点,二阶微分的零点可以检测出来

    • 细线型细节,通过一阶微分的零点,二阶微分的极小值点可以检测出来

    • 渐变型细节,一般情况下突变幅度小,定位难,不易检测,但二阶微分的信息比一阶微分多,需要综合考虑

      边缘信息具有方向性,不同的锐化/边缘检测算子也可能具有方向性,因此同一个算子对不同的图像检测的效果可能不同,应对不同图像使用不同的算子进行检测。

Table of Contents