ディープラーニングによる画像処理のためのカメラ・レンズ入門

この記事は LeapMind Advent Calendar 2019 16日目の記事です。

ディープラーニングによる画像処理で大切なことは何でしょうか。ある人は解決したい課題に応じた適切なネットワークを設計することを挙げるかもしれません。トレーニングデータを大量に集めることを挙げる人もいます。一方で、トレーニングデータの源であるカメラ(センサー)・レンズについて語っている人は比較的少ないように思えます。私はカメラが趣味なのですが、LeapMindで多くのプロジェクトに携わる中で、ディープラーニングによる画像処理を行う際に覚えておくと役に立つ知識が結構あるなと感じています。そこで今回はトレーニングデータを作るときに気をつけたいことに沿って、ディープラーニングによる画像処理という観点でカメラ・レンズの特性について記述したいと思います。

撮影するカメラは適切ですか

人によっては「イメージセンサーの大きさが高画質の証なので、とにかく高性能なモデルを作りたい場合はセンサーサイズの大きなカメラを買ってトレーニングデータを作れば良いだろう」と思っているかもしれません。しかし、必ずしもそうとは限りません。

まず第一に、センサーサイズが大きくなると基本的に画素数も大きくなりますが、モデルが処理できる画素数には限界があります。6100万画素の画像をエッジデバイスで処理することはほとんど不可能でしょう。一方で、リサイズをするのであればセンサーサイズが大きなメリットが薄れてしまいます。

次に、大きな面積差がなければ、センサーよりもレンズ性能の方が効いてきます。一般に、センサーサイズがレンズの要求性能を決定するので、センサーサイズが小さい方が画面全体の画質を均質にすることが容易になります。そして、画面全体の画質が均質であるというのは、モデル作成に有利な性質であるため、センサーサイズが小さい方がトレーニング時に有利に働く可能性があります。

最後に、センサーサイズが小さい方が被写界深度が深くなります。被写界深度が深いというのは、ボケずに写る範囲が広いという意味です。ボケは人間にとって綺麗な写真を撮るには嬉しい表現の1つですが、多くのディープラーニングのモデルにとってボケは精度が落ちる原因となりえます。従って、カメラを選ぶ際は、解決したい課題の特性に応じて、大きすぎず、小さすぎないセンサーサイズのものを選ぶ必要があるのです。

レンズの絞り値は適切ですか

絞れば絞るほど良いというわけでもない

レンズの絞りは絞れば絞るほど被写界深度が深くなります。先程の話を踏まえると、絞れば絞るほど全体がボケずに写ってモデルの性能が上がりそうな気がしますが、実は必ずしもそうではありません。絞りすぎると確かに被写界深度は深くなりますが、今度は「小絞りボケ」という現象が発生してやはりボケてしまうのです。これは光が回折することに起因する現象です(下図)。

 

f:id:mogella:20191210224950p:plain

小絞りボケの仕組み。絞れば絞るほど回折光の影響が大きくなり、解像度が下がる。
フォトミルクる?より引用)

従って、レンズの絞り値を決める際は、必要な被写界深度と絞り値ごとのレンズの解像度を考慮しながら適切な値を決定する必要があります。

そのデータ拡張(Data Augmentation)は適切ですか

十分なトレーニングデータがない、でもディープラーニングはしたい、そんなときの味方がデータ拡張です。 データ拡張は、画像に変換処理(例: 画像のシフト)を施すことで、トレーニングデータを水増しする手法です。とても有効な手法ですが、一部の変換処理は「物体は画像上のどこにあっても同様に写る」という前提のもとでなされるため、本当にそのデータ拡張が適切なのかを検討する必要があります。なぜなら、この世に「物体は画像上のどこにあっても同様に写る」理想的なレンズは存在せず、収差と呼ばれる理想的なレンズとのズレによって、ボケたり、歪んだりするからです。

例えば、定規を検出するモデルを考えてみましょう。

レーニングデータに以下のような画像が含まれていたとします。

f:id:mogella:20191214161219p:plain

データ拡張として垂直シフトを含めると、以下のような定規が中心に来るトレーニングデータが得られます。

f:id:mogella:20191214161914p:plain

これが理想的なデータ拡張の仕組みです。しかし、歪曲収差と呼ばれる収差が大きなレンズを用いている場合、定規は以下のように写ります。

f:id:mogella:20191214162224p:plain

この画像をそのままデータ拡張すると、以下のような画像が得られます。

f:id:mogella:20191214162450p:plain

しかし、歪曲収差は中心部分には現れにくいため、実際に推論時にこのような画像が入力されることはありません(中心部に定規がある場合、ほぼ真っすぐな定規が画像として入力される)。従って、歪曲収差があるレンズの場合、プリプロセスで収差を補正するか、あるいはデータ拡張でシフトをしないようにしないと、「定規とは常に曲がって写るものだ」とモデルが学習してしまい、推論がうまくできなくなる可能性があります。このように、データ拡張の方法を検討する際は、レンズの特性を考慮し、必要に応じてプリプロセスの実施を検討する必要があります。

まとめ

この記事ではディープラーニングによる画像処理をするときに気をつけておきたいカメラ・レンズの特性について記述しました。今回は代表的なものを挙げましたが、他にも知れば知るほど面白いカメラ・レンズの特性は沢山あります。皆さんも一眼カメラを買ってレンズ沼に嵌まりましょう!!!