スタイルを基準としたコーディネートのクラスタリング

f:id:vasilyjp:20180705092656j:plain

スタートトゥデイ研究所リサーチャーの中村です。 今回は、コーディネートからスタイルを自動抽出する技術に関するアイデアの紹介です。こちらは、企業研究所による研究発表カンファレンス (CCSE2018)でも同様の内容で発表させていただきました。 そのときに使用した資料はこちらです。

ファッションのスタイルについて

服は組み合わせによって見た目の印象が変化します。例えば同じスラックスを履いたとしても、トップスがYシャツのときとTシャツのときでは印象が異なるはずです。ファッションではこの現象をスタイルやテイストといった言葉で表現します。

スタイルはコーディネートを考える際の指針となります。頻出するスタイルにはエイリアスが設定されており、印象を伝える際に利用されます。例えば以下のようなものです。

f:id:vasilyjp:20180703110949p:plain

ところが多くの人にとって、このスタイルという概念はとても厄介です。服の組み合わせは無限に存在し、組み合わせを印象へマッピングできるようになるためには高度な専門知識が必要になるからです。 しかし服をおしゃれに着る際にはスタイルは最も重要な指針のひとつなので、この背後にある法則を解析し、機械で再現することには意義があります。

スタイルを解釈するためのフレームワーク

日本ファッションスタイリスト協会という団体がStyling Mapというフレームワークを提供しています。 ファッションに関係する物*1と人*2を、それぞれの個性に応じて4つのテイストに分類するための考え方です。 4つのテイストとはアクアテイスト(Aq)、ブライトテイスト(Br)、クリスタルテイスト(Cr)、アーステイスト(Ea)で、各テイストについて与える印象と属するオブジェクトの有する特徴が定義されています。

f:id:vasilyjp:20180703110955p:plain (https://stylist-kyokai.jp/stylingmap)

Styling Mapでは、スタイルを先述の4つのテイストの混合で表現することを許容しています。 4値判別でなくあえて曖昧さを含む表現を用いることで、表現能力の高いフレームワークとなっています。このアイデアは非常に有用だと思います。

解きたい問題

Styling Mapはファッションの専門家が経験に基づいて組み上げたフレームワークであり、実績を上げています。 この知識を再現してECに導入できれば、推薦を高度化すると同時に説得力をもたせることも可能です。

今回はコーディネートを対象に、背後に存在するスタイルの抽出とコーディネートの分類に取り組みます。

なお、Styling Mapでは4つのテイストに分類していましたが、本記事では基底となるスタイルをデータから求めます。

スタイルの定式化

Styling Mapからアイデアを拝借し、コーディネートのスタイルを混合表現で記述することを考えます。

基底のスタイルベクトル wと混合比 pを与えたとき、コーディネートのベクトル cをそれらの線形結合で表現します。 例えば、基底スタイルを先述の4種類のテイストとしたとき、あるコーディネートは以下のように表現できます。

f:id:vasilyjp:20180703110959p:plain

今回の問題では w pは未知であり、これらをデータから求めることに挑戦します。

モデル

3層の砂時計型ニューラルネットワークを使います。入力はコーディネートベクトル c、出力は復元したコーディネートベクトル \hat{c}、中間層はスタイル混合比 pに対応します。

f:id:vasilyjp:20180703113539p:plain:w300

スタイル混合比の獲得

スタイル混合比 pの各要素は対応する基底スタイルの重みに相当します。コーディネートベクトル cを入力とし、全結合層にfeedしてこれを求めます。 比であることを維持するため、softmax関数を適用します。

\displaystyle
p = softmax(fc(c))

コーディネートベクトルの復元

 pとモデルパラメータ Wの内積によりコーディネートベクトルの復元を行います。 ここで、 Wの各行は基底スタイルのベクトルであると仮定すると、この操作は定式化の章で述べたスタイルの表現に対応します。

\displaystyle
\hat{c} = W^{T} \cdot p

学習

2種類のloss関数を定義します。はじめに復元時の誤差として、 c \hat{c}の類似度をhinge関数で評価します。

\displaystyle
\mathcal{L}_{recon} = \max (0, margin - d(c, \hat{c}) + d(c_{neg}, \hat{c}) )

ここで、負例 c_{neg}はミニバッチから選択します。2点の類似度を返す関数 d(u, v)はコサイン類似度を使います。

続いて Wの正則化です。  Wの各行はスタイルの基底であると仮定しているため、各行は独立であることが望まれます。 これを式にすると、以下の様になるかと思います。

\displaystyle
\mathcal{L}_{reg} = || W_{n} \cdot W_{n}^{T} - I ||

ここで、 W_{n} Wの各行を正規化した行列です。

コーディネートベクトルの抽出

コーディネートベクトル cはCNNを用いて抽出します。入力のコーディネートデータはアイテム画像の集合であるため、それぞれの画像をResNet50にfeedして得られた特徴量を平均したベクトルをコーディネートベクトルとします。

f:id:vasilyjp:20180703114834p:plain:w300

データ

IQONのコーディネートデータセットを使います。データセットの詳細は以前のブログでも触れているのでそちらをご参照ください。

参考:コーディネートの自動生成

特徴は、1つの標本が画像の集合であり、標本ごとに画像枚数が異なるということです。

結果

 pの次元数を8に設定し、学習させました。得られた基底スタイルの9近傍を表示します。 各スタイルの1行が、1つのコーディネートに対応します。

f:id:vasilyjp:20180703111005p:plainf:id:vasilyjp:20180703111010p:plain

やはりファッションに詳しくないと分類に成功したか否かの判断に困りますが、少なくとも色調の違いはかなりはっきりと現れているかと思います。 本家Styling Mapでも説明できそうなクラスタも見受けられます。例えば、#5はアクアテイスト*3とかなり似ていることが確認できます。

スタイルを混合表現にしたことで、基底スタイルを混ぜ合わせたようなスタイルも表現できるようになりました。

f:id:vasilyjp:20180703111015p:plainf:id:vasilyjp:20180703111020p:plain

ここに示した例は、混合した基底スタイルの特徴が現れているかと思います。

まとめ

今回はコーディネートからのスタイル抽出に挑戦してました。 スタイルに混合表現を導入し、データから基底スタイルと混合比を教師無しで抽出しました。

poolingの方法の高度化やattentionの導入など、まだまだ改良の余地はあるかと思います。 一方で、コーディネートの特徴量さえうまく作れれば、スタイル抽出はもっとシンプルな手法でも達成できる気がしました。LDAやICAなどの手法は相性が良さそうです。

さいごに

研究所ではスタイルの抽出も含め「似合う」ということについて多角的に研究を始めています。 機械学習に限らず、専門性を活かしてファッションを解析したい方はぜひ下のリンクから応募して、ぜひ一度オフィスに来ていただければと思います。

www.wantedly.com

*1:服やアクセサリーなど

*2:骨格や性格など

*3:本家が定義しているアクアテイストの特徴をご確認ください