Github: https://github.com/google/youtube-8m
YouTube-8M Tensorflowスターターコード
このレポには、 YouTube-8Mデータセットに対する機械学習モデルの訓練と評価のためのスターターコードが含まれています。 これはKaggleの第2回Youtube8M Video Understanding Challengeと、ECCV (Compute Vision)に関する欧州会議(ECCV)2018ワークショップセッションの一部のスターターコードです。 このコードは、データセットを読み、TensorFlowモデルをトレーニングし、モデルのパフォーマンスを評価するためのエンドツーエンドの作業例を示しています。 すぐに使用できるフレーム・レベルまたはビデオ・レベルのフィーチャーの上で、いくつかのモデル・アーキテクチャーを訓練することができます。 コードを簡単に拡張して、独自のカスタム定義モデルを訓練することができます。
目次
- 自分のマシンで走る
- Googleのクラウドマシン学習プラットフォームで実行
- モデルの概要
- 独自のデータセットファイルを作成する
- ファイルの概要
- このスターターコードなしのトレーニング
- このプロジェクトについて
自分のマシンで走る
要件
スターターコードにはTensorflowが必要です。 まだインストールしていない場合は、 tensorflow.orgの指示に従ってください。 このコードはTensorflow 1.3.0でテスト済みです。 今後も、Tensorflowの最新リリース版を引き続きターゲットにしていきます。
次のコマンドを実行して、Python 2.7以降とTensorflow 1.3.0以上がインストールされていることを確認してください:
python --version
python -c 'import tensorflow as tf; print(tf.__version__)'
データセットの一部をダウンロードする
データセットをダウンロードするための完全な手順は、 YouTube-8MのWebサイトで確認できます。 データセットの小さなサブセットから始め、必要に応じてさらにダウンロードすることをお勧めします。 たとえば、ビデオレベルとフレームレベルの機能の1/100を次のようにダウンロードできます。
# Video-level
mkdir -p ~/yt8m/v2/video
cd ~/yt8m/v2/video
curl storage.googleapis.com/data.yt8m.org/download_fix.py | shard=1,100 partition=2/video/train mirror=us python
curl storage.googleapis.com/data.yt8m.org/download_fix.py | shard=1,100 partition=2/video/validate mirror=us python
curl storage.googleapis.com/data.yt8m.org/download_fix.py | shard=1,100 partition=2/video/test mirror=us python
# Frame-level
mkdir -p ~/yt8m/v2/frame
cd ~/yt8m/v2/frame
curl storage.googleapis.com/data.yt8m.org/download_fix.py | shard=1,100 partition=2/frame/train mirror=us python
curl storage.googleapis.com/data.yt8m.org/download_fix.py | shard=1,100 partition=2/frame/validate mirror=us python
curl storage.googleapis.com/data.yt8m.org/download_fix.py | shard=1,100 partition=2/frame/test mirror=us python
注:このreadmeは、データセット、コード、および訓練されたモデルを格納するディレクトリ~/yt8m
を想定しています。 ただし、別のディレクトリパスを使用することもできます。 それにもかかわらず、そのディレクトリを~/yt8m
すると、このページのコマンドを端末にコピーできるので便利です。
スターターコードを試してみてください
このgit repoをクローン:
mkdir -p ~/yt8m/code
cd ~/yt8m/code
git clone https://github.com/google/youtube-8m.git
ビデオレベルモデルのトレーニング
python train.py --feature_names='mean_rgb,mean_audio' --feature_sizes='1024,128' --train_data_pattern=${HOME}/yt8m/v2/video/train*.tfrecord --train_dir ~/yt8m/v2/models/video/sample_model --start_new_model
--start_new_model
フラグは最初から再編成されます。 train_dir
からトレーニングを続けたい場合は、このフラグを削除してtrain_dir
。 トレーニングの後、検証分割でモデルを評価できます。
python eval.py --eval_data_pattern=${HOME}/yt8m/v2/video/validate*.tfrecord --train_dir ~/yt8m/v2/models/video/sample_model
注:上記のバイナリは「永遠に」実行されます(つまり、更新されたモデルのチェックポイントを監視してエバールを再実行します)。 一度実行するには、flag --run_once
渡します。次のような行を出力します。
INFO:tensorflow:examples_processed: 298 | global_step 10 | Batch Hit@1: 0.513 | Batch PERR: 0.359 | Batch Loss: 2452.698 | Examples_per_sec: 2708.994
あなたがKaggleで競争しているなら、CSVを出力する推論を行うべきです(例えば、 kaggle_solution.csv
という名前のファイル)。
python inference.py --train_dir ~/yt8m/v2/models/video/sample_model --output_file=kaggle_solution.csv --input_data_pattern=${HOME}/yt8m/v2/video/test*.tfrecord
次に、 kaggle_solution.csv
をKaggleにSubmit PredictionsまたはKaggle API経由でアップロードします 。 さらに、賞品の対象としたい場合は、モデルチェックポイントが1ギガバイト未満である必要があります。 モデルを小さくすることを確認したいので、すべての競技者にモデルファイル(グラフとチェックポイントのみ、コードなし)をアップロードするよう依頼します。 --output_model_tgz
フラグを渡すことによって、モデルを.tgz
ファイルにバンドルすることができます。 例えば
python inference.py --train_dir ~/yt8m/v2/models/video/sample_model --output_file=kaggle_solution.csv --input_data_pattern=${HOME}/yt8m/v2/video/test*.tfrecord --output_model_tgz=my_model.tgz
チームモデルアップロードを使用してmy_model.tgz
をKaggleにアップロードします。
トレインフレームレベルモデル
train.py
を使用してtrain.py
をtrain.py
、フレームレベルのモデル(たとえばFrameLevelLogisticModel
)を選択し、トレーナーに--frame_features
を使用するよう指示します。 TLDR – フレームレベルの機能は圧縮されており、このフラグは圧縮解除されます。
python train.py --frame_features --model=FrameLevelLogisticModel --feature_names='rgb,audio' --feature_sizes='1024,128' --train_data_pattern=${HOME}/yt8m/v2/frame/train*.tfrecord --train_dir ~/yt8m/v2/models/frame/sample_model --start_new_model
モデルを評価する
python eval.py --eval_data_pattern=${HOME}/yt8m/v2/frame/validate*.tfrecord --train_dir ~/yt8m/v2/models/frame/sample_model
推論を実行してCSV( kaggle_solution.csv
)を作成する:
python inference.py --train_dir ~/yt8m/v2/models/frame/sample_model --output_file=kaggle_solution.csv --input_data_pattern=${HOME}/yt8m/v2/frame/test*.tfrecord
上記と同様に、フラグ--output_model_tgz=my_model.tgz
追加することでモデルをタールすることができます。
データセット全体をダウンロードする
分数をダウンロードしてコードが動作するようになったので、データセット全体をダウンロードし、次のベストビデオ分類モデルを考え出すように設定されています。
データセット全体をダウンロードするには、上記のdownload.pyコマンドを繰り返し、 shard
変数を削除します。 あなたはビデオレベルのトレーニングセットをダウンロードすることができます:
curl storage.googleapis.com/data.yt8m.org/download_fix.py | partition=2/video/train mirror=us python
これは、18GBのスペースを占める米国ミラーからのビデオレベルのトレーニングセットをすべてダウンロードします。 北米以外の地域にいる場合は、ヨーロッパの場合は「鏡」、アジアの場合は「アジア」のフラグを変更して、ファイルの転送を高速化する必要があります。
‘train’を ‘validate’ / ‘test’に変更し、コマンドを再実行してデータセットの他の分割をダウンロードします。 ‘ビデオ’を ‘フレーム’に変更して、フレームレベルの機能をダウンロードします。 完全なフレームレベル機能は約1.53TBのスペースを占有します。 m / n番目のデータだけをダウンロードするには、環境変数 ‘shard’を ‘m、n’に設定します。
テンソルボード
Tensorboardを使用して、次のようなフレームレベルまたはビデオレベルのモデルを比較することができます。
MODELS_DIR=~/yt8m/v2/models
tensorboard --logdir frame:${MODELS_DIR}/frame,video:${MODELS_DIR}/video
我々は、異なるモデルを訓練し、評価する際に、テンソルボードのインスタンスを常に稼働させたままにすることが有用であることを発見しました。
トレーニングの詳細
バイナリのtrain.py
、 evaluate.py
、 inference.py
は--train_dir
フラグを--train_dir
ます。 --train_dir
は、モデルが訓練されている--train_dir
、TensorFlowグラフとモデルチェックポイントをtrain.py
出力します。 また、モデルを設定するためにevaluate.py
とinference.py
使用されるJSONファイル、 model_flags.json
出力します。フィードするデータの種類(フレームレベルのVSビデオレベル、渡されたフラグによって決まるtrain.py
)。
--model
フラグを使用すると、モデルを指定できます。 たとえば、次のようにLogisticModel
(デフォルト)を利用できます。
YT8M_DIR=~/yt8m/v2
python train.py --train_data_pattern=${YT8M_DIR}/v2/video/train*.tfrecord --model=LogisticModel --train_dir ~/yt8m/v2/models/logistic
データセットは3844個の個別ファイルに分割されているため、これらのファイルすべてを表すにはワイルドカード(*)を使用します。
既定では、トレーニングコードは頻繁にチェックポイントファイル(現在のトレーニングの反復で、すべての学習可能なパラメータの値)を書き込みます。 これらは--train_dir
書き込まれます。 --train_dir
を再利用すると、トレーナはまずそのディレクトリに書き込まれた最新のチェックポイントを復元します。 これは、チェックポイントのアーキテクチャがトレーニングコードによって作成されたグラフと一致する場合にのみ機能します。 アクティブな開発/デバッグ段階にある場合は、実行構成に--start_new_model
フラグを追加することを検討してください。
評価と推論
モデルを評価するには、
python eval.py --eval_data_pattern=${YT8M_DIR}/v2/video/validate*.tfrecord --train_dir ~/yt8m/v2/models/logistic --run_once=True
モデルに満足している場合は、実行して予測からcsvファイルを生成できます
python inference.py --output_file predictions.csv --input_data_pattern=${YT8M_DIR}/v2/video/test*.tfrecord' --train_dir ~/yt8m/v2/models/logistic
これにより、すべての例のモデルから予測された上位20のラベルがpredictions.csv
ます。
フレームレベル機能の使用
上記と同じ指示に従い、 --frame_features=True --model=FrameLevelLogisticModel --feature_names="rgb" --feature_sizes="1024"
をtrain.py
、– train.py
を変更し--train_dir
。
FrameLevelLogisticModel
は、ビデオレベルのフィーチャでトレーニングされたロジスティックモデルに同等の結果を提供するように設計されています。 独自のモデルを実装する方法については、 models.py
ファイルを参照してください。
オーディオ機能の使用
機能ファイル(フレームレベルとビデオレベルの両方)には、1)ビジュアルと2)オーディオの2つの機能セットが含まれています。 このコードでは、ビジュアル機能のみを使用するようにデフォルト設定されていますが、ビジュアル機能の代わりに(またはビジュアル機能以外の)オーディオ機能を使用することもできます。 使用する機能の組み合わせを指定するには、– --feature_sizes
および--feature_sizes
フラグを設定する必要があります。 視覚的および音声的特徴は、それぞれ「rgb」および「音声」と呼ばれ、それぞれ1024および128次元を有する。 2つのフラグは、文字列内のコンマ区切りの値リストを取ります。 たとえば、オーディオビジュアルビデオレベル機能を使用するには、フラグを次のように設定する必要があります。
--feature_names="mean_rgb,mean_audio" --feature_sizes="1024,128"
同様に、オーディオビジュアルフレームレベル機能を使用するには、次のようにします。
--feature_names="rgb,audio" --feature_sizes="1024,128"
注:上記の2つのフラグに指定されたリストと機能のセットが一致していることを確認してください。
GPUの使用
TensorflowのインストールでGPUがサポートされている場合、このコードはすべての互換性のあるGPUを使用します。 実行してインストールを確認することができます
python -c 'import tensorflow as tf; tf.Session()'
これにより、互換性のあるGPUごとに次のようなものが出力されます。
I tensorflow/core/common_runtime/gpu/gpu_init.cc:102] Found device 0 with properties:
name: Tesla M40
major: 5 minor: 2 memoryClockRate (GHz) 1.112
pciBusID 0000:04:00.0
Total memory: 11.25GiB
Free memory: 11.09GiB
...
少なくとも1つのGPUが見つかった場合は、順方向および逆方向パスがGPUで計算されますが、CPUは主に入力および出力パイプラインで使用されます。 複数のGPUを使用している場合、現在のデフォルトの動作は、それらのうちの1つだけを使用することです。
真実のラベルファイル
また、データセットの「列車」および「検証」パーティションのグラウンドトゥルースラベル情報を含むCSVファイルも提供します。 これらのファイルは、 ‘gsutil’コマンドを使用してダウンロードできます。
gsutil cp gs://us.data.yt8m.org/2/ground_truth_labels/train_labels.csv /destination/folder/
gsutil cp gs://us.data.yt8m.org/2/ground_truth_labels/validate_labels.csv /destination/folder/
次のリンクを直接使用してください:
- http://us.data.yt8m.org/2/ground_truth_labels/train_labels.csv
- http://us.data.yt8m.org/2/ground_truth_labels/validate_labels.csv
ファイルの各行は、ビデオIDで始まり、そのビデオに対応するグランド真理値ラベルのリストが続きます。 たとえば、「VIDEO_ID」というIDの動画と「LABEL1」と「LABEL2」という2つのラベルの動画の場合、次の行が保存されます。
VIDEO_ID,LABEL1 LABEL2
Googleのクラウドマシン学習プラットフォームで実行
要件
このオプションを使用するには、適切に設定されたGoogle Cloud Platformアカウントが必要です。 アカウントを作成して設定するには、 こちらの手順に従ってください。
また、次のコマンドを実行して、Python 2.7以降とTensorflow 1.0.0以上がインストールされていることを確認してください。
python --version
python -c 'import tensorflow as tf; print(tf.__version__)'
ローカルでのテスト
すべてのgcloudコマンドは、ソースコードのすぐ上のディレクトリから実行する必要があります。 ‘ls’を実行すると、ソースコードディレクトリを見ることができるはずです。
独自のモデルを開発しているときに、クラウドに提出することなく簡単な問題を洗い流すために、それらを素早くテストしたいと考えています。 そのためにgcloud beta ml local
コマンドを使うことができます。
ビデオレベルのトレーニングのコマンドラインの例を次に示します。
gcloud ml-engine local train \
--package-path=youtube-8m --module-name=youtube-8m.train -- \
--train_data_pattern='gs://youtube8m-ml/2/video/train/train*.tfrecord' \
--train_dir=/tmp/yt8m_train --model=LogisticModel --start_new_model
あなたは物事をスピードアップし、オフラインで作業できるように、いくつかのトレーニングシャードをローカルでダウンロードしたいと思うかもしれません。 以下のコマンドは、4096のトレーニングデータファイルのうちの10個を現在のディレクトリにコピーします。
# Downloads 55MB of data.
gsutil cp gs://us.data.yt8m.org/2/video/train/traina[0-9].tfrecord .
ファイルをダウンロードしたら、 ‘train_data_pattern’引数を使用してジョブをポイントすることができます(つまり、 “gs:// …”ファイルを指す代わりに、ローカルファイルを指す)。
モデルがローカルで動作したら、以下で説明するCloud上でスケールアップすることができます。
ビデオレベルの機能よりも雲のトレーニング
次のコマンドは、ビデオレベルの機能よりもGoogle Cloudのモデルを訓練します。
BUCKET_NAME=gs://${USER}_yt8m_train_bucket
# (One Time) Create a storage bucket to store training logs and checkpoints.
gsutil mb -l us-east1 $BUCKET_NAME
# Submit the training job.
JOB_NAME=yt8m_train_$(date +%Y%m%d_%H%M%S); gcloud --verbosity=debug ml-engine jobs \
submit training $JOB_NAME \
--package-path=youtube-8m --module-name=youtube-8m.train \
--staging-bucket=$BUCKET_NAME --region=us-east1 \
--config=youtube-8m/cloudml-gpu.yaml \
-- --train_data_pattern='gs://youtube8m-ml-us-east1/2/video/train/train*.tfrecord' \
--model=LogisticModel \
--train_dir=$BUCKET_NAME/yt8m_train_video_level_logistic_model
上記の ‘gsutil’コマンドでは、 ‘package-path’フラグは ‘train.py’スクリプトを含むディレクトリ、より一般的にはクラウドワーカーに配布されるべきpythonパッケージを参照します。 module-nameは、実行されるべき特定のpythonスクリプト(この場合はtrainモジュール)を参照します。
ジョブがGoogle Cloudで実行されるまでには数分かかる場合があります。 起動すると、次のような出力が表示されます。
training step 270| Hit@1: 0.68 PERR: 0.52 Loss: 638.453
training step 271| Hit@1: 0.66 PERR: 0.49 Loss: 635.537
training step 272| Hit@1: 0.70 PERR: 0.52 Loss: 637.564
この時点で、「Ctrl-c」を押してコンソールを取り外すことができます。 モデルは雲の中で無期限に訓練を続けます。 その後、 Google Cloud ML Jobsコンソールにアクセスして、その進行状況を確認したり、ジョブを停止したりすることができます。
一度に多くの仕事を訓練することができ、テンソルボードを使って視覚的にパフォーマンスを比較することができます。
tensorboard --logdir=$BUCKET_NAME --port=8080
テンソルボードが実行されると、 http:// localhost:8080という URLでアクセスできます。 Google Cloud Shellを使用している場合は、Cloud Shellウィンドウの左上隅にある[Webプレビュー]ボタンをクリックし、[ポート8080でプレビュー]を選択します。 これにより、Tensorboardビューで新しいブラウザタブが表示されます。
評価と推論
検証データセットでモデルを評価する方法は次のとおりです。
JOB_TO_EVAL=yt8m_train_video_level_logistic_model
JOB_NAME=yt8m_eval_$(date +%Y%m%d_%H%M%S); gcloud --verbosity=debug ml-engine jobs \
submit training $JOB_NAME \
--package-path=youtube-8m --module-name=youtube-8m.eval \
--staging-bucket=$BUCKET_NAME --region=us-east1 \
--config=youtube-8m/cloudml-gpu.yaml \
-- --eval_data_pattern='gs://youtube8m-ml-us-east1/2/video/validate/validate*.tfrecord' \
--model=LogisticModel \
--train_dir=$BUCKET_NAME/${JOB_TO_EVAL} --run_once=True
テストセット上のモデルで推論を実行する方法は次のとおりです。
JOB_TO_EVAL=yt8m_train_video_level_logistic_model
JOB_NAME=yt8m_inference_$(date +%Y%m%d_%H%M%S); gcloud --verbosity=debug ml-engine jobs \
submit training $JOB_NAME \
--package-path=youtube-8m --module-name=youtube-8m.inference \
--staging-bucket=$BUCKET_NAME --region=us-east1 \
--config=youtube-8m/cloudml-gpu.yaml \
-- --input_data_pattern='gs://youtube8m-ml/2/video/test/test*.tfrecord' \
--train_dir=$BUCKET_NAME/${JOB_TO_EVAL} \
--output_file=$BUCKET_NAME/${JOB_TO_EVAL}/predictions.csv
上記のgcloudコマンドでは、「トレーニング」の混乱した使用に注意してください。 名前にもかかわらず、 ‘訓練’の議論は、実際には雲のホストpython / tensorflowサービスを提供しています。 クラウドプラットフォームの観点からは、トレーニングと推論の仕事は区別されません。 クラウドMLプラットフォームは、Tensorflowモデルでの予測に特化した機能も提供していますが、これについてはこのReadmeの対象外です。
これらのジョブが実行されると、評価コードについて次のような出力が表示されます。
examples_processed: 1024 | global_step 447044 | Batch Hit@1: 0.782 | Batch PERR: 0.637 | Batch Loss: 7.821 | Examples_per_sec: 834.658
推論コードについては以下のようになります。
num examples processed: 8192 elapsed seconds: 14.85
Googleクラウド上のファイルへのアクセス
たとえば、 Google Cloudストレージブラウザにアクセスして、訓練されたモデル、予測CSVファイルなどにアクセスするために、Google Cloudで作成したストレージバケットを参照できます。
代わりに、 ‘gsutil’コマンドを使ってファイルを直接ダウンロードすることもできます。 たとえば、前のセクションの推論コードの出力をローカルマシンにダウンロードするには、次のコマンドを実行します。
gsutil cp $BUCKET_NAME/${JOB_TO_EVAL}/predictions.csv .
フレームレベル機能の使用
追加する
--frame_features=True --model=FrameLevelLogisticModel --feature_names="rgb" \
--feature_sizes="1024" --batch_size=128 \
--train_dir=$BUCKET_NAME/yt8m_train_frame_level_logistic_model
上記の ‘gcloud’トレーニングコマンドに変更し、 ‘frame’へのパスで ‘video’を変更します。 フレームレベルのジョブを開始するコマンドの例を次に示します。
JOB_NAME=yt8m_train_$(date +%Y%m%d_%H%M%S); gcloud --verbosity=debug ml-engine jobs \
submit training $JOB_NAME \
--package-path=youtube-8m --module-name=youtube-8m.train \
--staging-bucket=$BUCKET_NAME --region=us-east1 \
--config=youtube-8m/cloudml-gpu.yaml \
-- --train_data_pattern='gs://youtube8m-ml-us-east1/1/frame_level/train/train*.tfrecord' \
--frame_features=True --model=FrameLevelLogisticModel --feature_names="rgb" \
--feature_sizes="1024" --batch_size=128 \
--train_dir=$BUCKET_NAME/yt8m_train_frame_level_logistic_model
‘FrameLevelLogisticModel’は、ビデオレベルのフィーチャを訓練したロジスティックモデルに同等の結果を提供するように設計されています。 独自のモデルを実装する方法については、 ‘video_level_models.py’または ‘frame_level_models.py’ファイルをご覧ください。
オーディオ機能の使用
機能ファイル(フレームレベルとビデオレベルの両方)には、1)ビジュアルと2)オーディオの2つの機能セットが含まれています。 このコードでは、ビジュアル機能のみを使用するようにデフォルト設定されていますが、ビジュアル機能の代わりに(またはビジュアル機能以外の)オーディオ機能を使用することもできます。 使用する機能の組み合わせを指定するには、– --feature_sizes
および--feature_sizes
フラグを設定する必要があります。 視覚的および音声的特徴は、それぞれ「rgb」および「音声」と呼ばれ、それぞれ1024および128次元を有する。 2つのフラグは、文字列内のコンマ区切りの値リストを取ります。 たとえば、オーディオビジュアルビデオレベル機能を使用するには、フラグを次のように設定する必要があります。
--feature_names="mean_rgb,mean_audio" --feature_sizes="1024,128"
同様に、オーディオビジュアルフレームレベル機能を使用するには、次のようにします。
--feature_names="rgb,audio" --feature_sizes="1024,128"
注:上記の2つのフラグに指定されたリストと機能のセットが一致していることを確認してください。 また、訓練、評価、または推論を実行するときは、順序が一致している必要があります。
より大きいマシンタイプの使用
いくつかの複雑なフレームレベルモデルでは、GPUを1つしか使用しない場合、収束するまでに1週間かかることがあります。 追加のGPUを持つより強力なマシンタイプを使用することで、これらのモデルをより迅速にトレーニングできます。 4つのGPUで構成を使用するには、 youtube-8m/cloudml-4gpu.yaml
の引数をyoutube-8m/cloudml-4gpu.yaml
ます。 この議論にも注意してください。課金される料金も同様に4倍になるでしょう。
モデルの概要
このサンプルコードには、 YouTube-8M技術レポートに記載されているモデルの実装が含まれています。
ビデオレベルモデル
-
LogisticModel
:出力フィーチャをラベル空間に線形投影し、その後にロジット値を確率に変換するシグモイド関数を続けます。 -
MoeModel
:設定可能な数のロジスティック分類子に対するクラスごとのMoeModel
分布。 混合物中の分類子の1つは訓練されておらず、常に0と予測される。
フレームレベルモデル
-
LstmModel
:多層LSTMニューラルネットを用いて各フレームの特徴を処理する。 LSTMの最終的な内部状態は、分類のためにビデオレベルモデルに入力される。 このモデルを使用する場合は、学習率を0.001に変更する必要があります。 -
DbofModel
:各フレームのフィーチャを高次元の「クラスタリング」空間にDbofModel
、その空間内のフレームにプールし、次にビデオレベルのモデルを使用して、今集計されたフィーチャを分類します。 -
FrameLevelLogisticModel
: ‘LogisticModel’に相当しますが、事前集約されたフィーチャを使用するのではなく、フレームレベルのフィーチャを使用してオンザフライで平均プールを実行します。
独自のデータセットファイルを作成する
自分のビデオからデータセットファイルを作成できます。 私たちの特徴抽出コードは、私たちのデータセットファイルと同じtfrecord
ファイルを作成します。 私たちの初心者のコードを使って、特徴抽出子が出力するtfrecord
ファイルを訓練することができます。 さらに、新しいデータセットでYouTube-8Mモデルを微調整することもできます。
ファイルの概要
トレーニング
-
train.py
:トレーニングモデルのための主要なスクリプト。 -
losses.py
:損失関数の定義をlosses.py
ます。 -
models.py
:モデルを定義するための基本クラスをmodels.py
ます。 -
video_level_models.py
:集約されたフィーチャを入力として使用するモデルの定義をvideo_level_models.py
ます。 -
frame_level_models.py
:入力としてフレームレベルの機能を使用するモデルの定義をframe_level_models.py
ます。 -
model_util.py
:モデルを実装するための汎用ユーティリティである関数が含まれています。 -
export_model.py
:後でバッチ予測で使用するために、トレーニング中にモデルをエクスポートするクラスを提供します。 -
readers.py
データセットとFrameデータセットリーダーの定義が含まれています。
評価
-
eval.py
:モデルを評価するための主要なスクリプト。 -
eval_util.py
:すべての評価指標を計算するクラスを提供します。 -
average_precision_calculator.py
:平均精度を計算するための関数。 -
mean_average_precision_calculator.py
:平均平均精度を計算するための関数。
推論
-
inference.py
:一連の動画上でモデルの予測を含む出力CSVファイルを生成します。 オプションで、モデルのタールファイルを生成します。
その他
-
README.md
:このドキュメント。 -
utils.py
:共通関数です。 -
convert_prediction_from_json_to_csv.py
:バッチ予測のJSON出力をconvert_prediction_from_json_to_csv.py
用のCSVファイルに変換します。
このスターターコードなしのトレーニング
初心者コードを使用せずにデータセットを使用することは大歓迎です。 しかし、あなたがKaggleに挑戦したいのであれば、予測CSVファイルと、 inference.py
によって生成されたものと一致するモデル.tgz
ファイルを生成できることを確認する必要があります。 具体的には、 予測CSVファイルにはId,Labels
各テスト例でId
として格納されているid
、 Labels
はスペースで区切られた整数ラベルIDのリストの2つのフィールドが必要です。 .tgz
は、以下の4つのファイルがminumumに含まれている必要があります。
-
model_flags.json
:feature_sizes
、frame_features
、およびfeature_names
キーを持つJSONファイル。 これらは、train.py
で設定可能な値に設定する必要があります。 たとえば、モデルがフレームレベルのモデルで、ビジョンとオーディオの機能が(この順序で)必要な場合、model_flags.json
の内容はmodel_flags.json
ようになります。{"feature_sizes":"1024,128", "frame_features":true, "feature_names":"rgb,audio"}
-
ファイル
inference_model.data-00000-of-00001
、inference_model.index
、およびinference_model.meta
、これらはTensorFlow MetaGraphとしてロード可能でなければなりません。
.tgz
ファイルが正しく生成されたことを確認するには、inference.pyで実行します。
python inference.py --input_model_tgz=/path/to/your.tgz --output_file=kaggle_solution.csv --input_data_pattern=${HOME}/yt8m/v2/video/test*.tfrecord
モデルがフレームレベルモデルである場合は、 video
をframe
に置き換えてください。
このプロジェクトについて
このプロジェクトは、 YouTube-8Mデータセットの作業をすぐに開始できるようにするためのものです。 これは公式のGoogleサービスではありません。