cnn-平均池化层、图像并行

119 阅读4分钟

平均池化层

pooling的结果是使得特征减少,参数减少,但pooling的目的并不仅在于此。

pooling目的是为了保持某种不变性(旋转、平移、伸缩等)

在池化操作的过程中,还使用改变步长大小的方法来控制输出特征图的维度。

CPU和fpga的特点

CPU与FPGA的根本区别在于软件与硬件的差异。CPU为 冯诺依曼结构,串行 地执行一系列指令;而FPGA可以实现 并行操作。

CPU擅长逻辑控制,串行的运算。

FPGA擅长并行操作。

FPGA的并行有两种:数据并行(GPU 也有)和流水线并行

FPGA的并行 处理图像的优势

并行体现在,每个时钟可以处理多个数据流任务。

FPGA的并行有两种:数据并行(GPU 也有)和流水线并行

FPGA相比于CPU,最大的优势在于速度,FPGA通过时钟来控制信号和寄存器传输,也就是说通过时钟来精确控制任务,而且FPGA是并行执行的,每个时钟可以处理多个数据流任务。

数据并行

数据并发处理

  CPU是一个数据一个数据进行处理的,而FPGA在一个时钟内可以同时并行处理多个数据,而且这个数据可以同时做很多个运算,比如乘加运算、比较运算。

流水线并行

流水线架构

FPGA进行图像处理,可以涉及到很多算法一起运行,比如图像进行预处理,灰度、算子、膨胀、腐蚀等,这个时候就可以用到流水线架构处理,FPGA对每一行进行处理时,可以实现同时前一行做灰度运算、后一行做算子运算,整个处理过程是并行的,互不干扰。

数据同时接收及处理

传统的软件处理流程可能是先将数据准备好,然后再进行处理,而FPGA可以做到边接收边处理,在接收数据的同时对数据进行处理。利用数据传输的间隙做数据处理可以节省大量的时间,外部的数据传输是会消耗掉大量时间的。

缓存

  FPGA内部有大量缓存单元,在进行图像处理时可以对图像的行数据进行缓存再处理,可以提高处理效率。

灵活性

 FPGA可以反复擦除和编程,可以通过设计不同逻辑完成各种电路功能。

延时低

FPGA同时拥有流水线并行和数据并行

cnn中的并行

多卷积核并行: 主要是数据并行,同一时钟内处理多个数据。

行缓存,开窗。这里行缓存涉及到了插入寄存器,缓存数据,流水线并行的思想。 5行数据缓存,只有第一行数据需要5个时钟周期,后续每一行只需要一个时钟周期。

流水线结构是把一个大的逻辑拆分成多个小逻辑,或者说将原本只需要一个时钟周期完成的逻辑操作分成用多个时钟周期来实现,以减少每个时钟周期的传播延迟。由于每个小逻辑的计算花费的时间较小,从而能使得设计的时钟速率加快
同时分成几个时钟周期完成就成为几级流水线。

首先流水线结构是将一个大操作分成更多的小操作
需要我们在各个计算之间插入寄存器,通过寄存器来暂存中间数据,尽管寄存器也会引入额外的小延迟,但相当于传播延迟来说可忽略

均值滤波

对高斯噪声具有较好的处理效果)
均值滤波在去噪声的同时会有如下缺点:边界模糊效应明显、细节丢失比较严重

中值滤波也是消除图像噪声最常见的手段之一,特别是消除椒盐噪声,中值滤波的效果要比均值滤波更好。中值滤波是跟均值滤波唯一不同是,不是用均值来替换中心每个像素,而是将周围像素和中心像素排序以后,取中值。

1.图像周围填0

举例:即将800×480的图像首先扩展成802×482

2.行缓存开窗

移位寄存器开窗

3.计算均值

均值滤波: 先求和再平均

中值滤波:

第一步: 分别求出 3 行中同一行的最大值、 最小值、 中间值

第二步: 3 行的最大值、 最小值、 中间值进行比较

比较最大的最小,最小的最大,中间值的中间值

第二步:得到中值

比较第二步得到的中间值为中值