---
title: Yahoo!ショッピング類似画像検索の取り組み #yjbonfire
tags:  #yjbonfire  
author: [Yahoo!デベロッパーネットワーク](https://convert.docswell.com/user/ydnjp)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/MLELL36NER.jpg?width=480
description: bonfire data&amp;science #1 イベントで，ヤフーの類似画像検索について紹介した。システム設計の内容から実サービスに反映させる際の技術や学びまで、幅広く触れられている。
published: November 05, 19
canonical: https://convert.docswell.com/s/ydnjp/Z662VZ-2019-11-05-122831
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/MLELL36NER.jpg)

公開
Yahoo!ショッピング
類似画像検索の取り組み
2019年10月28日
ヤフー株式会社 佐藤純一
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.


# Page. 2

![Page Image](https://bcdn.docswell.com/page/54JMMD5QJW.jpg)

自己紹介
• ヤフー株式会社
ショッピング統括本部
プロダクション2本部 検索技術部
佐藤純一
• 2017新卒 (3年目)
2
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 3

![Page Image](https://bcdn.docswell.com/page/ZPJRV43KE9.jpg)

ヤフーでの仕事
• 商品検索APIの開発
• 検索エンジンの保守、運用自動化
• 類似画像検索システムの開発
3
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 4

![Page Image](https://bcdn.docswell.com/page/NPEXZ245JX.jpg)

類似画像検索の取り組み (業務外)
•
今回説明するシステムとほぼ同じ仕組みで作成
•
•
画像をベクトル化する際の機械学習モデルが異なる
社内ハッカソン (HackDay) で
旅行の類似画像検索システム
「ウユニ塩湖に行きたいんやが」を開発
ResNet-152 + カラーヒストグラム
社外で同じ仕組みのサービスを作成中
•
顔画像検索
似た有名人の顔画像を検索
FaceNetを利用
写真: アフロ
4
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 5

![Page Image](https://bcdn.docswell.com/page/63EK8MZRJD.jpg)

ヤフーショッピングとは
• オンラインショッピングモール
• 約3億の商品が存在
5
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 6

![Page Image](https://bcdn.docswell.com/page/4L732YDGE5.jpg)

ヤフーショッピング検索の課題
• 約3億の商品から欲しいものを見つけるのは
至難
• ファッション商品はビジュアルが重要
• ビジュアルは自然言語で表現しにくい
=&gt; 画像による検索で解決
類似画像検索
6
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 7

![Page Image](https://bcdn.docswell.com/page/V87DZ5PNJG.jpg)

Yahoo!ショッピング (iOS)
•
•
•
•
7
iOSアプリ
7月リリース
商品詳細ページから
虫眼鏡アイコンを押す
→ 似た商品
現在はファッションの
一部商品に限定
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 8

![Page Image](https://bcdn.docswell.com/page/4VJPDGNNJ8.jpg)

Yahoo!ブラウザ (Android)
•
•
•
•
8
Androidアプリ
6月末リリース
カメラで撮った
画像から似た商品を探す
バックエンドは
Yahoo!ショッピング
アプリと同じ
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 9

![Page Image](https://bcdn.docswell.com/page/L2EV16KYJQ.jpg)

スケジュール
2019年10月
2019年12月
2019年3月
2019年4月
2019年7月
2019年9月
2019年10月
9
プロジェクトスタート
開発開始
BEのシステムが完成
アプリ開発、運用改善
リリース
GPUサーバー増設
Vald移行
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 10

![Page Image](https://bcdn.docswell.com/page/Z57G2NQW7L.jpg)

担当領域
•
Yahoo!ショッピング
• バックエンド (発表者: 佐藤)
• iOSアプリ
• Yahoo!検索 (Yahoo!ブラウザー）
• Yahoo! JAPAN研究所
• NGT (次の発表者: 岩崎)
• テックラボ
• 物体検出・特徴抽出のモデル開発
10
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 11

![Page Image](https://bcdn.docswell.com/page/V4EQPQKQJP.jpg)

類似画像検索システム概要
11
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 12

![Page Image](https://bcdn.docswell.com/page/DKJ4YNPYE1.jpg)

公開
① 物体検出
•
•
•
背景画像のノイズを除去し、
検索精度を向上
トップス
ファッションの物体の
矩形領域とカテゴリを推定
画像に複数の物体が存在するため、
ボトムス
物体検出は重要
靴
写真: アフロ
12
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.


# Page. 13

![Page Image](https://bcdn.docswell.com/page/PLE1659NJG.jpg)

② 特徴抽出
•
•
物体検出後の画像から特徴ベクトルを作成する
現在は以下の組み合わせ
• 低次特徴量 (商品の色などの情報)
• カテゴリ特徴量 (商品のカテゴリ)
vector: [
-0.08681105,
-0.01660820,
-0.00286146,
-0.00457980,
0.00345631,
...
]
写真: アフロ
13
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 14

![Page Image](https://bcdn.docswell.com/page/8GEWW5NME2.jpg)

③ NGTへのインデックス
• 1000万件を超える商品数を格納
• 高速な検索を可能にするため、
NGTのインデックスを作成
vector: [
-0.08681105,
-0.01660820,
-0.00286146,
-0.00457980,
0.00345631,
...
]
NGT
https://github.com/yahoojapan/NGT
14
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 15

![Page Image](https://bcdn.docswell.com/page/W47Z5N3ME3.jpg)

④ NGTを利用した検索
• 画像からベクトルを作成、NGTで検索を行う
ベクトル
画像
NGT
アプリ
15
検索結果
API
Copyright
距離の近い
上位n件
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 16

![Page Image](https://bcdn.docswell.com/page/KYJ698X5JV.jpg)

ベクトル化・インデックス更新
Kafka
商品情報
商品情報取得
画像
16
Copyright
物体検出・ベクトル化
(GPUマシン)
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 17

![Page Image](https://bcdn.docswell.com/page/5GJ5N9XGE4.jpg)

NGTインデックス作成
NGT
Kafka
NGTインデックス作成
毎時アップロード
17
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
クラウドストレージ
(s3互換)
公開


# Page. 18

![Page Image](https://bcdn.docswell.com/page/V9E252XDER.jpg)

Kafkaに格納する理由
•
複数の種類のインデックスを作りたい
•
•
•
パラメータや条件を変える
Consumer Groupを分けて並列化
Offsetを戻して、インデックスを作り直せる
Kafka
18
公開
Copyright
A
Group Aのインデックス
B
Group Bのインデックス
2019 Yahoo Japan Corporation. All Rights Reserved.


# Page. 19

![Page Image](https://bcdn.docswell.com/page/5D7YKY8MJM.jpg)

クラウドストレージに保存する理由
•
•
インデックスを最初から作り直すのは時間がかかる
万が一壊れてもすぐに復旧できるように
過去のインデックスをクラウドストレージに保存
クラウドストレージ
19
Copyright
Tag: A
A-2019-10-15-12.gz
Tag: A
A-2019-10-15-13.gz
Tag: B
B-2019-10-15-12.gz
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 20

![Page Image](https://bcdn.docswell.com/page/2VENRPQ378.jpg)

差分更新の仕組み
• 商品情報が変わっても、
必ずしも画像が変わるわけではない
• ベクトル化は重い
• 画像が更新された時のみ再インデックス
• 商品情報、在庫の更新はDBのみ更新
20
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 21

![Page Image](https://bcdn.docswell.com/page/GY79M3DPE3.jpg)

公開
差分更新システム
•
•
差分更新時に商品情報を更新
物体検出結果、カテゴリなどをDBに更新
画像更新
があるとき
Kafka
物体検出・ベクトル化
商品情報取得
商品情報
のみ更新
21
DB
Copyright
検出領域
検出カテゴリ
など
2019 Yahoo Japan Corporation. All Rights Reserved.
NGT


# Page. 22

![Page Image](https://bcdn.docswell.com/page/5G78LM3XED.jpg)

NGT API
•
•
NGT (ngtpy)を利用したREST API
商品IDをキーとした検索機能を作りたい
•
•
•
22
NGTは文字列をキーにデータ登録できない
=&gt; 商品IDとObject IDの対応表を
ローカルDB（LevelDB)に保存
ローカルDBとNGTのインデックスをまとめて管理
インデックスの種類の指定やバージョン管理が可能
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 23

![Page Image](https://bcdn.docswell.com/page/ML7LL3VN7R.jpg)

インデックス自動更新
•
•
クラウドストレージから
NGTのAPIサーバにインデックスをダウンロード
毎時のダウンロードをトリガーにしてインデックスを再ロード
(uWSGIのGraceful reloadを利用)
クラウドストレージ
(s3互換)
23
Copyright
NGT API
毎時ダウンロード
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 24

![Page Image](https://bcdn.docswell.com/page/54EMMDGQEW.jpg)

異なる種類のインデックス管理
•
メンズ、レディースの商品はインデックスを分けている
（絞り込みの検索を実現するため）
異なる種類のインデックスの管理のため「タグ」をつける
•
•
•
公開
異なるパラメータで作ったインデックスの比較検証にも役立つ
設定ファイルで指定したタグのインデックスを自動ダウンロード
NGT index
クラウドストレージ
(s3互換)
24
mens
NGT API
(Tag：mens)
ladies
NGT API
(Tag：ladies)
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
類似画像検索API


# Page. 25

![Page Image](https://bcdn.docswell.com/page/ZPERV4ZK79.jpg)

インデックスのバージョン管理
•
•
インデックスのバージョンを指定して、リカバリー可能
開発機で本番のインデックスを利用して検証することも可能
Tag: A
A-2019-10-15-12.gz
Tag: A
A-2019-10-15-13.gz
Tag: A
25
13時のインデックス
を指定
A-2019-10-15-14.gz
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
NGT API
公開


# Page. 26

![Page Image](https://bcdn.docswell.com/page/NP7XZ295EX.jpg)

類似画像検索API
• 物体検出、画像検索、ベクトル化
のエンドポイントを提供
•
iOSアプリ、Y!ブラウザからリクエスト
• API層の後段処理
• 商品の削除、在庫の有無をすぐに反映
• 同一画像の除去、まとめ上げ
26
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 27

![Page Image](https://bcdn.docswell.com/page/637K8MPRED.jpg)

公開
類似画像検索API
•
NGTサーバ、各種GPUサーバ、データベースに対してリクエスト
物体検出API
特徴抽出API
NGT API
アプリ
27
類似画像検索API
PCF (PaaS)
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
MySQL


# Page. 28

![Page Image](https://bcdn.docswell.com/page/4LJ32YXG75.jpg)

物体検出API、特徴抽出API
• GPUマシン上にAPIを構築
• 社内提供のAPIを運用
• 物体検出API
• Nginx + uWSGI + Falcon + Chainer
• 特徴抽出
• Tensorflow Serving
28
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 29

![Page Image](https://bcdn.docswell.com/page/V8JDZ52NEG.jpg)

利用した技術
役割
言語、フレームワーク
類似画像検索API
Java (Spring Boot)
NGT API
Python (ngtpy, Falcon)
ベクトル化サーバ
Python (Falcon)
各種バッチ、デーモン (Index作成、更新等) Python
29
運用自動化
Python (Fabric)
構成管理
Chef
可視化
Grafana + Prometheus
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 30

![Page Image](https://bcdn.docswell.com/page/4VEPDG1NE8.jpg)

開発を通しての学び
•
小さな変更を積み重ねて作る
•
PR作ったら即リリース、1日に何度もリリース
•
自動デプロイ、自動テスト
•
30
検索精度の確認ツールを作る
•
定量評価が良いからと言って、必ず定性の評価が良いわけではない
•
パラメータの選択、デバッグ作業に役立つ
•
壊れても復旧可能な仕組みを作る
→ Kafkaでベクトルデータを保存, インデックスのバージョン管理
•
監視、可視化する
→ Grafanaで常にモニタリングし、動作を可視化
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 31

![Page Image](https://bcdn.docswell.com/page/L27V16YYEQ.jpg)

Grafana ダッシュボード
31
•
APIのリクエスト、エラーレート
•
ベクトル化、インデックス作成処理速度を可視化
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 32

![Page Image](https://bcdn.docswell.com/page/Z5JG2N9WJL.jpg)

今後の方針
• 対象商品の拡大（インテリアなど）
• 物体検出、特徴抽出モデルの性能改善
• Yahoo!ショッピングアプリで
物体を選択して類似画像検索可能に
• NGTの検索システムをValdに移行
32
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 33

![Page Image](https://bcdn.docswell.com/page/V47QPQWQEP.jpg)

現状のNGT APIの課題
33
•
現在はNGT (ngtpy)を利用し、APIを作成
•
インデックスの自動更新、バージョン管理、タグ管理機能などを実装
インデックス同期の排他制御などに気をつける必要がある
•
インデックスが巨大化した場合のシャーディングや
レプリケーションなど自前で実装しなくてはならない
•
運用・開発コストが大きい
•
NGTの使い方をよく理解している必要がある
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


# Page. 34

![Page Image](https://bcdn.docswell.com/page/DKE4YNKY71.jpg)

Vald
•
•
•
•
ベクトルの最近傍探索エンジン (OSS, Apache-2.0)
次期ショッピングの類似画像検索バックエンド
(11月中に置き換え予定)
Kubernetes上で動作
容易にスケール、運用コストが低減
ベクトルの分散検索、分散インデクシング、
リカバリ、リランクなどの機能が提供される
https://github.com/vdaas/vald
34
Copyright
2019 Yahoo Japan Corporation. All Rights Reserved.
公開


