MIT-Adobe FiveK Datasetとツールの紹介

概要

  • 豊富なRAWデータが利用できるMIT-Adobe FiveK Dataset*1を紹介する。
  • MIT-Adobe FiveK Datasetを簡単にダウンロードして使うためのツールを作成したので紹介する。

github.com

MIT-Adobe FiveK Datasetとは

MIT-Adobe FiveK Datasetとは一眼レフカメラで撮影された高精細画像のデータセットである。シーンや被写体、照明など、様々な条件下で撮影されている。データセットには下記が含まれている。

  1. 5, 000枚のRAWデータ

    • DNG形式
    • 1枚あたり10MB程度
    • 全体で35個のカメラモデルで撮影されている (私が調べた限りは)
  2. 25,000枚のレタッチ画像

    • TIFF形式
    • 1枚あたり60MB程度
    • RAWデータ1枚あたり5人の専門家*2がそれぞれレタッチ画像を作成
    • 16bitのProPhoto RGBカラースペースでlossless圧縮
    • レタッチにはAdobe Lightroomを使用
  3. セマンティック情報

    • CSV形式
    • 0.2MB程度
    • 各画像の撮影時間帯、場所、照明、被写体のざっくりとしたカテゴリが付与されている
  4. レタッチの編集履歴

    • Adobe Lightroomのカタログファイル (lrcat形式)
    • 1790MB程度
    • 各画像のレタッチ時のスライダー値や調整履歴が残っている

データのサンプル

Raw (DNG) Expert A Expert B Expert C Expert D Expert E Categories Camera Model
a0001-jmac_
DSC1459.dng
tiff16_a/a0001-jmac_DSC1459 tiff16_b/a0001-jmac_DSC1459 tiff16_c/a0001-jmac_DSC1459 tiff16_d/a0001-jmac_DSC1459 tiff16_e/a0001-jmac_DSC1459 {"location":"outdoor","time": "day","light": "sun_sky","subject": "nature"} Nikon D70
a1384-dvf_095.dng tiff16_a/a1384-dvf_095 tiff16_b/a1384-dvf_095 tiff16_c/a1384-dvf_095 tiff16_d/a1384-dvf_095 tiff16_e/a1384-dvf_095 { "location": "outdoor", "time": "day", "light": "sun_sky", "subject": "nature" } Leica M8
a4607-050801_
080948__
I2E5512.dng
tiff16_a/a4607-050801_080948__I2E5512 tiff16_b/a4607-050801_080948__I2E5512 tiff16_c/a4607-050801_080948__I2E5512 tiff16_d/a4607-050801_080948__I2E5512 tiff16_e/a4607-050801_080948__I2E5512 { "location": "indoor", "time": "day", "light": "artificial", "subject": "people" } Canon EOS-1D Mark II

どのような用途で使えるか

このデータセットを変換することで幅広い用途の機械学習で利用できる。 このデータセットの特徴は、他と比べてRAWデータがあることだと思う。例えば、RAWデータからsRGBへの現像時にホワイトバランスを変えることで、ISPのホワイトバランス調整エラーを模擬したデータセットを作成できる*3

また、高精細なレタッチ画像も数多くあるため、超解像などはRAWデータを使わずともレタッチ画像から適用できると思う。

実際に下記の用途で利用されている*4

  • color enhancement *5 *6
  • white-balance editing *7
  • super resolution *8 *9
  • noise reduction *10 *11
  • underexposure *12
  • overexposure *13

MIT-Adobe FiveK Datasetを簡単に使うためのツール紹介

ツールを作成した背景

MIT-Adobe FiveK Datasetはダウンロードも使うのもやや面倒だという問題がある。 公式ページでMIT-Adobe FiveK Datasetをダウンロードするためのアーカイブが提供されている。だが、アーカイブを解凍後のディレクトリ構造が少々複雑である*14。 またこのアーカイブにはレタッチ画像は含まれておらず、レタッチ画像は個別URLで一枚づつダウンロードするしかない。

加えて、 RAWデータを読み込むOSSとして有名なLibRawでは一部のカメラモデルのRAWデータを正しく読み込むことができない *15。 それゆえカメラモデルを限定して試したいこともあるのだが、各RAWデータ(10MB程度)を読み込むまではそれがどのカメラモデルなのかプログラム内で判断できない。

このようなデータセットの複雑さ・使いづらさはMIT-Adobe FiveK Datasetに限らず、公開データセットではよくあることだと思う。公式提供のものをそのまま使うのは面倒なことが多いため、PyTorchなどのライブラリは有名データセットを簡単にダウンロードして使えるように各データセットクラスを用意している。

同じようにMIT-Adobe FiveK Datasetを簡単にダウンロードして扱えるようにしたかったため、このデータセットのツールを作ることにした。

コード

コードはこちら

MIT-Adobe FiveK Datasetをそのまま機械学習フレームワークで使うことは少ないと思う。多くの場合には、このデータセットに何かしらの前処理 (例えばRAW現像する、ノイズを加える、画像サイズを小さくする、など) をして保存したものを利用すると思う。

