不用寫代碼就能實現深度學習?手把手教你用英偉達 DIGITS 解決圖像分類問題


2006年,機器學習界泰斗Hinton,在Science上發表了一篇使用深度神經網絡進行維數約簡的論文 ,自此,神經網絡再次走進人們的視野,進而引發了一場深度學習革命。深度學習之所以如此受關注,是因為它在諸如圖像分類、目標檢測與識別、目標跟蹤、語音識別、游戲(AlphaGo)等多個領域取得了相當優秀的成績,掀起了又一波人工只能浪潮。深度學習技術逐漸成為機器學習領域的前沿技術,近年來得到了突飛猛進的發展,這得益於機器學習技術的進步以及計算設備性能的提升。英偉達公司研發的圖形處理器(Graphics Processing Unit,GPU),無疑為深度學習的發展提供了強有力的硬件支撐!

英偉達想必大家都有所耳聞,但對英偉達開發的深度學習訓練系統(NVIDIA Deep Learning GPU Training System, DIGITS) 知之甚少,今天我們介紹如何使用DIGITS,實現基於深度神經網絡的圖像分類,包括數據集創建、模型創建、模型訓練、模型測試等等。

面對眾多的深度學習開發框架,你是不是安裝配置深度學習開發框架環境中,是不是苦於碼代碼、調試改Bug中。那么,今天你將發現,世界上還有一款超級簡單易用的深度學習平台工具,是的,這就是DIGITS。說到底,DIGITS是對現有流行深度學習開發框架的最高級的抽象封裝,你所需做的只不過是點點按鈕、改改參數,就能輕松實現基於深度學習模型的圖像分類、目標檢測、分割等任務,並以圖形界面的方式展現出來。目前DIGITS支持 Caffe、Torch,7月份將開始支持Tensorflow,開發人員,正在努力工作,使其支持更多的深度學習框架,如下圖所示:

DIGITS支持的深度學習框架(來自英偉達官網)

下面,讓我們一起學習如何使用DIGITS,實現基於深度卷積網絡的手寫體圖像分類任務,讓我們一起成為人工智能時代的弄潮兒!

 

  DIGITS安裝

由於本文重點介紹如何使用DIGITS實現深度學習圖像分類,這里僅給出安裝參考與注意事項。

現今,DIGITS已經有了三種安裝姿勢:

● Ubuntu 包管理器

● Docker

● 源碼編譯

