背景:对于FPGA加速模块的使用,除了知道如何设置一些宏变量和全局变量之外,对于卷积核权值的存储和输入数据的存储顺序是另外一个非常重要的问题。为了尽快将其源码移植到自己的项目中,需要构造这两个部分,原论文中是使用的python脚本将caffermode转化成相应的weight.bin。那么,如果对于非caffemodel,或者想对自己的CNN程序进行局部加速,怎么办?这里就需要搞清楚weights.bin和input.bin二者是如何排列的。
方法:搜索作者github->issue,发现蛛丝马迹
(一)首先对于input.bin的结构 https://github.com/dgschwend/zynqnet/issues/4
研读代码之后发现,
for y in range(H):
for x in range(W):
for c in range(CH):
pixel = data[c,x,y]
if pixel is None: pixel = 99999
pixels.append(pixel);
对于input的存储并不是,按照每个通道,一个通道一个通道来存储的。而是先存储所有通道的(0,0)坐标位置的元素,再存储(0,1)坐标的元素,再存储(0,2)的元素,直到(0,w),然后是(1,0),(1,1),……(1,w)直到(h,w)。这样则完成了所有通道的输入。
(二