前言:今天他給大家帶來一篇發表在CVPR 2017上的文章。
原文:LBCNN
原文代碼:https://github.com/juefeix/lbcnn.torch
本文主要內容:把局部二值與卷積神經網路結合,以削減參數,從而實現深度卷積神經網絡端到端的訓練,也就是未來嵌入式設備上跑卷積效果將會越來越好。
主要貢獻:
提出一種局部二值卷積(LBC)可以用來替代傳統的卷積神經網絡的卷積層,這樣設計的靈感來自於局部二值模式(LBP).LBC主要由一個預先定義好的稀疏二值卷積濾波器,這個濾波器在整個訓練過程中是不可學習的,還有一個非線性激活函數,以及一部分可以學習的權重。線性的權重參數結合被激活的濾波器可以近似的與激活的標準卷積層的濾波器響應相一致。但是卻可以節省9倍到169倍的可學習參數。我們叫這種卷積神經網路為Local Binary Convolutional Neural Networks(LBCNN).並且在MNIST,SVHN,CIFAR-10和imageNet等數據集上取得了非常好的效果。
CNN背景簡單的介紹:
卷積神經網絡與深度學習取得了非常大的成功,尤其在大規模數據集上,但是所耗費的硬件資源也是巨大的,但是有一些應用場景,由於系統和應用平臺的限制,標準的深度學習模型很難應用起來。比如自動駕駛汽車,機器人,手機,智能攝像機,還有一些智能的可穿戴設備,為了解決標準卷積深度網絡參數訓練龐大以及所需要的硬件配置較高的缺點,去滿足上述應用場景,所以提出了LBCNN去加快網絡訓練,減少硬件資源的使用。
LBP介紹:
我以前介紹過,我就不介紹了,大家可以參考下:http://www.cnblogs.com/xiaohuahua108/p/6278275.html
廣義的LBP:
原版的LBP特征總是以2作為基底,因此這樣就會導致編碼LBP位串的時候就會被限制成2的冪,如果放松這個限制,然後讓權重采用現實的值,可以潛在地概括LBP描述。
軸心點的選取:傳統的LBP一般選取某一塊區域的中心,然後和周圍的鄰居進行比較,但是一塊區域選取不同的軸心點,可以得到不同的紋理特征,另外比較函數s() 可以是一個有多個軸心點參加比較的函數,這樣就可以描述更加細致的紋理特征。
比較順序,傳統的LBP一般都是按照順時針方向依次比較,但是改變不同的比較順序就可以得到不同的紋理特征。
哎,你告訴我LBP這些問題,為啥子不告訴我具體怎麽選軸心點,基底,以及編碼比較順序哦,玩蛇啊。。。。作者在文中是這麽說的------All the aforementioned variations i.e., the choice of pivot,the base, and the order of the encoding neighbors, are usually determined empirically and depend on the application. 靠,這是在搞事情啊。
接著文章提出了用借用傳統的LBP思想,提出了用一個8個2-稀疏濾波器去掃描整個圖像,然後把這八個結果相加,具體公式為:
其中(Heaviside step function最後介紹)是一個非線性的二值化操作,是稀疏濾波器,是原始圖像,是可學習的線性權重參數。具體流程圖如下:
圖1:使用卷積濾波器重新設計LBP編碼
局部二值卷積模塊:
受上述廣義的LBP的啟發,現在提出一種局部二值卷積模塊。整個卷積流程圖如下:
傳統的卷積一般為:
本文為:
整個LBCNN包含了m個預先定義好的卷積核,這部分是固定的,不可學習的,本文叫它錨權重。是輸入圖片,這個被m個卷積映射到m個maps。為了讓反向傳播通過LBC層,文章把LBP 中的Heaviside step function 函數換成了sigmoid 或者Relu函數。最後這個m個maps 被一個可學習的集中在一起得到作為下一層的輸入。。
關於參數約減:
假設輸入的圖片數為p個,輸出為q,傳統的卷積核大小為k*w。那麽一個傳統的卷積層大概要學習:個參數。而LBC卻只要學習個參數。那麽:
如果p=m.那麽比值就是kw倍。
參數訓練:
粉色為1,黑色為-1綠色為0
理論證明:
一大堆公式,由於還要去看tensorflow。。所有等過兩天我再證明推導給大家吧。
Heaviside step function:
Tags: 卷積 濾波器 深度 神經網絡 可以 學習
文章來源: