Open agatan opened 5 years ago
face recognition のような open-set なクラス分類タスクのための枠組みの提案。 ざっくり triplet loss を置き換えるものだと思ったら良い。
ふつうのクラス分類は softmax をつかうが、softmax はクラス数に応じて計算量やメモリ使用量が増えるし、closed-set なタスクにしか使えない。
facenet で使われている triplet loss は anchor, positive, negative の 3 つ組をたくさん作り anchor ↔ positive + margin < anchor ↔ negative になるように学習する。 triplet loss の問題は、↑のような 3 つ組はめちゃくちゃ大量に考えられるのでデータ量が爆発するし hard example を見つけるのが大変すぎる。
anchor ↔ positive + margin < anchor ↔ negative
そこで、ふつうのクラス分類タスクとして解きつつ各クラス間に十分なマージンができるように学習することで、学習を簡単にしつつ open-set なクラス分類を実現する。 具体的には softmax + crossentropy の代わりに以下のような損失関数を使う。
ここで、 cos θ は各クラスの代表ベクトル W と入力画像の embedding x の間の角度。
cos θ
W
x
face recognition のような open-set なクラス分類タスクのための枠組みの提案。 ざっくり triplet loss を置き換えるものだと思ったら良い。
ふつうのクラス分類は softmax をつかうが、softmax はクラス数に応じて計算量やメモリ使用量が増えるし、closed-set なタスクにしか使えない。
facenet で使われている triplet loss は anchor, positive, negative の 3 つ組をたくさん作り
anchor ↔ positive + margin < anchor ↔ negative
になるように学習する。 triplet loss の問題は、↑のような 3 つ組はめちゃくちゃ大量に考えられるのでデータ量が爆発するし hard example を見つけるのが大変すぎる。そこで、ふつうのクラス分類タスクとして解きつつ各クラス間に十分なマージンができるように学習することで、学習を簡単にしつつ open-set なクラス分類を実現する。 具体的には softmax + crossentropy の代わりに以下のような損失関数を使う。
ここで、
cos θ
は各クラスの代表ベクトルW
と入力画像の embeddingx
の間の角度。