-
Notifications
You must be signed in to change notification settings - Fork 159
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
binary conv arm中input bit-packing像素顺序问题 #131
Comments
你好,我们的bit packing是把输入channel维度的8个拼成一个byte,不是width或height,这个是不影响卷积滑窗的。不知道这样是不是能回答你的问题? |
感谢回复!我总结一下bolt实现的过程,麻烦您给指正:
目前我使用(-1,1)模拟二值化训练生成的模型,它的输出和bolt 暂时无法对齐,我想弄清楚,哪里可能出现了问题?感谢你们的帮助! |
input: (N_C/8_H_W_c8) / 8, bint8 目前我使用(-1,1)模拟二值化训练生成的模型,它的输出和bolt 暂时无法对齐,我想弄清楚,哪里可能出现了问题?感谢你们的帮助! |
|
compute/tensor/tests/test_convolution_bnn.cpp,可以看一下是否对你有帮助 |
padding这里我看bolt源码默认是pad 0,我没看完完整的代码,但是我猜底层计算二值卷积的时候是把-1当作0,然后使用xnor和popcount等位运算实现的二值卷积,这样的话padding就需要特殊处理,可以选择pad +1或者-1,不pad的话会二值输出结果就会不一致。我这边实验发现pad -1效果比较好。我猜作者用来测试的bnn模型应该没有这个特殊处理? |
Thanks for the great work!
在看了代码后,我发现bolt的实现中可能存在一些问题,但也不是很确定,想请教一下:
比如这里:convolution_xnor_A55 中 transformFromHalf本质上是对input tensor做了bit-packing,但潜在的问题是它是按照row-wise的顺序的方式对整个input tensor进行像素访问。而通常实现binary 矩阵乘法时,需要先做im2col,将input变成patches,每一个patch包含和weight filter大小一样的子矩阵,然后再对每一个patch中的像素进行bit-packing。这里可以看到问题了,在bolt的实现中input tensor的bit-packing是不是做早了?packing到一起的像素并不属于卷积时的相同的patch?希望得到您的答复,谢谢!
The text was updated successfully, but these errors were encountered: