Cloud TPU で使用する画像分類データセットの変換
このチュートリアルでは、画像分類データ変換プログラムのサンプル スクリプトを使用して、元の画像分類データセットを Cloud TPU モデルのトレーニングで使用される TFRecord 形式に変換する方法について説明します。
TFRecord では、各画像を個別のファイルとして読み取るよりも Cloud Storage から大きなファイルを読み取るほうが効率的です。TFRecord は、tf.data.Dataset パイプラインを使用している場所であればどこでも使用できます。
TFRecord の使用について詳しくは、次の TensorFlow ドキュメントをご覧ください。
- TFRecord と tf.train.Example
- tf.data.Dataset
- tf.data: TensorFlow 入力パイプライン
- PyTorch TFRecord の読み取りと書き込み
PyTorch または JAX フレームワークを使用しており、データセット ストレージに Cloud Storage を使用していない場合は、TFRecord の利点を活用できない可能性があります。
変換の概要
GitHub のデータ コンバータ リポジトリ内の画像分類フォルダには、converter スクリプト(image_classification_data.py)とサンプル実装(simple_example.py)があります。これらをコピーして変更することで、独自のデータ変換を行うことができます。
画像分類データ コンバータのサンプルでは、ImageClassificationConfig と ImageClassificationBuilder の 2 つのクラスを定義しています。これらのクラスは tpu/tools/data_converter/image_classification_data.py で定義されています。
ImageClassificationConfig は要約ベースクラスです。ImageClassificationConfig をサブクラス化して、ImageClassificationBuilder をインスタンス化するために必要な構成を定義します。
ImageClassificationBuilder は、画像分類データセットの TensorFlow データセット ビルダーです。これは tdfs.core.GeneratorBasedBuilder のサブクラスです。データセットからデータのサンプルを取得し、TFRecords に変換します。TFRecord は、ImageClassificationBuilder の __init__ メソッドの data_dir パラメータで指定されたパスに書き込まれます。
simple_example.py で、サポートされるモードを定義するプロパティ、イメージクラスの数、データセット内の各サンプルの画像データと画像クラスを含む辞書を生成するサンプル生成ツールを実装して、SimpleDatasetConfig は ImageClassificationConfig をサブクラス化します。
main() 関数は、ランダムに生成された画像データのデータセットを作成し、クラスの数とディスク上のデータセットへのパスを指定する SimpleDatasetConfig オブジェクトをインスタンス化します。次に、main() は、SimpleDatasetConfig インスタンスを渡し、ImageClassificationBuilder オブジェクトをインスタンス化します。最後に、main() が download_and_prepare() を呼び出します。このメソッドが呼び出されると、ImageClassificationBuilder インスタンスは SimpleDatasetConfig によって実装されたデータサンプル生成ツールで各サンプルを読み込み、一連の TFRecord ファイルに保存します。
詳細については、分類コンバータのノートブックをご覧ください。
データ コンバージョン サンプルの変更とデータセットの読み込み
データセットを TFRecord 形式に変換するには、次のプロパティを定義する ImageClassificationConfig クラスをサブクラス化します。
- num_labels: 画像クラスの数を返します
- supported_modes: データセットでサポートされているモードのリストを返します(例: test、train、validate)
- text_label_map: テキストクラス ラベルと整数クラスラベル間のマッピングをモデル化する辞書を返します(SimpleDatasetConfig はマッピングを必要としないため、このプロパティを使用しません)。
- download_path: データセットのダウンロード元のパス(SimpleDatasetConfig はこのプロパティを使用しません。example_generator はディスクからデータを読み込みます)。
example_generator 生成ツール関数を実装します。このメソッドでは、画像データと各サンプルの画像クラス名を含む辞書を生成する必要があります。ImageClassificationBuilder は example_generator() 関数を使用して各サンプルを取得し、TFRecord 形式でディスクに書き込みます。