3个卷积 两个平均池化层 两个全连接层 -- 7层网络
卷积模块
在并行度,速度和资源占用进行权衡,更高并行意味着功耗更大,硬件资源占用更多,但可以提升速度。
2D filter
在卷积的过程中,过滤器与数据在channel方向分别卷积,之后将卷积后的数值相加。
TauH Activation
双曲正切函数,等于双曲余弦 除双曲正弦。
tanh相比sigmoid收敛更快
红线为其导数,优点是:
1 函数输出以(0,0)为中值。
2 收敛速度比sigmoid更快
softmax Activation
LeNet-5 网络的最后一层是softmax激活层,输入为全连接层的10个值,然后输出最终的分类结果。
Average Pooling
平均池化层,该网络具有两层平均池化层,作用是下采样卷积层输出,在减小数据量的同时,尽可能保存提取的特征。
Integrating Network
将所有的模块连接到一起,然后调通控制通路和数据通路。
Emulation 验证思路
1 用python/C++ 实现与模块相同功能的函数
2 为硬件模块和软件函数搭建对应的tsetbench ,记录输出结果
3 对比两套输出数据是否一致,并随机抽取样本进行转换验证
4 若发现错误,debug,修改代码逻辑
1 卷积层设计
卷积 激活函数 池化 卷积 激活函数 池化 卷积 激活函数
1 block diagram
将复杂模块分为多个子模块
自顶向下构成
multi filter layer
一个卷积层,有多个filter,也称为卷积核,image输入到不同的filter,得到包含不同特征的feature map。
image 32x32 x16 = 16384 所以输入位宽为16384
filters: 的位宽为2400bit位
filters:5x5x6 x16
5x5卷积核,6个,位宽为16
convLayerMulti:
输入信号 clk reset filters image
输出为feature map 28x28x16
不考虑padding时候,输出为输入图片尺寸 - 卷积核尺寸 除以卷积核的步长S。 最后加1。
single filter layer
单个filter,输入inmage,输出filter。
由RFslector 和 CU conv unit组成。
filters: 400位宽。5x5x16 单个filter
CU convolution Unit
每个卷积核的图像窗口与输入图像进行卷积,得到特征图。
image为400 位宽。 和filter大小一致。
processing element
CU由 PE组成。
PE为处理模块,卷积所进行的具体操作为点乘,本质是乘法和加法。输入为float类型。 硬件实现是定点数。
PE 功能 解析
floatMult16: 执行两个半精度浮点数的乘法
floatAdd16: 执行两个半精度浮点数的加法
半精度浮点数FP16:
符号 1bit。指数位5位。小数位10位。
number = (-1)^s X 1.M X 2^(E-15)
S为符号位,M为小数位,E为指数位。
result reg
result reg 作用:
将电路的组合逻辑转为同步时序电路,保证数据的同步。
乘法器和加法器后,加入寄存器,缓存。在下一个结果到来之后,结果更新。
module processingElement16(clk,reset,floatA,floatB,result);
parameter DATA_WIDTH = 16; //数据位宽
input clk, reset;
input [DATA_WIDTH-1:0] floatA, floatB;
output reg [DATA_WIDTH-1:0] result;
wire [DATA_WIDTH-1:0] multResult;
wire [DATA_WIDTH-1:0] addResult;
floatMult16 FM (floatA,floatB,multResult); // 计算乘法结果
floatAdd16 FADD (multResult,result,addResult); //将乘法结果累加
always @ (posedge clk or posedge reset) begin
if (reset == 1'b1) begin
result = 0;
end else begin
result = addResult;
end
end
endmodule
CU功能解析
Conv Unit:
窗口,卷积核filter和输入image计算。
一个窗口卷积出一个计算结果,convUnit作用是 循环使用PE完成一个窗口的卷积计算,并输出最终结果。
循环使用PE减小硬件资源占用。
两个5x5矩阵相乘:
计算周期为:
1(复位) + 25(计算) +1(输出)
25次乘法和加法运算。
single filter layer 功能解析
由RFselector 和 CU组成。
执行一个filter与完整的image的卷积操作。
输出feature map。
RFselector: 作用是对已经展开的一维image tensor进行数据重排,再对应分发给n个(横向卷积并行度)CU进行窗口卷积。
缩小为5x5 image,如2x2的窗口。
需要进行数据窗口生成。
multi filter layer 功能解析
执行多个filter 与完整image的卷积操作,输出多个feature map。
计算并行度由例化的single filter layer个数决定。此处为两个。
顶层接口信号:
输出位宽为 28x28 x6x16 = 75264 bit
每次执行两个filter与image的卷积。分三次执行完。
float 16
float 16又称半精度 用16个比特也就是2个字节表示一个数。
其中1位符号位, 5位指数位, 10位小数位。
a 符号位: 1代表负数, 0代表正数。
b 指数部分,5个比特位, 全0和全1有特殊用途,所以是00001~11110, 也就是1到30, 减去偏置15,指数部分最终范围为-14 ~15.
c 小数部分, 10个比特位, 范围为(0~1023)/1024.