Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

システム開発素人が深層学習を用いた画像認識で麻雀点数計算するLINEbotを作ったハナシ

678 views

Published on

Python JP 2018用資料
システム開発素人が深層学習を用いた画像認識で麻雀点数計算するLINEbotを作ったハナシ

Published in: Engineering
  • Be the first to comment

システム開発素人が深層学習を用いた画像認識で麻雀点数計算するLINEbotを作ったハナシ

  1. 1. システム開発素人が深層学習を用いた 画像認識で麻雀点数計算する LINEbotを作ったハナシ #flask #Heroku #物体検出 #SSD Rio Kurihara
  2. 2. 2 栗原 理央(Rio Kurihara) • 株式会社ブレインパッド • アナリティクスサービス部 データサイエンティスト • 2016年入社(新卒3年目) • 経験分野 • 自然言語処理 • 画像処理 • 需要予測 • 統計モデリング/機械学習/深層学習 • Not エンジニアリング http://free-illustrations.gatag.net/ https://www.pakutaso.com/ https://free-materials.com/ 好きなこと普段使っている主な言語・ツール
  3. 3. 3 突然ですが
  4. 4. 4 麻雀が好きです (ぶっちゃけ下手の横好きですが)
  5. 5. 5 も好きです
  6. 6. 6 深層学習を業務で使ってます
  7. 7. 7 最近エンジニアリング、モノ作りに 興味があります
  8. 8. 8 麻雀、Python、深層学習で 何か動くものが作りたい
  9. 9. 9 30符 4翻 7,700点! 和了時の画像をカメラで 撮ったら自動で点数計算 してくれる君を作ろう
  10. 10. 10 麻雀点数計算チャットボット概要 ※お遊びで始まり、未だお遊びの域を出ていない Input(画像) 牌の識別 役名 1p 2p 3p … 8m 9m p f c 平和 1 1 1 … 0 0 0 0 0 断ヤオ 0 1 1 … 1 0 0 0 0 混一 0 0 0 … 1 1 3 0 0 点数計算 ルールベース 深層学習
  11. 11. 11 今日言いたいこと • 今回は機械学習モデルの開発はほぼ苦労していない • 厄介だったのは機械学習モデルの載ったアプリの開発 • HerokuとLINE APIの仕様のコンボに苦しめられた • とはいえ素人でもPythonで一貫してアプリ作れた • あわよくば一緒に開発してくれる人いませんか
  12. 12. 12 みんな大好きSSD 原文:https://arxiv.org/pdf/1512.02325.pdf 論文和訳:https://qiita.com/de0ta/items/1ae60878c0e177fc7a3a • 深層学習の物体検出アルゴリズム • 画像中の「どこに」「何が」あるかを予測する
  13. 13. 13 工夫したのは学習データの作成 • アノテーションは本当に辛い。最低でも数百枚は必要 → 34種類の牌画像だけ撮影し、あとはランダムに配置するだけ 牌画像 学習用画像
  14. 14. 14 SSDによる物体検出のめちゃくちゃ精度良かった!
  15. 15. 15 SSDによる物体検出のめちゃくちゃ精度良かった! イケてる
  16. 16. 16 よっしゃアプリにしたろ
  17. 17. 17 LINEbotのシステム構成図 ユーザー LINE bot 画像 送信受信 Call back URL 画像送信 herokuサーバ 学習 GPGPU 推論
  18. 18. 18 LINE bot開発、難航
  19. 19. 19 Heroku/LINE Messagng APIの 仕様のコンボにやられまくる ※どちらもフリープラン故の制約
  20. 20. 20 / カネ払えば解決するんじゃね? \ / 趣味でやってるわけで・・・ なるべくお金はかけたくないのよ・・・ \
  21. 21. 21 Herokuフリープランによる制限 ユーザー LINE bot サーバ 画像 送信受信 Call back URL 画像送信 herokuサーバ 学習 GPGPU 推論 アプリの立ち上げに 60秒以上かかると dynoが強制再起動 される アプリ立ち上げ時にモデルビルド するなってこと・・・?
  22. 22. 22 Herokuフリープランによる制限 ユーザー LINE bot サーバ 画像 送信受信 Call back URL 画像送信 herokuサーバ 学習 GPGPU 推論 100MB以上の ファイルはおけない 深層学習モデル、 普通に100MB超えるんだけど・・・
  23. 23. 23 Herokuフリープランによる制限 ユーザー LINE bot サーバ 画像 送信受信 Call back URL 画像送信 herokuサーバ 学習 GPGPU 推論 画像 送信受信 S3 外部から引っ張ってくれば ええんやろ
  24. 24. 24 LINE Messagng API フリープランによる制限 ユーザー LINE bot サーバ 画像 送信受信 Call back URL 画像送信 herokuサーバ 学習 GPGPU 推論 Replyできるのは ユーザーアクションから 30秒以内に1度だけ 深層学習モデルのロード/ビルド、 推論は30秒じゃ終わらないヨ 画像 送信受信 S3
  25. 25. 25 Herokuフリープランによる制限 ユーザー LINE bot サーバ 画像 送信受信 Call back URL 画像送信 herokuサーバ 学習 GPGPU 推論 画像 送信受信 S3 メモリが512MBを 超えるとスワップが 発生して処理が もっさりする 何を言ってるの・・・?
  26. 26. 26 結局どうしたのか?実際の画面と仕様感(1/2) ユーザーアクションから30秒以内にReplyしないといけない & アプリ起動時に60秒以上かかると強制再起動がかかる 「もでるびるど」とユーザーが打ち込むと 深層学習モデルがビルドされる謎の仕様 実際の画面 Herokuのログ(モデルファイルをS3からロードしている)
  27. 27. 27 結局どうしたのか?実際の画面と仕様感(2/2) その後、計算したい画像を送ると 検出結果の画像と点数がテキス トで返ってくる 実際の画面
  28. 28. 28 おまけの煽り機能(開発途中) 安目で上がったら煽ってくる 実際の画面
  29. 29. 29 まとめ • 改善の余地しかないですが、これからも(できれば)Python一本で開発頑張 ります • 機械学習モデルをアプリケーションに載せるためのノウハウがもっと共有される世 の中になれば良いな 深層学習 麻雀詳しい話は →

×