Upload
takeshi-hasegawa
View
2.184
Download
1
Embed Size (px)
Citation preview
本スライド中に登場するスプラトゥーン関連画像は任天堂株式会社の著作物です。
•
–
–
–
•
–
–
–
•
萌え萌えうにっくす!ネットワーク管理ガイド(2003)
Xen徹底入門 第一版/第二版(2007.2009)
FusionioMemoryPCIe接続型のエンタープライズ向けフラッシュストレージの第3世代製品
サーバの目利きになる方法前編・後編
(ヾノ・∀・`)ナイナイ
<⌒/ヽ-、__/<_/____/ ̄ ̄ ̄ ̄ ̄ ̄ ̄
アダーできたし、次はALU作って、最終的にはオレオレマイコンをひとつ作ってみようか。
今使っているロジックシミュレータじゃ小さい回路しか作れないしさすがにALUすら無理だなあ
二日後
TwoDaysLater
レジスタの値を読み取り、アナログRGBで状態を出力する回路(notSW)を作って入れてた
17
様々なステージとルール
• 16のステージ、4つのルール• 勝利に向けチームで立ち向かう
多様な楽しみ方
• 90以上のブキから好きなものを選んでプレイ
WiiU用ゲーム「スプラトゥーン」支援ソフト
– HDMIキャプチャを介して情報を自動取得
– 数値・文字列データとして認識
– お好みの方法で蓄積、出力
NintendoWiiU& スプラトゥーン
データ化{“kills”:5,“deaths”:1}
IkaLog
外部ツールへ出力(棒読みちゃん等)
出力例
HDMIキャプチャデバイス
IkaLog実行用PC
録画ソフト 自動制御
AmaRecTV
カラーLED連動
Fluentd転送
スプラトゥーン戦績記録SNS
CSV/JSONファイル保存 スクリーンショット保存
SNS投稿
IkaLog
• IkaLogユーザのひとり @fetus_hina さんが開発、
運営する Web サイト
• IkaLog からのプレイデータを受け取り、
表示・集計する
• IkaLogからの投稿を分析し
統計情報、トレンドを表示
30https://stat.ink/
自分が倒されて行動不能だった時間
イカ(味方/敵 計8匹)の生死状況
チームのスペシャル発動、キル/デス
自分の塗り面積
https://stat.ink/
https://stat.ink/
ナワバリバトル – 互いの干渉が少ない
ガチエリア – “相手を倒しつつ生存”がカギ
ガチホコ – 全体的に乱戦になりやすい
ガチヤグラ – 全体的に乱戦になりやすい
https://stat.ink/
.96ガロンデコアップデートをきっかけにユーザー数が激減
ロングブラスターカスタム夏以降、人気を博しているブキのひとつ
https://stat.ink/
データソースh\ps://stat.ink/en^re/user
【ピーク】24時間あたり370ユーザ、約15,000ゲーム
2016年11月時点にて24時間あたり 平均100ユーザ超が利用、平均2500ゲームを処理
最後の“フェス“(ゲーム内イベント)
•
•
•
• 2014年INTEROPでの”Chainer”デモがきっかけ
– 深層学習のプレゼンテーションみて「凄いな」と思った
– “何か面白いソフトウェアを作りたいな”
– ちょうどスプラトゥーンの発売直後だった
• 未経験からのチャレンジ
– OpenCV経験 3時間ぐらい
– 機械学習/ディープライーニング経験 なし
ここまでするなら
自動化できるツールを作ろう!
ソース映像 マスク画像 加算画像
+==
正しいマスクを加算すると画像が真っ白になる
違うマスクを加算すると画像が真っ白にならない
44
45
47
• ゲーム中で使われているフォントは2種類
– 画面上に現れる数字フォントは1種類
– フォントが判っているのだから、認識できるはず
• 試行錯誤の後、既存OCRエンジンの利用は断念
– 機械学習ベースの認識エンジンを実装
●●●
●
■
■
■■
?▲
▲
▲
▲
?
?
?
?
とてもシンプルな機械学習標本 の傍にあるサンプルがどれかで分類する。K=1の場合は最寄りのサンプルがあるクラスに分類される。K=3の場合は近くに3つのサンプルがあるクラスに分類される。
• GitHub にソースあり
– https://github.com/hasegaw/opencv_knn_example/
• 三つのパターン ○ △ □ で画像を生成し、
kNNで学習する
• ランダムに ○ △ □ から画像を生成し、その画像
の種類を判定する
– KNN を用いてそれに近い画像を見つけ出す
– 見つけた画像の種類から、問題図形の種類を特定
問題図形をランダムに生成
K近傍法を用いて、学習済みの図形から、もっとも近い図形を調べる
仕分ける○ △ □
○学習済み図形
○ △ □
1)画面上の数字部分(位置固定)を切り抜き
2)縦・横のヒストグラムを生成し各文字の位置を特定
3)文字を検出用サンプルのサイズ(等幅)にリサイズ、
二値化
4)KNNにより既知の検出用サンプルと照らし合わせて
認識する
• 基本は数字の認識と一緒
• 認識率はそれほど高くないが、認識回数で精度を確保
– 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}
•
•
•
黒いブレット明るいブレット
背景色
黒いブレット
明るいブレット
背景色
• –
–
• –
–
• –
–
66
68
スプラトゥーンのブキ 59種類(スライド作成当時)
•
•
•
•
他の装備品が被っている 保護色(まだマシ) 保護色(マジつらい)
– 入力値: RGBもしくはHSVの色情報(47*45*3=6,345units)
– 出力値: 各クラスの出力値(91units,Sonmaxを適用する)
– 使用する結合:全結合のみを使用(理由は後述)
– 目 的:特徴量の自動生成
• 今回の用途であれば、深層学習で特徴量を自動的に見つけ出せるはず
• 各ブキの背景色の重みが自動的ゼロに調整されれば、背景色への考慮
も不要
– 目標性能値
• 目標性能値:91クラスのマルチクラス分類が350ms未満(画面1枚あたり3秒以内)
• stat.inkの投稿データに対して99.99%の精度
0
1
2
3
..
..
n
0
1
2
3
…
89
90
InputLayer OutputLayerHiddenLayer
52gal
52gal_deco
96gal
96gal_deco
…
sschooter_wasabi
wakaba
HDMIキャプチャデバイス
IkaLog実行用PC
FPGAボード
PYNQ-Z1上のARMA9プロセッサはIntelCPUの15%の性能しかない
•
•
–
–
•
•
•
•
PYNQ-Z1向け最適化途中
PYNQ-Z1向け最適化前
40%以上高速化
•
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'>
FPGA
•
–
•
–
–
•
–
–
–
FIFO
32b
AXI4Bus
ARMA9
DDR3SDRAM512MBDDR3@16bit,666MHz
@650MHz2Cores
24b MKJPEGIPDMAMaster
DMAMaster
FIFO
8b 32b
ビットマップをシステムメモリから
読み込み
JPEGバイトストリームをシステムメモリへ
書き込み
新規設計中の範囲
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
PL(FPGA部分)
DVI2RGBVideoInto
AXIS RGB2DVIAXI4StoVideoOut
VideoDMA
ARMA9
DDR3SDRAM512MBDDR3@16bit,666MHz
AXI
WiiU TV
@650MHz2Cores
受信したHDMI(DVI)信号をそのまま再送出する
スプリッタ機能ではDDR3SDRAMを経由しない
• –
–
• –
–
•
–
–
10/
10/
10/
30/
vid_pDataRaw
/10/10
/10MUX
MUX
MUX
EnableRaw
vid_pDataRaw 30/
•
–
96
自分がみていた波形はHDMIではなくDVIだった
オーディオなしの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)
オーディオなしの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
• –
•
–
–
–
•
100
合成エラー
101
DVIだけならDDC通信内容が128Bに収まるがHDMIモニタは256B必要か
102
103
OK!
104
105
正常動作する場合
ダメな場合
VDEがオーディオ信号らしきもので暴発している
107
108
ネットで何故か拾えるConfiden^al資料
109
ビデオ
その他(オーディオ等)
110
111
112
113
キター!!!
• ü
ü
ü
•
•
•
–
115
•
•
•
らぴす(2000-2014)
©07strikers