Upgrade to Pro — share decks privately, control downloads, hide ads and more …

将棋盤を画像認識したかった

na-o-ys
April 26, 2017

 将棋盤を画像認識したかった

na-o-ys

April 26, 2017
Tweet

More Decks by na-o-ys

Other Decks in Technology

Transcript

  1. ΍Γ͍ͨ͜ͱ 9 8 7 6 5 4 3 2 1

    +---------------------------+ |v香v桂 ・ ・ ・ ・ ・ ・ ・|一 | ・ ・ ・ 馬 ・ ・ 龍 ・ ・|二 | ・ ・v玉 ・v歩 ・ ・ ・ ・|三 |v歩 ・ ・ ・v金 ・ ・ ・ ・|四 | ・ ・v銀 ・ ・ ・v歩 ・ ・|五 | ・ ・ ・ ・ 玉 ・ ・ ・ ・|六 | 歩 歩 ・ 歩 歩v歩 歩 ・ 歩|七 | ・ ・ ・ ・ ・ ・ ・ ・ ・|八 | 香 桂v金 ・v金 ・ ・ 桂 香|九 +---------------------------+ Input Output
  2. ম͖ͳ·͠๏ • ઢ෼ݕग़ͷ݁ՌΛ࢖͏ • ܩઢ͕Α͘औΕͯΔͷͰ • ίετؔ਺ f Λ༻ҙ͢Δ •

    f (࢛۱ͷ࠲ඪީิ, ઢ෼ݕग़݁Ռ) = ܩઢͷͽͬͨΓ۩߹ • ࠲ඪΛৼಈͤ͞ͳ͕Βίετؔ਺ͷ࠷খ஋Λ୳͢ • scipy ͷম͖ͳ·͠๏Ϟδϡʔϧ
  3. χϡʔϥϧωοτϫʔΫΛఆٛ ͢Δ • CNN (৞ΈࠐΈ3૚ + શ݁߹2૚) • ϋΠύʔύϥϝʔλͷৄࡉ͸ɺखॻ͖׽ࣈೝࣝ཰ 98.5

    % ͷ΍ͭΛਅࣅ͢Δ
 https://github.com/KyotoSunshine/CNN-for-handwritten-kanji ը૾ग़య: http://personal.ie.cuhk.edu.hk/~ccloy/project_target_code/index.html
  4. NNఆٛͷιʔε model = Sequential() model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape)) model.add(MaxPooling2D(pool_size=(2,

    2))) model.add(Dropout(0.2)) model.add(Conv2D(64, kernel_size=(3, 3), activation='relu', input_shape=input_shape)) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.3)) model.add(Conv2D(128, kernel_size=(3, 3), activation='relu', input_shape=input_shape)) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.4)) model.add(Flatten()) model.add(Dense(256, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(256, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(num_classes, activation='softmax')) model.summary() • Keras Λ࢖ͬͨ
  5. ֶशͤ͞Δ • ڭࢣσʔλ: 700 ຕ (+ σʔλ֦ு) • ΤϙοΫ਺: 80

    • Πϯελϯε: p2.xlarge (1 GPU, 4 CPU, 61 GB RAM) • -> ֶश࣌ؒ 15 ෼͘Β͍
  6. (DEMO) • ςετσʔλ(ֶशʹ༻͍͍ͯͳ͍ۨछ)ʹΑΔݕূ:
 ਖ਼ղ཰ 95.8 % ੒ޭ ࣦഊ యܕతͳσβΠϯͷ੒ۜɾ੒ܡ͸ ൑ผՄೳ

    ಠಛͳϑΥϯτ΋൑ผՄೳ (൚ԽͰ͖͍ͯΔ) σβΠϯʹΑͬͯ͸੒ۜɾ੒ܡɾۚͷ ൑ผ͕Ͱ͖ͳ͍ʢਖ਼ղ͸੒ۜʣ ่Ε͗ͨ͢ϑΥϯτ͸൑ผͰ͖ͳ͍ ʢਖ਼ղ͸੒߳ʣ
  7. ·ͱΊ • ൫໘ݕग़: ྠֲݕग़ + ઢ෼ݕग़ + ম͖ͳ·͠๏ • ম͖ͳ·͠ʹ10ඵ͔͔Δͷ͕ωοΫ

    • Ϛε໨಺༰ਪఆ: CNN • ςετσʔλͰ 95 % ఔ౓ • 99.9 % ͸·ͩԕ͍