1、cnn计算
一般卷积输出计算
其中N为输入图像的一边长、Pad为Padding填充数、kernal为卷积核(一般3×3)的单边数、stride为kernal的移动步长。
Dilated卷积输出计算
其中dilaterate就为空洞数、核间隔(
)。就是k放大后计算一般卷积输出。
Transpose卷积输出计算
这里需要注意的是TransCONV操作一般会指定 output_shape,因为例如对(3,3,1)做反卷还原,它的原始输入既可能是(5,5, 1)也可能为(6, 6, 1)
深度可分离卷积输出计算
2、激活函数
1、Sigmoid
3、Loss function
交叉熵loss
交叉熵就是用来判定实际的输出与期望的输出的接近程度!
神经网络的原始输出不是一个概率值,实质上只是输入的数值做了复杂的加权和与非线性处理之后的一个值而已,那么如何将这个输出变为概率分布?
这就是Softmax层的作用,假设神经网络的原始输出为y1,y2,….,yn,那么经过Softmax回归处理之后的输出为:
两种形式交叉熵表达:
交叉熵求导
我们要求导的是我们的loss对于神经元输出()的梯度,即:
这里为什么是而不是![](https://cdn.nlark.com/yuque/__latex/d8dd7d0f3eb7145ca41c711457b7eb8f.svg#card=math&code=a%7Bi%7D&height=14&width=14),这里要看一下softmax的公式了,因为softmax公式的特性,它的分母包含了所有神经元的输出,所以,对于不等于i的其他输出里面,也包含着![](https://cdn.nlark.com/yuque/__latex/b72ebeb95f4bb3e84afd94141a57b13b.svg#card=math&code=z%7Bi%7D&height=14&width=13),所有的a都要纳入到计算范围中,并且后面的计算可以看到需要分为i=j和i≠j两种情况求导。
对于:
对于:
- 如果:
- 如果:
最后我们将上面组合:
最后,针对分类问题,我们给定的结果最终只会有一个类别是1,其他类别都是0,因此,对于分类问题,这个梯度等于
IoU loss
- IoU算法是使用最广泛的算法,大部分的检测算法都是使用的这个算法。
2. GIoU考虑到,当检测框和真实框没有出现重叠的时候IoU的loss都是一样的,因此GIoU就加入了C检测框(C检测框是包含了检测框和真实框的最小矩形框),这样就可以解决检测框和真实框没有重叠的问题。但是当检测框和真实框之间出现包含的现象的时候GIoU就和IoU loss是同样的效果了。
3. DIoU考虑到GIoU的缺点,也是增加了C检测框,将真实框和预测框都包含了进来,但是DIoU计算的不是框之间的交并,而是计算的每个检测框之间的欧氏距离,这样就可以解决GIoU包含出现的问题。
4. CIoU就是在DIoU的基础上增加了检测框尺度的loss,增加了长和宽的loss,这样预测框就会更加的符合真实框。
L1 and L2 loss
![](https://cdn.nlark.com/yuque/__latex/d0859b54c1fe2837e432e127b0de92d6.svg#card=math&code=L2%5C%2C%5C%2Closs&height=16&width=54)的收敛速度比![](https://cdn.nlark.com/yuque/__latex/e937378c7efece97b6d6e5b7f5e8b7ee.svg#card=math&code=L1%5C%2C%5C%2Closs&height=16&width=54)更快,但对离群点更为敏感<br />![](https://cdn.nlark.com/yuque/__latex/e937378c7efece97b6d6e5b7f5e8b7ee.svg#card=math&code=L1%5C%2C%5C%2Closs&height=16&width=54): ![](https://cdn.nlark.com/yuque/__latex/e792fcfd21435c7a8067aa420b7a49a2.svg#card=math&code=L_1%20%3D%20%7Cf%EF%BC%88x%EF%BC%89%20-%20Y%7C&height=24&width=134)<br />![](https://cdn.nlark.com/yuque/__latex/d0859b54c1fe2837e432e127b0de92d6.svg#card=math&code=L2%5C%2C%5C%2Closs&height=16&width=54): ![](https://cdn.nlark.com/yuque/__latex/0d91af8e9cae86e2eec7935b6af94abc.svg#card=math&code=L_2%20%3D%20%7Cf%EF%BC%88x%EF%BC%89%20-%20Y%7C%5E2&height=26&width=142)
4、预防Overfitting
(1)正则化
机器学习中的正则化(Regularization)
使用正则化,降低模型的复杂度,增强模型的泛化能力。在目标函数后面添加一个系数的“惩罚项”是正则化的常用方式,为了防止系数过大从而让模型变得复杂。
L1正则化时,对应惩罚项为 L1 范数 :
L2正则化时,对应惩罚项为 L2 范数:
L1正则化更容易造成特征的系数为0,引起特征稀疏,适用于特征选择,而L2正则化会使,系数按照一个比例缩放趋向于变小,而不会变成0,因此使模型更简单,更适用于防止模型过拟合。ps:具体看链接证明。
(2)Early stopping
具体做法是,在每一个Epoch结束时(一个Epoch集为对所有的训练数据的一轮遍历)计算validation data的accuracy,当accuracy不再提高时,就停止训练。
(3)数据增强
从数据源采集更多数, 复制原有数据并加上随机噪声,重采样,根据当前数据集估计数据分布参数,使用该分布产生更多数据等
(4) Dropout
随机得删除一些(可以设定为一半,也可以为1/3,1/4等)隐藏层神经元.
5、优化器
GD(Gradient Descent)
两个缺点:**
- 训练速度慢:每走一步都要要计算调整下一步的方向,下山的速度变慢。需要花费很长时间才能得到收敛解。
- 容易陷入局部最优解:由于是在有限视距内寻找下山的反向。当陷入平坦的洼地,会误以为到达了山地的最低点,从而不会继续往下走。
BGD(Batch Gradient Descent)
模型参数的调整更新与全部输入样本的代价函数的和(即批量/全局误差)有关。在下山之前掌握了附近的地势情况,选择总体平均梯度最小的方向下山。
SGD(Stochastic Gradient Descent)
优点:
- 虽然SGD需要走很多步的样子,但是对梯度的要求很低(计算梯度快)。而对于引入噪声,大量的理论和实践工作证明,只要噪声不是特别大,SGD都能很好地收敛。
缺点:
- SGD在随机选择梯度的同时会引入噪声,使得权值更新的方向不一定正确。
- SGD也没能单独克服局部最优解的问题。
Momentum(动量优化法)
理解策略为:** 由于当前权值的改变会受到上一次权值改变的影响,类似于小球向下滚动的时候带上了惯性。这样可以加快小球向下滚动的速度。
动量主要解决SGD的两个问题:**
- 是随机梯度的方法(引入的噪声);
- 是Hessian矩阵病态问题(可以理解为SGD在收敛过程中和正确梯度相比来回摆动比较大的问题)。
RMSProp(自适应学习率)
思想:考虑了历史梯度平均值。具有代价函数最大梯度的参数相应地有个小的的学习率,而具有小梯度的参数有个较大的学习率。
RMSProp算法修改了AdaGrad的梯度积累为指数加权的移动平均,使得其在非凸设定下效果更好。
算法描述:RMSProp算法的一般策略可以表示为:
由于取了个加权平均,避免了学习率越来越低的的问题,而且能自适应地调节学习率。
Adam
Adaptive Moment Estimation
Adam 可以认为是 RMSprop 和 Momentum 的结合:
其中,和分别为一阶动量项和二阶动量项。和为动力值大小通常分别取0.9和0.999;和分别为各自的修正值。表示时刻即第迭代模型的参数,表示次迭代代价函数关于的梯度大小;是一个取值很小的数(一般为1e-8)为了避免分母为0.
6、评价指标计算
True Positive(真正,TP):将正类预测为正类数
True Negative(真负,TN):将负类预测为负类数
False Positive(假正,FP):将负类预测为正类数
False Negative(假负,FN):将正类预测为负类
准确率(accuracy)计算公式为:
精确率(precision):
召回率(recall):
f-measure:
7、传统的机器学习
特征提取:
特征提取HOG方向梯度直方图
SVM
传统的边缘检测算子
Conditional Random Field (CRF)
逻辑回归(Logistic regression)和线性回归(Linear regression)
- 线性回归
想要评价一个模型的优良,就需要一个度量标准。对于回归问题,最常用的度量标准就是均方差.
逻辑回归
逻辑回归使用的联系函数是Sigmoid函数(S形函数)中的最佳代表,即对数几率函数(Logistic Function):
将对数几率函数代入到之前得到的广义线性回归模型中,就可以得到逻辑回归的数学原型了:
**传统边缘检测算子
使用微分继续统计一幅图中边缘的强弱:
在连续函数里叫微分,因为图像是离散的,叫差分,和微分是一个意思,也是求变化率。
Roberts算子
Roberts算子是一种斜向偏差分的梯度计算方法。
- Canny算子
计算步骤:
(1)用高斯滤波器平滑图像;
(2)用一阶偏导的有限差分来计算梯度的幅值和方向;
(3)对梯度幅值进行非极大值抑制;
(4)用双阈值算法进行检测和链接边缘。
通俗说一下,
1.用高斯滤波主要是去掉图像上的噪声。
2.计算一阶差分,用 sobel 算子来算的。
3.算出来的梯度值,把不是极值的点,全部置0,去掉了大部分弱的边缘。
4.双阈值 , , 是这样的,,大于 的点肯定是边缘,小于 的点肯定不是边缘。
在 之间的点,通过已确定的边缘点,发起8领域方向的搜索(广搜),图中可达的是边缘,不可达的点不是边缘。
最后得出 canny 边缘图。
- Sobel算子
Sobel算子是一组方向算子,从不同的方向检测边缘。Sobel算子不是简单地求平均再差分,而是加强了中心像素上下左右4个方向像素的权值,运算结果是一幅边缘图。
使用近似计算一阶差分。
排好序:
提出系数:
分别计算偏 x 方向的 Gx,偏 y 方向的 Gy,求绝对值,压缩到 [0, 255]
区间,即 G(x, y) = Gx + Gy 就是 sobel 边缘检测后的图像了。**
8、Batch_norm的具体细节
问题:在深层网络训练的过程中,由于网络中参数变化而引起内部结点数据分布发生变化叫做Internal Covariate Shift。
带来的影响:
(1)上层网络需要不停调整来适应输入数据分布的变化,导致网络学习速度的降低
(2)网络的训练过程容易陷入梯度饱和区,减缓网络收敛速度
直接进行白化的问题:
(1)由于改变了网络每一层的分布,因而改变了网络层中本身数据的表达能力。
(2)白化过程计算成本太高
(3)让每一层的输入分布均值为0,方差为1,会使得输入在经过sigmoid或tanh激活函数时,容易陷入非线性激活函数的线性区域。
BN(白化+线性变换):
BN又引入了两个可学习(learnable)的参数 与 。这两个参数的引入是为了恢复数据本身的表达能力,对规范化后的数据进行线性变换,即 。特别地,当 时,可以实现等价变换(identity transform)并且保留了原始输入特征的分布信息。
测试阶段如何使用Batch Normalization?
利用BN训练好模型后,我们保留了每组mini-batch训练数据在网络中每一层的 与 。此时我们使用整个样本的统计量来对Test数据进行归一化,具体来说使用均值与方差的无偏估计。
Batch Normalization的优势
(1)BN使得网络中每层输入数据的分布相对稳定,加速模型学习速度。
(2)BN使得模型对网络中的参数不那么敏感,简化调参过程,使得网络学习更加稳定。
(3)BN允许网络使用饱和性激活函数(例如sigmoid,tanh等),缓解梯度消失问题
(4)BN具有一定的正则化效果
不同mini-batch的均值与方差会有所不同,这就为网络的学习过程中增加了随机噪音
9、梯度消失和梯度爆炸
面试中梯度消失和梯度爆炸
解释:
在反向传播过程中需要对激活函数进行求导,如果此部分大于1,那么层数增多的时候,最终的求出的梯度更新将以指数形式增加,即发生梯度爆炸,如果此部分小于1,那么随着层数增多,求出的梯度更新信息将会以指数形式衰减,即发生了梯度消失。
梯度消失、爆炸的解决方案:
(1)预训练加微调,每次训练一层隐节点
(2)梯度剪切: 更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。可以防止梯度爆炸。另外一种解决梯度爆炸的手段是采用权重正则化(weithts regularization)。如果发生梯度爆炸,权值的范数就会变的非常大,通过正则化项,可以部分限制梯度爆炸的发生。
(3)relu、leakrelu、elu等激活函数
(4)batch normalization:通过对每一层的输出规范为均值和方差一致的方法,消除了w带来的放大缩小的影响,进而解决梯度消失和爆炸的问题。
(5)残差结构
10、IoU、GIoU、DIoU、CIoU
- IOU(Intersection over Union)
缺陷:(1)如果两个框没有相交,根据定义,IoU=0,不能反映两者的距离大小(重合度)。同时因为loss=0,没有梯度回传,无法进行学习训练(2)IoU无法精确的反映两者的重合度大小。
- GIOU(Generalized Intersection over Union)
先计算两个框的最小闭包区域面积(通俗理解:同时包含了预测框和真实框的最小框的面积),再计算出IoU,再计算闭包区域中不属于两个框的区域占闭包区域的比重,最后用IoU减去这个比重得到GIoU。
优点:(1)与IoU只关注重叠区域不同,GIoU不仅关注重叠区域,还关注其他的非重合区域,能更好的反映两者的重合度(2)IoU取值[0,1],但GIoU有对称区间,取值范围[-1,1]。在两者重合的时候取最大值1,在两者无交集且无限远的时候取最小值-1,因此GIoU是一个非常好的距离度量指标。
缺点:GIoU对scale不敏感
- DIoU(Distance-IoU)
其中 , 分别代表了预测框和真实框的中心点,且代表的是计算两个中心点间的欧式距离,代表的是能够同时包含预测框和真实框的最小闭包区域的对角线距离。
优点:(1)与GIoU loss类似,在与目标框不重叠时,仍然可以为边界框提供移动方向。(2)DIoU loss可以直接最小化两个目标框的距离,因此比GIoU loss收敛快得多。
缺点:GIoU对scale不敏感
- CIoU(Complete-IoU)
其中用来度量长宽比的相似性,对scale敏感。