Share
Embed
類似画像検索の裏側 - 機械学習と近似近傍探索 - / similar_image_search_inside
ペパボ研究所 in da house #1
monochromegane
September 12, 2018
Transcript
40 slides
-
- ػցֶशͱۙࣅۙ୳ࡧ - ࡾ༔հ / Pepabo R&D Institute, GMO Pepabo,
Inc. 2018.09.11 ϖύϘݚڀॴ in da house #1 ྨࣅը૾ݕࡧͷཪଆ -
• ใ୳ࡧϓϩηεγεςϜଆͷ ٕज़ৄࡉ͚ͩͰͳ͘ɺ͜ͷϓϩ ηεΛۦಈ͢ΔओମͰ͋Δར༻ऀ ͕ଘࡏ͢Δ • ར༻ऀαΠυΛத৺ͱͨ͠ใ୳ ࡧϓϩηεϞσϧͷઌߦݚڀʹΑ Γɺใཁٻɺ༷ʑͳจ຺ʹΑ ΓมԽ͍ͯ͘͜͠ͱ͕Θ͔͍ͬͯ
Δ 5 ͳΊΒ͔ͳϚονϯάʹ͚ͯ ใཁٻΛऔΓרٕ͘ज़ͱϓϩηεϞσϧؔ࿈ਤ จ຺ʹΑΓ࠷దͳԠ͕มԽ͢ΔͷͰ͋Εɺ ٕज़ؒͰͷ༏ҐੑධՁͰͳ͘ɺ ঢ়گʹԠͨ͡બ͕ྑ͍ͷͰͳ͍͔ -
• ར༻ऀͷऔΓ͏Δߦಈ͕จ຺ʹΑΓมԽ͢ΔͱԾఆ্ͨ͠Ͱɺਫ਼៛ͳจ຺ͷ Ѳฒͼʹ՝ઃఆͷ໌֬ԽࢧԉΛ௨ͯ͠ɺײతͳ͍߹ΘͤʹԠͰ͖Δ Έ 6 ͳΊΒ͔ͳϚονϯάʹ͚ͯ 1. จ຺ʹΑΓԠͷධՁ͕มΘΔ͜ͱͷ֬ೝ 2. ར༻ऀͷจ຺ͷύλʔϯྨͱࣝผख๏ͷཱ֬
3. ඞཁʹԠͯ͡ײతͳ͍߹ΘͤʹԠͰ͖Δݕࡧใٕज़ͷಋೖ 4. ՝ઃఆͷ໌֬Խࢧԉͷݕ౼ -
• m࣍ݩͷϕΫτϧxΛn࣍ݩͷϕΫτϧyࣸ૾͢ΔؔfΛਪఆ͢Δֶशख๏ 10 χϡʔϥϧωοτϫʔΫ: Ϟσϧ x1 x2 xm b W
y1 y2 yn 1 2 o1 = σ( m ∑ i=0 w1i xi + b1 ) h 3 o = σ(Wx + b) w11 w12 . . w1m w21 w22 . . w2m . . wh1 wh2 . . whm x1 x2 . . xm + b1 b2 . . bh x f y h wh1 wh2 x1 x2 ೖྗ͝ͱʹॏΈXΛࢉ όΠΞε ͨ͠ͷΛ׆ੑԽؔʹ௨͢ શϊʔυʹର͢Δॲཧߦྻͱͯ͠ૢ࡞Ͱ͖Δ -
11 χϡʔϥϧωοτϫʔΫ: ֶश x1 x2 xm y1 y2 yn x
f y • m࣍ݩͷϕΫτϧxΛn࣍ݩͷϕΫτϧyࣸ૾͢ΔؔfΛਪఆ͢Δֶशख๏ t tn t2 t1 W(1) W(2) b(1) b(2) ✓(i+1) = ✓(i) ↵rEk E = 1 2 X n (yn tn)2 E = X n tn ln yn rEk = ( @Ek @✓1 , .. @Ek @✓V ) ग़ྗͱਖ਼ղͷޡࠩΛද͢ଛࣦؔΛఆٛ͢Δɻ ೋޡࠩʢࠨʣɺަࠩΤϯτϩϐʔޡࠩʢӈʣ ଛࣦؔʹର͢Δ֤ύϥϝλͷภඍͷͷू·ΓʢޯʣΛ༻ ͍ͯଛࣦؔͷ͕খ͘͞ͳΔΑ͏ʹύϥϝλΛߋ৽͢Δ͜ͱΛ ޯ߱Լ๏ͱݺͿɻಛʹҰ෦ͷ݁ՌͷΈΛར༻͢Δ֬తޯ߱ Լ๏͕Α͘༻͍ΒΕΔɻ Αͬͯޯ͕ফ͑ͳ͍Α͏ͳͳΊΒ͔ͳ׆ੑԽ͕ؔ·ΕΔɻ ·ͨɺ֤ύϥϝλͷภඍΛݸผʹٻΊΔͷͰͳ͘ɺχϡʔϥ ϧωοτϫʔΫΛදؔ͢GΛ߹ؔͱݟཱͯΔ͜ͱͰɺ্ྲྀ ͷޡࠩͱࣗͷೖྗͷΈΛͬͯܭࢉྔΛ͑ͳ͕Βޮతʹ ޯΛٻΊΔख๏Λޡࠩٯ๏ͱݺͿɻ -
ΈࠐΈχϡʔϥϧωοτϫʔΫ 13
ੵԋࢉ ΈࠐΈ ࠷େ ೖྗσʔλʹରͯ͠ੵԋࢉΛߦ͏ϑΟϧλΛద༻͠ɺ ಛϚοϓͱͯ͠ग़ྗ͢ΔɻۭؒใΛߟྀͰ͖Δɻ ࠷దͳϑΟϧλͷॏΈֶशʹΑͬͯ֫ಘ͢Δɻ • ۭؒతใΛߟྀͨ͠χϡʔϥϧωοτϫʔΫ ϓʔϦϯά ೖྗσʔλʹରۭͯؒ͠ͷूΛߦ͏ϑΟϧλΛద༻ ͢Δɻ࠷େฏۉΛར༻͢ΔͷͰֶश͕ෆཁɻ ࡉ͔ͳҐஔมԽʹର͢Δؤڧੑʹߩݙ͢Δɻ ಛநग़ث ࣝผث -
4QPUJGZBOOPZ w "QQSPYJNBUF/FBSFTU /FJHICPST0I:FBI w $ ϥΠϒϥϦͱ1ZUIPOͷό ΠϯσΟϯάΛఏڙ w ϥϯμϜαϯϓϦϯάͨ͠ೋΛ
ݩʹۭؒΛೋׂΛ܁Γฦͯ͠ ߏΛෳߏங w ୳ࡧׂ࣌ϕΫτϧͰৼΓ͚ -
• ಛྔม • ݸʑͷը૾σʔλͷྨࣅੑΛఆྔతʹൺֱՄೳͳܗࣜʹม͢Δ ఆੑతͳධՁʹ͍ۙ͠ಛྔมػߏͱͯ͠ͷDeep CNN ➕ ֶशͱ༧ଌΛॲཧ͢ΔͨΊͷ֦ுੑͱαʔϏε͔Βͷಠཱੑ •
ۙ୳ࡧ • มͯ͠ಘΒΕͨಛྔͲ͏͠Λൺֱ͠ɼྨࣅ͢Δू߹Λಛఆ͢Δ ਫ਼ͱΛཱ྆͢ΔANN(ۙࣅۙ୳ࡧ) ➕ σʔλͷूͱαʔϏε͔Βͷಠཱੑ 20 ྨࣅը૾ݕࡧΛࢧ͑Δٕज़ -
Similar images search system using ANN 21 Feature Similar items
ANN [2048]float64 query response Deep CNN index Features [n][2048]float64 Deep CNN register find similar features -
• ϩάDBͳͲͷαʔϏεࢿ࢈ͱ࿈ܞͰ͖Δ ೖग़ྗ͕Cloud Storageܦ༝ • ൺֱత༰қʹϞσϧͷߏஙͱࢼߦ͕ߦ͑Δ TensorFlowΛ࠾༻ •
ֶश݁ՌΛར༻͢ΔͨΊͷखஈͱͯ͠APIΛఏڙ͢Δ ΦϯϥΠϯ༧ଌαʔϏεʹΑΓϞσϧͷAPIԽ • ্هͷΈ͕εέʔϥϒϧͰ͋Δ͜ͱ ࢄܕτϨʔχϯάΠϯϑϥͱෛՙࢄαʔϏεͷ࿈ܞ 22 ػցֶशج൫ͱͯ͠ͷGoogle Cloud ML -
ಛྔม w͋Δ࣌·Ͱͷ࡞ը૾ҰཡΛಛྔʹม͢Δ wมͨ͠ಛྔҰཡΛۙࣅۙ୳ࡧσʔλϕʔεʹೖ͢Δ Service Object Storage GCP image to data
data to feature vectorizer by Deep CNN ANN Workers -
mruby_annoy on ngx_mruby 26 class NNS def call(env) params =
env['QUERY_STRING'].split('&') .map {|kv| kv.split('=') }.to_h category_id = params['category_id'].to_i product_id = params['product_id'].to_i limit = (params['limit'] || 10).to_i userdata = Userdata.new "annoy_data_key" annoy = userdata.send("category_#{category_id}") return not_found unless annoy nns = annoy.get_nns_by_item(product_id, limit) [200, content_type, [nns.to_json]] end private def not_found return [404, content_type, [{'error' => 'not_found'}.to_json]] end def content_type {'Content-Type' => 'application/json;charset=utf-8'} end end run NNS.new -
• ECαΠτʹ͓͍ͯͷՃߋ৽සൟʹൃੜ͢ΔͨΊஞ࣍·ͨࠩͰͷ ΠϯσοΫεߋ৽͕༗༻ • ΠϯσοΫε෦IDͱαʔϏεଆͷIDͱͷϚοϐϯά • ͜ΕΒΛຬͨ͠ɼ͔ͭɼΑΓߴͳۙࣅۙ୳ࡧAPIαʔόʔΛgannoyͱͯ͠ ఏڙ • ݱ࣌ओʹஞ࣍ߋ৽࣌ͷੑೳͷͨΊόοΫΤϯυΛyahoo/NGTʹࠩ
͠ସ͑ͯӡ༻த 27 monochromegane/gannoy(-yahoo/NGT) -
28 monochromegane/gannoy(-yahoo/NGT) # Add item $ curl \ ’http://localhost:1323/databases/hoge/features/100’ \
-H "Content-type: application/json” \ -X PUT \ -d '{"features": [1.0, 0.5, 0.2,..]}’ # Search $ curl \ ’http://localhost:1323/search?database=hoge&id=100’ -
ྨࣅը૾ݕࡧ 29 Nyah products#show product_id nearest products products#update Gannoy Object
Storage GCP data to feature vectorizer by Inception-V3 ˞ۙࣅۙ୳ࡧ࣌ʹେ෦ͷ ΠϯσοΫεͷΞΫηε͕ ൃੜ͢ΔͨΊ࣮༻తͳΛ ಘΔͨΊʹσʔλϕʔεϑΝ Πϧ͕શͯϖʔδΩϟογϡ ʹࡌΔαΠζͷϝϞϦ͕ඞཁ • ݕࡧ࣌࡞IDΛݩʹొ͞Εͨಛྔͷۙू߹Λฦ٫͢Δ • ߋ৽࣌ߋ৽ޙͷಛྔΛҰ࣌తʹอଘɼఆظతʹࠩөͯ͠Γସ͑ -
• ಛྔม • ݸʑͷը૾σʔλͷྨࣅੑΛఆྔతʹൺֱՄೳͳܗࣜʹม͢Δ ఆੑతͳධՁʹ͍ۙ͠ಛྔมػߏͱͯ͠ͷDeep CNN ↪︎ αʔϏεʹಛԽͨ͠”ྨࣅੑ”Λ֫ಘ͢Δ •
ۙ୳ࡧ • มͯ͠ಘΒΕͨಛྔͲ͏͠Λൺֱ͠ɼྨࣅ͢Δू߹Λಛఆ͢Δ ਫ਼ͱΛཱ྆͢ΔANN(ۙࣅۙ୳ࡧ) ↪︎ ΑΓߴͰߴਫ਼ͳANN 34 ྨࣅը૾ݕࡧΛࢧ͑Δٕज़ -
SSD 35 • Single Shot MultiBox Detector • ΦϒδΣΫτҐஔͱΫϥεྨΛҰ ׅͰߦ͏Ϟσϧ
• αʔϏεಠࣗͷΧςΰϦΛֶशσʔ λʹ༻͍ͨ -
• ΫΤϦͱߴ࣍ݩϕΫτϧू߹Λҙͷ࣍ݩͰͨ͠෦ϕΫτϧ୯ҐͰฒ ߦʹۙ୳ࡧͨ݁͠Ռͷू߹Ͱ͋Δۙީิ͔Βɼ࠶ۙ୳ࡧΛߦ͏ɽ 37 ఏҊख๏ (໘) R@ R@ R@ 9@
9@ 9@ /SFDPSET // R@ Y@O Y㱨9@ // R@ Y@O Y㱨9@ // R@ Y@O Y㱨9@ \ ^ \ ^ \ ^ BSHNJOE R Y Y㱨\ ^ 㱮 㱮 ղલ ղޙ ᶃ࣍ݩۭؒͷฒߦͨۙ͠୳ࡧ ᶄݻఆͷۙީิͷू ᶅۙީิͷઢܗ୳ࡧ ᶃ ᶄ ᶅ վળ ᶃ ᶄ ᶅ 2VFSZ -
• ಛੑΛΑ͘දݱ͓ͯ͠Γߴਫ਼ʹྨࣅ͕ൺֱՄೳͳߴ࣍ݩ͔ͭີͳϕΫ τϧͷू߹Λରͱͨۙ͠ࣅۙ୳ࡧ • ֶशࡁΈCNNΛಛநग़ثͱͯ͠ར༻ͯ͠ը૾͔ΒಘΒΕΔಛྔू߹ • ςΩετΛࢄදݱม͢ΔWord2vec͔ΒಘΒΕΔಛྔू߹ • ͜ΕΒ͕ɼݕࡧ࣭σʔλ(ΫΤϦ)ʹର͢Δߴ࣍ݩϕΫτϧू߹ͷۙ୳ࡧ݁ Ռͷ্Ґू߹͕ɼΫΤϦͱߴ࣍ݩϕΫτϧू߹Λҙͷ࣍ݩͰͨ͠෦
ϕΫτϧ୯ҐͰۙ୳ࡧͨ݁͠Ռͷ্Ґू߹ͱྨࣅ͍͢͜͠ͱʹண 38 ఏҊख๏ (ਫ਼໘) ෦͕ྨࣅ͢Εશମ͕ྨࣅ͢ΔՄೳੑ͕ߴ͍σʔλಛੑ -
39 Sanny: ఏҊख๏ͷ࣮ 4BOOZ 4BOOZ 4BOOZ // // 㱮 //
// ᶃ ᶄ ᶅ 2VFSZ "MHPSJTN "MHPSJTN "MHPSJTN • ΫΤϦฒͼʹ୳ࡧରσʔλͷҙ࣍ݩͷͱ݁ՌͷूΛ୲͢Δ • ෦ϕΫτϧͷۙ୳ࡧΞϧΰϦζϜΘͳ͍ • ෦ϕΫτϧ͝ͱͷ୳ࡧॲཧಠཱͷͨΊࢄߏ͕Մೳ