CNNとKNNを利用した画像ベースのレコメンド

ひとまず無事にサーバ引っ越しが終わって、宝くじ情報のサイトも自動更新が有効になりました。これでサーバ引っ越しも無事に終了ですな・・・、長かった。

画像ベースのレコメンド

最近、画像系の機械学習をまたやりたいなぁと思っていて、以下の記事をもとにプログラムを作っていました。

Creating a movie recommender using Convolutional Neural Networks
https://towardsdatascience.com/creating-a-movie-recommender-using-convolutional-neural-networks-be93e66464a7

という記事で紹介されていた方法です。直訳すると「CNNを利用した映画のリコメンドの作成」ということになるのかな・・・

CNNで画像特徴量を抽出し、KNNでグルーピングを行う手法のようです

記事の内容は英語、そして、紹介されているプログラムについても部分的にしか紹介されていないため、コピペで動かせないのがつらいところ。
ここ数週間、試行錯誤しながらプログラムの歯抜け部分を記述し、ひとまず動くようにしてみました。

プログラムの内容ですが、Kerasに組み込まれているInception V3というモデルを利用して画像の特徴量を抽出し、そのデータをKNNにかけることで似たような画像を抽出するというもの。
記事では映画のパッケージ以外にも、ショッピングサイト(靴の画像)に適用して、似たようなデザインの靴が抽出されることが記述されていました。

わんこの画像でやってみた

ということで、自分はわんこの画像でやってみました。
わんこ画像のデータセットは以下のものを利用しました。
http://vision.stanford.edu/aditya86/ImageNetDogs/

結果

シェットランドシープドッグのデータセットを使用し、選択した画像に類似する画像を抽出するように設定しました

下記画像の赤枠のわんこを入力情報とし、そのわんこに類似する画像を抽出した結果がこちら

ぱっと見、類似した画像が抽出されたのではないかなと思います。
ただ、作者の方が公開していない部分のプログラムは試行錯誤で作成したため、原案者の意図が正しくプログラムに反映されてない可能性もあります・・・
まぁ、結果だけ見ると正しく動いているみたいだし、いいか・・・

今後

CNNといえば、MNISTのように「画像を分類したり、識別するために利用される」ことが多いような気がしていますが、KNNを組み合わせることでリコメンドにも利用できるというのが面白いですね!
これを応用すれば、アニメキャラのレコメンドなんかにも使えそうなので、これをもとに何かしらのアプリは作ってみたいと思います。

Amazonで機械学習の本を探す