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

この記事は 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

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

まとめ

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

頻出文例で覚える自然言語処理問題

自然言語処理の教科書を読んでいると、それぞれの問題に対して大抵「お決まり」の文が出てきていちいち面白いのでまとめました。

Bank

Bankには「銀行」と「土手」の2つの意味があり、翻訳をする際などは文脈から正しく意味を取ってあげる必要があります。これを語義の曖昧性解消(Word Sense Disambiguation/WSD)といって、"bank"はWSDを論じる際必ずといって例に上がります。WSDのアルゴリズムとしては、曖昧性を解消したい単語の周辺にある単語を見る方法があります("bank"の場合、周辺に"finance"や"investment"が出てくれば「銀行」、"river"や"shore"が出てくれば「土手」と判断できる。)
ちなみに僕は自然言語処理の教科書で初めて"bank"に「土手」の意味があることを知りました。(他にもそういう人がいると信じています)

Book that flight.

普通、文の構造を取る前には単語の品詞を推定してあげる必要があります。例の場合"book"は名詞ではなく動詞であると理解しなければなりません。これを品詞タグ付け(Part-of-Speech Tagging/POS tagging)と言います。

Time flies like an arrow.

この文は、

  1. 典型的には、比喩として、「時間が矢のように素早く過ぎる」と解釈する。
  2. 「空を飛ぶ昆虫の速度を矢の速度を測るように測定せよ」つまり (You should) time flies as you would (time) an arrow. と解釈する。
  3. 「矢が空を飛ぶ昆虫の速度を測るように、あなたが空を飛ぶ昆虫の速度を測定せよ」つまり Time flies in the same way that an arrow would (time them). と解釈する。
  4. 「矢のように空を飛ぶ昆虫の速度を測定せよ」つまり Time those flies that are like arrows と解釈する。
  5. 「"time-flies"(時バエ)という種類の昆虫は1つの矢を好む」この解釈には集合的な解釈と個別的解釈がありうる。
  6. 「TIMEという雑誌は、投げると直線的な軌跡を描く」
http://ja.wikipedia.org/wiki/%E8%87%AA%E7%84%B6%E8%A8%80%E8%AA%9E%E5%87%A6%E7%90%86

と多数の解釈ができるため、文構造の曖昧性解消の例によく用いられます。

I saw the girl with the telescope.

この文には「私は望遠鏡で少女を見た」と「私は望遠鏡を持った女の子を見た」の2つの解釈ができます。このような前置詞句がある文では、それが動詞句か名詞句のどちらを修飾するのか判断する必要があります。これを前置詞句付加(Prepositional Phrase Attachment/PP attachment)といって、文構造を解析する上で最も難しい部分の1つとなっています(人間にも難しいときがありますしね。)付加手法としては、前置詞と動詞、前置詞と名詞の組み合わせを統計的に取って、よりもっともらしい方にくっつける手法があります。
望遠鏡で女の子を覗いちゃダメだと思います。

I am a freshman advertising and marketing major.

この文は「私は広告とマーケティング専攻の1年生です」と解釈するのが一般的ですが、文構造的には「私は広告する1年生とマーケティング専攻です」のように解釈することもできます。これを並列句構造解析(Coordination Structure Analysis)といって、こちらも文構造を解析する上で最も難しい部分の1つとなっています。解析手法としては、並列句の対称性(例の場合、-ingという接頭辞)に着目する手法があります。

最後に

まだまだ沢山例があると思われるのであったら是非教えてください。あと適当な説明なので鵜呑みにしないでください><