在手機端執行模型並不容易,手機端計算能力有限,在技術方案中還需要權衡考慮多種因素,比如 tensorflow 靜態庫的裁剪,模型大小的控制。首先,馮牮老師為我們介紹了利用卷積神經網路在手機端實現文件檢測的流程。
\\ 在用神經網路技術解決實際業務問題的時候,通常要做的事情都是準備樣本資料,選擇網路結構,網路引數調優,這幾件事情很有可能都是需要重複很多遍的,會經歷各種失敗,也正是因為有這些失敗,才會促使開發者去進一步的思考,去尋找能取得更好結果的最優方案。
\\ 馮牮表示,在做這套檔案檢測方案的時候,也是符合這種基本的套路的,只不過在完整的技術方案裡面,還包含了一部分用opencv實現的演算法,這部分演算法也是配合著神經網路部分一步一步優化出來的。有一些比較關鍵的技術節點,按照時間先後順序,簡單記錄一下,大致如下:
\\ a:初始版本 hed + 公開通用樣本集 + findcontours api
\\ c:hed 網路的輸入的尺寸是 224 * 224, 提公升到 256 * 256 有助於得到更高精度的邊緣檢測線,但是訓練難度大增,檢測效果不公升反降,為了改善這一點,先使用少量樣本訓練網路,當 hed 網路開始收斂,並且每乙個尺度的輸出 image 都開始對最終結果產生貢獻後,才使用完整的訓練樣本集合繼續訓練網路
\\ e:opencv 並沒有圖層的概念,在旋轉和透視變換等需要插值的時候,會在邊緣區域直接用黑色畫素進行插值,為了降低這種黑色畫素干擾,只能使用精讀最低的插值演算法,這就使得合成的樣本的清晰度也很低,為了改善這一點,把 opencv 替換成了 ios 上的 uiview,也就是利用 opengl 來合成訓練樣本,提高了的清晰度
\\ f:改進了 cost 函式,得到了更細的邊緣檢測線,降低了整體誤差
\\ i:在對低識別率場景的分析過程中發現,之前 d 步驟中設計的數學模型對其中一種場景很容易誤判,所以重新設計了這部分的數學模型,不再把邊緣線段延長到整個區域,另外在對四邊形進行合理性判斷的時候,重新設計了一組過濾策略
\\ 這其中的b、c、e、g、h,是對訓練樣本的優化,c和f是對hed網路的優化,d和i是對數學模型的優化,從這裡也能看出來,訓練樣本的重要性是很高的。
\\vgg與hed神經網路演算法
\\
在馮牮的訓練過程中,主要使用了兩種神經網路演算法:vgg與hed。
\\ 這兩個神經網路演算法,馮牮覺得是很難可以『簡單』介紹清楚的:「我並不是說vgg和hed網路很難,其實正好相反,這兩個網路結構,在卷積神經網路大家族裡面其實反而是兩個最簡單最基礎的網路結構了。」
\\ 馮牮解釋說:比如vgg,作為乙個分類網路,和resnet、inception model這些新的分類網路相比,它的結構就是很簡單的,因為它的層和層之間的關係很簡潔,前一層的輸出就是後一層的輸入,hed網路就是以vgg為基礎,把其中一些卷積層的輸出單獨取了出來,再通過某些策略融合到一起,就得到了最終的輸出。想學習vgg和hed的話,最好的資料還是第一手的**和認可度比較高的參考**。
\\ 然而一開始的時候,馮牮是想要仿照face alignment的思路,用乙個端到端的神經網路結構直接擬合得到4個點的座標,訓練網路的時候雖然可以收斂,但是得到的結果是不可用的,網路計算出來的4個點的座標是趨向於四個固定位置的。後來他也嘗試用yolo網路做過物件檢測,用fcn網路做過影象切割,但是結果都很不理想,要麼就是檢測精度太低,要麼就是計算量太大做不到實時檢測。最終馮牮選用了hed網路,其實也就是前面提到的這幾個原因,既要保證一定的精度也要保證實時計算的執行速度。
\\如何選擇深度學習框架
\\
在選擇深度學習框架這一點上,馮牮有自己的一些想法,他認為:對於初學者來說,在挑選框架的時候,不需要糾結太多問題,選乙個工業界主流的框架就可以了,tensorflow、mxnet、caffe2這些都是可以的,這些主流的框架,配套的開發文件、demo程式等等都是比較齊全的。而且,重點要學習的還是神經網路的各種演算法,框架只是實現這些演算法的一種手段。
\\ 「當然,tensorflow官方就支援手機端,這是我選擇tensorflow的原因之一。」馮牮補充說。
\\ 蘋果於今年推出了自家的移動端深度學習框架coreml,馮牮表示,雖然沒有嘗試使用過coreml,但是就他看來,這是一種技術趨勢,框架只是工具,只是一種實現手段,工具之間可能會多少有一些差異,但是神經網路結構與工具無關,同乙個演算法,用不同的框架也是都可以實現出來的。
\\ coreml和tensorflow相比,最明顯的優勢就是它是ios平台原生支援的,有硬體加速,運算速度快,系統整合度高。但是coreml只是做前向運算的工具,馮牮表示,在用反向傳播演算法訓練網路的時候,還是要用tensorflow或其他框架的。
\\ 除了tensorflow之外,馮牮還給希望嘗試移動端深度學習訓練的開發者們推薦了一些其他框架,mxnet和caffe2都是官方支援mobile端的,有興趣的同學也可以從這兩個框架入門學習。
騰訊馮牮 基於卷積神經網路在手機端實現文件檢測
在手機端執行模型並不容易,手機端計算能力有限,在技術方案中還需要權衡考慮多種因素,比如 tensorflow 靜態庫的裁剪,模型大小的控制。首先,馮牮老師為我們介紹了利用卷積神經網路在手機端實現文件檢測的流程。在用神經網路技術解決實際業務問題的時候,通常要做的事情都是準備樣本資料,選擇網路結構,網路...
卷積神經網路快速入門 基於TensorFlow
卷積神經網路 convolutional neural networks 裡面最重要的構建單元是卷積層。神經元在第乙個卷積層不是連線輸入的每乙個畫素,只是連線它們感受野1 的畫素,以此類推,第二個卷積層的每乙個神經元僅連線位於第乙個卷積層的乙個小方格的神經元。感受野卷積層 由此牽扯出感受野的定義,感...
基於卷積神經網路的貓種類的識別
我也是剛剛接觸卷積神經網路不久,理解的也不是特別深入,以下都是我自己的個人想法,如有錯誤希望大家指正。這個是乙個基於類似於vgg模型 模型 於keras文件 的卷積神經網路實現的分類器,實現的是對貓的種類識別,因為資料集比較難找所以只用了320張做訓練集,用69張做測試集。具體貓的分類一共有4類 布...