インスタ度判定Twitterアカウント@insta_san

今年はAI班で三田祭に向けてインスタっぽい画像を判定するアプリを作成しました。その名もインスタさんです。

インスタさんに画像を渡すと・・・

Screenshot from 2017-11-23 00-52-32

このように画像のインスタっぽさと、インスタっぽい部分が表示されます!
(三田祭期間中のみの運用予定なので、記事を閲覧しているときには動かないかもしれません、ごめんなさい!)

AIは@sesenosannko、Twitterの入出力は@mt_caretが作成しました。

しくみ

インスタさんのアイデアはとても簡単です。Instagramからたくさんの画像といいね数を集めてきて、いいね数が多い画像をインスタっぽい画像として学習させます。

ここで考えなくてはいけないことは、「いいね数が多いという基準」と「学習モデル」です

  • データセット

画像からインスタっぽさを学習するのは難しい課題なので、今回は単純に「インスタっぽい」画像と「インスタっぽくない」画像の二つに分類することにしました。単純にいいね数が多い画像と言ってもユーザーによってフォロワー数が違いますし、投稿した時点でのフォロワー数がわからないので、いいね数をそのまま使うことは難しいでしょう。

調査の結果、多くの人のアカウントでは投稿するたびにいいね数が徐々に増えていく傾向にあることが分かりました。しかし、人によって増加のタイミングや速度は様々で何かの関数で近似するのは難しそうだったので、単純に前後20投稿の平均いいね数よりもいいね数が多いか少ないかによって「インスタっぽい」画像と「インスタっぽくない」画像を分けることにしました

  • 学習モデル

近年は画像の分類にはCNNというディープラーニングのモデルが使われることが多いです。インスタさんもCNNを用いて学習しています。

今回は画像数が少ないこともあり、大量の画像で分類を学習した結果を活用して学習を行なっています。このような手法は転移学習と言われています。使用したモデルの詳しい説明は以下のサイトを参照してください。

https://www.tensorflow.org/tutorials/image_retraining

画像がインスタっぽいかという問題は人間でもはっきりと分けられないので、あまり良い学習ができることは期待できません。特に今回は学習セットの分け方も非常に単純で信頼性の低いものとなってしまっています。しかし、転移学習によって画像から意味のある情報を取り出して学習を行なっているため、何かを学習しているということは見て取れます。

LIME

インスタっぽい部分を出力するときに使用しているのはLocal Interpretable Model-Agnostic Explanations(LIME)という手法です。

簡単にいうと、入力画像の一部を隠した画像をたくさん作り、インスタ度が高かったときに隠されていなかった部分のインスタ度が高いと考える手法です。詳しくは以下のサイトを参照してください。

https://homes.cs.washington.edu/~marcotcr/blog/lime/

Posted on