Twitter社が投稿された画像を自動的にトリミング(不要な部分を取り除いて表示範囲やサイズを調整すること)するニューラルネットワークと、その動作の仕組みを公開しています。
膨大な数の画像を、いかに実用的な速さでトリミング処理するか。その課題をクリアするニューラルネットワークの概要と、開発の試行錯誤が解説されています。Twitter上には日々、数百万を超える画像がアップロードされていますが、元画像はサイズも解像度もバラバラです。それが一貫性をもって見やすく表示されているのは、自動的に最適な形でトリミングされているため。
以前は顔認識技術を使い、顔を中心としたトリミングを行っていたとか。しかしすべての画像に顔が含まれているわけではない上に、「顔」と認識されなかったり、顔でないものを認識したりと誤動作もあったそうです。
次に画像の中心を基点にトリミングしてみると、ベストの状態には見えなかったとのこと。たとえば猫の身体の中心じゃなく、顔を写したいのに...という具合です。
そうしてたどりついた結論が、視覚的顕著性(人が画像を見たときに一番初めに目が行く部分)を基準とすること。現在では顔や文字、動物といった「人の目が行きやすい部分」をニューラルネットワークを含むアルゴリズムに学ばせて、トリミングを行っています。
とはいえ、精度が高いニューラルネットワークは長い処理時間がかかります。さらにTwitterではピクセル単位の細かさは必要ないため、2つのアプローチが取られたとのこと。
一つはニューラルネットワークの最適化。一般に「知識の蒸留(Knowledge Distillation)」と呼ばれるやり方で、要は大規模で精度の高いネットワークの学習した結果を、より小さなネットワークに学ばせるという方法です。
すでに犬の写真に対して猫は少し近い、車は全然近くないといった「知識」(相対的なスコア)を持って学習を始めるため、小さくても大きなネットワークと同程度の精度と、小さいゆえのスピード向上が実現するわけです。
二つ目は、画像のサイズおよび必要のない計算件数を減らす、単純化アプローチ。この2つの手法により、画像トリミングが他の最適化手法よりも10倍も速くできたとのこと。おかげで、リアルタイムで視覚的顕著性の処理が行われ、アップロードした写真は速やかにトリミングされている次第です。
こうした最適化処理は、すでにWeb版やiOS/Androidの公式アプリで実装済み。どのようにトリミングされているか、新機能の「使用前」と「使用後」が並べられていて、残念な写真が見たくなる写真にお色直しされたビフォー・アフターが確認できます。
前
後