Help us understand the problem. What is going on with this article?

アパレルECのためのAI・・・ファッションを検索するサービスを作ったよ(ほしい服を探す!ファッション画像検索エンジン)

とりあえず使ってみて!

服が写った画像を投げると商品を検索できる「画像でファッション検索サービス」です。
Fashiontechってやつですかね?
回遊率UP、滞在時間UP、コンバージョン率UPを期待できる仕組みです。
今のところ検索エンジンサイト、ポータルサイトとして利用できます。
将来的にセラーサイト内部で使ってもらえるように仕組み化していきます。:point_up_2: :grin:

image.png
※開発中の画面です

物体認識して、画像の類似度を算出して、検索する。ただそれだけです。
ファッションサーチ funnel

ai_search.png

ここまでくるのに約1年かかりました。
つらい、くるしい、睡魔に耐え続ける日々を乗り越えて作りました・・・:joy:
サラリーマンですので、休日か睡眠時間をあてるしかありません。:joy:

表側は依頼して作ってもらいました。:grin:
https://qiita.com/yagi8888
yagiさんありがとう。

現段階では大人数がアクセスすることを想定して作ってないので、表示に時間がかかるかも。

簡単な説明

服の写真を投げると商品を検索できます。
インフルエンサーの写真などで検索してみましょう。
さらに商品から商品を検索できます。
ほしい商品が見つかったら画像をクリックしてショップに行き買いましょう。
イラストや絵を入れても検索できます。
物によっては不思議な商品を返してくることもあります。(精度UP努力中)

ファッションサーチ funnel
とりあえず使えばなんとなくわかります。

精度とか仕組みとか

image.png
※開発中の画面です

左の画像を入力(クエリ画像)すると、右の結果がでてきます。

クエリ画像は物体認識にかけられて服だけが切り取られ、特徴量を算出します。
(開発中の画面なので箱を描画してます)

切り取った画像とセラーデータベースをみんな大好きコサイン類似で計算してスコアが高い順にならべます。

image.png
※開発中の画面です
私の靴で検索してみました。
それっぽいものが出てきているので良好です。

概要図

Untitled Diagram (1).png

この構成は、お金が燃えるんだよ!!:sob:

image.png
:sob::sob::sob:

物体認識(YOLOだよ)はmAP(50)80%を超える

result_cCBLx4fTez374iK.jpg
※開発中の画面です

https://github.com/AlexeyAB/darknet
をベースに細かいところを自分に合わせて修正して使ってます。

画像数約14,000枚、CLASS数16のアノテーションを12カ月間一人で作りました。
気が狂いそうになる作業を毎日繰り返し・・・:joy:

mAP(50)は80%を超えるモデルが出来上がりました。
個人的には驚異的な数字だと思ってます。

自作のモデルは男女顔検出+整っているかどうか?(主観)も判定します。
openCVの顔検出だとイライラしますが、自作モデルは顔が斜めだろうが、逆さだろうがなんでもござれです。
マスクしてても、サングラスしててもある程度検出します。

YOLO V3のコツはhttps://github.com/AlexeyAB/darknet
に書いてあることを忠実に試してみることです。
Issuesも可能な限り読みました。
標準のデータ拡張では回転してくれないのでオフラインで拡張します。
オンライン実装ではコーディングを完成させるだけで2カ月くらいかかりそうだと思ったのでやめました。
Issuesでは「意味がないからやらないよ」って書いてあったがファッションでは確実にampは上がります。
ただし回転させると、良くないBOXが教師データとしてできる。45度で最悪なBOXができるのでよく考える必要がある。


cfgにangle の項目はあるけどこの設定はYOLOには意味がない。ソースコードを見る限りYOLOのデータ拡張に渡していないし、YOLOのデータ拡張関数に回転しているコードがない。

image.png

image.png
グラフタイトルの数字はオブジェクト数ですが、めんどくさくてカウントしなくなったので昔の値です。(だいぶ近いとは思います)

特徴量の算出

KERASでサクッと使える学習済みのVGG16、InceptionV3などの特徴量ではだめで、どうしても良い感じの距離がでない。

同じCNNに距離が近い画像を2枚読み込んで・・・距離を近くなるように損失関数をゴニョゴニョすれば?と思いついたので、
GOOGLE先生でしらべてみたら・・・3枚読み込んで学習するtriplet lossを発見しました。
世界はすごい。:blush:

