特徴量のデコードをカスタマイズする
tfds.decode
API を使うと、デフォルトの特徴量のデコードをオーバーライドすることができます。主なユースケースは、パフォーマンスを改善するために、画像のデコードをスキップすることです。
注意: この API では、ディスク上の低レベルの tf.train.Example
形式にアクセスできます(FeatureConnector
で定義されています)。この API は、画像の読み取り性能の改善を求める高度ユーザーを対象としています。
使用例
画像のデコードをスキップする
デコードパイプラインの完全な制御を維持するため、または画像がデコードされる前にフィルタを適用するため(パフォーマンスの改善)に、画像のデコードを完全にスキップすることができます。これは、tfds.features.Image
と tfds.features.Video
の両方で機能します。
画像をデコードする前にデータセットをフィルタ/シャッフルする
前の例と同様に、tfds.decode.SkipDecoding()
を使用して、画像をデコードする前に tf.data
パイプラインのカスタマイズを追加することができます。こうすることで、フィルタされた画像がデコードされなくなるため、より大きなシャッフルバッファを使用することができます。
クロップとデコードを同時に実行する
デフォルトの tf.io.decode_image
演算をオーバーライドするには、tfds.decode.make_decoder()
デコレータを使用して、新しい tfds.decode.Decoder
オブジェクトを作成することができます。
これは次のコードと同等です。
動画のデコードをカスタマイズする
動画は Sequence(Image())
です。カスタムデコーダを適用すると、個別のフレームに適用されます。つまり、画像のデコーダには、自動的に動画との互換性があります。
これは次のコードと同等です。
特徴量の一部のみをデコードする
必要な特徴量のみを指定することで、一部の特徴量を完全にスキップすることも可能です。指定されていないすべての特徴量は無視またはスキップされます
TFDS は、特定の tfds.decode.PartialDecoding
構造に一致する builder.info.features
のサブセットを選択します。
上記のコードでは、特徴量は builder.info.features
に一致するように暗黙的に抽出されます。また、特徴量を明示的に定義することも可能です。上記のコードは次のコードと同等です。
元のメタデータ(ラベル名、画像の形状など)は自動的に再利用されるため、それらを提供する必要はありません。
tfds.decode.SkipDecoding
は、PartialDecoding(..., decoders={})
kwargs を通じて tfds.decode.PartialDecoding
に渡すことができます。