Fashion-MNISTを利用して、類似画像の検索システムを作成しました。方法としては、VAEにより次元圧縮をして、潜在空間上で距離が近いものを検索結果としました。
ソースコードは以下から触れます。
データについて
Fashion-MNISTは70,000サンプルのファッション商品の写真で、以下のようになっています。
各ラベルは以下のようになっています。(このラベルは直接的には使いませんが、検索した際に同じラベルのものが出力されたら、有効性を見出せるという意味で使用します。)
ラベル | 記述 |
---|---|
0 | T-shirt/top |
1 | Trouser |
2 | Pullover |
3 | Dress |
4 | Coat |
5 | Sandal |
6 | Shirt |
7 | Sneaker |
8 | Bag |
9 | Ankle boot |
※データセットの配布元: GitHub「fashion-mnist/zalandoresearch」。The MIT License (MIT) Copyright © [2017] Zalando SE, https://tech.zalando.com
※出典: Fashion-MNIST: a Novel Image Dataset for Benchmarking Machine Learning Algorithms. Han Xiao, Kashif Rasul, Roland Vollgraf. arXiv:1708.07747
また、ネットワークは以下のようなものを用います。
エンコーダー
デコーダー
VAEの結果
作成したVAEモデルは以下のような結果になりました。
最初はテストデータの誤差が異常に大きくなっていましたが、正常に訓練できています。
上段が訓練データ、下段がテストデータで、隣合う二つが元画像と再現後の画像となっています。
概ね再現できているとみて問題なさそうです。
検索結果
index=15の画像に対して、似た画像を検索しました。distanceが距離(2乗和)です。
index distance label
0 15 0.000000 3
1 4648 0.801960 3
2 15393 1.194853 3
3 16060 1.561346 3
4 10346 1.677270 3
5 13806 1.683182 3
6 1672 2.047508 3
7 1921 2.118745 3
8 13082 2.165989 3
9 2797 2.166618 3
10 4243 2.315314 3
11 15704 2.385199 3
12 15119 2.390874 3
13 13158 2.433088 3
14 7793 2.462667 3
15 4905 2.485209 3
16 7603 2.495291 3
17 11167 2.570958 3
18 11551 2.619137 3
19 5991 2.628919 3
画像で見ると以下のようになっています。
左上が検索に利用した画像で、似ている画像が順番に上段の左から右、下段の左から右に表示されています。
なお、検索する画像・検索対象の画像はテストデータのものを用いています。
検索結果としては、概ね同じラベルのものが返ってきていますし、実際の画像も似ている雰囲気のものが抽出されているので、似ているものを抽出する機構としてはうまくいっているように感じます。実は最初はCIFAR-10でやろうとしていたのですが、カラー画像だとVAEの学習がどうしてもうまくいかないようだったので、白黒のデータセットであるFashion-MNISTに変更しました。
実用上は(一応グレスケにすれば可能ではありますが)カラー画像でできることが重要だと考えられるので、今後の課題としたいと思います。
ソースコード