どんぴしゃな情報を発見
https://arxiv.org/abs/1404.4661#
ここで浅いCNNを平行で使うんやで:relaxed:・・・って書いあるんです。(PDFのリンク)

そして鬼畜作業
データ集め、整理をコツコツ一人で4カ月間・・・:joy::joy::joy:
YOLOと違って箱を書く必要はありませんので楽です。

あまり精度がでなかったので
ハンドメイドで・・3枚の画像の組み合わせをコツコツ一人で作って・・・・:joy::joy::joy:
(ハンドメイド3枚組み合わせ画像を作るのは意味がなかったです)

精度がよくならないし・・・本当につらみしかない:joy::joy::joy:

まったく違うクラスが高いスコアで出てこないようにするのが大変でした。
「え!これ?」ってのがまだ出てくるんですが・・・今後の課題

もっと楽な方法?にArcFaceというのがあるんですが、これはちょっと用途てきに違うかもしれんのでパス。
機会があれば試したいです。

画像検索ようのDBMSを自作(距離を算出するお仕事)

画像検索RDBMS的な物は世の中にないので(あるにはあるけど・・・)、自作します。
オブジェクト同士の距離を計算することでこのサービスは成り立っているので、どれだけ高速化するかが今後の課題でもあります。
平均的な全身写真で6オブジェクトあり、これを30000枚の画像を対象に計算するのに100msecかかります。
画像を増やしても時間はリニアに増えないです。

CPU使用率は10%前後です。80%まで使えるとして1秒あたり8接続はいける・・・

メモリは30000枚の特徴量を読み込んでもたったの5.4Gしか食いません。

セラーデータベース作成にも機械学習

セラーの商品を検索できるようにするためには、データを作る必要があります。
そのためには画像を収集して登録します。でも・・単純に画像を収集しても、なんのやくにもたちません。

たとえば・・
* 複数の画像を一つの商品として取り扱う。
* その商品が何を売っているのか??ワンピース、ブラウス?
* 商品は男性向け?女性向け?
* このサービスにふさわしくない画像(サイズ表、テクスチャ、部分アップ)を排除してアピールしたい画像だけを登録。
* 1枚の画像にはファッションの要素がたくさん詰まっているので、「売りたい服」を切り出す必要があります。
* 過去に登録した商品と被ってないか?同じセラーで被っていたら重複しないようにします。

これを大量に行うには人が必要ですが、機械学習で自動化できます。:wink:
でも・・・ものすごく大変です。
けっこうモリダクサンです。
寝不足で死んじゃいそうです。:wink::wink::wink:

セラーデータベースediter

画像以外の商品情報のediter
サクサク変更できるようにDBのGUIもちゃっちゃと作ります
image.png

自分しか使わないので超適当。

今後の展開

  • セラー数、商品数の向上
  • 物体認識と類似スコア精度の向上
  • バックエンドはAPIでできているので、本物のセラーサイト(ショップ)に利用できるような仕組みづくり
  • 顔認証、顔識別のモデルを作ってモデルさんの顔検索やモデルさん軸に回遊できるようにする
  • 自動化率の向上をおこないメンテフリーでこのサイトを成長させる

感想

ファッションに全く関心ないおっさんがやってみた感想です。

製作中はつらみ:sob:しかなかったが、色々不思議な体験ができました。
たとえば・・・
同じ商品がZOZOとSHOPLISTに存在して価格が大きく違う。
価格の変化が早い。
同じ柄なんだけどTシャツとパーカーがある。
商品名が無い(あるんだけど説明やカテゴリに近い)
多色はわかりにくい。赤、赤いピンク、ピンク、薄いピンク・・・:sob:
境がない。サロペットはワンピースなのかオーバーオールなのか?下着じゃんって水着と、水着じゃんって下着。
業界的?既存の言葉を新しい語で言いまわす習慣が根付いている。
ブランドがたくさんある
メンズは・・・画像検索する必要ないと思うくらい種類?表現が少ない。
服を売ってるセラーとライフスタイルを売っているセラーがいる。

そして・・・
技術的に思いついたことを検索すると、論文がでてくるGoogleってすごい。

出典

セラー画像はSHOPLIST、ZOZO、
クエリ画像は「ぱくたそ」

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away