CNN计算原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CNN计算原理相关的知识,希望对你有一定的参考价值。

参考技术A

CNN编码器与解码器:
神经网络为线性变换,当输入向量维度高于输出向量维度时,神经网络相当于一个编码器,实现高维特征的低维特征提取.反之,输入向量维度小于输出维度,神经网络相当于一个解码器,实现低维特征的高维重建.
在数学中, (f*g)(n) 为 f,g 的卷积,在连续空间定义为:

离散定义为:

将图像看成三维矩阵,卷积操作如下:

BN是为了克服神经网络难以训练而提出的,在较深的网络结构中反向传播防止梯度弥散,在遇到train收敛速度很慢或者梯度爆炸等状况可以使用BN,提高模型精度.
CNN正向传播:

训练过程通过反向传播更新权重,主要采用chain rule(链式求导法则):

零均值归一化/Z-score标准化

处理后数据变为均值为0,标准差为1的正态分布.通常神经网络和机器学习中很多问题都是基于正态分布的假设.这种参数变化不会改变分布自身形状
数据非标准化的原因可查看这篇文章 here
正态分布Box-Cox变换
将一个非正态分布转换为正态分布,使得分布具有对称性.


直方图均衡化
通过图像的灰度值分布,对图像对比度进行调整,可以增强局部对比度.

缩小features尺寸,实现upsample,减少计算量,防止网络过拟合
Avg Pooling
均值池化: 取卷积核平均值作为输出
Max Pooling
最大值池化操作: 取卷积核中最大值作为输出
一般情况池化区域不重叠 4*4 到 2*2 ,对于max pooling正向计算需要记录最大值所在位置,方向传播将参差传到最大值位置,其余位置补0.Avg pooling反向时将参差均分,传递到每个位置.

模拟人的神经元,只对部分神经元的输入做出反应.加入非线性因子,弥补神经网络的线性映射的不足.增强模型的表达能力.

https://www.zhihu.com/question/22298352
https://blog.csdn.net/panglinzhuo/article/details/75207855

R-CNN , Fast R-CNN , Faster R-CNN原理及区别

github博客传送门
csdn博客传送门

==RCNN==

1、生成候选区域

使用Selective Search(选择性搜索)方法对一张图像生成约2000-3000个候选区域,基本思路如下:
(1)使用一种过分割手段,将图像分割成小区域
(2)查看现有小区域,合并可能性最高的两个区域,重复直到整张图像合并成一个区域位置。优先合并以下区域:

  • 颜色(颜色直方图)相近的
  • 纹理(梯度直方图)相近的
  • 合并后总面积小的
  • 合并后,总面积在其BBOX中所占比例大的
    在合并时须保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其它小区域,保证合并后形状规则。
    (3)输出所有曾经存在过的区域,即所谓候选区域
2、特征提取

使用深度网络提取特征之前,首先把候选区域归一化成同一尺寸227×227。
使用CNN模型进行训练,例如AlexNet,一般会略作简化。

3、类别判断

对每一类目标,使用一个线性SVM二类分类器进行判别。
输入为深度网络(如上图的AlexNet)输出的4096维特征,输出是否属于此类。

4、位置精修

目标检测的衡量标准是重叠面积:许多看似准确的检测结果,往往因为候选框不够准确,
重叠面积很小,故需要一个位置精修步骤,对于每一个类,训练一个线性回归模型去判定这个框是否框得完美。

==Fast R-CNN==

Fast R-CNN主要解决R-CNN的以下问题:

1、训练、测试时速度慢

R-CNN的一张图像内候选框之间存在大量重叠,提取特征操作冗余。
而Fast R-CNN将整张图像归一化后直接送入深度网络,紧接着送入从这幅图像上提取出的候选区域。
这些候选区域的前几层特征不需要再重复计算。

2、训练所需空间大

R-CNN中独立的分类器和回归器需要大量特征作为训练样本。Fast R-CNN把类别判断和位置精调统一用深度网络实现,不再需要额外存储。

下面进行详细介绍
  1. 在特征提取阶段,通过CNN(如AlexNet)中的conv、pooling、relu等操作都不需要固定大小尺寸的输入,
    因此,在原始图片上执行这些操作后,输入图片尺寸不同将会导致得到的feature map(特征图)尺寸也不同,这样就不能直接接到一个全连接层进行分类。
    在Fast R-CNN中,作者提出了一个叫做ROI Pooling的网络层,这个网络层可以把不同大小的输入映射到一个固定尺度的特征向量。
    ROI Pooling层将每个候选区域均匀分成M×N块,对每块进行max pooling。将特征图上大小不一的候选区域转变为大小统一的数据,送入下一层。
    这样虽然输入的图片尺寸不同,得到的feature map(特征图)尺寸也不同,
    但是可以加入这个神奇的ROI Pooling层,对每个region都提取一个固定维度的特征表示,就可再通过正常的softmax进行类型识别。
  2. 在分类回归阶段,在R-CNN中,先生成候选框,然后再通过CNN提取特征,之后再用SVM分类,最后再做回归得到具体位置(bbox regression)。
    而在Fast R-CNN中,作者巧妙的把最后的bbox regression也放进了神经网络内部,与区域分类合并成为了一个multi-task模型
    实验表明,这两个任务能够共享卷积特征,并且相互促进。
    Fast R-CNN很重要的一个贡献是成功地让人们看到了Region Proposal+CNN(候选区域+卷积神经网络)这一框架实时检测的希望,原来多类检测真的可以在保证准确率的同时提升处理速度。

==Faster R-CNN==

在Faster R-CNN中加入一个提取边缘的神经网络,也就说找候选框的工作也交给神经网络来做了。
这样,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。

Faster R-CNN可以简单地看成是“区域生成网络+Fast R-CNN”的模型,用区域生成网络(Region Proposal Network,简称RPN)来代替Fast R-CNN中的Selective Search(选择性搜索)方法。

RPN的工作步骤如下:

  • 在feature map(特征图)上滑动窗口
  • 建一个神经网络用于物体分类+框位置的回归
  • 滑动窗口的位置提供了物体的大体位置信息
  • 框的回归提供了框更精确的位置

==总结==

R-CNN、Fast R-CNN、Faster R-CNN一路走来,基于深度学习目标检测的流程变得越来越精简、精度越来越高、速度也越来越快。
基于region proposal(候选区域)的R-CNN系列目标检测方法是目标检测技术领域中的最主要分支之一。

print_r(‘点个赞吧‘);
var_dump(‘点个赞吧‘);
NSLog(@"点个赞吧!")
System.out.println("点个赞吧!");
console.log("点个赞吧!");
print("点个赞吧!");
printf("点个赞吧!
");
cout << "点个赞吧!" << endl;
Console.WriteLine("点个赞吧!");
fmt.Println("点个赞吧!")
Response.Write("点个赞吧");
alert(’点个赞吧’)




















以上是关于CNN计算原理的主要内容,如果未能解决你的问题,请参考以下文章

吴恩达 卷积神经网络 CNN

深入理解BatchNorm的原理代码实现以及BN在CNN中的应用

一个门外汉的理解 ~ Faster R-CNN

学习CNN系列一:原理篇

卷积神经网络(CNN)详细介绍及其原理详解

目标检测: R-CNN原理