既然我們已設定 TensorFlow,我們將使用 YOLO 架構來定型物件偵測模型。 YOLO 是一種神經網路,在一次評估中預測影像中的邊界框和類別機率。 YOLO 模型每秒可以處理超過 60 個畫面格,使其成為偵測影片中對象的絕佳架構。 您可以 在這裡找到 YOLO 運作方式的詳細資訊。
使用YOLO
首先,下載 此 YOLO 範例檔案,其中包含要開始使用的協助程式腳本。
使用 YOLO 時,我們有 3 個選項:
使用預訓練的模型權重來應用於YOLO。 預先定型的模型已在具有80個類別(類別)的大型數據集上定型,適用於公共汽車、人員、三明治等日常物件。如果您想要以 ONNX 格式下載預先定型的 YOLO 模型,您可以 在這裡執行此動作。 然後,您可以繼續進行 本教學課程的最後階段 ,以瞭解如何將該模型整合到應用程式中。
使用自訂數據集實作傳輸學習。 轉移學習是使用定型模型作為起點的方法,用來定型解決不同但相關工作的模型。 本教學課程將使用具有 80 個類別的預先訓練 YOLO 權重,訓練一個具有 20 個類別的模型,並使用 VOC 數據集。 如果您想要使用自定義類別建立自己的數據集,請參閱 這裡的指示。
從零開始訓練 YOLO。 不建議使用這項技術,因為很難交集。 原始的YOLO論文在訓練整個神經網路之前,先在Imagenet(包含數十萬張照片)上訓練了darknet。
對預訓練的 YOLO 權重進行遷移學習至 VOC 數據集:
讓我們繼續進行第二個選項,並使用下列步驟實作傳輸學習。
- 在 miniconda 視窗中,流覽至 yolo 範例目錄,然後執行下列命令以安裝 YOLO 所需的所有 pip 套件。
pip install -r requirements.txt
- 執行安裝腳本以下載數據和預先定型的權數
python setup.py
- 轉換數據集。 如需實作,請參閱
tools/voc2012.py
- 此格式是以 tensorflow 物件偵測 API 為基礎。 許多欄位並非必要,但這裡已填入 ,以便與官方 API 相容。
python tools/voc2012.py \
--data_dir './data/voc2012_raw/VOCdevkit/VOC2012' \
--split train \
--output_file ./data/voc2012_train.tfrecord
python tools/voc2012.py \
--data_dir './data/voc2012_raw/VOCdevkit/VOC2012' \
--split val \
--output_file ./data/voc2012_val.tfrecord
- 定型模型。 執行以下命令:
python convert.py
python detect.py --image ./data/meme.jpg # Sanity check
python train.py \
--dataset ./data/voc2012_train.tfrecord \
--val_dataset ./data/voc2012_val.tfrecord \
--classes ./data/voc2012.names \
--num_classes 20 \
--mode fit --transfer darknet \
--batch_size 16 \
--epochs 10 \
--weights ./checkpoints/yolov3.tf \
--weights_num_classes 80
您現在已有 20 個類別的重新定型模型,可供使用。
後續步驟
現在我們已建立 TensorFlow 模型,因此必須將 它轉換成 ONNX 格式 ,以搭配 Windows Machine Learning API 使用。