蟷ウ謌�29蟷エ蠎ヲ 蜊呈・ュ遐皮ゥカ隲匁枚



繝「繝舌う繝ォGPU豢サ逕ィ縺ョ縺溘a縺ョ豺ア螻、蟄ヲ鄙�
繝「繝�Ν繧ウ繝ウ繝舌�繧ソ縺ョ螳溽樟














髮サ豌鈴€壻ソ。螟ァ蟄ヲ 諠��ア逅�キ・蟄ヲ驛ィ
邱丞粋諠��ア蟄ヲ遘� 繝。繝�ぅ繧「諠��ア蟄ヲ繧ウ繝シ繧ケ
1410009 豕� 陬戊イエ


Date: 蟷ウ謌�30蟷エ2譛�6譌・


Abstract:

iPhone繧貞ァ九a縺ィ縺吶k繝「繝舌う繝ォ遶ッ譛ォ縺ョ諤ァ閭ス縺ッ蟷エ縲�髄荳翫@鬮倥>貍皮ョ苓�蜉帙r謖√▽繧医≧縺ォ縺ェ縺」縺溘◆繧√€∝ュヲ鄙呈ク医∩繝「繝�Ν縺九i豺ア螻、蟄ヲ鄙偵�謗ィ隲悶r繝「繝舌う繝ォ遶ッ譛ォ荳翫〒陦後≧縺薙→縺悟庄閭ス縺ィ縺ェ縺」縺ヲ縺阪◆縲ゅ@縺九@縲∵怙譁ー縺ョ繝阪ャ繝医Ρ繝シ繧ッ縺ッ譫晏�縺九l縺ョ縺ゅk繧ゅ�繧�ロ繝�ヨ繝ッ繝シ繧ッ縺梧キア縺上ヱ繝ゥ繝。繝シ繧ソ謨ー縺碁撼蟶ク縺ォ螟壹>繧ゅ�縺ィ縺ェ縺」縺ヲ縺翫j縲∽サ雁セ梧峩縺ォ隍�尅縺ェ繝阪ャ繝医Ρ繝シ繧ッ縺悟�迴セ縺吶k縺薙→縺御コ域Φ縺輔l繧九€ゅ%縺ョ繧医≧縺ェ繝阪ャ繝医Ρ繝シ繧ッ繧偵Δ繝舌う繝ォ遶ッ譛ォ荳翫〒螳溯」�☆繧九◆繧√↓縺ッ髟キ譁�ク斐▽髮」隗」縺ェ繧ウ繝シ繝峨r譖ク縺丞ソ�ヲ√′縺ゅk縺溘a縺ォ莠コ謇九〒譖ク縺上%縺ィ縺ッ蝗ー髮」縺ァ縺ゅk縲ゅ◎縺薙〒譛ャ遐皮ゥカ縺ァ縺ッ縲∬ィ育ョ玲ゥ滉ク翫〒譌「蟄倥�豺ア螻、蟄ヲ鄙偵ヵ繝ャ繝シ繝�繝ッ繝シ繧ッChainer繧堤畑縺�※蟄ヲ鄙偵@縺滄圀縺ォ逕滓�縺輔l繧九Δ繝�Ν繝輔ぃ繧、繝ォ縺九i縲∵キア螻、蟄ヲ鄙偵�謗ィ隲悶r陦後≧Swift險€隱槭�繧ウ繝シ繝峨r閾ェ蜍慕函謌舌☆繧九%縺ィ縺後〒縺阪k繧ウ繝ウ繝舌�繧ソChainer2S繧剃ス懈�縺励◆縲ゅ∪縺溘€∝ョ滄ィ薙↓繧医▲縺ヲ豺ア螻、蟄ヲ鄙偵い繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ョ螳溯」�∈縺ョGPU蛻ゥ逕ィ縺ョ蠢�ヲ∵€ァ繧堤、コ縺励€∵キア螻、蟄ヲ鄙偵�貍皮ョ怜�逅�↓GPU縺ォ逕ィ縺�k螳溯」�婿豕輔↓縺、縺�※繧よッ碑シ�r陦後>縲∵怙驕ゥ縺ェ螳溯」�婿豕輔r譏弱i縺九↓縺励◆縲�


Contents

1 縺ッ縺倥a縺ォ

1 閭梧勹