基本的にはそのような前処理で利用することを想定してツールを作成した。

使い方

使い方はこんな感じ。

class Preprocess:
    def hello_world(self, item):
        print(f"hello world! the current ID is {item['id']}.")

data_loader = DataLoader(
    MITAboveFiveK(
        root=args.root_dir,
        split="debug",
        download=True, experts=["a", "c"],
        download_workers=4, # multi-process for downloading
        process_fn=Preprocess().hello_world),
    batch_size=None,  # must be `None`
    num_workers=4  # multi-process for pre-processing
)
for item in data_loader:
    # pre-processing has already been performed.
    print(item)

このツールのいいところ

このツールは下記の従来課題に対処した。

  • ダウンロードが面倒
    Pythonコード1行で (MITAboveFiveKクラスのインスタンスを生成するだけで) RAWもTIFFも全てダウンロードできるようにした。

  • ディレクトリ構造が複雑でアクセスしづらい / RAWデータを読み込むまでカメラモデルがわからない
    ディレクトリ構造を再設計し、カメラモデルごとにディレクトリを分けた。各データへアクセスしやすくするために、データごとにファイルパスやカテゴリ等のメタデータをまとめ、DataLoaderのイテレーションで受け取れるようにした。また、データダウンロードのために、メタデータをまとめたJsonファイルを用意した。Jsonファイルの例

 {'categories': {'location': 'outdoor', 'time': 'day', 'light': 'sun_sky', 'subject': 'nature'},
 'id': 1384, 'basename': 'a1384-dvf_095',
 'license': 'Adobe', 'camera': {'make': 'Leica', 'model': 'M8'}, 
 'files': 
  {'dng': '/datasets/MITAboveFiveK/raw/Leica_M8/a1384-dvf_095.dng', 
   'tiff16': {'a': '/datasets/MITAboveFiveK/processed/tiff16_a/a1384-dvf_095.tif', 
    'c': '/datasets/MITAboveFiveK/processed/tiff16_c/a1384-dvf_095.tif'}}, 
}

DataLoaderのイテレーションで受け取るデータ例
(ファイルパスは実行時に決定・追加される)

  • データダウンロードや前処理に時間がかかる
    → データダウンロードはMITAboveFiveKdownload_workersを設定することでマルチプロセス化できる。前処理はDataLoaderのnum_workersを設定することでマルチプロセス化できる。

  • 新しいツールは使い方を覚えるまでが面倒
    → PyTorchのDatasetクラス (を継承したクラス) をDataLoader経由で呼び出すという、PyTorchユーザなら慣れ親しんだ方法で利用できるようにした。データセットへ適用したい前処理用関数をprocess_fnへ渡すことで、DataLoader経由で前処理も適用できる。

おわりに

公開データセットをダウンロードして使えるようにするだけで一晩を溶かす人が減りますように。

*1:V. Bychkovsky, S. Paris, E. Chan, and F. Durand. Learning photographic global tonal adjustment with a database of input / output image pairs. CVPR, 2011.

*2:photography students in an art school

*3:M. Afifi and MS. Brown. Deep white-balance editing. CVPR, 2020.

*4:"color enhancement"のカバー範囲が広すぎて独立した項目になっていなくてすみません。

*5:Y. Zhicheng, H. Zhang, W. Baoyuan, P. Sylvain, and Y. Yizhou. Automatic photo adjustment using deep neural networks. TOG, 2016

*6:J. Park, J. Lee, D. Yoo, and I. Kweon. Distort-and-Recover: Color Enhancement Using Deep Reinforcement Learning. CVPR, 2018.

*7:M. Afifi and MS. Brown. Deep white-balance editing. CVPR, 2020.

*8:MT. Rasheed and D. Shi. LSR: Lightening super-resolution deep network for low-light image enhancement. Neurocomputing, 2022.

*9:X. Xu, Y. Ma, and W. Sun, Towards Real Scene Super-Resolution With Raw Images. CVPR, 2019.

*10:J. Byun, S. Cha, and T. Moon. FBI-Denoiser: Fast Blind Image Denoiser for Poisson-Gaussian Noise. CVPR, 2021.

*11:S. Guo, Z. Yan, K. Zhang, W. Zuo, and L. Zhang. Toward Convolutional Blind Denoising of Real Photographs. CVPR, 2019.

*12:R. Liu, L. Ma, J. Zhang, X. Fan, and Z. Luo. Retinex-Inspired Unrolling With Cooperative Prior Architecture Search for Low-Light Image Enhancement. CVPR, 2021.

*13:M. Afifi, KG. Derpanis, B. Ommer, and MS. Brown. Learning Multi-Scale Photo Exposure Correction, CVPR, 2021.

*14:"HQa1to700", "HQa701to1400"と700枚づつRAWデータが分かれてディレクトリに保存されているかとお思えば、"HQa1400to2100"という1始まりでないディレクトリも存在する、など。

*15:正確には、TIFFで提供されるレタッチ画像(Adobe Lightroomで現像)と、LibRawで現像した画像サイズが一部のカメラモデルで一致しない。特にFujifilmCMOSセンサは独特なので要注意である。