人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练
人工智能深度學習框架MXNet實戰:深度神經網絡的交通標志識別訓練
MXNet 是一個輕量級、可移植、靈活的分布式深度學習框架,2017 年 1 月 23 日,該項目進入 Apache 基金會,成為 Apache 的孵化器項目。盡管現在已經有很多深度學習框架,包括 TensorFlow, Keras, Torch,以及 Caffe,但 Apache MXNet 因其對多 GPU 的分布式支持而越來越受歡迎。
環境準備
1.安裝 Anaconda。Anaconda 是一個用于科學計算的 Python 發行版,提供了包管理與環境管理的功能。Anaconda 利用 conda 來進行 package 和 environment 的管理,并且已經包含了 Python 和相關的配套工具。
Anaconda3-4.4下載地址:?https://repo.continuum.io/archive/Anaconda3-4.4.0-Windows-x86_64.exe
2.在 conda 下安裝 pip,安裝命令為‘conda install pip’
3.安裝 OpenCV-python 庫。OpenCV-python 是一個很強大的計算機視覺庫,在這個項目中可以用于處理圖像。使用‘pip install openvc-python’在 Anaconda 環境下安裝 OpenCV。也可以從源文件進行編譯(注意:conda 安裝 opencv3.0 不能運行)。
4.安裝 scikit learn,一個開源的 python 機器學習科學計算庫,它將用于對數據進行預處理。安裝命令為‘conda install scikit-learn’。
5.安裝 Jupyter Notebook,安裝命令為‘conda install jupyter notebook’。
6.安裝 MXNet。安裝命令為‘pip install mxnet’。
------------------
數據庫
使用的數據庫是德國交通標志識別基準,來自論文《德國交通標志識別基準:多類別分類競賽》( J. Stallkamp, M. Schlipsing, J. Salmen, and C. Igel. "The German Traffic Sign Recognition Benchmark: A multi-class classification competition." ),發表在 IEEE International Joint Conference on Neural Networks,2011。該數據集包含 39209 張訓練樣例和 12630 張測試樣例,有 43 種不同的交通標志——停車標志,限速標志,各種警示標志以及其他標志。
數據庫中的每張圖像大小為 32×32,均為三通道彩色圖。每幅圖屬于一種交通標志。圖像種類標簽由 0 到 42 的整數表示。
從一個 NumPy 陣列中下載數據,數據分為訓練,驗證和測試集。訓練集包含 39209 張大小為 32×32,通道數為 3 的圖像,所以 NumPy 陣列的維度為 39209×32×32×3。該項目中作者僅使用了訓練集和驗證集。作者將使用網上的真實圖像來測試所構建的模型。X_train 存儲圖像,維度為 39209×32×32×3。Y_train 存儲圖像對應的類標,維度為 39209,包含 0-42 的整數,對應每張圖的類標。
訓練過程
1. 準備數據集
X_train 和 Y_train 組成了訓練數據集。可以使用 scikit-learn 對訓練數據集進行分割得到驗證集,這樣可以避免使用出現過的圖片測試模型。代碼如下:
2. 訓練數據預處理
批訓練
神經網絡訓練需要花費大量時間和內存。所以作者將數據分批訓練,一批大小為 64. 不僅是為了讓數據適應內存,而且它可以讓 MXNet 盡量利用 GPU 的計算效率。
歸一化
除此之外,圖像的像素值也進行了歸一化,可以使學習算法更快收斂。下面是對訓練數據進行預處理的代碼:
3. 構建深度網絡
目前,對于圖像識別這類處在探索研究熱點的問題,學界已經設計了很多效果良好的網絡結構。所以最好的方法是實現一個已經發表出來的網絡結構,然后對其進行改進。基于 AlexNet 結構,構建了一個簡化版的卷積神經網絡。AlexNet 是 2012 年發表的一個經典網絡,在當年取得了 ImageNet 的最好成績。
網絡共有 8 層,其中前 5 層是卷積層,后邊 3 層是全連接層,在每一個卷積層中包含了激勵函數 RELU 以及局部響應歸一化(LRN)處理,然后再經過池化(max pooling),最后的一個全連接層的輸出是具有 1000 個輸出的 softmax 層,最后的優化目標是最大化平均的多元邏輯回歸。
在此之后也有很多更優秀的網絡結構被提出,例如 VGGNet 和 ResNet,大家可以選擇更好的網絡結構去實現。
由于 MXNet 的符號計算構架,該神經網絡的代碼十分簡潔明了
4. 訓練網絡
訓練 epoch 為 10,訓練好的模型存在 JSON 文件中,并且可以通過測量訓練和驗證準確率來觀測網絡“學習”的情況。
5. 載入預訓練模型
下面給出了加載第 10 個 epoch 模型(最終模型)的代碼。由于將在單張圖片上進行測試,所以批尺寸由 64 減到 1,數據維度也變成了 1×3×32×32。
測試過程
測試圖像(32×32×3)樣例:
從結果可以看出可能性最高的種類為停車標志,說明預測準確。如果需要對模型有一個更完整的衡量,還需要用測試數據庫進行測試,得到最終的分類準確率。
總結
本文我們介紹了使用 MXNet 進行多目標分類任務的方法。使用 MXNet,在 AlexNet 的結構基礎上構建了一個更為簡單的卷積神經網絡結構。網絡由卷積層,激活函數層,池化層和全連接層組成,采用德國交通標志圖像訓練數據庫對該網絡進行訓練,實驗結果證明網絡可以將交通標志進行正確的分類。介紹了如何使用 MXNet 對數據進行預處理,構建網絡,以及如何加載預訓練好的網絡模型。可以看出,MXNet 因其在多 GPU 上進行并行訓練的能力,以及網絡模型構建簡單靈活的特性,是一個十分優秀的深度學習框架。
?
==========================
本人微信公眾帳號: 心禪道(xinchandao)
?
本人微信公眾帳號:雙色球預測合買(ssqyuce)
總結
以上是生活随笔為你收集整理的人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web开发常用的几种居中形式
- 下一篇: 基于Node的Koa2项目从创建到打包到