特に人気でもないタスクのDeep Learningの研究を紹介するpart 1

#背景

例えば物体検出器であれば、検出器の研究をしていない人でもMaskRCNNやCornerNetの論文を英語で読むこともある(と思います)

ただ、あまり関係ない分野では時間や手間をかけて英語の論文を読む人もいないかと思います。
そこでマイナーめで実績のある論文をなんとなく日本語訳して紹介してみたいと思います。
今回は細かい評価手法や評価は飛ばして説明します。

#論文紹介
[Reliable and Efficient Image Cropping: A Grid Anchor based Approach](https://arxiv.org/abs/1904.04441)
CVPR2019で採択されてます。作者はHui Zengらです。

この論文では「Automatic image cropping」のタスクについて挑戦しています。

#Automatic image croppingとは...

<b>画像を切り取ってより良い写真にする研究です。</b>
言葉にすると簡単そうですが、意外と面倒なタスクです。

似たようなことをしていた記事が最近公開されました
[Saliency Mapを使って画像を良い感じに切り抜くAIを作った](https://qiita.com/ttyszk/items/833d3753248bbc8a211f)

上の記事と大きな違いとは、
細長いクリスマスツリーの1:3の写真（856 × 2569）何に使うねーん
という話です。ディスプレイでは左右にグレーの背景が写り、
写真では印刷できません。

1:3の写真は実用的ではないため、3:4など実際に撮影されるようなアスペクト比にするために、左右上下などに余計な空間が入りますが、
その余計な空間と実際の被写体の位置がどのような構図で映り込むのが「良い」のか、という問題となります。

この「良さ」の定義が難しく、アノテーションや評価手法が難しい問題となっています

#自動クロッピングにおける問題
クロッピングの問題においては、出力は基本的に2つ必要です。
・クロップするバウンディングボックスの座標
・クロップしたバウンディングボックス内の美しさスコア
の2点です。

この点で言うと、クロッピングモデルの出力は、物体検出器に似ています。物体検出器のバウンディングボックスとそのクラス確率を出力する感じです。

そのため、いくつかの従来手法における評価ではIoUが評価指標として用いられています。

ですが、ここでクロッピングタスク特有の問題が発生します。

・IoUが高くても画像のクオリティが低い
・IoUが低くても画像のクオリティが高い

があり、IoUを評価指標として用いることはイマイチになってしまうことです。下の図では右側の列の中心がGTとして付与されているとき、重複の大きいIoU=0.67の画像は地面がなくなりよくわからない画像になっているのに対して、重複の少ないIoU=0.37は

<img width="656" alt="スクリーンショット 2020-01-29 8.15.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404462/0e56ecb2-74f0-4525-6217-76e75f6db20f.png">


また、既存のクロッピングデータセットでは、(驚くべきことに)IoUは提案手法よりも、何もせずに入力画像を返すだけ、というのが最もIoUが高くなっていることを指摘しています。
(既存手法を否定しているのではなく、IoUを用いるからそうなっている)

そこでIoUではない評価指標を提案していますが、今回の記事では割愛。

#データセット
既存のデータセット(ICDBやCHUPQ)では、1つの画像に対し、1つか複数の良さげなクロップ座標がアノテーションとして利用されています。

また、pair画像(良い画像と悪い画像のセット)を利用する手法(View Finding Network:VFNなど)アノテーションコストが高いほか、悪い画像の生成に旧来のランダム性を持つクロッピング手法を利用していました。

この論文では、クロッピングならではの特徴に注目します。具体的には、
・微小な拡大や縮小や平行移動では「画像の良さ」は変化しない
・クロッピングにおける有効なアスペクト比は限られている
・少なくとも中心部には不要物が配置されている可能性は小さく、中心部は残す
といった特徴です。

これらの特徴から、クロップ候補として必要なバウンディングボックスは90個以下に削減できることがわかります。
まず、画像全体をグリッドで区切り、そのグリッドの中心を使ってバウンディングボックスを組みます。これにより、微小な拡大縮小による候補を減らせます。
次に中心部を残すために、バウンディングボックスの左上をと右下をとるエリアをm,nで固定します。これにより中心部を省く候補が消えます。
最後に異常に長いアスペクト比などの画像を取り除きます。
これにより90個以下にできます。
図だとこんな感じです

<img width="498" alt="grid.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404462/d5ed9124-6a4b-1568-1298-01d8e11a3f21.png">

1236枚の写真をFlickrから集めて上記の候補に基づいて候補写真を生成します。

この写真に対して、1~5（５がとても良い、1はとても悪い）を付与します。
実際には複数のプロカメラマンによりアノテーションを行うため、その平均を取り、Mean Opinion Score(MOS)とします。付与された画像は10万枚を超えます。こんな感じです。

<img width="1038" alt="スクリーンショット 2020-01-29 20.21.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404462/e9e37398-de9b-87f6-64e2-6031fab1ef9c.png">


ネットワークではこのMOSを予測することでクロップ候補の妥当性を検討します。
ちなみに定量評価ではこの90個のクロップの順位相関係数や、上位クロップ抽出の割合などを用いています。

#ネットワーク

シンプルにMOSを回帰で予測するネットワークを構築しています。
<img width="924" alt="スクリーンショット 2020-01-29 8.08.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404462/809ca501-598c-fc77-d71c-83ca88957bcf.png">
CNN(VGGなど）で特徴抽出したあと、クロップ候補領域をRoIで取り出します。

このとき、論文の主張では、Region of Discard(RoD)がクロッピングにおいては有効であると指摘しています。
RoDとは、RoIの外側で、イメージ的には、「考えているクロップ候補の外側にいい感じのものがあるならそこも含めた方が良い」というふうに、候補の外側もみた方が良いそうです。
定量的には少しだけ向上しています。


#結果（定性のみ）
結果は定量的なものは置いておいて、定性的なものを紹介します。

<img width="1012" alt="スクリーンショット 2020-01-29 8.13.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404462/a4667828-d6bd-603f-3ea4-19833892fbd1.png">

（クロッピングって定性みても何とも言えないときちょくちょくあるんですよね...）
ただ、コードが公開されていて、demoも割と簡単に動くので動かしてみると、何となくいい感じの写真が出てきているようにも見えます。
クロッピングって適当に抽出してきてもなんとなく良いようにみえてしまう場合があるので、何とも言えません。

#github

python 2.7 & pytorch 0.4
[https://github.com/HuiZeng/Grid-Anchor-based-Image-Cropping-Pytorch](https://github.com/HuiZeng/Grid-Anchor-based-Image-Cropping-Pytorch)

python 3.0 & pytorch 1.0
[https://github.com/lld533/Grid-Anchor-based-Image-Cropping-Pytorch](https://github.com/lld533/Grid-Anchor-based-Image-Cropping-Pytorch)

下のpython3の方は動くことを確認しています。
GPUだとめっちゃ早いです。CPUでも大体0.05 sec/pictureくらいなのでそれなりに早いです。

#自分の感想

この論文ですが、クロッピングというタスクは問題を整理すれば、「画像の良さを数値で出力」することができれば、自動クロッピングが実現できるとも解釈ができます。それに対するアノテーションを行いましたってことで。
正解が無いとか、正解が必ずしも1つではない系のタスクなので、そういう意味では割と難易度は高いです(しかし需要が...)。
￥というわけで以上が「画像の自動クロッピング」に取り組む大学生によるマイナーな論文の紹介でした。
なにか質問があればコメントまでお願いします。

#引用
写真は全て論文内のものを使用しています 

#補足
あれば更新していきます