PyConJP2018_LT_mahjong_180918

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

Recommended

メモリアロケーションからみた拡張ライブラリに大切なこと by
メモリアロケーションからみた拡張ライブラリに大切なことメモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なことMasaya TARUI
4.6K views27 slides
18 minitus発表資料 by
18 minitus発表資料18 minitus発表資料
18 minitus発表資料Keiichirou Miyamoto
2.2K views57 slides
養成読本と私 by
養成読本と私養成読本と私
養成読本と私Kimikazu Kato
1.9K views13 slides
人が神姫ん感(原文ママ)を感じるコンピュータ by
人が神姫ん感(原文ママ)を感じるコンピュータ人が神姫ん感(原文ママ)を感じるコンピュータ
人が神姫ん感(原文ママ)を感じるコンピュータharu2036
6.2K views21 slides
超要約 Stan Reference by
超要約 Stan Reference超要約 Stan Reference
超要約 Stan ReferenceHiroki Mizukami
2.9K views26 slides
G stylus 10-20 by
G stylus 10-20G stylus 10-20
G stylus 10-20大貴 吉川
58 views6 slides

More Related Content

What's hot

アクションマイニングを用いた最適なアクションの導出 by
アクションマイニングを用いた最適なアクションの導出アクションマイニングを用いた最適なアクションの導出
アクションマイニングを用いた最適なアクションの導出Shintaro Fukushima
5.5K views38 slides
オレオレR-GUIを作りたい by
オレオレR-GUIを作りたいオレオレR-GUIを作りたい
オレオレR-GUIを作りたいMasahiro Hayashi
4.8K views11 slides
面倒くさいこと考えたくないあなたへ〜Tpotと機械学習〜 by
面倒くさいこと考えたくないあなたへ〜Tpotと機械学習〜面倒くさいこと考えたくないあなたへ〜Tpotと機械学習〜
面倒くさいこと考えたくないあなたへ〜Tpotと機械学習〜Hiroki Yamamoto
4.3K views23 slides
Reproducebility 100倍 Dockerマン by
Reproducebility 100倍 DockerマンReproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンNagi Teramo
4.3K views25 slides
ゲームノシクミ by
ゲームノシクミゲームノシクミ
ゲームノシクミTATSUYA HAYAMIZU
1.3K views21 slides
P5js web editorで、クリエイティブコーディングを! by
P5js web editorで、クリエイティブコーディングを!P5js web editorで、クリエイティブコーディングを!
P5js web editorで、クリエイティブコーディングを!Suzuki Junko
1.1K views22 slides

What's hot(11)

アクションマイニングを用いた最適なアクションの導出 by Shintaro Fukushima
アクションマイニングを用いた最適なアクションの導出アクションマイニングを用いた最適なアクションの導出
アクションマイニングを用いた最適なアクションの導出
Shintaro Fukushima5.5K views
面倒くさいこと考えたくないあなたへ〜Tpotと機械学習〜 by Hiroki Yamamoto
面倒くさいこと考えたくないあなたへ〜Tpotと機械学習〜面倒くさいこと考えたくないあなたへ〜Tpotと機械学習〜
面倒くさいこと考えたくないあなたへ〜Tpotと機械学習〜
Hiroki Yamamoto4.3K views
Reproducebility 100倍 Dockerマン by Nagi Teramo
Reproducebility 100倍 DockerマンReproducebility 100倍 Dockerマン
Reproducebility 100倍 Dockerマン
Nagi Teramo4.3K views
P5js web editorで、クリエイティブコーディングを! by Suzuki Junko
P5js web editorで、クリエイティブコーディングを!P5js web editorで、クリエイティブコーディングを!
P5js web editorで、クリエイティブコーディングを!
Suzuki Junko1.1K views
元BIエバンジェリストが語る!脱獄matplot! by ReNom User Group
元BIエバンジェリストが語る!脱獄matplot!元BIエバンジェリストが語る!脱獄matplot!
元BIエバンジェリストが語る!脱獄matplot!
ReNom User Group632 views
グラフデータベース「Neo4j」の 導入の導入 by Hisao Soyama
グラフデータベース「Neo4j」の 導入の導入グラフデータベース「Neo4j」の 導入の導入
グラフデータベース「Neo4j」の 導入の導入
Hisao Soyama20.9K views
機械学習を使って数字認識してみよう! by Kenyu Uehara
機械学習を使って数字認識してみよう!機械学習を使って数字認識してみよう!
機械学習を使って数字認識してみよう!
Kenyu Uehara2K views
PypeRで実験と分析を一本化する by Takashi Yamane
PypeRで実験と分析を一本化するPypeRで実験と分析を一本化する
PypeRで実験と分析を一本化する
Takashi Yamane4.2K views
Chainer meetup lt by Ace12358
Chainer meetup ltChainer meetup lt
Chainer meetup lt
Ace1235891.1K views

