訓練自己的Android TensorFlow神經網路

寒冰屋發表於2020-10-25

目錄

結論


在這裡,我們看一下如何通過三個命令來下載和構建Darknet。我們還將討論如何收集各種類別的物件的影像以進行訓練和測試,以及如何將影像標記和劃分為兩個列表。

這是在Android上使用TensorFlow的系列文章的最後一部分。該系列的前幾部分介紹瞭如何設定開發環境,查詢經過預先訓練的模型,使其適合在Android應用程式中使用以及建立使用該模型的應用程式。前面的部分使用YOLO實現來建立可識別80類物件的應用程式。

您可以訓練自己的YOLO網路以識別您自己選擇的專案分類。YOLO最初由Joseph RedmondFarhadi 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,12xy位置,並且寬45畫素,高22畫素。由於使用從零開始的索引,因此這裡的數字5代表您先前建立的classes.txt檔案中第六行的專案。

5 10 12 45 22

對於帶有標籤的影像,您將需要將影像分為兩個列表。這兩個列表的影像應以80/ 20%到90/ 10%的比例進行劃分。列表中的較大者將用於訓練網路,而兩個列表中的較小者將用於測試網路。每個列表本身都應包含影像檔案的絕對路徑。將檔案命名為test.txttrain.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 1TensorFlow 2TensorFlow 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模型用於非可視演算法。

相關文章