訓練自己的Android TensorFlow神經網路
目錄
在這裡,我們看一下如何通過三個命令來下載和構建Darknet。我們還將討論如何收集各種類別的物件的影像以進行訓練和測試,以及如何將影像標記和劃分為兩個列表。
這是在Android上使用TensorFlow的系列文章的最後一部分。該系列的前幾部分介紹瞭如何設定開發環境,查詢經過預先訓練的模型,使其適合在Android應用程式中使用以及建立使用該模型的應用程式。前面的部分使用YOLO實現來建立可識別80類物件的應用程式。
您可以訓練自己的YOLO網路以識別您自己選擇的專案分類。YOLO最初由Joseph Redmond和Farhadi Ali使用Darknet實現。Darknet是用於製作神經網路的基於C的開源框架。如果您的計算機已經安裝了C編譯器和make,則可以下載Darknet並使用以下三個命令構建它們:
git clone https://github.com/pjreddie/darknet
cd darknet
make
確定您希望網路識別的影像類別。列出文字檔案中的類的列表,以使它們按定義的順序排列。每個班級都應該排成一行。該檔案將用於訓練。擁有一個有序列表也很重要,因為影像類將由該列表中類的從零開始的索引來表示。將此檔案命名為classes.txt並將其放置在Darknet資料資料夾中。
接下來,收集各個類別中的物件影像以進行訓練和測試。這可能是最具挑戰性的步驟之一,因為每個類別都需要數百張影像。對於您要識別的專案,您需要從不同角度在各種情況下對它們進行拍照。每個影像檔案也必須標記。通過建立與該影像具有相同名稱(但副檔名為txt)的文字檔案來標記影像,該文字檔案包含訓練影像中每個樣本物件的一行。每行有五個元素,中間用空格隔開。
<object-class> <x> <y> <w> <h>
下面是這樣一條線的示例。對於此行,被分類為第5類的物件位於影像中10,12的x,y位置,並且寬45畫素,高22畫素。由於使用從零開始的索引,因此這裡的數字5代表您先前建立的classes.txt檔案中第六行的專案。
5 10 12 45 22
對於帶有標籤的影像,您將需要將影像分為兩個列表。這兩個列表的影像應以80%/ 20%到90%/ 10%的比例進行劃分。列表中的較大者將用於訓練網路,而兩個列表中的較小者將用於測試網路。每個列表本身都應包含影像檔案的絕對路徑。將檔案命名為test.txt和train.txt。
這些檔案現在將成為配置集的一部分。在資料資料夾中,建立一個名為training_config.data的檔案。該檔案將包含有關網路將檢測到的類的數量,包含訓練資料檔案列表的檔案的路徑,包含測試檔案列表的檔案的路徑以及間歇性放置的資料夾名稱的資訊訓練期間的結果。
classes= 20
train = /dev/darknet/data/train.txt
valid = /dev/darknet/data/test.txt
names = data/classes.txt
backup = backup
有了該檔案之後,您現在就可以開始訓練了:
./darknet detector train cfg/training_config.data cfg/yolov3-voc.cfg
訓練是一個耗時的過程。訓練開始後,可能是離開計算機並做其他事情的好時機。如果在行動式計算機上執行訓練,請確保已將其連線到電源。訓練需要大量計算,並且計算機可能會在一段時間內處於較高功率狀態之一。
訓練完成後,您將獲得DarkNet.weights檔案。有幾種開源實用程式可將該檔案轉換為TensorFlow 1或TensorFlow 2的TensorFlow freeze圖。我建議與TensorFlow相容的實用程式名為Yolov4-tflite,這是一個Python指令碼實用程式,您可以從以下URL克隆該實用程式:
https://github.com/hunglc007/tensorflow-yolov4-tflite
要轉換權重檔案,該實用程式接受檔案的路徑:
python save_model.py --weights ../darknet/yolov3.weights -output my-yolov --input_size 416 --model yolov3
程式的輸出提供了一個TensorFlow freeze圖,可以立即使用或轉換為TensorFlow Lite。
結論
這是在Android上使用TensorFlite Lite的六部分系列的最後一部分。我專注於使用現有模型,並將注意力轉向了視覺處理。這不是可以使用TensorFlow的唯一領域。如果您具有有關如何形成輸入或解釋輸出的資訊,則本系列中介紹的資訊也可以用於匯入和使用TensorFlow模型用於非可視演算法。
相關文章
- 3.3 神經網路的訓練神經網路
- 如何用C++在TensorFlow中訓練深度神經網路C++神經網路
- 機器學習之訓練神經網路:最佳做法機器學習神經網路
- 如何應對訓練的神經網路不工作?神經網路
- 用神經網路測量訓練集的半衰期神經網路
- 使用tf.estimator.Estimator訓練神經網路神經網路
- 深度神經網路為何很難訓練?神經網路
- Batch Normalization: 如何更快地訓練深度神經網路BATORM神經網路
- 從零開始:教你如何訓練神經網路神經網路
- 訓練神經網路時如何確定batch size?神經網路BAT
- umich cv-5-1 神經網路訓練1神經網路
- umich cv-5-2 神經網路訓練2神經網路
- 用神經網路訓練一個文字分類器神經網路文字分類
- 神經網路訓練的三個基本概念Epoch, Batch, Iteration神經網路BAT
- TensorFlow神經網路優化策略神經網路優化
- 【python實現卷積神經網路】開始訓練Python卷積神經網路
- 《神經網路和深度學習》系列文章三十八:深度神經網路為何很難訓練?神經網路深度學習
- 【Tensorflow_DL_Note10】TensorFlow神經網路程式設計框架樣例MNIST訓練模組神經網路程式設計框架
- tensorflow學習筆記四:mnist例項--用簡單的神經網路來訓練和測試筆記神經網路
- TensorFlow on Android:訓練模型Android模型
- 面向統一的AI神經網路架構和預訓練方法AI神經網路架構
- 談談如何訓練一個效能不錯的深度神經網路神經網路
- 深度學習tensorflow實戰筆記(1)全連線神經網路(FCN)訓練自己的資料(從txt檔案中讀取)深度學習筆記神經網路
- 【自己動手寫神經網路】---人人都可以學的神經網路書神經網路
- Tensorflow系列專題(四):神經網路篇之前饋神經網路綜述神經網路
- 如何入門Pytorch之四:搭建神經網路訓練MNISTPyTorch神經網路
- 【機器學習】李宏毅——類神經網路訓練不起來怎麼辦機器學習神經網路
- 深度學習與CV教程(6) | 神經網路訓練技巧 (上)深度學習神經網路
- 神經網路之反向傳播訓練(8行程式碼)神經網路反向傳播行程
- Tensorflow-卷積神經網路CNN卷積神經網路CNN
- TensorFlow構建迴圈神經網路神經網路
- 利用Tensorflow實現神經網路模型神經網路模型
- 【Tensorflow_DL_Note11】TensorFlow神經網路程式設計框架樣例MNIST的訓練與測試神經網路程式設計框架
- 關於訓練神經網路的諸多技巧Tricks(完全總結版)神經網路
- Tensorflow中神經網路的啟用函式神經網路函式
- 使用人工神經網路訓練手寫數字識別模型神經網路模型
- [譯] TensorFlow 教程 #02 - 卷積神經網路卷積神經網路
- Tensorflow神經網路預測股票均價神經網路