具體請移步 NVIDIA DIGITS Installation(https://github.com/NVIDIA/DIGITS#installation)。2015年時,DIGITS出道時還只有源碼安裝方式,時隔一年竟然有了 deb 安裝方式,果斷試用,按照官方說明分分鍾安裝完畢~.~

注:Ubuntu16.04下安裝Caffe,會有比較多的坑,跳進去再跳出來就行了,不過,對於初學者,可能得幾個小時,甚至幾天的時間才能跳出來。

無論哪種安裝姿勢,都要確保有以下核心實料:

● 裝有GPU卡的PC機(有服務器更好);

● Linux系統(建議Ubuntu,本文 Ubuntu16.04 LTS);

● CUDA驅動(本文版本8.0,Linux版有 run 和 deb 兩種安裝包,前者需要卸載系統自帶驅動,一不小心可能就進不去圖形界面了,需謹慎 ,具體安裝方法,參見英偉達官方安裝手冊)或自行搜索;

● 深度學習框架:如 Caffe, CNTK, TensorFlow, Theano and Torch 等其中的一種或多種(目前支持Caffe和Torch);

● DIGITS

Ubuntu deb 包安裝

很簡單,打開終端(快捷鍵 Ctrl + Alt + T),執行如下命令,既可以自動安裝 digits, caffe-nv, torch7-nv, libcudnn,其中,xxx-nv 是指英偉達 fork 的xxx框架版本。具體安裝方法,參見:DIGITS Ubuntu Installation (https://github.com/NVIDIA/DIGITS/blob/master/docs/UbuntuInstall.md)。

DIGITS Ubuntu deb 安裝命令

#添加源

# For Ubuntu 16.04

CUDA_REPO_PKG=http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb

ML_REPO_PKG=http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb

 

# Install repo packages

wget "$CUDA_REPO_PKG" -O /tmp/cuda-repo.deb && sudo dpkg -i /tmp/cuda-repo.deb && rm -f /tmp/cuda-repo.deb

wget "$ML_REPO_PKG" -O /tmp/ml-repo.deb && sudo dpkg -i /tmp/ml-repo.deb && rm -f /tmp/ml-repo.deb

 

# Download new list of packages

sudo apt-get update

# Install 

sudo apt-get install digits

源碼安裝

DIGITS的源碼可以在GitHub上找到,即這里:GitHub DIGITS (https://github.com/NVIDIA/DIGITS),具體編譯構建安裝過程參見:NVIDIA DIGITS Source Installation (https://github.com/NVIDIA/DIGITS/blob/master/docs/BuildDigits.md)。

提示:

安裝過程若提示錯誤:ImportError: No module named setuptools 可以使用 sudo apt install python-setuptools 解決。

cd ~/sfw

git clone https://github.com/NVIDIA/DIGITS.git

 

  DIGITS使用入門

終於可以開始使用DIGITS了,首先打開你的瀏覽器,然后:

● 對於使用deb包安裝的童鞋,在瀏覽器地址欄輸入 http://localhost/ 訪問 DIGITS server 主頁;

● 對於采用其他安裝方式(using digits-devserver)的童鞋,在瀏覽器地址欄輸入 http://localhost:5000/ 訪問 DIGITS server 主頁;

現在開始吧!DIGITS server主頁界面如下,可見使用DIGITS做深度學習應用,非常簡單明了人性化,就是點點按鈕的事;點擊圖中Images下拉菜單按鈕,可以看到,如今DIGITS已經支持 圖像預處理、分類、目標識別、分割:等多種學習任務。

DIGITS Server Home 頁簡介

廢話少說,開始正題,使用 DIGITS ,基本分三步:

● 第一步:准備並創建數據集

● 第二步:設計並創建任務模型

● 第三步:訓練測試模型

下面以手寫體分類為例,說明如何利用 DIGITS,輕松實現基於深度學習中的卷積神經網絡的圖像分類任務。

 

  使用DIGITS實現基於深度學習的圖像分類

● 數據集:手寫體數據集 MNIST:含 0~9 十個數字,60000個訓練樣本,10000個測試樣本;

● 網絡模型:卷積神經網絡 LeNet-5:一種卷積神經網絡。

詳情參見 Yann LeCun 主頁。

下載MNIST數據集

你可訪問上述數據集鏈接下載並解壓數據,也可以使用 DIGITS 提供的數據集下載工具直接下載解壓數據,數據會被下載到你指定的目錄下(yourdir),本文中:

python -m digits.download_data mnist ~/yourdir/mnist

下載完成后,在你指定的目錄下可以看到如下文件:

創建數據集

在DIGITS server Home頁,以此選擇 Datasets > New Dataset > Images > Classification ,然后隨便取個用戶名(username),提交(Submit),在彈出的頁面中,按下圖所示填寫數據集信息。

DIGITS MNIST 數據集創建頁面

創建完成后,可以在MNIST數據集頁面查看驗證數據集信息,如下圖所示:

創建好的MNIST數據集頁面

創建好的MNIST數據集的訓練集統計信息如下圖所示:

訓練集統計信息——頻率直方圖

創建模型

我們使用經典的LeNet模型來實現手寫體圖像的分類,LeNet是一個卷積神經網絡,它依次包含一個輸入層(INPUT)、卷積層(C1)、池化層,也叫下采樣層(S2)、卷積層(C3)、下采樣層(S4)、卷積層(C5)、全連接層(F6)和一個輸出層,由於有0~9個數字,所以輸出層的神經元的個數是10。這么復雜的結構,寶寶得寫多少行代碼,寶寶不想當程序猿 ~,~

用於手寫體分類的LeNet網絡結構

然而,你不用擔心,使用DIGITS,你只需要點點按鈕,改改參數即可,由於是經典模型,這里連該參數都不用,點按鈕就行了。點擊左上角的 DIGITS 按鈕,返回主頁,此時,可以看到數據集(DataSets)頁面多了個剛剛創建的MNIST數據集。依次選擇 Models > New Model > Images > Classification 彈出模型設置界面,依次按如下步驟操作:

● 在Select Dataset 區選擇 “MNIST” 數據集;

● 在下面的Standard Networks 標簽頁選擇Caffe 版的 LeNet network;

● 選擇GPU;

● 給模型命個名字;

● 點擊 Create 按鈕創建模型

如下圖所示:

用於手寫體分類的LeNet網絡模型訓練與測試設置

當然,你也可以設置訓練代數、驗證間隔(代數)、優化方法、學習率等參數。

訓練模型

創建完模型后,DIGITS 開始網絡的訓練,並實時顯示訓練損失、驗證損失、驗證正確率、學習率變化、GPU資源占用等信息,如下圖所示,非常直觀和友好,有木有,~.~

DIGITS MNIST LeNet分類網絡訓練過程圖

喝杯咖啡,或出去溜達溜達即可!

測試

現在到了測試你的模型的時候了,如下圖所示,有三種選擇:

● Classify One:單幅圖像分類,可以可視化數據、權重、隱藏層輸出等;

● Classify Many:多幅圖像分類,可以查看多幅圖像的分類結果統計信息;

● Top N Predictions per Category:每類的Top N分類預測圖示。

測試你的手寫體分類模型

上述手寫體分類模型,對數字6的某幅圖像分類結果如下圖所示,非常直觀友好有木有,寶寶瞬間喜歡上人工智能了耶:

上述手寫體分類模型,對10000個測試樣本圖像的分類統計結果如下圖所示,哇,這么高大上的矩陣我也有了:

上述手寫體分類模型,Top N分類統計結果如下圖所示,寶寶決定要搞深度了,誰都不能阻擋我:

 

  后記

本文介紹了 DIGITS 及其安裝,以及使用 DIGITS 進行圖像分類的步驟與方法,包括數據集的創建、模型的創建與訓練、模型測試等等。總結起來,使用DIGITS做深度學習應用,簡直就是點點點,免去了使用Caffe等其它框架繁瑣的環境配置、枯燥的碼代碼 Debug 的過程,你不需要去學習Python等語言,你甚至都不需要了解模型算法原理,就能輕松享受深度學習的樂趣,這一切 DIGITS 都已經為你做好,簡直太爽啦!~.~ ~.~ ~.~

如果你不是程序猿,如果你不了解深度學習,如果你不知道選擇何種深度學習框架,如果你不想把精力耗費在碼代碼上,而你卻非常想了解深度學習,以至於你想成為人工智能時代的弄潮兒,那么DIGITS是你最好的入門選擇!生活原本很簡單,為什么要過得復雜呢?

如果你已經迫不及待地想在 DIGITS 上一試身手,如果你想找個深度學習“老司機”領路,如果你有諸多深度學習技術相關的難題有待解決,那么這里正好有個絕佳的機會:

7 月 8 日,在第二屆 CCF-GAIR 2017 全球人工智能與機器人峰會上,雷鋒網將聯合英偉達深度學習學院(Deep Learning Institute,DLI),面向 AI 技術從業者,特別推出一個深度學習開發者專場。對深度學習和英偉達 GPU 加速感興趣的開發者們,可以通過這次活動跟英偉達官方認證工程師來一次面對面的技術暢談。

具體議程安排如下:

目前,開發者專場門票正在火熱售賣中,只需 999元 即可獲得與英偉達官方深度學習團隊現場交流的機會,數量有限,售完即止,各位對深度學習感興趣的 AI 從業者們千萬不可錯過!(悄悄告訴你,使用優惠碼還有 200元 折扣哦)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM