118
本スライド中に登場するスプラトゥーン関連画像は任天堂株式会社の著作物です。

IkaLog20170316pynq_dist

Embed Size (px)

Citation preview

Page 1: IkaLog20170316pynq_dist

本スライド中に登場するスプラトゥーン関連画像は任天堂株式会社の著作物です。

Page 2: IkaLog20170316pynq_dist

• 

– 

– 

– 

• 

– 

– 

– 

• 

Page 3: IkaLog20170316pynq_dist
Page 4: IkaLog20170316pynq_dist
Page 5: IkaLog20170316pynq_dist

萌え萌えうにっくす!ネットワーク管理ガイド(2003)

Xen徹底入門 第一版/第二版(2007.2009)

Page 6: IkaLog20170316pynq_dist

FusionioMemoryPCIe接続型のエンタープライズ向けフラッシュストレージの第3世代製品

 サーバの目利きになる方法前編・後編

Page 7: IkaLog20170316pynq_dist
Page 8: IkaLog20170316pynq_dist
Page 9: IkaLog20170316pynq_dist
Page 10: IkaLog20170316pynq_dist
Page 11: IkaLog20170316pynq_dist

(ヾノ・∀・`)ナイナイ

Page 12: IkaLog20170316pynq_dist

 <⌒/ヽ-、__/<_/____/ ̄ ̄ ̄ ̄ ̄ ̄ ̄

アダーできたし、次はALU作って、最終的にはオレオレマイコンをひとつ作ってみようか。

今使っているロジックシミュレータじゃ小さい回路しか作れないしさすがにALUすら無理だなあ

Page 13: IkaLog20170316pynq_dist

二日後

TwoDaysLater

Page 14: IkaLog20170316pynq_dist
Page 15: IkaLog20170316pynq_dist
Page 16: IkaLog20170316pynq_dist

レジスタの値を読み取り、アナログRGBで状態を出力する回路(notSW)を作って入れてた

Page 17: IkaLog20170316pynq_dist

17

Page 18: IkaLog20170316pynq_dist
Page 19: IkaLog20170316pynq_dist
Page 20: IkaLog20170316pynq_dist

様々なステージとルール

•  16のステージ、4つのルール•  勝利に向けチームで立ち向かう

多様な楽しみ方

•  90以上のブキから好きなものを選んでプレイ

Page 21: IkaLog20170316pynq_dist

WiiU用ゲーム「スプラトゥーン」支援ソフト

– HDMIキャプチャを介して情報を自動取得

– 数値・文字列データとして認識

– お好みの方法で蓄積、出力

NintendoWiiU& スプラトゥーン

データ化{“kills”:5,“deaths”:1}

IkaLog

外部ツールへ出力(棒読みちゃん等)

出力例

Page 22: IkaLog20170316pynq_dist

HDMIキャプチャデバイス

IkaLog実行用PC

Page 23: IkaLog20170316pynq_dist
Page 24: IkaLog20170316pynq_dist
Page 25: IkaLog20170316pynq_dist
Page 26: IkaLog20170316pynq_dist
Page 27: IkaLog20170316pynq_dist

録画ソフト 自動制御

AmaRecTV

カラーLED連動

Fluentd転送

スプラトゥーン戦績記録SNS

CSV/JSONファイル保存 スクリーンショット保存

SNS投稿

IkaLog

Page 28: IkaLog20170316pynq_dist
Page 29: IkaLog20170316pynq_dist

•  IkaLogユーザのひとり @fetus_hina さんが開発、

運営する Web サイト

•  IkaLog からのプレイデータを受け取り、

表示・集計する

•  IkaLogからの投稿を分析し

統計情報、トレンドを表示

Page 30: IkaLog20170316pynq_dist

30https://stat.ink/

Page 31: IkaLog20170316pynq_dist

自分が倒されて行動不能だった時間

イカ(味方/敵 計8匹)の生死状況

チームのスペシャル発動、キル/デス

自分の塗り面積

https://stat.ink/

Page 32: IkaLog20170316pynq_dist

https://stat.ink/

ナワバリバトル – 互いの干渉が少ない

ガチエリア – “相手を倒しつつ生存”がカギ

ガチホコ – 全体的に乱戦になりやすい

ガチヤグラ – 全体的に乱戦になりやすい

Page 33: IkaLog20170316pynq_dist

https://stat.ink/

Page 34: IkaLog20170316pynq_dist

.96ガロンデコアップデートをきっかけにユーザー数が激減

ロングブラスターカスタム夏以降、人気を博しているブキのひとつ

https://stat.ink/

Page 35: IkaLog20170316pynq_dist

データソースh\ps://stat.ink/en^re/user

【ピーク】24時間あたり370ユーザ、約15,000ゲーム

2016年11月時点にて24時間あたり 平均100ユーザ超が利用、平均2500ゲームを処理

最後の“フェス“(ゲーム内イベント)

Page 36: IkaLog20170316pynq_dist

• 

• 

• 

Page 37: IkaLog20170316pynq_dist
Page 38: IkaLog20170316pynq_dist

•  2014年INTEROPでの”Chainer”デモがきっかけ

– 深層学習のプレゼンテーションみて「凄いな」と思った

–  “何か面白いソフトウェアを作りたいな”

– ちょうどスプラトゥーンの発売直後だった

•  未経験からのチャレンジ

– OpenCV経験 3時間ぐらい

– 機械学習/ディープライーニング経験 なし

Page 39: IkaLog20170316pynq_dist
Page 40: IkaLog20170316pynq_dist

ここまでするなら

自動化できるツールを作ろう!

Page 41: IkaLog20170316pynq_dist
Page 42: IkaLog20170316pynq_dist
Page 43: IkaLog20170316pynq_dist

ソース映像 マスク画像 加算画像

+==

正しいマスクを加算すると画像が真っ白になる

違うマスクを加算すると画像が真っ白にならない

Page 44: IkaLog20170316pynq_dist

44

Page 45: IkaLog20170316pynq_dist

45

Page 46: IkaLog20170316pynq_dist
Page 47: IkaLog20170316pynq_dist

47

Page 48: IkaLog20170316pynq_dist

•  ゲーム中で使われているフォントは2種類

– 画面上に現れる数字フォントは1種類

– フォントが判っているのだから、認識できるはず

•  試行錯誤の後、既存OCRエンジンの利用は断念

– 機械学習ベースの認識エンジンを実装

Page 49: IkaLog20170316pynq_dist

●●●

■■

?▲

?

?

?

?

とてもシンプルな機械学習標本    の傍にあるサンプルがどれかで分類する。K=1の場合は最寄りのサンプルがあるクラスに分類される。K=3の場合は近くに3つのサンプルがあるクラスに分類される。

Page 50: IkaLog20170316pynq_dist

•  GitHub にソースあり

–  https://github.com/hasegaw/opencv_knn_example/

•  三つのパターン ○ △ □ で画像を生成し、

kNNで学習する

•  ランダムに ○ △ □ から画像を生成し、その画像

の種類を判定する

– KNN を用いてそれに近い画像を見つけ出す

– 見つけた画像の種類から、問題図形の種類を特定

Page 51: IkaLog20170316pynq_dist

問題図形をランダムに生成

K近傍法を用いて、学習済みの図形から、もっとも近い図形を調べる

仕分ける○ △ □

○学習済み図形

○ △ □

Page 52: IkaLog20170316pynq_dist
Page 53: IkaLog20170316pynq_dist

1)画面上の数字部分(位置固定)を切り抜き

2)縦・横のヒストグラムを生成し各文字の位置を特定

3)文字を検出用サンプルのサイズ(等幅)にリサイズ、

二値化

4)KNNにより既知の検出用サンプルと照らし合わせて

認識する

Page 54: IkaLog20170316pynq_dist
Page 55: IkaLog20170316pynq_dist
Page 56: IkaLog20170316pynq_dist
Page 57: IkaLog20170316pynq_dist

•  基本は数字の認識と一緒

•  認識率はそれほど高くないが、認識回数で精度を確保

–  IkaLogは現在毎秒10フレームほど解析している

–  下記例では、死因のメッセージ合計49fを解析し、

最多頻度は96gal_deco (18f, 36%) だった → 結果的に正解

votes={'supershot':6, 'carbon_deco':1, 'bucketslosher':1, 'octoshooter_replica':1,'splashshield':1, 'sshooter_collabo':5, 'hotblaster':2, 'pablo':1, 'nzap89':6,'sharp_neo':3, 'hotblaster_custom':2, '96gal_deco':18, '52gal':1, 'hokusai':1}

Page 58: IkaLog20170316pynq_dist
Page 59: IkaLog20170316pynq_dist

• 

• 

• 

Page 60: IkaLog20170316pynq_dist
Page 61: IkaLog20170316pynq_dist
Page 62: IkaLog20170316pynq_dist

黒いブレット明るいブレット

背景色

Page 63: IkaLog20170316pynq_dist

黒いブレット

明るいブレット

背景色

Page 64: IkaLog20170316pynq_dist
Page 65: IkaLog20170316pynq_dist

• – 

– 

• – 

– 

• – 

– 

Page 66: IkaLog20170316pynq_dist

66

Page 67: IkaLog20170316pynq_dist
Page 68: IkaLog20170316pynq_dist

68

Page 69: IkaLog20170316pynq_dist

スプラトゥーンのブキ 59種類(スライド作成当時)

Page 70: IkaLog20170316pynq_dist

• 

• 

• 

• 

他の装備品が被っている 保護色(まだマシ) 保護色(マジつらい)

Page 71: IkaLog20170316pynq_dist

–  入力値: RGBもしくはHSVの色情報(47*45*3=6,345units)

–  出力値: 各クラスの出力値(91units,Sonmaxを適用する)

–  使用する結合:全結合のみを使用(理由は後述)

–  目 的:特徴量の自動生成

•  今回の用途であれば、深層学習で特徴量を自動的に見つけ出せるはず

•  各ブキの背景色の重みが自動的ゼロに調整されれば、背景色への考慮

も不要

–  目標性能値

•  目標性能値:91クラスのマルチクラス分類が350ms未満(画面1枚あたり3秒以内)

•  stat.inkの投稿データに対して99.99%の精度

Page 72: IkaLog20170316pynq_dist

0

1

2

3

..

..

n

0

1

2

3

89

90

InputLayer OutputLayerHiddenLayer

52gal

52gal_deco

96gal

96gal_deco

sschooter_wasabi

wakaba

Page 73: IkaLog20170316pynq_dist
Page 74: IkaLog20170316pynq_dist

HDMIキャプチャデバイス

IkaLog実行用PC

Page 75: IkaLog20170316pynq_dist

FPGAボード

Page 76: IkaLog20170316pynq_dist
Page 77: IkaLog20170316pynq_dist
Page 78: IkaLog20170316pynq_dist
Page 79: IkaLog20170316pynq_dist

PYNQ-Z1上のARMA9プロセッサはIntelCPUの15%の性能しかない

Page 80: IkaLog20170316pynq_dist

• 

• 

– 

– 

• 

• 

• 

• 

Page 81: IkaLog20170316pynq_dist

PYNQ-Z1向け最適化途中

PYNQ-Z1向け最適化前

40%以上高速化

Page 82: IkaLog20170316pynq_dist

• 

pi@raspberrypi:~/ikalog/IkaLog $ PYTHONPATH=./lib/ python3 bench_1024mat.pyencode 0.000015974s logical_and_popcnt 0.094928265s total 0.094944239s�

<class 'ikalog.utils.ikamatcher2.reference.Numpy_uint8'>

encode 0.000014544s logical_and_popcnt 0.021027803s total 0.021042347s<class 'ikalog.utils.ikamatcher2.reference.Numpy_uint8_fast'>

encode 0.005746365s logical_and_popcnt 0.002564192s total 0.008310556s<class 'ikalog.utils.ikamatcher2.arm_neon.NEON'>

Page 83: IkaLog20170316pynq_dist
Page 84: IkaLog20170316pynq_dist

FPGA

Page 85: IkaLog20170316pynq_dist

• 

– 

• 

– 

– 

• 

– 

– 

– 

Page 86: IkaLog20170316pynq_dist

FIFO

32b

AXI4Bus

ARMA9

DDR3SDRAM512MBDDR3@16bit,666MHz

@650MHz2Cores

24b MKJPEGIPDMAMaster

DMAMaster

FIFO

8b 32b

ビットマップをシステムメモリから

読み込み

JPEGバイトストリームをシステムメモリへ

書き込み

新規設計中の範囲

Page 87: IkaLog20170316pynq_dist
Page 88: IkaLog20170316pynq_dist

PL(FPGA部分)

DVI2RGBVideoInto

AXIS RGB2DVIAXI4StoVideoOut

VideoDMA

ARMA9

DDR3SDRAM512MBDDR3@16bit,666MHz

AXI

WiiU TV

@650MHz2Cores

1)映像の再送信にDDR3DRAMの帯域が利用されてしまう

1280x720x3[bytes]*60fps*2(roundtrip)=approx.320MB/s

2)オーディオ信号が捨てられる

DVI→XilinxVideoFormat→DVI

Page 89: IkaLog20170316pynq_dist

PL(FPGA部分)

DVI2RGBVideoInto

AXIS RGB2DVIAXI4StoVideoOut

VideoDMA

ARMA9

DDR3SDRAM512MBDDR3@16bit,666MHz

AXI

WiiU TV

@650MHz2Cores

受信したHDMI(DVI)信号をそのまま再送出する

スプリッタ機能ではDDR3SDRAMを経由しない

Page 90: IkaLog20170316pynq_dist

• – 

– 

• – 

– 

• 

– 

– 

Page 91: IkaLog20170316pynq_dist
Page 92: IkaLog20170316pynq_dist

10/

10/

10/

30/

vid_pDataRaw

Page 93: IkaLog20170316pynq_dist
Page 94: IkaLog20170316pynq_dist

/10/10

/10MUX

MUX

MUX

EnableRaw

vid_pDataRaw 30/

Page 95: IkaLog20170316pynq_dist

• 

– 

Page 96: IkaLog20170316pynq_dist

96

自分がみていた波形はHDMIではなくDVIだった

Page 97: IkaLog20170316pynq_dist

オーディオなしのDVIモニタ仕様で応答していたためWiiUからオーディオ信号が出ていなかったことが判明

Manufacturer:DGLModel0SerialNumber0(snip)8bitsperprimarycolorchannelDVIinterfaceMaximumimagesize:51cmx29cmGamma:2.20Supportedcolorformats:RGB4:4:4Established^mingssupported:640x480@60Hz800x600@60Hz1024x768@60HzStandard^mingssupported:1680x1050@60Hz1920x1080@60Hz1280x1024@60HzDetailedmode:Clock108.000MHz,1280mmx1024mm1280132814401688hborder01024102510281066vborder0+hsync+vsync(snip)Checksum:0x5(valid)EDIDblockdoesNOTconformtoEDID1.3!(snip)

Page 98: IkaLog20170316pynq_dist

オーディオなしのDVIモニタ仕様で応答していたためWiiUからオーディオ信号が出ていなかったことが判明

Manufacturer:SHPModelfecSerialNumber0Madeweek255ofmodelyear17EDIDversion:1.3(snip)CEAextensionblockExtensionversion:3(snip)AudiodatablockLinearPCM,maxchannels2Supportedsamplerates(kHz):4844.132Supportedsamplesizes(bits):242016SpeakerallocaQondatablock(snip)Extendedtag:ColorimetrydatablockVendor-specificdatablock,OUI000c03(HDMI)Sourcephysicaladdress2.0.0.0Supports_AI

Page 99: IkaLog20170316pynq_dist

• – 

• 

– 

– 

– 

• 

Page 100: IkaLog20170316pynq_dist

100

合成エラー

Page 101: IkaLog20170316pynq_dist

101

DVIだけならDDC通信内容が128Bに収まるがHDMIモニタは256B必要か

Page 102: IkaLog20170316pynq_dist

102

Page 103: IkaLog20170316pynq_dist

103

OK!

Page 104: IkaLog20170316pynq_dist

104

Page 105: IkaLog20170316pynq_dist

105

Page 106: IkaLog20170316pynq_dist

正常動作する場合

ダメな場合

VDEがオーディオ信号らしきもので暴発している

Page 107: IkaLog20170316pynq_dist

107

Page 108: IkaLog20170316pynq_dist

108

ネットで何故か拾えるConfiden^al資料

Page 109: IkaLog20170316pynq_dist

109

ビデオ

その他(オーディオ等)

Page 110: IkaLog20170316pynq_dist

110

Page 111: IkaLog20170316pynq_dist

111

Page 112: IkaLog20170316pynq_dist

112

Page 113: IkaLog20170316pynq_dist

113

キター!!!

Page 114: IkaLog20170316pynq_dist

• ü 

ü 

ü 

• 

• 

• 

– 

Page 115: IkaLog20170316pynq_dist

115

Page 116: IkaLog20170316pynq_dist

• 

• 

• 

Page 117: IkaLog20170316pynq_dist

らぴす(2000-2014)

Page 118: IkaLog20170316pynq_dist

©07strikers