Deep Learningで出会い系アプリ tinder の画像判定をしてlikeを自動化する

    はじめに

    スケベとDeep Learningが出会うとき、技術の進化は訪れる!

    ということで、出会い系アプリtinderをpythonからいじる pynderを試してみました。

    そして、Deep Learningの無駄遣いをして、画像データを元に美人判定をして、 美人ならばlikeを、そうでなければnopeをすることをしてみました。

    今回の記事は、以下の記事に触発されています。

    pynderをいじる

    まずは、インストールから。

    $ pip install pynder

    facebook トークンの取得

    https://tinderface.herokuapp.com/ にアクセス。

    GET STARTEDを押すことで、ガイドラインが表示されるので、それに従って tokenを取得する。

    はじめの一歩

    以下のようなサンプルソースを動かす。

    import pynder
    session = pynder.Session(facebook_auth_token) # 取得したaccess tokenを設定
    
    for user in session.nearby_users():
        print(user.name)

    名前が取得できました。

    M
    みっ
    Charlene
    はるな
    詩羚
    Yuki
    Mi
    Nattarawan
    みなみ
    Marina
    かな

    画像データを手に入れる

    これでtinderのユーザの画像データが取得できました。

    users = session.nearby_users()
    user = next(users)
    
    import urllib.request
     
    url = user.thumbnails[0]
    savename = "test.png"
     
    png = urllib.request.urlopen(url).read()
    with open(savename, mode="wb") as f:
        f.write(png)

    like, nopeを送信する

    like, dislikeのメソッドを呼び出すことで, likeとnopeを送信できます。

    user.like
    user.dislike

    これで、pynderの調査は終わり。次は、Deep Learningです。

    Deep Learningで美人判定

    人工知能に美人かそうでないかを判定させるというのは、いかがなものかと思うのだが、 それは置いておいて、美人判定をする方法を調べました。

    先行事例

    SCUT-FBP5500 Dataset

    SCUT-FBP Datasetというものがあった。 顔写真のデータと、その表情がどのくらい魅力的かどうかを5 段階評価でラベルづけされたもの。

    美人かそうでないかの二値分類をするときの学習に使うためのラベルづけが大変そうだと思ったがか このデータセットを使って学習ができそうだ。1,2,3点の人はブス、4,5の人は美人と判定する。

    実験

    SCUT-FBP のデータセットを利用して、美人判定モデルを作成しました。 詳細は、gistに譲りますが、このモデルでは、85% の精度を達成できた。

    以下、要点を列挙。

    • データセットの 女性だけを利用。2250枚。そのうちの1/5をvalidationとして利用。
    • fastai(PyTorch)ライブラリを利用。ResNet32をファインチューニング。
    • チューニング方法は過去記事参照。85%の精度。
    • targetラベルは、ratingを利用。3.0以下をnope, 3.0以上をlikeと分類するようにする。

    tinder の画像から推論

    画像データの取得、モデル作成とできたので、次は画像データを元に like/nopeを判定する。

    like

    nope

    を、なかなかよさそうじゃんと思ったのだけれども、犬を美人判定にかけたらlikeと判定されてしまった。。 いやいや、犬は、好きではないのですが。。

    まとめ

    以下ができた。

    • pynder を利用して、tinderから画像データの取得
    • deep learning を利用して、美人判定モデルの構築
    • 美人判定モデルからの like/nope判定の自動化

    美人判定モデルの精度がよかったら、ここから機械学習アプリの作成に移るところだった。 しかしながら、判定結果に不満があり、アプリ作成までは実施しないことにした。

    今後の課題は、

    • 人判定のモデルをつくる。Object Detection?? 犬をlikeと判定するようではダメだ。
    • 画像以外の特徴量もまぜる。紹介文とか。NLP。
    • データセットを多くする。自分でラベルづけをしていって、それを学習していく。

    現在開催中のkaggleのavitoコンペがこのtinderの問題に似ている気がするので、 avitoコンペで培ったkaggle力を無駄に利用して取り組みたい。

    また、調べてみると、arxivにもtinder関連のpaperがいくつかあるようだ(スケベめ)。これを読んでいこう。