Similar to PyConJP2018_LT_mahjong_180918

GDG2018 vision kit mahjong by
GDG2018 vision kit mahjongGDG2018 vision kit mahjong
GDG2018 vision kit mahjongRio Kurihara
1.3K views58 slides
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」 by
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」tokyorgirls
1.3K views39 slides
DBエンジニアに必要だったPythonのスキル by
DBエンジニアに必要だったPythonのスキルDBエンジニアに必要だったPythonのスキル
DBエンジニアに必要だったPythonのスキルSatoshi Yamada
2.3K views24 slides
ownCloudについて by
ownCloudについてownCloudについて
ownCloudについてShinya Saita
3.8K views58 slides
PyCharm入門 by
PyCharm入門PyCharm入門
PyCharm入門Yuki Nagai
12.1K views15 slides
Orientation by
OrientationOrientation
OrientationTakeshi Akutsu
419 views15 slides

Similar to PyConJP2018_LT_mahjong_180918(20)

GDG2018 vision kit mahjong by Rio Kurihara
GDG2018 vision kit mahjongGDG2018 vision kit mahjong
GDG2018 vision kit mahjong
Rio Kurihara1.3K views
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」 by tokyorgirls
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
tokyorgirls1.3K views
DBエンジニアに必要だったPythonのスキル by Satoshi Yamada
DBエンジニアに必要だったPythonのスキルDBエンジニアに必要だったPythonのスキル
DBエンジニアに必要だったPythonのスキル
Satoshi Yamada2.3K views
ownCloudについて by Shinya Saita
ownCloudについてownCloudについて
ownCloudについて
Shinya Saita3.8K views
PyCharm入門 by Yuki Nagai
PyCharm入門PyCharm入門
PyCharm入門
Yuki Nagai12.1K views
Rubyの会社でPythonistaが三ヶ月生き延びた話 by Drecom Co., Ltd.
Rubyの会社でPythonistaが三ヶ月生き延びた話Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
Drecom Co., Ltd.3.7K views
Rubyの会社でPythonistaが3ヶ月生き延びた話 by Tokoroten Nakayama
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
Tokoroten Nakayama9.2K views
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session by Shinichi Nakagawa
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk SessionPythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
Shinichi Nakagawa25.8K views
20200330_RPALT広島#5_RPA徒然草~あやしうこそものぐるほしけれ by Naoko Shinagawa
20200330_RPALT広島#5_RPA徒然草~あやしうこそものぐるほしけれ20200330_RPALT広島#5_RPA徒然草~あやしうこそものぐるほしけれ
20200330_RPALT広島#5_RPA徒然草~あやしうこそものぐるほしけれ
Naoko Shinagawa426 views
PredictionIOのPython対応計画 by Shinsuke Sugaya
PredictionIOのPython対応計画PredictionIOのPython対応計画
PredictionIOのPython対応計画
Shinsuke Sugaya687 views
東方ゲームAIとその歴史 by ide_an
東方ゲームAIとその歴史東方ゲームAIとその歴史
東方ゲームAIとその歴史
ide_an2.6K views
211120 他人の書いたPythonスクリプトをステップ実行で理解する by Takuya Nishimoto
211120 他人の書いたPythonスクリプトをステップ実行で理解する211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する
Takuya Nishimoto1.3K views
匠Methodをサポートする事業開発に役立つ書籍たちを紹介します by Haruo Sato
匠Methodをサポートする事業開発に役立つ書籍たちを紹介します匠Methodをサポートする事業開発に役立つ書籍たちを紹介します
匠Methodをサポートする事業開発に役立つ書籍たちを紹介します
Haruo Sato3.2K views
Python学習奮闘記#07 webapp by Takeshi Akutsu
Python学習奮闘記#07 webappPython学習奮闘記#07 webapp
Python学習奮闘記#07 webapp
Takeshi Akutsu2K views
ゲーム制作における素材作成.pdf by ssuser5583eb
ゲーム制作における素材作成.pdfゲーム制作における素材作成.pdf
ゲーム制作における素材作成.pdf
ssuser5583eb12 views
TypeScriptで作る型安全FirefoxOSアプリ by progre
TypeScriptで作る型安全FirefoxOSアプリTypeScriptで作る型安全FirefoxOSアプリ
TypeScriptで作る型安全FirefoxOSアプリ
progre4.2K views
Watson summit 公開用 by Izumi Akiyama
Watson summit 公開用Watson summit 公開用
Watson summit 公開用
Izumi Akiyama1.8K views
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント by Hiroyuki Ishikawa
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
Hiroyuki Ishikawa644 views
言語処理するのに Python でいいの? #PyDataTokyo by Shuyo Nakatani
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani21.2K views

PyConJP2018_LT_mahjong_180918