ImageNet Large Scale Visual Recognition Challenge 2012(ILSVRC2012)[#!imagenet!#]縺ォ縺翫>縺ヲAlexNet[#!alexnet!#]縺檎匱陦ィ縺輔l縲∵キア螻、蟄ヲ鄙偵′莉匁焔豕輔h繧翫b鬮倥>諤ァ閭ス繧堤、コ縺励※莉・髯阪€∫判蜒剰ェ崎ュ倥d閾ェ辟カ險€隱槫�逅�↑縺ゥ讒倥€�↑蛻�㍽縺ォ縺翫>縺ヲ豺ア螻、蟄ヲ鄙偵′豕ィ逶ョ縺輔l縲∫�皮ゥカ縺檎屁繧薙↓陦後o繧後k繧医≧縺ォ縺ェ縺」縺溘€よキア縺�ロ繝�ヨ繝ッ繝シ繧ッ讒矩€�縺後h繧願ア翫°縺ェ迚ケ蠕エ繧定。ィ迴セ縺輔l鬮倥>邊セ蠎ヲ繧貞セ励k縺薙→縺後〒縺阪k縺溘a縲;oogLeNet[#!googlenet!#]繧СesidualNet[#!resnet!#]縺ョ繧医≧縺ェ豺ア縺剰、�尅縺ェ繝阪ャ繝医Ρ繝シ繧ッ縺悟�縺ヲ縺上k繧医≧縺ォ縺ェ縺」縺溘€ゅ◎繧後◇繧後�繝阪ャ繝医Ρ繝シ繧ッ蝗ウ繧貞峙[*]縲∝峙[*]縺ォ遉コ縺吶€�

縺セ縺溘€√◎繧後→蜷梧凾縺ォ繝「繝舌う繝ォ遶ッ譛ォ繧�Ο繝懊ャ繝医€∬�蜍暮°霆「霆翫↑縺ゥ縺ョ險育ョ励Μ繧ス繝シ繧ケ縺ョ髯舌i繧後◆遶ッ譛ォ縺ォ豺ア螻、蟄ヲ鄙偵r驕ゥ逕ィ縺吶k縺溘a縺ョ遐皮ゥカ繧よ焚螟壹¥縺輔l縺ヲ縺�k縲� 繝「繝舌う繝ォ遶ッ譛ォ遲峨〒縺ッ繝ェ繧「繝ォ繧ソ繧、繝�蜃ヲ逅�′驥崎ヲ√〒縺ゅj縲∵キア螻、蟄ヲ鄙偵�螟ァ驥上�貍皮ョ励r鬮倬€溘↓蜃ヲ逅�☆繧句ソ�ヲ∵€ァ縺後≠繧九€ゅ@縺九@縲∵キア螻、蟄ヲ鄙偵�Graphics Processing Unit(GPU)繧定、�焚逕ィ縺�◆鬮倥>貍皮ョ怜�逅��蜉帙r蜑肴署縺ォ縺励◆繧ゅ�縺ァ縺ゅk縺溘a縲∬ィ育ョ励Μ繧ス繝シ繧ケ縺ョ髯舌i繧後◆遶ッ譛ォ縺ァ縺ョ螳溯」��蝗ー髮」縺ァ縺ゅk縲ゅ%縺ョ蝠城。後r隗」豎コ縺吶k縺溘a縺ォ繝代Λ繝。繝シ繧ソ謨ー縲∵シ皮ョ鈴㍼繧貞炎貂帙☆繧九◆繧√�繝阪ャ繝医Ρ繝シ繧ッ讒矩€�繧�ィ育ョ玲婿豕輔↑縺ゥ縺梧焚螟壹¥髢狗匱縺輔l縺ヲ縺�k縲�

荳€譁ケ縺ァ縲(Phone繧貞ァ九a縺ィ縺吶k繝「繝舌う繝ォ遶ッ譛ォ縺ッCentral Processing Unit(CPU)縲;PU縺ョ諤ァ閭ス縺悟ケエ縲�髄荳翫@縲�ォ倥>貍皮ョ苓�蜉帙r謖√▽繧医≧縺ォ縺ェ縺」縺溘◆繧√€∝ュヲ鄙呈ク医∩繝「繝�Ν縺九i豺ア螻、蟄ヲ鄙偵�謗ィ隲悶r陦後≧縺薙→縺ッ繝「繝舌う繝ォ遶ッ譛ォ荳翫〒繧ょ茜逕ィ蜿ッ閭ス縺ィ縺ェ縺」縺ヲ縺阪◆縲�CPU縺ョ縺ソ縺ァ貍皮ョ励�蜃ヲ逅�r陦後≧螳溯」��謨ー螟壹¥蟄伜惠縺励€;PU繧貞茜逕ィ縺励◆螳溯」�b迴セ繧後※縺阪※縺�k縲よキア縺上ヱ繝ゥ繝。繝シ繧ソ謨ー縺碁撼蟶ク縺ォ螟壹>繝阪ャ繝医Ρ繝シ繧ッ繧偵Δ繝舌う繝ォ遶ッ譛ォ縺ァ螳溯」�☆繧九◆繧√↓縺ッ縲∵シ皮ョ怜�逅��繧医j蜆ェ繧後◆GPU縺ョ蛻ゥ逕ィ縺梧アゅa繧峨l繧九€ゅ∪縺溘€∵怙鬮俶€ァ閭ス繧堤、コ縺励※縺�k隍�尅縺ェ繝阪ャ繝医Ρ繝シ繧ッ繧�€�ォ倬€溷喧繧貞峙縺」縺溘ロ繝�ヨ繝ッ繝シ繧ッ繧貞ョ溯」�@繧医≧縺ィ縺励◆蝣エ蜷医↓繧ウ繝シ繝峨′髟キ譁�喧縲�屮隗」蛹悶@縺ヲ縺励∪縺�ココ謇九〒譖ク縺上�縺ッ蝗ー髮」縺ァ縺ゅk縲�

Figure: GoogLeNet縺ョ繝阪ャ繝医Ρ繝シ繧ッ蝗ウ([#!googlenet!#]繧医j蠑慕畑)
Image googlenet

Figure: ResidualNet縺ョ繝阪ャ繝医Ρ繝シ繧ッ蝗ウ([#!resnet!#]繧医j蠑慕畑)
Image resnet

2 逶ョ逧�

譛ャ遐皮ゥカ縺ァ縺ッ縲∬ィ育ョ玲ゥ滉ク翫〒譌「蟄倥�豺ア螻、蟄ヲ鄙偵ヵ繝ャ繝シ繝�繝ッ繝シ繧ッChainer繧堤畑縺�※蟄ヲ鄙偵@縺滄圀縺ォ逕滓�縺輔l繧九Δ繝�Ν繝輔ぃ繧、繝ォ縺九i縲∵キア螻、蟄ヲ鄙偵�謗ィ隲悶r陦後≧Swift險€隱槭�繧ウ繝シ繝峨→繝代Λ繝。繝シ繧ソ繝輔ぃ繧、繝ォ繧定�蜍慕函謌舌☆繧九%縺ィ縺後〒縺阪k繧ウ繝ウ繝舌�繧ソChainer2S繧剃ス懈�縺励€(OS遶ッ譛ォ荳翫〒邁。蜊倅ク斐▽鬮倬€溘↓豺ア螻、蟄ヲ鄙偵�謗ィ隲悶r蜿ッ閭ス縺ォ縺吶k縺薙→繧堤岼謖�☆縲ゅ%縺ョ譎ゅ€,PU繧医j繧よシ皮ョ怜�逅��蜉帙�蜆ェ繧後※縺�kGPU繧貞茜逕ィ縺吶k縲�

3 譛ャ隲匁枚縺ョ讒区�

譛ャ隲匁枚縺ョ讒区�縺ッ莉・荳九�繧医≧縺ォ縺ェ縺」縺ヲ縺�k縲�

1遶� 縺ッ縺倥a縺ォ

縺薙�遐皮ゥカ縺ョ閭梧勹縲∫岼逧�r險倩シ峨☆繧九€�

2遶� 髢「騾」遐皮ゥカ

髢「騾」遐皮ゥカ繧堤エケ莉九☆繧九€�

3遶� 豺ア螻、蟄ヲ鄙偵い繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ョ菴懈�謇矩��

譛ャ遐皮ゥカ縺ョ繧ウ繝ウ繝舌�繧ソChainer2S繧堤畑縺�◆豺ア螻、蟄ヲ鄙偵い繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ョ菴懈�謇矩��↓縺、縺�※隱ャ譏弱☆繧九€�

4遶� 謇区ウ�

譛ャ遐皮ゥカ縺ョ謇区ウ輔↓縺、縺�※霑ー縺ケ繧九€�

5遶� 螳滄ィ�

螳滄ィ灘�螳ケ縺ィ縺昴�邨先棡縺ォ縺、縺�※霑ー縺ケ繧九€�

6遶� 閠�ッ�

螳滄ィ薙�邨先棡縺ォ蟇セ縺吶k閠�ッ溘r霑ー縺ケ繧九€�

7遶� 縺セ縺ィ繧√→莉雁セ後�隱イ鬘�

蜈ィ菴薙�縺セ縺ィ繧√→莉雁セ後�隱イ鬘後↓縺、縺�※霑ー縺ケ繧九€�

莉倬鹸

蛻ゥ逕ィ蜿ッ閭ス縺ェ繝弱�繝我ク€隕ァ縺ィ螳滄ィ薙〒蠕励i繧後◆繝��繧ソ繧定ィ倩シ峨☆繧九€�

2 髢「騾」遐皮ゥカ

繝「繝舌う繝ォ遶ッ譛ォ縺ァ縺ッ縲∬ィ育ョ玲ゥ溘↓豈斐∋縺ヲ險育ョ励Μ繧ス繝シ繧ケ繧�Γ繝「繝ェ螳ケ驥上↓螟ァ縺阪↑蛻カ髯舌′縺九°繧九€ゅ◎縺ョ縺溘a縲√Δ繝舌う繝ォ遶ッ譛ォ縺ォ豺ア螻、蟄ヲ鄙偵r螳溯」�@繧医≧縺ィ縺励◆蝣エ蜷医↓貍皮ョ鈴㍼縺ョ螟壹&縺悟撫鬘後→縺ェ繧九€ら音縺ォ縲√ロ繝�ヨ繝ッ繝シ繧ッ縺ョ蜷�ア、縺ョ荳ュ縺ァ逡ウ縺ソ霎シ縺ソ螻、縺ョ貍皮ョ励′蜈ィ菴薙�貍皮ョ玲凾髢薙�螟ァ驛ィ蛻�r蜊�繧√k縺溘a縲∫糞縺ソ霎シ縺ソ螻、縺ョ貍皮ョ励r鬮倬€溷喧縺吶k縺薙→縺後€∵キア螻、蟄ヲ鄙偵r繝「繝舌う繝ォ遶ッ譛ォ縺ォ螳溯」�☆繧倶ク翫〒驥崎ヲ√〒縺ゅj縲∽サ・荳九�繧医≧縺ェCNN縺ョ鬮倬€溷喧縺ォ髢「縺吶k遐皮ゥカ縺瑚。後o繧後※縺�k縲� 縺セ縺溘€√Δ繝舌う繝ォ遶ッ譛ォ荳翫〒豺ア螻、蟄ヲ鄙偵r螳溯」�☆繧九◆繧√↓縲∵里蟄倥�豺ア螻、蟄ヲ鄙偵ヵ繝ャ繝シ繝�繝ッ繝シ繧ッ荳翫↓險ュ險医@縲√Δ繝舌う繝ォ遶ッ譛ォ縺ク驕ゥ逕ィ縺励◆繧ゅ�繧�€∵眠縺励¥繝「繝舌う繝ォ遶ッ譛ォ逕ィ縺ョ繝輔Ξ繝シ繝�繝ッ繝シ繧ッ繧帝幕逋コ縺吶k縺ェ縺ゥ謨ー螟壹¥縺ョ螳溯」�婿豕輔′蟄伜惠縺励€∽サ・荳九�繧医≧縺ェ繧ゅ�縺後≠繧九€�

1 CNN縺ョ鬮倬€溷喧縺ョ遐皮ゥカ

1 MobileNets

Howard繧峨�縲∫糞縺ソ霎シ縺ソ螻、繧壇epthwise separable convolution[#!dsconvolution!#]縺ォ鄂ョ縺肴鋤縺医€『idth multiplier縲〉esolution multiplier縺ョ2縺、縺ョ繝上う繝代�繝代Λ繝。繝シ繧ソ繧貞ー主�縺吶k縺薙→縺ォ繧医j縲�撼蟶ク縺ォ蟆上&縺ェ邊セ蠎ヲ菴惹ク九�莉」繧上j縺ォ繝阪ャ繝医Ρ繝シ繧ッ縺ョ貍皮ョ鈴㍼縺ィ繝代Λ繝。繝シ繧ソ謨ー繧貞、ァ蟷�↓蜑頑ク帙@縺歇#!mobilenet!#]縲Eepthwise separable convolution縺ッ縲�€壼クク縺ョ逡ウ縺ソ霎シ縺ソ螻、繧堤ゥコ髢捺婿蜷代�逡ウ縺ソ霎シ縺ソ貍皮ョ励→繝√Ε繝阪Ν譁ケ蜷代�逡ウ縺ソ霎シ縺ソ貍皮ョ励�2縺、縺ョ逡ウ縺ソ霎シ縺ソ貍皮ョ励↓蛻�屬縺吶k縺薙→縺ァ縲∵シ皮ョ鈴㍼繧�8蛻��1遞句コヲ縺ォ貂帙i縺吶%縺ィ縺後〒縺阪k縲ゆサ・荳九�蝗ウ[*]縺ォ讎ら払蝗ウ繧堤、コ縺吶€Xidth multiplier縺ッ縲√ロ繝�ヨ繝ッ繝シ繧ッ繧貞�菴鍋噪縺ォ繝√Ε繝阪Ν譁ケ蜷代↓髢「縺励※邵ョ蟆上☆繧九b縺ョ縺ァ縺ゅj縲〉esolution multiplier縺ッ縲∝�蜉帷判蜒上�繧オ繧、繧コ繧堤クョ蟆上☆繧九b縺ョ縺ァ縺ゅk縲ゅ%繧後i縺ョ繝上う繝代�繝代Λ繝。繝シ繧ソ繧貞ー主�縺吶k縺薙→縺ァ縲∝ョケ譏薙↓繝阪ャ繝医Ρ繝シ繧ッ繧定サス驥丞喧縲�ォ倬€溷喧縺ァ縺阪k繧医≧縺ォ縺励◆縲�

Figure: Depthwise Separable Convolution縺ョ讎ら払蝗ウ
Image dsc

2 QuickNet

Ghosh縺ッ縲‥epthwise separable convolution[#!dsconvolution!#]縺ォ蜉�縺医€√ヱ繝ゥ繝。繝シ繧ソ縺ョ驥阪∩縺悟香蛻�↓蟆上&縺�→縺阪↓蛻医j蜿悶kPruning繧�ヱ繝ゥ繝。繝シ繧ソ縺ョ繝上ヵ繝槭Φ隨ヲ蜿キ蛹悶€ ̄arametric Rectified Linear Units(PReLU)縺ョ蛻ゥ逕ィ縲∝�邨仙粋螻、縺ョ莉」繧上j縺ォglobal average pooling繧堤畑縺�k縺ェ縺ゥ縺ョ蟾・螟ォ繧定。後≧縺薙→縺ァ縲∫イセ蠎ヲ繧定誠縺ィ縺吶%縺ィ縺ェ縺乗シ皮ョ鈴㍼繧貞炎貂帙@縺溘ロ繝�ヨ繝ッ繝シ繧ッ繧帝幕逋コ縺励◆[#!quicknet!#]縲�

2 豺ア螻、蟄ヲ鄙偵ヵ繝ャ繝シ繝�繝ッ繝シ繧ッ縺ョ繝「繝舌う繝ォ迺ー蠅�∈縺ョ驕ゥ逕ィ

豺ア螻、蟄ヲ鄙偵ヵ繝ャ繝シ繝�繝ッ繝シ繧ッ縺ァ蟄ヲ鄙偵@縺溘Δ繝�Ν繧段OS縺ァ菴ソ逕ィ縺吶k縺溘a縺ォ縲√ヵ繝ャ繝シ繝�繝ッ繝シ繧ッ閾ェ菴薙′iOS荳翫〒蜍穂ス懊☆繧九h縺�↓險ュ險医&繧後◆繧ゅ�縺ィ縺励※縲,affe for iOS1縲ゝensorFlow2縲^penCV3縺ェ縺ゥ縺後≠繧九€ゅ∪縺溘€∵里蟄倥�繝輔Ξ繝シ繝�繝ッ繝シ繧ッ荳翫↓險ュ險医&繧後€√Δ繝舌う繝ォ縺ク縺ョ驕ゥ逕ィ縺瑚€��縺輔l縺溘b縺ョ縺ィ縺励※Caffe24縺ェ縺ゥ縺後≠繧九€ゅ@縺九@縲√%繧後i縺ッ蜈ィ縺ヲCPU縺ョ縺ソ繧貞茜逕ィ縺励◆貍皮ョ怜�逅�〒縺ゅk縲�

3 CoreML

CoreML縺ッ縲(OS11縺九i譁ー縺励¥霑ス蜉�縺輔l縺滓ゥ滓「ー蟄ヲ鄙但PI鄒、縺ァ縺ゅk5縲よ里蟄倥�豺ア螻、蟄ヲ鄙偵ヵ繝ャ繝シ繝�繝ッ繝シ繧ッ縺ァ縺ゅkKeras繧Гaffe縺ェ縺ゥ縺ァ菴懈�縺励◆蟄ヲ鄙呈ク医∩繝「繝�Ν繧貞、画鋤繝��繝ォ繧堤畑縺�※mlmodel繝輔ぃ繧、繝ォ繧剃ス懊j縲√い繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ョ荳ュ縺ァ隱ュ縺ソ霎シ繧€縺ョ縺ソ縺ァ縲∵キア螻、蟄ヲ鄙偵�謗ィ隲悶r邁。蜊倥↓螳溯」�☆繧九%縺ィ縺悟�譚・繧九€�CoreML縺ッ縲√Δ繝�Ν縺ョ貍皮ョ励rCPU縲;PU縺ョ縺ゥ縺。繧峨〒蜃ヲ逅�☆繧九°繧定�蜍慕噪縺ォ蛻、譁ュ縺怜ョ溯。後☆繧九€ゅ@縺九@縲∝ョ溯」�&繧後※縺�k繝ャ繧、繝、繝シ縺ョ遞ョ鬘槭�髯仙ョ壹&繧後※縺�※縲∝ッセ蠢懊&繧後※縺�↑縺�眠隕上↓髢狗匱縺輔l縺溘Ξ繧、繝、繝シ繧剃スソ逕ィ縺励◆縺��エ蜷医↓縲∽ス守エ夊ィ€隱槭〒縺ゅkMetal Shading Language縺ァ繝ャ繧、繝、繝シ縺ョ蜃ヲ逅�r譖ク縺丞ソ�ヲ√′縺ゅk縺溘a縲�ォ伜コヲ縺ェ繧ケ繧ュ繝ォ縺瑚ヲ∵アゅ&繧後k縲�

4 Caffe2C(Chainer2C)

Tanno繧峨�縲∝ュヲ鄙呈ク医∩繝「繝�Ν繝輔ぃ繧、繝ォ繧段OS荳翫〒蜍穂ス懷庄閭ス縺ォ縺吶k豺ア螻、蟄ヲ鄙偵Δ繝�Ν繧ウ繝ウ繝舌�繧ソ縲,affe2C(Chainer2C)繧帝幕逋コ縺励◆[#!caffe2c!#]縲ゅ%繧後�縲,affe(Chainer)縺ァ蟄ヲ鄙偵@縺溷セ後↓逕滓�縺輔l繧九ヱ繝ゥ繝。繝シ繧ソ繝輔ぃ繧、繝ォ縺九i縲√Δ繝舌う繝ォ遶ッ譛ォ縺ァ繧ょョ溯。悟庄閭ス縺ェC險€隱槭�繧ウ繝シ繝峨r閾ェ蜍慕函謌舌☆繧九b縺ョ縺ァ縺ゅk縲ょ�縺ヲ縺ョ蟄ヲ鄙偵ヱ繝ゥ繝。繝シ繧ソ縺悟ョ壽焚驟榊�縺ィ縺励※C險€隱槭さ繝シ繝峨↓邨�∩霎シ縺セ繧後€∝ュヲ鄙呈ク医∩繝「繝�Ν繝輔ぃ繧、繝ォ繧貞ョ溯。後☆繧九◆繧√↓蠢�ヲ√↑繝輔ぃ繧、繝ォ繧貞�縺ヲ蜷ォ繧薙□C險€隱槭さ繝シ繝峨r逕滓�縺吶k縲ゅ∪縺溘€�ォ倬€溷喧縺ョ蟾・螟ォ縺ィ縺励※im2col謫堺ス懊↓繧医j逡ウ縺ソ霎シ縺ソ貍皮ョ励r陦悟�遨阪〒險育ョ励〒縺阪k繧医≧縺ォ縺励€�ォ倬€溯。悟�貍皮ョ励Λ繧、繝悶Λ繝ェ縺ァ縺ゅkBLAS繧貞茜逕ィ縺吶k縺薙→縺ァSIMD(NEON)蜻ス莉、縲√�繝ォ繝√せ繝ャ繝�ラ蜃ヲ逅�r陦後▲縺ヲ縺�k縲ゅ@縺九@縲,affe2C(Chainer2C)縺ッiOS縺ィAndroid荳。蟇セ蠢懊〒縺ゅk縺溘aGPU縺ッ菴ソ逕ィ縺励※縺�↑縺�€�

縺昴%縺ァ譛ャ遐皮ゥカ縺ァ縺ッ縲�ォ伜コヲ縺ェ繧ケ繧ュ繝ォ繧貞ソ�ヲ√→縺励↑縺�Δ繝舌う繝ォ豺ア螻、蟄ヲ鄙偵い繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ョ菴懈�繧貞庄閭ス縺ィ縺吶k繧ウ繝ウ繝舌�繧ソ縺ョ菴懈�繧堤岼謖�☆縲ゅ∪縺溘€(OS縺ォ迚ケ蛹悶☆繧九%縺ィ縺ォ繧医jCPU繧医j繧よシ皮ョ怜�逅��蜉帙�蜆ェ繧後◆GPU繧貞茜逕ィ縺励€(OS荳翫〒縺ョ貍皮ョ励�鬮倬€溷喧繧貞峙繧九€�

3 豺ア螻、蟄ヲ鄙偵い繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ョ
菴懈�謇矩��

譛ャ遐皮ゥカ縺ョ繧ウ繝ウ繝舌�繧ソ繧堤畑縺�◆豺ア螻、蟄ヲ鄙偵Δ繝舌う繝ォ繧「繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ョ菴懈�縺ョ謇矩��↓縺、縺�※隱ャ譏弱☆繧九€�

  1. 蟄ヲ鄙堤畑繝��繧ソ繧サ繝�ヨ縺ョ逕ィ諢上☆繧九€�
  2. 豺ア螻、蟄ヲ鄙偵ヵ繝ャ繝シ繝�繝ッ繝シ繧ッ縺ョChainer繧堤畑縺�※繝阪ャ繝医Ρ繝シ繧ッ繧貞ュヲ鄙偵@縲√Δ繝�Ν繝輔ぃ繧、繝ォ繧剃ス懈�縺吶k縲�
  3. 繧ウ繝ウ繝舌�繧ソChainer2S繧堤畑縺�※蟄ヲ鄙呈ク医∩縺ョ繝「繝�Ν繝輔ぃ繧、繝ォ縺九iSwift險€隱槭�繧ウ繝シ繝峨→繝代Λ繝。繝シ繧ソ繝輔ぃ繧、繝ォ繧堤函謌舌☆繧九€�
  4. iOS豺ア螻、蟄ヲ鄙偵い繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ョGUI驛ィ蛻��繧ウ繝シ繝峨r菴懈�縺吶k縲�
  5. 逕滓�縺励◆Swift險€隱槭�繧ウ繝シ繝峨€√ヱ繝ゥ繝。繝シ繧ソ繝輔ぃ繧、繝ォ縲;UI縺ョ繧ウ繝シ繝峨°繧峨い繝励Μ繧ア繝シ繧キ繝ァ繝ウ繧剃ス懈�縺吶k縲�

縺セ縺壹€∬ィ育ョ玲ゥ滉ク翫〒豺ア螻、蟄ヲ鄙偵ヵ繝ャ繝シ繝�繝ッ繝シ繧ッ縺ァ縺ゅkChainer繧堤畑縺�※繝阪ャ繝医Ρ繝シ繧ッ繧貞ュヲ鄙偵@縲∝ュヲ鄙呈ク医∩繝「繝�Ν繝輔ぃ繧、繝ォ繧堤畑諢上☆繧九€�Chainer縺ァ縺ッ縲√ロ繝�ヨ繝ッ繝シ繧ッ縺ァ荳€蠎ヲ鬆�シ晄成險育ョ励r陦後≧縺ィ縲√ロ繝�ヨ繝ッ繝シ繧ッ縺ョ蜷�Ξ繧、繝、繝シ縺ッ繝√ぉ繝シ繝ウ縺ォ繧医▲縺ヲ郢九′繧九€ゅ%繧後↓繧医j縲∝�蜉帙°繧峨ロ繝�ヨ繝ッ繝シ繧ッ繧帝■繧九%縺ィ縺悟庄閭ス縺ォ縺ェ繧翫€∝推螻、縺ョ遞ョ鬘槭d繝代Λ繝。繝シ繧ソ縲√ヵ繧」繝ォ繧ソ繝シ繧オ繧、繧コ遲峨�諠��ア繧貞叙蠕励☆繧九€ゅ%繧後i縺ョ諠��ア縺九i縲ヾwift險€隱槭�繧ウ繝シ繝峨→繝代Λ繝。繝シ繧ソ繝輔ぃ繧、繝ォ繧堤函謌舌☆繧九€ゅ∪縺溘€√き繝。繝ゥ縺九i逕サ蜒上�蜿門セ励dGUI縺ョ繧ウ繝シ繝�ぅ繝ウ繧ー繧定。後>縲√ヱ繝ゥ繝。繝シ繧ソ繝輔ぃ繧、繝ォ縺ェ縺ゥ縺ィ蜷医o縺帙k縺薙→縺ァ豺ア螻、蟄ヲ鄙偵い繝励Μ繧ア繝シ繧キ繝ァ繝ウ繧剃ス懈�縺吶k縺薙→縺後〒縺阪k縲よキア螻、蟄ヲ鄙偵い繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ョ菴懈�縺ョ豬√l蝗ウ繧剃サ・荳九�蝗ウ[*]縺ォ遉コ縺吶€�

Figure: 豺ア螻、蟄ヲ鄙偵い繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ョ菴懈�縺ョ豬√l
Image app2

4 謇区ウ�

1 Chainer2S

Chainer縺ァ菴ソ逕ィ縺吶k逕サ蜒上↑縺ゥ縺ョ蜈・蜉帙d繝阪ャ繝医Ρ繝シ繧ッ縺ョ荳ュ髢灘�蜉帙↑縺ゥ縺ョ繝��繧ソ縺ッ縲∝腰縺ェ繧九�繧ッ繝医Ν縺ァ縺ッ縺ェ縺上€∬ィ育ョ励げ繝ゥ繝輔r菫晄戟縺吶kVariable縺ァ讒区�縺吶k蠢�ヲ√′縺ゅk縲ゅ%縺ョVariable縺ィ縺�≧讒矩€�菴薙r菴ソ逕ィ縺吶k縺薙→縺ォ繧医▲縺ヲ繝阪ャ繝医Ρ繝シ繧ッ縺ァ鬆�シ晄成險育ョ励r荳€蠎ヲ陦後≧縺薙→縺ァ縲√ロ繝�ヨ繝ッ繝シ繧ッ縺ョ蜷�ヮ繝シ繝峨�繝√ぉ繝シ繝ウ縺ァ郢九′繧翫€�€�シ晄成險育ョ励r縺吶k縺薙→縺悟庄閭ス縺ォ縺ェ繧九€�

譛ャ遐皮ゥカ縺ァ縺ッ縲√%縺ョ讖溯�繧貞茜逕ィ縺励※縲∽ク€蠎ヲ鬆�シ晄成險育ョ励r陦後≧縺薙→縺ァ繝阪ャ繝医Ρ繝シ繧ッ縺ョ蜷�ヮ繝シ繝峨r繝√ぉ繝シ繝ウ縺ァ郢九£繧九€ゅ%繧後↓繧医j縲√ロ繝�ヨ繝ッ繝シ繧ッ縺ョ蜃コ蜉帙°繧牙ア樊€ァcreator繧貞セ励k縺薙→縺ァ繝阪ャ繝医Ρ繝シ繧ッ譛€蠕後�繝ャ繧、繝、繝シ縺後←縺ョ繧医≧縺ェ繝ャ繧、繝、繝シ縺ァ縺ゅk縺九r遏・繧九%縺ィ縺後〒縺阪k縲ゅ◎縺ョ繝ャ繧、繝、繝シ縺ョinputs[0]繧貞セ励k縺薙→縺ァ縺昴�繝ャ繧、繝、繝シ縺ク縺ョ蜈・蜉�(1縺、蜑阪�繝ャ繧、繝、繝シ縺ョ蜃コ蜉�)繧貞セ励k縺薙→縺後〒縺阪k縲ょ酔讒倥↓creator繧定ェソ縺ケ縺ヲ縺昴�蜈・蜉帙r霎ソ繧九%縺ィ繧堤ケー繧願ソ斐☆縺薙→縺ァ繝阪ャ繝医Ρ繝シ繧ッ蜈ィ縺ヲ繧帝■繧九€ゅ%縺ョ譎ゅ€√Ξ繧、繝、繝シ縺檎糞縺ソ霎シ縺ソ螻、繧��邨仙粋螻、縺ェ縺ゥ縺ョ蝣エ蜷医€(nputs縺ョ繝ェ繧ケ繝医↓驥阪∩縺ィ繝舌う繧「繧ケ縺ョ繝代Λ繝。繝シ繧ソ繧呈干縺医※縺翫j縲(nputs[1]縺ォ驥阪∩縺ョ繝代Λ繝。繝シ繧ソ縲(nputs[2]縺ォ繝舌う繧「繧ケ縺ョ繝代Λ繝。繝シ繧ソ縺梧�シ邏阪@縺ヲ縺ゅk縲ゅ%繧後r蝗ウ隗」縺励◆繧ゅ�繧貞峙[*]縺ィ縺励※莉・荳九↓遉コ縺吶€ゅ∪縺溘€∫ー。蜊倥↑CNN縺ョ萓九r蝗ウ[*]縺ォ遉コ縺吶€�

縺薙�繧医≧縺ォ繝阪ャ繝医Ρ繝シ繧ッ縺ョ蜃コ蜉帙°繧峨ロ繝�ヨ繝ッ繝シ繧ッ縺ョ譛€蛻昴�繝ャ繧、繝、繝シ縺セ縺ァ繧定セソ繧翫€√ロ繝�ヨ繝ッ繝シ繧ッ縺ョ蜷�Ξ繧、繝、繝シ縺ョ遞ョ鬘槭d繝代Λ繝。繝シ繧ソ縺ェ縺ゥ縺ョ諠��ア繧偵∪縺ィ繧√※1縺、縺ョ繝ェ繧ケ繝医→縺励※菴懈�縺吶k縲ゅ◎縺ョ繝ェ繧ケ繝医r逕ィ縺�※Swift險€隱槭�繝阪ャ繝医Ρ繝シ繧ッ縺ョ繧ウ繝シ繝峨→繝代Λ繝。繝シ繧ソ縺ョ繝舌う繝翫Μ繝輔ぃ繧、繝ォ繧剃ス懈�縺吶k縲4wift險€隱槭�繧ウ繝シ繝峨�菴懈�縺ォ縺、縺�※縺ッ縲�4.2遽€縺ァ隱ャ譏弱☆繧九€ゅヰ繧、繝翫Μ繝輔ぃ繧、繝ォ縺ッ縲∝推螻、縺ョ驥阪∩縺ィ繝舌う繧「繧ケ繧偵◎繧後◇繧悟�縺代※繝輔ぃ繧、繝ォ蛹悶☆繧九€ゅ%縺ョ譎ゅ€∫糞縺ソ霎シ縺ソ螻、縺ョ驥阪∩繝代Λ繝。繝シ繧ソ縺ョ繧キ繧ァ繧、繝励�[outputChannels][kernelHeight][kernelWidth][inputChannels]縲∝�邨仙粋螻、縺ョ驥阪∩縺ョ繧キ繧ァ繧、繝励�[outputChannels][inputChannels]縺ァ縺ゅk蠢�ヲ√′縺ゅk縲よウィ諢冗せ縺ィ縺励※縲∫糞縺ソ霎シ縺ソ螻、縺ョ逶エ蠕後�蜈ィ邨仙粋螻、縺ョ驥阪∩繝代Λ繝。繝シ繧ソ縺ョ繧キ繧ァ繧、繝励�逡ウ縺ソ霎シ縺ソ螻、縺ィ蜷梧ァ倥↓縲ーoutputChannels][kernelHeight][kernelWidth][inputChannels]縺ィ縺励↑縺代l縺ー縺ェ繧峨↑縺�€�

Figure: Chainer縺ォ縺翫¢繧九ロ繝�ヨ繝ッ繝シ繧ッ讒矩€�
Image converter2

Figure: CNN縺ョ萓�
Image cnn2

2 iOS荳翫∈縺ョ螳溯」�

1 MPSNNGraph

譛ャ遐皮ゥカ縺ァ菴懈�縺励◆繧ウ繝ウ繝舌�繧ソChainer2S縺檎函謌舌☆繧九ロ繝�ヨ繝ッ繝シ繧ッ縺ョ繧ウ繝シ繝峨�縲`etal Performance Shaders(MPS)繝輔Ξ繝シ繝�繝ッ繝シ繧ッ縺ョ荳€驛ィ縺ァ縺ゅkMPSNNGraph繧ッ繝ゥ繧ケ繧貞茜逕ィ縺励※縺�k縲�MPS繝輔Ξ繝シ繝�繝ッ繝シ繧ッ縺ッ縲;PU荳翫〒逕サ蜒丞�逅�d陦悟�貍皮ョ励↑縺ゥ繧貞ョ溯。後&縺帙k險育ョ励き繝シ繝阪Ν縺ョ繝ゥ繧、繝悶Λ繝ェ縺ァ縺ゅj縲`PS繧剃スソ逕ィ縺吶k縺薙→縺ァ豺ア螻、蟄ヲ鄙偵�GPU螳溯。後r螳溽樟縺励※縺�k縲�MPSNNGraph縺ッ縲√ル繝・繝シ繝ゥ繝ォ繝阪ャ繝医Ρ繝シ繧ッ荳ュ縺ョ逕サ蜒上→繝輔ぅ繝ォ繧ソ繝弱�繝峨′譛€驕ゥ蛹悶&繧後◆繧ー繝ゥ繝戊。ィ迴セ縺ァ縺ゅk縲ゅげ繝ゥ繝輔r讒狗ッ峨@縺滓凾縺ォ隗」譫舌&繧後€√←縺ョ繝弱�繝峨′蜈・蜉帙↓蠢�ヲ√〒縺ゅj縲√←縺ョ繝弱�繝峨′蜃コ蜉帙→縺励※逕滓�縺輔l繧九°縺梧アコ縺セ繧九€ゅ%繧後↓繧医j縲∝�蜉帙→縺励※逕滓�縺輔l繧九ヮ繝シ繝峨r險育ョ励☆繧九◆繧√↓蠢�ヲ√〒縺ェ縺�ヮ繝シ繝峨�辟。隕悶@縲√>縺上▽縺九�繝弱�繝峨�繝代ヵ繧ゥ繝シ繝槭Φ繧ケ蜷台ク翫�縺溘a縺ォ莉悶�繝弱�繝峨→蜀�Κ逧�↓騾」邨舌@縺溘げ繝ゥ繝輔→縺ェ繧九€�

2 MPSNNGraph縺ョ螳溯」�セ�

MPSNNGraph縺ョ螳溯」�セ九→縺励※VGG16[#!vgg16!#]縺ョ螳溯」�r蝗ウ[*]縺ィ縺励※莉・荳九↓遉コ縺吶€�MPSCNNConvolutionDataSource髢「謨ー縺ォ繧医▲縺ヲ縲√ヰ繧、繝翫Μ繝輔ぃ繧、繝ォ縺九i驥阪∩繧�ヰ繧、繧「繧ケ縺ョ繝代Λ繝。繝シ繧ソ縺ョ繝ュ繝シ繝峨r陦後≧縲ゅ∪縺溘€`PSCNNConvolutionDescriptor髢「謨ー縺ォ繧医▲縺ヲ縲∝�蜉帙メ繝」繝阪Ν繧��蜉帙メ繝」繝阪Ν縲√ヵ繧」繝ォ繧ソ繝シ繧オ繧、繧コ縲∵エサ諤ァ蛹夜未謨ー縺ェ縺ゥ縺ョ險ュ螳壹r陦後≧縲ゅ%繧後i�偵▽縺ョ髢「謨ー繧貞他縺ウ蜃コ縺僖ataSource髢「謨ー繧剃ス懈�縺吶k縺薙→縺ァ逡ウ縺ソ霎シ縺ソ螻、繧��邨仙粋螻、縺ョ繝弱�繝峨r螳溽樟縺励※縺�k縲ゅ%縺ョ譎ゅ€∝�邨仙粋螻、縺ョMPSCNNConvolutionDescriptor縺ォ蜈・蜉帙☆繧九ヵ繧」繝ォ繧ソ繝シ繧オ繧、繧コ縺ッ1 x 1縺ィ縺吶k縲ゅ@縺九@縲∫糞霎シ縺ソ螻、縺ョ逶エ蠕後�蜈ィ邨仙粋螻、縺ァ縺ッ縲`PSCNNConvolutionDescriptor縺ォ蜈・蜉帙☆繧九ヵ繧」繝ォ繧ソ繝シ繧オ繧、繧コ縺ッkernelHeight x kernelWidth縺ィ縺励€(nputChannels縺ッ蜑阪�逡ウ縺ソ霎シ縺ソ螻、縺ョoutputChannnels縺ィ縺吶k蠢�ヲ√′縺ゅk縲�

螳溯」�凾縺ョ蝠城。檎せ縺ィ縺励※莉・荳九�縺薙→縺梧嫌縺偵i繧後k縲�

縺薙l繧峨�蝠城。檎せ繧偵€〃GG16縺ョ譛€蛻昴�逡ウ縺ソ霎シ縺ソ螻、縺ァ縺ゅkconv1縺ョ蜑阪↓逡ウ縺ソ霎シ縺ソ螻、conv0縺ィ縺励※螳溯」�☆繧九%縺ィ縺ァ縲�㍾縺ソ縺ョ貍皮ョ鈴Κ蛻�〒逕サ蜒上�繝√Ε繝阪Ν繧坦GB縺九iBGR縺ォ螟画峩縺ィ蜷�ヴ繧ッ繧サ繝ォ蛟、繧�0縺九i255縺ョ遽�峇縺ォ謌サ縺励€√ヰ繧、繧「繧ケ縺ョ貍皮ョ鈴Κ蛻�〒蟄ヲ鄙呈凾縺ョ繝��繧ソ繧サ繝�ヨ縺ョ蟷ウ蝮�€、繧貞シ輔¥縺薙→縺ォ繧医j隗」豎コ縺励※縺�k縲Donv0縺ョ讎ら払蝗ウ繧貞峙[*]縺ィ縺励※莉・荳九↓遉コ縺吶€�

Figure: MPSNNGraph繧堤畑縺�◆VGG16縺ョ螳溯」�
Image vggnngraph

Figure: conv0縺ョ讎ら払蝗ウ
Image conv0

繧「繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ョ螳溯。梧凾縺ォViewController繧ッ繝ゥ繧ケ蜀��viewDidLoad髢「謨ー縺悟他縺ウ蜃コ縺輔l縲√%縺ョ譎ゅ↓VGG16繧ッ繝ゥ繧ケ繧貞ョ溯。後☆繧九%縺ィ縺ァ縲∝峙[*]縺ョ驛ィ蛻�′蜻シ縺ウ蜃コ縺輔l縺ヲ繧ー繝ゥ繝輔′讒狗ッ峨&繧後k縲ゅ◎縺ョ蠕後€√き繝。繝ゥ縺九i縺ョ蜈・蜉帙rMTLTexture縺ィ縺励※蜿励¢蜿悶▲縺滓凾縺ォ縲√◎縺ョTexture繧偵げ繝ゥ繝輔�WithSourceImages縺ィ縺励※蜈・蜉帙☆繧九%縺ィ縺ォ繧医▲縺ヲ繧ー繝ゥ繝輔r螳溯。後@縲∫オ先棡繧貞セ励k縺薙→縺後〒縺阪k縲�

5 螳滄ィ�

譛ャ遐皮ゥカ縺ァ縺ッ縲(OS荳翫〒逕サ蜒剰ェ崎ュ倥す繧ケ繝�Β繧貞ョ溯」�@縲∵キア螻、蟄ヲ鄙偵�貍皮ョ怜�逅�↓CPU縺ョ縺ソ繧堤畑縺�◆螳溯」�→GPU縺ョ縺ソ繧堤畑縺�◆螳溯」��蜃ヲ逅�€溷コヲ縺ォ髢「縺吶k豈碑シ�ョ滄ィ薙→縲∵キア螻、蟄ヲ鄙偵�貍皮ョ怜�逅�↓GPU繧堤畑縺�k3遞ョ縺ョ螳溯」�婿豕輔�蜃ヲ逅�€溷コヲ縺ォ髢「縺吶k豈碑シ�ョ滄ィ薙��偵▽縺ョ螳滄ィ薙r陦後▲縺溘€ゅ%縺薙〒縺ッ縺昴l縺槭l縺ョ螳滄ィ薙�險ュ螳壹→邨先棡繧堤、コ縺吶€�

1 螳滄ィ薙�險ュ螳�

縺昴l縺槭l縺ョ螳滄ィ薙↓縺翫>縺ヲ縲∫判蜒剰ェ崎ュ倥い繝励Μ繧ア繝シ繧キ繝ァ繝ウ繧貞ョ溯」�@縲∬ェ崎ュ倥↓隕√@縺滓凾髢薙r豎ゅa繧九%縺ィ縺ァ豈碑シ�r陦後▲縺溘€りェ崎ュ俶凾髢薙�縲∬ィ域クャ繧�20蝗櫁。後>縺昴�蟷ウ蝮�凾髢薙→縺励◆縲よシ皮ョ怜�逅�↓GPU繧堤畑縺�◆逕サ蜒剰ェ崎ュ倥い繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ッ縲,oreML縺ィMPS縺ィMPS繝ゥ繧、繝悶Λ繝ェ縺ョ1縺、縺ァ縺ゅkMPSNNGraph縺ョ3遞ョ縺ォ縺、縺�※縺昴l縺槭l螳溯」�@縺溘€ゅ◆縺�縺励€`PS縺ィMPSNNGraph縺ッ豺ア螻、蟄ヲ鄙偵�貍皮ョ怜�逅�r蜈ィ縺ヲGPU縺ョ縺ソ縺ァ陦後≧縺後€,oreML縺ッ貍皮ョ怜�逅�r髫�阡ス縺励※陦後≧縺溘a縲∝�逅��荳€驛ィ蛻�rCPU縺ァ陦後▲縺ヲ縺�k蜿ッ閭ス諤ァ縺後≠繧九€よシ皮ョ怜�逅�↓CPU縺ョ縺ソ繧堤畑縺�◆螳溯」�→GPU縺ョ縺ソ繧堤畑縺�◆螳溯」��蜃ヲ逅�€溷コヲ縺ォ髢「縺吶k豈碑シ�ョ滄ィ薙〒縺ッ縲∬ゥ穂セ。逕ィ繝�ヰ繧、繧ケ繧段Pad pro(9.7繧、繝ウ繝� A9X RAM2GB)縲∬ェ崎ュ倥ロ繝�ヨ繝ッ繝シ繧ッ繧但lexNet[#!alexnet!#]縺ィ縺励◆縲ょ�逅�rGPU縺ョ縺ソ縺ァ陦後≧逕サ蜒剰ェ崎ュ倥い繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ッMPSNNGraph繧堤畑縺�※螳溯」�@縲∝�逅�rCPU縺ョ縺ソ縺ァ陦後≧Chainer2C繧堤畑縺�※螳溯」�@縺溽判蜒剰ェ崎ュ倥い繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ィ豈碑シ�@縺溘€よシ皮ョ怜�逅�↓GPU繧堤畑縺�k�鍋ィョ縺ョ螳溯」�婿豕輔�豈碑シ�ョ滄ィ薙↓縺翫>縺ヲ縺ッ縲∬ゥ穂セ。逕ィ繝�ヰ繧、繧ケ繧段Phone 8 Plus(A11 RAM3GB)縲∬ェ崎ュ倥ロ繝�ヨ繝ッ繝シ繧ッ繧歎GG16[#!vgg16!#]縺ィ縺励◆縲� 2縺、縺ョ螳滄ィ薙�蜈ア騾壹�險ュ螳壹→蜷�ョ滄ィ灘崋譛峨�險ュ螳壹r莉・荳九↓縺セ縺ィ繧√k縲�


\begin{itembox}[l]{2縺、縺ョ螳滄ィ薙�蜈ア騾夊ィュ螳嘲
繝サ險域クャ縺吶k譎る俣縺ッ縲∬ェ�...
...サ險域クャ縺ッ20蝗櫁。後>縲√◎縺ョ蟷ウ蝮�r隱崎ュ俶凾髢薙→縺励◆縲�\\
\end{itembox}


\begin{itembox}[l]{CPU縺ィGPU縺ョ驕輔>縺ォ繧医k蜃ヲ逅�€溷コヲ縺ョ豈碑シ�ョ滄ィ薙�險ュ�...
...い繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ッ縲`PSNNGraph繧堤畑縺�※螳溯」�@縺溘€�
\end{itembox}


\begin{itembox}[l]{GPU繧堤畑縺�◆螳溯」�婿豕輔�驕輔>縺ォ繧医k蜃ヲ逅�€溷コヲ縺ョ�...
...輔�縲`PSNNGraph縲`PS縲,oreML縺ョ3遞ョ鬘槭〒螳溯」�r陦後▲縺溘€�
\end{itembox}

2 螳滄ィ鍋オ先棡

1 CPU縺ィGPU縺ョ驕輔>縺ォ繧医k蜃ヲ逅�€溷コヲ豈碑シ�

MPSNNGraph繧堤畑縺�※AlexNet[#!alexnet!#]繝阪ャ繝医Ρ繝シ繧ッ縺ォ繧医k迚ゥ菴楢ェ崎ュ倥い繝励Μ繧ア繝シ繧キ繝ァ繝ウ繧剃ス懈�縺励€∬ィ域クャ繧�20蝗櫁。後▲縺ヲ隱崎ュ俶凾髢甜msec]縺ョ蟷ウ蝮�r豎ゅa縺溽オ先棡繧定。ィ[*]縺ィ縺励※莉・荳九↓遉コ縺吶€り。ィ[*]繧医j縲∵キア螻、蟄ヲ鄙偵�貍皮ョ怜�逅�rCPU縺ョ縺ソ縺ァ陦後▲縺溷�エ蜷医↓豈斐∋縺ヲGPU縺ョ縺ソ縺ァ陦後▲縺溷�エ蜷医�譁ケ縺檎エ�3.7蛟阪�騾溷コヲ縺ァ螳溯。悟庄閭ス縺ィ縺�≧邨先棡縺悟セ励i繧後◆縲�


Table: AlexNet縺ォ繧医k迚ゥ菴楢ェ崎ュ倥�隱崎ュ俶凾髢� [msec]
螳溯」�婿豕� 蟷ウ蝮�ェ崎ュ俶凾髢�    
Chainer2C[#!c2calex!#] 134.9    
MPSNNgraph 36.4    

2 GPU繧堤畑縺�◆螳溯」�婿豕輔�驕輔>縺ォ繧医k蜃ヲ逅�€溷コヲ豈碑シ�

MPSNNGraph縲`PS縲,oreML繧堤畑縺�※縺昴l縺槭lVGG16[#!vgg16!#]繝阪ャ繝医Ρ繝シ繧ッ縺ォ繧医k迚ゥ菴楢ェ崎ュ倥い繝励Μ繧ア繝シ繧キ繝ァ繝ウ繧剃ス懈�縺励€∬ィ域クャ繧�20蝗櫁。後▲縺ヲ隱崎ュ俶凾髢甜msec]縺ョ蟷ウ蝮�r豎ゅa縺溽オ先棡繧定。ィ[*]縺ィ縺励※莉・荳九↓遉コ縺吶€り。ィ[*]繧医j縲∵悽遐皮ゥカ縺ョ繧ウ繝ウ繝舌�繧ソChainer2S繧貞茜逕ィ縺励※菴懈�縺励◆MPSNNGraph繧貞茜逕ィ縺励※螳溯」�@縺溽黄菴楢ェ崎ュ倥い繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺梧怙繧る€溘>108.99[msec]縺ィ縺�≧邨先棡縺ィ縺ェ縺」縺溘€�


Table: VGG16縺ォ繧医k迚ゥ菴楢ェ崎ュ倥�隱崎ュ俶凾髢� [msec]
螳溯」�婿豕� 蟷ウ蝮�ェ崎ュ俶凾髢� 譛€騾溯ェ崎ュ俶凾髢� 譛€驕�ェ崎ュ俶凾髢�
CoreML 144.87 134.47 151.00
MPS 155.21 146.72 170.00
MPSNNGraph 108.99 107.67 110.68

6 閠�ッ�

豺ア螻、蟄ヲ鄙偵�貍皮ョ怜�逅�rCPU縺ョ縺ソ縺ァ陦後▲縺溷�エ蜷医→GPU縺ョ縺ソ縺ァ陦後▲縺溷�エ蜷医→繧呈ッ碑シ�@縺溷ョ滄ィ鍋オ先棡縺九i縲∵シ皮ョ怜�逅�rCPU縺ョ縺ソ縺ァ陦後▲縺溷�エ蜷医↓豈斐∋縺ヲ貍皮ョ怜�逅�rGPU縺ョ縺ソ縺ァ陦後▲縺溷�エ蜷医�譁ケ縺檎エ�3.7蛟埼ォ倬€溘〒縺ゅk縺薙→縺悟�縺九k縲ゅ%繧後�GPU縺靴PU繧医j繧ゅ�繧ッ繝医Ν貍皮ョ励d荳ヲ蛻怜�逅�↓驕ゥ縺励※縺�k縺九i縺ィ閠�∴繧峨l繧九€ゅ◎縺ョ縺溘a縲、lexNet[#!alexnet!#]縺ァ謗ィ隲悶r荳€蝗櫁。後≧譎ゅ↓蠢�ヲ√↑貍皮ョ鈴㍼縺檎エ�11蜆�屓縺ァ縺ゅj縲√◎繧後h繧翫b荳€蝗槭�謗ィ隲悶↓蠢�ヲ√↑貍皮ョ鈴㍼縺悟「励∴繧九ロ繝�ヨ繝ッ繝シ繧ッ縺ォ縺翫>縺ヲ縺ッ螳溯。碁€溷コヲ縺ョ蟾ョ縺梧峩縺ォ髢九¥縺薙→縺御コ域Φ縺輔l繧九€ゅ%縺ョ縺薙→縺九i縲∵怙譁ー縺ョ豺ア縺�ロ繝�ヨ繝ッ繝シ繧ッ繧偵Δ繝舌う繝ォ遶ッ譛ォ荳翫↓螳溯」�☆繧句�エ蜷医↓縺ッ縲∵キア螻、蟄ヲ鄙偵�貍皮ョ怜�逅�↓GPU繧堤畑縺�◆螳溯」�r縺吶k蠢�ヲ√′縺ゅk縺ィ閠�∴繧峨l繧九€�

豺ア螻、蟄ヲ鄙偵�貍皮ョ怜�逅�↓GPU繧堤畑縺�◆螳溯」�婿豕輔�驕輔>縺ォ繧医k蜃ヲ逅�€溷コヲ繧呈ッ碑シ�@縺溷ョ滄ィ鍋オ先棡縺九i縲∝�縺ヲ貍皮ョ怜�逅�↓GPU繧堤畑縺�※縺�k縺ォ繧る未繧上i縺哺PSNNGraph縺ォ繧医k螳溯」�′蜿悶j蛻�¢騾溘>縺薙→縺悟�縺九k縲�CoreML縺ッ繝阪ャ繝医Ρ繝シ繧ッ蜀�Κ縺ョ蜃ヲ逅�r縺ゥ縺ョ繧医≧縺ォ陦後▲縺ヲ縺�k縺九′髫�阡ス縺輔l縺ヲ縺�k縺溘a莉雁屓縺ョ邨先棡縺ィ縺ェ縺」縺滓�遒コ縺ェ逅�罰縺ッ蛻�°繧峨↑縺�€ゅ@縺九@縲`PSNNGraph縺ィMPS縺ィ縺ョ蟾ョ縺ッ縲`PSNNGraph縺後げ繝ゥ繝墓ァ矩€�繧貞茜逕ィ縺励※縺�k縺薙→縺ァ縲∵シ皮ョ怜�逅��譛€驕ゥ蛹悶′陦後o繧後>縺ヲ縺�k縺薙→縺ォ繧医k繧ゅ�縺�縺ィ莠域Φ縺ァ縺阪k縲ょセ薙▲縺ヲ縲�16螻、縺九i縺ェ繧儀GG16[#!vgg16!#]繝阪ャ繝医Ρ繝シ繧ッ繧医j繧よキア縺СesNet50[#!resnet!#]縺ェ縺ゥ縺ョ譛€譁ー縺ョ繝阪ャ繝医Ρ繝シ繧ッ縺ァ縺ッ繧ー繝ゥ繝墓ァ矩€�繧貞茜逕ィ縺励◆縺薙→縺ォ繧医k諱ゥ諱オ縺悟、ァ縺阪¥縺ェ繧九→閠�∴繧峨l繧九€ゅ€€

7 縺翫o繧翫↓

1 縺セ縺ィ繧�

豺ア螻、蟄ヲ鄙偵ヵ繝ャ繝シ繝�繝ッ繝シ繧ッ縺ョChainer繧堤畑縺�※險育ョ玲ゥ滉ク翫〒豺ア螻、蟄ヲ鄙偵�蟄ヲ鄙偵r陦後>縲∫函謌舌&繧後◆繝「繝�Ν繝輔ぃ繧、繝ォ縺九i繝阪ャ繝医Ρ繝シ繧ッ驛ィ蛻��Swift險€隱槭�繧ウ繝シ繝峨→繝代Λ繝。繝シ繧ソ繧呈�シ邏阪@縺溘ヰ繧、繝翫Μ繝輔ぃ繧、繝ォ繧堤函謌舌☆繧九さ繝ウ繝舌�繧ソChainer2S繧剃ス懈�縺励◆縲ゅ%繧後↓繧医j縲(OS遶ッ譛ォ荳翫〒螳ケ譏薙↓豺ア螻、蟄ヲ鄙偵�謗ィ隲悶r陦後≧縺薙→繧貞庄閭ス縺ォ縺励◆縲ゅ∪縺溘€`PSNNGraph繧堤畑縺�※豺ア螻、蟄ヲ鄙偵�貍皮ョ怜�逅�r蜈ィ縺ヲGPU縺ァ陦後≧縺薙→縺ァ縲〃GG16繝阪ャ繝医Ρ繝シ繧ッ[#!vgg16!#]縺ァ108.99[msec]縺ィ縺�≧鬮倬€溷ョ溯。後r蜿ッ閭ス縺ォ縺励◆縲� 譛ャ遐皮ゥカ縺ァ陦後▲縺滓キア螻、蟄ヲ鄙偵�貍皮ョ怜�逅�rCPU縺ョ縺ソ縺ァ陦後▲縺溷�エ蜷医→GPU縺ョ縺ソ縺ァ陦後▲縺溷�エ蜷医�蜃ヲ逅�€溷コヲ縺ョ豈碑シ�ョ滄ィ薙°繧峨€、lexNet繝阪ャ繝医Ρ繝シ繧ッ[#!alexnet!#]縺ォ縺翫¢繧区耳隲匁凾髢薙′CPU縺ョ縺ソ縺ョ蝣エ蜷医h繧翫bGPU縺ョ縺ソ縺ョ蝣エ蜷医�譁ケ縺�3.7蛟埼ォ倬€溘〒縺ゅj縲(OS荳翫↓豺ア螻、蟄ヲ鄙偵い繝励Μ繧ア繝シ繧キ繝ァ繝ウ繧貞ョ溯」�☆繧矩圀縺ョGPU蛻ゥ逕ィ縺ョ蠢�ヲ∵€ァ繧堤、コ縺励◆縲ゅ∪縺溘€∵シ皮ョ怜�逅�↓GPU繧堤畑縺�k螳溯」�婿豕輔�驕輔>縺ォ繧医k蜃ヲ逅�€溷コヲ縺ョ豈碑シ�ョ滄ィ薙°繧峨€(OS荳翫↓豺ア螻、蟄ヲ鄙偵い繝励Μ繧ア繝シ繧キ繝ァ繝ウ繧貞ョ溯」�☆繧区凾縺ォ縺ッ縲`PSNNGraph繧堤畑縺�k螳溯」�′譛€驕ゥ縺ェ螳溯」�婿豕輔〒縺ゅk縺薙→繧呈�繧峨°縺ォ縺励◆縲�

2 莉雁セ後�隱イ鬘�

迴セ蝨ィ縲∵悽遐皮ゥカ縺ァ菴懈�縺励◆繧ウ繝ウ繝舌�繧ソChainer2S縺ッResNet[#!resnet!#]縺ョ繧医≧縺ェ譫晏�縺九l縺ョ縺ゅk繝阪ャ繝医Ρ繝シ繧ッ縺ォ縺ッ蟇セ蠢懊@縺ヲ縺�↑縺�€ゅ∪縺溘€`PSNNGraph蛛エ縺ァ蟇セ蠢懊@縺ヲ縺�k繝ャ繧、繝、繝シ遞ョ鬘槭�蜈ィ縺ヲ縺ォ蟇セ蠢懊@縺ヲ縺�k繧上¢縺ァ縺ッ縺ェ縺�€ゅ◎縺ョ縺溘a縲∽サ雁セ梧椌蛻�°繧後�縺ゅk繝阪ャ繝医Ρ繝シ繧ッ繧�h繧雁、壹¥縺ョ繝ャ繧、繝、繝シ縺ォ蟇セ蠢懊☆繧九%縺ィ縺ァ繧医j隍�尅縺ァ豺ア縺�ロ繝�ヨ繝ッ繝シ繧ッ繝「繝�Ν繧貞茜逕ィ蜿ッ閭ス縺ィ縺ェ繧翫€∫黄菴楢ェ崎ュ倥�邊セ蠎ヲ蜷台ク翫r蝗ウ繧九%縺ィ縺後〒縺阪k繧医≧縺ォ縺ェ繧翫€∫判蜒丞、画鋤縺ェ縺ゥ讒倥€�↑繧ソ繧ケ繧ッ縺ョ豺ア螻、蟄ヲ鄙偵い繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺碁幕逋コ蜿ッ閭ス縺ィ縺ェ繧九€ゅh縺」縺ヲ縲√さ繝ウ繝舌�繧ソ縺ョ譫晏�縺九l縺ョ縺ゅk繝阪ャ繝医Ρ繝シ繧ッ縺ィ螟壹¥縺ョ繝ャ繧、繝、繝シ遞ョ縺ク縺ョ蟇セ蠢懊′隱イ鬘後→縺励※閠�∴繧峨l繧九€� 譖エ縺ォ縲∫樟蝨ィMPSNNGraph縺ァ縺ッ閾ェ繧画眠隕上↓繝輔ぅ繝ォ繧ソ繝シ繝弱�繝峨r菴懈�縺吶k縺薙→縺ッ荳榊庄閭ス縺ァ縺ゅj縲∝�縺ヲ縺ョ繝輔ぅ繝ォ繧ソ繝シ縺ォ髢「縺吶k繝弱�繝峨′蟄伜惠縺励※縺�k繧上¢縺ァ縺ッ縺ェ縺�€ゅ◎縺ョ縺溘a縲∫樟迥カ縺ァ縺ッ縺ゅ∪繧贋ク€闊ャ逧�〒縺ェ縺�Ξ繧、繝、繝シ繧�眠隕上↓髢狗匱縺輔l縺溘Ξ繧、繝、繝シ縺ッMPSNNGraph縺ョ繧「繝��繝��繝医〒霑ス蜉�縺輔l繧九∪縺ァ菴ソ逕ィ縺吶k縺薙→縺ッ縺ァ縺阪↑縺�€ゅ%繧後r隗」豎コ縺吶k縺溘a縺ォ縺ッ縲∝刈邂怜所縺ウ荵礼ョ励r陦後≧繝弱�繝峨d迴セ蝨ィ蛻ゥ逕ィ蜿ッ閭ス縺ェ繝輔ぅ繝ォ繧ソ繝シ繝弱�繝峨↑縺ゥ繧堤オ�∩蜷医o縺帙※蜷檎セゥ縺ョ貍皮ョ励r螳溯」�☆繧九→縺�≧譁ケ豕輔′縺ゅk縺後€√%繧後r陦後≧縺ィ繧ウ繝シ繝峨′髱槫クク縺ォ髮」隗」縺ォ縺ェ縺」縺ヲ縺励∪縺�€ゅ%繧後r繧ウ繝ウ繝舌�繧ソ蛛エ縺ァ逕滓�蜿ッ閭ス縺ォ縺吶k縺薙→縺ァ縲√←縺ョ繧医≧縺ェ繝阪ャ繝医Ρ繝シ繧ッ繝「繝�Ν縺ォ繧ょッセ蠢懷庄閭ス縺ィ縺吶k縺薙→繧りェイ鬘後→縺励※閠�∴繧峨l繧九€�

No References!

A. MPSNNGraph縺ァ蛻ゥ逕ィ蜿ッ閭ス縺ェ繝弱�繝我ク€隕ァ

B. 螳滄ィ薙�險域クャ邨先棡


Table: MPSNNGraph繧堤畑縺�◆螳溯」�↓縺翫¢繧帰lexNet縺ョ隱崎ュ俶凾髢� [msec]
螳溯」�婿豕� MPSNNGraph    
險域クャ1蝗樒岼 37.92    
險域クャ2蝗樒岼 35.63    
險域クャ3蝗樒岼 34.48    
險域クャ4蝗樒岼 39.36    
險域クャ5蝗樒岼 42.61    
險域クャ6蝗樒岼 37.58    
險域クャ7蝗樒岼 37.56    
險域クャ8蝗樒岼 34.60    
險域クャ9蝗樒岼 34.15    
險域クャ10蝗樒岼 35.59    
險域クャ11蝗樒岼 36.15    
險域クャ12蝗樒岼 35.14    
險域クャ13蝗樒岼 34.98    
險域クャ14蝗樒岼 35.92    
險域クャ15蝗樒岼 35.71    
險域クャ16蝗樒岼 35.36    
險域クャ17蝗樒岼 36.49    
險域クャ18蝗樒岼 36.16    
險域クャ19蝗樒岼 35.91    
險域クャ20蝗樒岼 36.34    


Table: 蜃ヲ逅�↓GPU繧堤畑縺�◆螳溯」�婿豕輔�VGG16縺ョ隱崎ュ俶凾髢� [msec]
螳溯」�婿豕� MPSNNGraph MPS CoreML
險域クャ1蝗樒岼 108.01 154.58 138.32
險域クャ2蝗樒岼 108.10 163.07 145.33
險域クャ3蝗樒岼 109.17 150.04 145.99
險域クャ4蝗樒岼 110.39 157.56 140.88
險域クャ5蝗樒岼 109.74 162.90 144.74
險域クャ6蝗樒岼 110.68 154.69 147.91
險域クャ7蝗樒岼 110.12 149.14 144.85
險域クャ8蝗樒岼 109.27 155.21 151.00
險域クャ9蝗樒岼 107.67 151.92 143.00
險域クャ10蝗樒岼 110.34 156.71 134.47
險域クャ11蝗樒岼 108.67 146.72 144.98
險域クャ12蝗樒岼 107.61 149.02 144.54
險域クャ13蝗樒岼 108.74 152.56 143.45
險域クャ14蝗樒岼 108.90 170.00 147.29
險域クャ15蝗樒岼 108.44 155.56 150.01
險域クャ16蝗樒岼 108.70 150.81 149.05
險域クャ17蝗樒岼 109.00 152.90 140.75
險域クャ18蝗樒岼 108.92 153.52 152.26
險域クャ19蝗樒岼 109.00 157.03 142.53
險域クャ20蝗樒岼 108.31 160.23 146.03



Footnotes

... iOS1
https://github.com/aleph7/caffe
...縲ゝensorFlow2
https://www.tensorflow.org/mobile/
...縲^penCV3
https://github.com/opencv/opencv/wiki/Deep-Learning-in-OpenCV
...縺ェ縺ゥ縺後≠繧九€ゅ∪縺溘€∵里蟄倥�繝輔Ξ繝シ繝�繝ッ繝シ繧ッ荳翫↓險ュ險医&繧後€√Δ繝舌う繝ォ縺ク縺ョ驕ゥ逕ィ縺瑚€��縺輔l縺溘b縺ョ縺ィ縺励※Caffe24
https://github.com/caffe2/caffe2
... CoreML縺ッ縲(OS11縺九i譁ー縺励¥霑ス蜉�縺輔l縺滓ゥ滓「ー蟄ヲ鄙但PI鄒、縺ァ縺ゅk5
https://developer.apple.com/documentation/coreml