实测!AlexNet卷积核在FPGA占90%资源仍跑750MHz|算力达288万张图像/秒

MLP_Conv2D是功能齐全的设计,可将2D输入图像与多个内核同时进行卷积 。该设计充分利用了MLP和BRAM模块,每个MLP一个周期执行12个int8乘法 。此外,MLP列和BRAM块均等级联以有效地将图像数据传递,从而允许同时处理多个内核 。
该设计使用NoC接入点(NAP)从片上网络(NoC)读取或写入数据 。NoC连接到Speedster7t器件中的GDDR6控制器再到外部存储器 。
AlexNet尽管最初为AlexNet图像和内核大小配置了MLP_Conv2D设计,但是2D卷积是一个通用过程,因此可以重新配置该设计并使其适应许多不同的2D方法 。
2D卷积的一般原理是在图像(实际上是另一个2D矩阵)上传递内核(2D矩阵) 。对于每次计算,内核均以输入图像的像素为中心,并对每个内核值(称为权重)与其当前对齐的像素执行乘法运算 。这些乘法的总和给出了原始图像像素的特定卷积结果 。然后将内核移至下一个像素,并重复该过程 。
经过训练的内核,2D卷积生成一个输出结果图像,突出显示输入图像的特定特征,例如垂直线,水平线,变化角度的对角线和变化半径的曲线 。然后可以将这些特征输入到其他处理层(包括其他2D卷积),然后可以将其标识为(通常在软件中)为特定对象 。
因此,二维卷积处理不应被视为图像识别的完整解决方案,而应被视为处理操作链中的单个关键组件 。
乘法密度2D卷积的挑战是所需的乘法数量,这就是MLP中专用的乘法器阵列 。对于AlexNet配置,每个内核为11×11= 121个权重值 。但是,卷积实际上是3D的,因为输入图像具有三层(RGB),因此一组内核有121×3 = 363个乘法来产生单个输出结果 。AlexNet输入图像为227×227;但是,此图像的stride为4(在计算之间内核移动了四个像素) 。此过程导致输出结果矩阵为54×54 = 2916个结果 。因此,对于一幅图像需要363×2916 = 1,058,508次乘法;即处理一个图像需要进行一百万次以上的累加运算 。其中单个Kernel进行2D卷积的动态示意图如下:

    推荐阅读