一. BMXNET要解決的問(wèn)題
在神經(jīng)網(wǎng)絡(luò)實(shí)際部署預(yù)測(cè)時(shí)需要做很多的優(yōu)化,比如:
- 裁剪設(shè)計(jì)網(wǎng)絡(luò),裁掉部分無(wú)用的weight
- 將weight從int32 量化到int8甚至是binary 1bit
- 使用特定硬件上提供的庫(kù):比如mkl唇撬,openblas,neon等等
arxiv:BMXNET是在MXNET的基礎(chǔ)上析既,給出了量化weight的一個(gè)方法笆焰。其開(kāi)源實(shí)現(xiàn)的地址是:https://github.com/hpi-xnor/BMXNet
優(yōu)化的最終目標(biāo)是1)更小的模型大小 2)更少的計(jì)算量(功耗)
二. 方法
現(xiàn)有方法:
tensorflow量化的方案是將weight 從float32降低到int8的精度
BNN:存儲(chǔ)二值化的weight,使用xnor和popcount來(lái)代替全連接和cnn中的矩陣乘法氢妈,BMXNET實(shí)現(xiàn)了類(lèi)似方法
三. 實(shí)現(xiàn)
BMXNET實(shí)現(xiàn)了activation, convolution 和fully connected layer的operator
工程上
在x86 cpu上使用SSE4.2提供的加速
在arm上使用了NEON加速
使用OpenMP并行化加速
一個(gè)lenet的網(wǎng)絡(luò)symbols對(duì)比
說(shuō)明:
不在第一層和最后一層使用量化網(wǎng)絡(luò)粹污,這會(huì)顯著減低準(zhǔn)確率
四. 效果
模型變小,速度變快首量,精度變化不大
ResNet-18 全精度的模型大小是44.7MB. 二值化后是1.5MB壮吩,壓縮比大約是29
精度損失在0.02-0.04之間