MIT-Adobe FiveK Datasetとツールの紹介
概要
- 豊富なRAWデータが利用できるMIT-Adobe FiveK Dataset*1を紹介する。
- MIT-Adobe FiveK Datasetを簡単にダウンロードして使うためのツールを作成したので紹介する。
MIT-Adobe FiveK Datasetとは
MIT-Adobe FiveK Datasetとは一眼レフカメラで撮影された高精細画像のデータセットである。シーンや被写体、照明など、様々な条件下で撮影されている。データセットには下記が含まれている。
5, 000枚のRAWデータ
- DNG形式
- 1枚あたり10MB程度
- 全体で35個のカメラモデルで撮影されている (私が調べた限りは)
25,000枚のレタッチ画像
セマンティック情報
- CSV形式
- 0.2MB程度
- 各画像の撮影時間帯、場所、照明、被写体のざっくりとしたカテゴリが付与されている
レタッチの編集履歴
データのサンプル
Raw (DNG) | Expert A | Expert B | Expert C | Expert D | Expert E | Categories | Camera Model |
---|---|---|---|---|---|---|---|
a0001-jmac_DSC1459.dng | {"location":"outdoor","time": "day","light": "sun_sky","subject": "nature"} | Nikon D70 | |||||
a1384-dvf_095.dng | { "location": "outdoor", "time": "day", "light": "sun_sky", "subject": "nature" } | Leica M8 | |||||
a4607-050801_080948__I2E5512.dng | { "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'}}, }
データダウンロードや前処理に時間がかかる
→ データダウンロードはMITAboveFiveK
のdownload_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で現像した画像サイズが一部のカメラモデルで一致しない。特にFujifilmのCMOSセンサは独特なので要注意である。