TensorFlow を構成したので、YOLO アーキテクチャを使用してオブジェクト検出モデルをトレーニングします。 YOLO は、画像から境界ボックスとクラス確率を 1 つの評価で予測するニューラル ネットワークです。 YOLO モデルは 1 秒あたり 60 フレーム以上を処理できるため、ビデオ内のオブジェクトを検出するための優れたアーキテクチャになります。 YOLO のしくみの詳細については、 こちらをご覧ください。
YOLO の使用
まず、 この YOLO サンプル ファイルをダウンロードします。このファイルには、開始するためのヘルパー スクリプトが含まれています。
YOLO を使用する場合、次の 3 つのオプションがあります。
事前トレーニング済みのモデルの重みを YOLO に利用します。 事前トレーニング済みのモデルは、バス、人、サンドイッチなどの日常的なオブジェクトに対して 80 個のクラス (カテゴリ) を持つ大規模なデータセットでトレーニングされています。事前トレーニング済みの YOLO モデルを ONNX 形式でダウンロードする場合は、 ここでダウンロードできます。 その後、 このチュートリアルの最終段階 に進み、そのモデルをアプリに統合する方法を学習できます。
カスタム データセットを使用して転移学習を実装します。 転移学習は、トレーニング済みのモデルを開始点として使用して、別の関連タスクを解決するモデルをトレーニングするための方法です。 このチュートリアルでは、事前トレーニング済みの YOLO 重みと 80 個のクラスを使用して、 VOC データセットを含む 20 個のクラスでモデルをトレーニングします。 カスタム クラスを使用して独自のデータセットを作成する場合は、 こちらの手順を参照してください。
YOLO をゼロからトレーニングします。 この手法は、収束が非常に困難であるため、推奨されません。 オリジナルの YOLO ペーパーは、ネットワーク全体をトレーニングする前に、イメージネット (数十万枚の写真を含む) でダークネットをトレーニングしました。
事前トレーニング済みの YOLO 重みに対する転送学習を VOC データセットに実装します。
2 番目のオプションに進み、次の手順で転移学習を実装しましょう。
- 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 モデルを作成したので、Windows Machine Learning API で使用 するために、それを ONNX 形式に変換 する必要があります。