やってみよう!

プログラミングとかでぃーぷらーにんぐとかVRとか気になったものをやってみる予定

VAEで画像分類をやってみたい2

前回の続き

blog.ascreit.com

特徴量抽出まではなんとかできたので、これを

f:id:ascreit:20180921115932p:plain

クラスタリングをしてみます。

何がいいのかわからないので、とりあえずDBSCANを試してみます。

DBSCAN

    z_mean, _, _ = encoder.predict(x_test,
                                   batch_size=batch_size)

    from sklearn.cluster import DBSCAN
    db = DBSCAN(eps=0.3, min_samples=11).fit(z_mean)
    labels = db.labels_

    plt.figure(figsize=(12, 10))
    plt.scatter(z_mean[:, 0], z_mean[:, 1], c=labels)
    plt.colorbar()
    plt.xlabel("z[0]")
    plt.ylabel("z[1]")
    plt.savefig(filename)
    plt.show()

f:id:ascreit:20180921120342p:plain

う〜ん、espとmin_samplesを変えてみてもいまいちです。

丸い塊がポコポコあるような分布だったらDBSCANはいいみたいですが、今回はちょっと違いますね.

とりあえず分類された画像見てみます。

f:id:ascreit:20180922030453p:plainf:id:ascreit:20180922030456p:plainf:id:ascreit:20180922030459p:plainf:id:ascreit:20180922030503p:plainf:id:ascreit:20180922030506p:plainf:id:ascreit:20180922030509p:plainf:id:ascreit:20180922030512p:plainf:id:ascreit:20180922030515p:plainf:id:ascreit:20180922030519p:plainf:id:ascreit:20180922030524p:plainf:id:ascreit:20180922030527p:plain

上から1~10クラス、最後のがノイズとして認識されたクラスです。

余白がどれだけあるかで分類されたみたいですね。

あ〜、これ、VAEの部分を考え直さないとだめみたいです。

でも、結構特徴掴んでてびっくり。(望んだ分類ではなかったけど)

ん〜、画像全体じゃなくて、画像に写ってる人の特徴量とって、それ以外の特徴量は破棄。

その上で誰なのか判別するようにしたいな。。。背景が入るとやっぱだめなんだよな。

一旦顔領域だけを切り取って判別機つくるやり方じゃないとだめかなぁ...

それだと後ろ姿じゃ判別できないよなぁ

半教師ありでやってみるか?収束しない気がするけど。

まずは白塗り部分が強烈なんだよなぁ。。。アスペクト比維持するんじゃなくて伸ばした方がいいのかも。

判別に位置情報は考慮されないんだっけ?ディープラーニングの仕組みをしっかり理解しないとだめかも。

やっぱり難しいなぁ。。。

また挑戦してみます。