Silicon Valley HBOã·ãªãŒãºã¯ã第4ã·ãŒãºã³ã®ç¬¬4ãšããœãŒãã§ããããããã°ãšéãããããã°ãã¢ããªã±ãŒã·ã§ã³ãšããŠèªèããå®éã®AIã¢ããªã±ãŒã·ã§ã³ããªãªãŒã¹ããŸããïŒãã®ã¢ããªã±ãŒã·ã§ã³ã¯ãAndroidãšiOSã§å©çšå¯èœã«ãªããŸãã ïŒïŒ
ãããå®çŸããããã«ãé»è©±ã§çŽæ¥åäœããç¹å¥ãªãã¥ãŒã©ã«ã¢ãŒããã¯ãã£ãéçºããTensorFlowãKerasãããã³Nvidia GPUã䜿çšããŠãã¬ãŒãã³ã°ããŸããã
ãã®å®çšçãªå©ç¹ã¯ã°ãããŠããŸããããã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã£ãŒãã©ãŒãã³ã°ãšãšããžã³ã³ãã¥ãŒãã£ã³ã°ã®äž¡æ¹ã®æé ãªäŸ¡æ Œã®äŸã§ãã ãã¹ãŠã®AIäœæ¥ã¯ãŠãŒã¶ãŒããã€ã¹ã«ãã£ãŠ100ïŒ æäŸãããç»åã¯é»è©±ãé¢ããããšãªãåŠçãããŸãã ããã«ãããå³æå¿çïŒã¯ã©ãŠããšããŒã¿ã亀æããå¿ èŠã¯ãããŸããïŒããªãã©ã€ã³ã§ã®å¯çšæ§ãããã³ãã©ã€ãã·ãŒã®åäžãå®çŸããŸãã ãŸããäœçŸäžäººãã®ãŠãŒã¶ãŒãããå Žåã§ããã¢ããªã±ãŒã·ã§ã³ã0ãã«ã§å®è¡ãç¶ããããšãã§ããŸããããã¯ãAIã«å¯ŸããåŸæ¥ã®ã¯ã©ãŠãããŒã¹ã®ã¢ãããŒããããå€§å¹ ã«ã³ã¹ããç¯çŽã§ããŸãã
Not Hotdog AIã¢ããªã±ãŒã·ã§ã³ããã¬ãŒãã³ã°ããããã«æ¥ç¶ãããeGPUãåããéçºè ã®ã³ââã³ãã¥ãŒã¿ãŒ
ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ãGPUãæ¥ç¶ãããåãã©ãããããã§ãæåã§éžæããããŒã¿ã䜿çšããŠã1人ã®éçºè ãã·ãªãŒãºå°çšã«æ ç»ã¹ã¿ãžãªã«ãã£ãŠéçºãããŸããã ãã®ç¹ã§ãéãããæéãšãªãœãŒã¹ãéæè¡çãªäŒç€Ÿãåã ã®éçºè ãªã©ã®ã¢ããã¥ã¢ã§ä»æ¥éæã§ããããšã®ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ãšããŠåœ¹ç«ã¡ãŸãã ãã®ç²Ÿç¥ã§ããã®èšäºã§ã¯ãä»ã®äººãèªåã®ã¢ããªã±ãŒã·ã§ã³ãäœæããããã«ç¹°ãè¿ãããšãã§ããã¹ãããã®è©³çŽ°ãªæŠèŠãæäŸããããšããŸãã
ã¢ããª
ã·ãªãŒãºãèŠèŽããã ã¢ããªã±ãŒã·ã§ã³ããã¹ãããªãã£ãå Žå㯠ïŒãããã¹ãã§ãïŒïŒãåçãæ®ããåçã«ãããããã°ã衚瀺ãããŠãããã©ããã«ã€ããŠæèŠãè¡šæããŸãã ããã¯ãææ°ã®AIç 究ããã³ã¢ããªã±ãŒã·ã§ã³ãç¹ã«ImageNetã«æ¬æãè¡šããåçŽãªäœ¿çšæ³ã§ãã
ãããããã°ãèªèããããã«ãããããäžçäžã®èª°ãããå€ãã®ããã°ã©ã ãªãœãŒã¹ãå²ãåœãŠãŸããããããã§ãã¢ããªã±ãŒã·ã§ã³ã¯ã²ã©ããããã³/ãŸãã¯æŽç·Žãããæ¹æ³ã§èª€è§£ãããããšããããŸãã
ãã®éããããæã«ã¯å°é£ãªç¶æ³ã§ãããããã°ãèªèããããšããããŸã... EngadgetãæžããŠããããã« ã ãããã¯ä¿¡ããããªãã 20åã§ããã®ã¢ããªã±ãŒã·ã§ã³ã§ãéå»2幎éã«Shazamã§æãã¿ã°ä»ãããŠèªèãããããå€ãã®é£ã¹ç©ãèªèã§ããŸããã
ãããã¿ã€ãããçç£ãŸã§
Hacker Newsãèªãã ãšããããªãã¯æ¬¡ã®ããã«èããŸããã ã圌ãã¯ãã®ããã«æåã®ã©ãŠã³ãã§1,000äžãã«ãéããŸãããïŒ ãã®ã¢ããªã¯é±æ«ã«ãããŠéçºã§ããŸãïŒããã®ã¢ããªã¯ãããªãã«åãããã«æããããã§ãããã æçµçã«ãæåã®ãããã¿ã€ãã¯å®éã«é±æ«ã«Google Cloud Platform Vision APIãšReact Nativeã䜿çšããŠäœæãããŸããã ããããæçµçã«ã¢ããªã±ãŒã·ã§ã³ã«ã¿ãã°ã«å ¥ã£ãã¢ããªã±ãŒã·ã§ã³ã®æçµããŒãžã§ã³ãäœæããã«ã¯ãå€éšããè©äŸ¡ããã®ãé£ããæå³ã®ããæ¹åãè¡ãã®ã«æ°ãæïŒ1æ¥æ°æéïŒã®è¿œå äœæ¥ãå¿ èŠã§ããã å šäœã®ç²ŸåºŠããã¬ãŒãã³ã°æéãåææéã®æé©åã«æ°é±éãè²»ãããéçºãã¹ããŒãã¢ããããããã«ããŸããŸãªèšå®ãããŒã«ãè©Šããé±æ«ãéããŠiOSãšAndroidã®èš±å¯ãèæ ®ããŠãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæé©åããŸããïŒãã®ãããã¯ã«ã€ããŠã¯è©±ããŸããïŒã
å€ãã®å Žåãæè¡çãªããã°ãç§åŠèšäºã§ã¯ãã®éšåãçç¥ããæçµçãããã«è¡šç€ºããããšã奜ã¿ãŸãã ããããä»ã®äººãç§ãã¡ã®ééããè¡åããåŠã¶ã®ãå©ããããã«ãå°éããæçµçãªã¢ãŒããã¯ãã£ã説æããåã«ãç§ãã¡ã«ãšã£ãŠããŸããããªãã£ãã¢ãããŒãã®èŠçŽãªã¹ããæ瀺ããŸãã
V0ïŒãããã¿ã€ã
ç»åã®äŸãšãGoogle Cloud Visionããã¥ã¡ã³ãã®APIã®å¯Ÿå¿ããåé¡
ãããã¿ã€ãã®äœæã«React Nativeãéžæããã®ã¯ãå®éšçšã®ã·ã³ãã«ãªãµã³ãããã¯ã¹ãæäŸããå€ãã®ããã€ã¹ã®ãµããŒããè¿ éã«æäŸããã®ã«åœ¹ç«ã€ããã§ãã ãšã¯ã¹ããªãšã³ã¹ã¯æåãããããžã§ã¯ãã®æåŸãŸã§React Nativeãå»ããŸãããããã»ã¹ãåžžã«ç°¡çŽ åããããã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ã®èšèšãæå³çã«å¶éããå¿ èŠããããŸããããæçµçã«React Nativeã¯ãã®ä»äºãæãããŸããã
ãããã¿ã€ãã«äœ¿çšãããå¥ã®äž»èŠã³ã³ããŒãã³ãã§ããGoogle Cloud Vision APIãããããã«æåŠããŸããã 3ã€ã®äž»ãªçç±ããããŸãã
- æåã®ããããŠæãéèŠãªããšã¯ããããããã°ã®èªè粟床ãããŸãè¯ããªãã£ãããšã§ãã å€çš®å€æ§ãªãªããžã§ã¯ããèªèããã®ã¯çŽ æŽãããä»äºã§ãããç¹å®ã®ç¹å®ã®ãã®ãããŸãããèªèããã2016幎ã®å®éšäžã«ãµãŒãã¹ã®ããã©ãŒãã³ã¹ãäœäžããããªãäžè¬çãªæ§è³ªã®ããŸããŸãªäŸããããŸããã
- ãã®æ§è³ªäžãã¯ã©ãŠããµãŒãã¹ã¯åžžã«ããã€ã¹ã§ã®ãã€ãã£ãå®è¡ãããé ããªãïŒãããã¯ãŒã¯ã©ã°ãçãïŒïŒããªãã©ã€ã³ã§ã¯æ©èœããŸããã ããã€ã¹ã®å€éšã«ç»åã転éãããšããèãã¯ãæ³åŸäžããã³ãã©ã€ãã·ãŒäžæœåšçã«æå³ããããŸãã
- æçµçã«ãã¢ããªã±ãŒã·ã§ã³ãæ®åããå ŽåãGoogle Cloudã§ã®äœæ¥ã«ã¯ããªãã®è²»çšãããããŸãã
ãã®ãããäžè¬çã«ããšããžã³ã³ãã¥ãŒãã£ã³ã°ããšåŒã°ãããã®ã®å®éšãéå§ããŸããã ç§ãã¡ã®å Žåãããã¯ãã©ãããããã§ãã¥ãŒã©ã«ãããã¯ãŒã¯ããã¬ãŒãã³ã°ããåŸãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã«çŽæ¥è»¢éãããã¥ãŒã©ã«ãããã¯ãŒã¯ã®å®è¡ãã§ãŒãºïŒãŸãã¯çµè«ã®çµè«ïŒããŠãŒã¶ãŒã®é»è©±ã§çŽæ¥å®è¡ãããããšãæå³ããŸãã
V1ïŒTensorFlowãInceptionãããã³Retraining
TensorFlowéçºããŒã ã®Pete Wardenãšã®æ¥œããäŒè°ã®ãããã§ãTensorFlowãiOSããã€ã¹ã«çµ±åããããšã§TensorFlowãçŽæ¥å®è¡ã§ããããšããããããã®æ¹åã§å®éšãéå§ããŸããã React Nativeã®åŸãTensorFlowã¯ã¹ã¿ãã¯ã®2çªç®ã®äžå¯æ¬ ãªéšåã«ãªããŸããã
TensorFlowã®Objective-C ++ã«ã¡ã©ã®ãµã³ãã«ãReact Nativeã·ã§ã«ã«çµ±åããã®ã«ãã£ã1æ¥ããããããŸããã§ããã åŠç¿çšã®ã¹ã¯ãªãããåŠç¿ããã®ã«ããªãæéãããããŸãããããã¯ãããå ·äœçãªãã·ã³ããžã§ã³ã¿ã¹ã¯ã§åäœããããã«Inceptionã¢ãŒããã¯ãã£ãåãã¬ãŒãã³ã°ããã®ã«åœ¹ç«ã¡ãŸãã Inceptionã¯ãGoogleãç»åèªèçšã«äœæãããã¥ãŒã©ã«ã¢ãŒããã¯ãã£ã®ãã¡ããªãŒã®ååã§ãã ã€ã³ã»ãã·ã§ã³ã¯äºåãã¬ãŒãã³ã°æžã¿ã·ã¹ãã ãšããŠå©çšã§ããŸããã€ãŸãããã¬ãŒãã³ã°ãã§ãŒãºãå®äºããéã¿ãèšå®ãããŸãã å€ãã®å Žåãç»åèªèãã¥ãŒã©ã«ãããã¯ãŒã¯ã¯ã20,000ãè¶ ããããŸããŸãªçš®é¡ã®ãªããžã§ã¯ãïŒããã³ãã®äžã®ãããããã°ïŒãèªèããæé«ã®ãã¥ãŒã©ã«ã¢ãŒããã¯ãã£ãæ¢ãããã®æ¯å¹Žã®ç«¶äºã§ããImageNetã§ãã¬ãŒãã³ã°ãããŸãã ãã ããGoogle Cloud Vision APIã®ããã«ã競äºã¯èªèå¯èœãªãªããžã§ã¯ãã®å¯èœãªæ倧æ°ã奚å±ãã20,000ãè¶ ããç¹å®ã®ãªããžã§ã¯ãã®åæ粟床ã¯ããã»ã©é«ããããŸããã ãã®ãããåãã¬ãŒãã³ã°ïŒã転éåŠç¿ããšãåŒã°ããŸãïŒã¯ãå®å šã«ãã¬ãŒãã³ã°ããããã¥ãŒã©ã«ãããã¯ãŒã¯ãååŸãããããåãã¬ãŒãã³ã°ããŠãäœæ¥äžã®ç¹å®ã®ã¿ã¹ã¯ãããé©åã«å®äºããããšãç®çãšããŠããŸãã ããã«ã¯éåžžãã¹ã¿ãã¯ããã¬ã€ã€ãŒå šäœãåé€ããããå¿ èŠãªãªããžã§ã¯ãïŒãããããã°ãªã©ïŒãããæ£ç¢ºã«èªèããããã«ããã¥ãŒã©ã«ãããã¯ãŒã¯ã®åã ã®ã¿ã€ãã®ãªããžã§ã¯ãïŒæ€ åãªã©ïŒãåºå¥ããæ©èœããã£ããæ¶å»ããããšã«ãã£ãŠãããçšåºŠã®ãå¿åŽãã䌎ããŸãã
ãã¥ãŒã©ã«ãããã¯ãŒã¯ïŒãã®å Žåã¯InceptionïŒã¯ã1400äžã®ImageNetã€ã¡ãŒãžã§ãã¬ãŒãã³ã°ã§ããŸããããããããã°ã®èªèãåçã«æ¹åããããã«ããããããã°ã®æ°åæã®åçã§ãããåãã¬ãŒãã³ã°ããããšãã§ããŸããã
ãã¬ãŒãã³ã°ã転éããããšã®å€§ããªå©ç¹ã¯ããã¥ãŒã©ã«ãããã¯ãŒã¯ãæåãããã¬ãŒãã³ã°ããå Žåãããã¯ããã«éããå°ãªãããŒã¿ã§ããè¯ãçµæãåŸãããããšã§ãã è€æ°ã®GPUã§å®å šãªãã¬ãŒãã³ã°ãè¡ãã«ã¯æ°ãæããããæ°çŸäžæã®ç»åãå¿ èŠã«ãªããŸãããåãã¬ãŒãã³ã°ã¯ã©ãããããã§æ°åæã®åçã䜿ã£ãŠæ°æéã§è¡ãããšãã§ããŸãã
ç§ãã¡ãçŽé¢ããæãå°é£ãªã¿ã¹ã¯ã®1ã€ã¯ããããããã°ãèæ ®ããã¹ããã®ãšããã§ãªããã®ã®æ£ç¢ºãªå®çŸ©ã§ããã ããããããã°ãã®å®çŸ©ã¯é©ãã»ã©è€éã§ããããšãå€æããŸããïŒã«ãããœãŒã»ãŒãžã¯èæ ®ãããŸããããããããªããã©ã®çš®ã§ããïŒïŒãããŠæåç解éã®å¯Ÿè±¡ãšãªããŸãã
åæ§ã«ãç§ãã¡ã®åé¡ã®ããªãŒãã³ã¯ãŒã«ããã®æ§è³ªã¯ãã»ãŒç¡éã®éã®å ¥åã«å¯ŸåŠããªããã°ãªããªãããšãæå³ããŸããã äžéšã®ã³ã³ãã¥ãŒã¿ãŒããžã§ã³ã¿ã¹ã¯ã¯ãæ¯èŒçéãããå ¥åããŒã¿ã»ããïŒããšãã°ãæ©æ¢°çæ¬ é¥ã®ãããŸãã¯æ¬ é¥ã®ãªããã«ãã®Xç·ïŒãåŠçããŸãããã»ã«ãã£ãŒãèªç¶ç»åãããŸããŸãªæçãåŠçããããã®ã¢ããªã±ãŒã·ã§ã³ãæºåããå¿ èŠããããŸããã
ãã®ã¢ãããŒãã¯ææã§ãããçµæã«ããçšåºŠã®æ¹åãããããããšèšãã ãã§ååã§ãããããã€ãã®çç±ã§äžæ¢ããªããã°ãªããŸããã§ããã
ãŸããç§ãã¡ã®ã¿ã¹ã¯ã®æ§è³ªã¯ããã¬ãŒãã³ã°çšã®ããŒã¿ã®åŒ·ãäžåè¡¡ãæå³ããŸããããããããã°èªäœããããããããã°ã§ã¯ãªããã®ã®äŸããããããããŸãã å®éã«ã¯ããããããã°ã®3ã€ã®ç»åãšãããããã°ã§ã¯ãªã97ã®ç»åã§ã¢ã«ãŽãªãºã ããã¬ãŒãã³ã°ããæåã®0ïŒ ãš2çªç®ã®100ïŒ ãèªèãããšãåç®äžã®ç²ŸåºŠã¯97ïŒ ã«ãªããŸãïŒ ãã®åé¡ã¯ãTensorFlowåãã¬ãŒãã³ã°ããŒã«ã«ãã£ãŠçŽæ¥å¯ŸåŠããããæ¬è³ªçã«ãŒããããã£ãŒãã©ãŒãã³ã°ã¢ãã«ã確ç«ããéã¿ãã€ã³ããŒãããããå¶åŸ¡ãããæ¹æ³ã§ãã¬ãŒãã³ã°ãå®è¡ããããã«åŒ·å¶ããŸãã
ãã®æç¹ã§ãç§ãã¡ã¯åŒŸäžžãåã¿ãTeraFlowã®äžã«åªãã䜿ããããæœè±¡åãæäŸãããã£ãŒãã©ãŒãã³ã°ã©ã€ãã©ãªã§ããKerasã§äœæ¥ãéå§ããããšã決å®ããŸãããç§ãã¡ã®ãããªäžåè¡¡ãªããŒã¿ã»ããã§ã
ãã®æ©äŒãå©çšããŠãVGGãªã©ã®ä»ã®ãã¥ãŒã©ã«ã¢ãŒããã¯ãã£ããã¹ãããŸãããã1ã€ã®åé¡ãæ®ã£ãŠããŸããã ãããã®ã©ãããiPhoneã§å¿«é©ãªäœæ¥ãæäŸããŸããã§ããã ã¡ã¢ãªãæ¶è²»ããããŠã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããçµæãçæããã®ã«æ倧10ç§ãããããšããããŸããããããã¯UXã®èŠ³ç¹ããã¯çæ³çã§ã¯ãããŸããã ãã®åé¡ã解決ããããã«å€ãã®ããšãè©Šã¿ãŸããããæçµçã«ããããã®ã¢ãŒããã¯ãã£ã¯å€§ããããŠã¢ãã€ã«ããã€ã¹ã§åäœã§ããªãããšãèªèããŸããã
V2ïŒKerasããã³SqueezeNet
SqueezeNet察AlexNetãã³ã³ãã¥ãŒã¿ãŒããžã§ã³ã¢ãŒããã¯ãã£ã®ç¥ç¶ã åºå žïŒ SqueezeNetã®ç§åŠèšäº
çŸåšã®ç¶æ³ã説æããããã«ãããã¯ãããžã§ã¯ãéçºã®æŽå²ã®çŽååã§ãã ãã®æç¹ã§ãUIã¯90ïŒ ä»¥äžã®æºåãæŽã£ãŠãããå€æŽããå¿ èŠã¯ã»ãšãã©ãããŸããã§ããã ãããä»ã§ã¯ããã¥ãŒã©ã«ãããã¯ãŒã¯ã®æºåãæ倧ã§ã20ïŒ ã§ããããšãæããã§ãã åé¡ãšåªããããŒã¿ã»ãããååã«ç解ããŠããŸããããå®æãããã¥ãŒã©ã«ã¢ãŒããã¯ãã£ã®ã³ãŒãã¯0è¡ããæžãããŠããããæºåž¯é»è©±ã§ç¢ºå®ã«åäœããã³ãŒãã¯ãããŸããã§ããã粟床ãå€§å¹ ã«åäžããŸãã
ç§ãã¡ã®çŽåã®åé¡ã¯åçŽã§ããïŒInceptionãšVGGã倧ããããå Žåãåèšç·Žã§ããããåçŽãªãäºåã«èšç·Žããããã¥ãŒã©ã«ãããã¯ãŒã¯ã¯ãããŸããïŒ ãã€ãæé«ã®ãžã§ã¬ããŒã»ãã¯ãŒãããã®ãã³ãïŒãã®ç·ã¯äžçã©ãã«ããŸãããïŒïŒXceptionãEnetãããã³SqueezeNetãè©ŠããŸããã çµã¿èŸŒã¿ã®ãã£ãŒãã©ãŒãã³ã°ã·ã¹ãã ã®ãœãªã¥ãŒã·ã§ã³ãšããŠãã®ã·ã¹ãã ãæ瀺çã«é 眮ããGitHubã§äºåã«ãã¬ãŒãã³ã°ãããKerasã¢ãã«ãå©çšã§ããããšãããéåžžã«è¿ éã«SqueezeNetãéžæããŸãã ïŒãªãŒãã³ãœãŒã¹ïŒã
ããã§ãéãã¯ã©ã®ãããã§ããïŒ VGGã®ãããªã¢ãŒããã¯ãã£ã¯ãçŽ1å3800äžã®ãã©ã¡ãŒã¿ãŒïŒåºæ¬çã«ãã¥ãŒãã³ãšãããã®éã®å€ãã¢ãã«åããããã«å¿ èŠãªæ°ã®æ°ïŒã䜿çšããŸãã ã€ã³ã»ãã·ã§ã³ã¯å€§å¹ ãªé²æ©ã瀺ããŠãããå¿ èŠãªãã©ã¡ãŒã¿ãŒã¯ããã2300äžã§ãã æ¯èŒã®ããã«ãSqueezeNetã¯125äžåã®ãã©ã¡ãŒã¿ãŒã§åäœããŸãã
ããã«ã¯2ã€ã®å©ç¹ããããŸãã
- ãã¬ãŒãã³ã°æ®µéã§ã¯ãããå°ããªãã¥ãŒã©ã«ãããã¯ãŒã¯ãã¯ããã«éããã¬ãŒãã³ã°ãããŸãã ã¡ã¢ãªå
ã«é
眮ããããã®ãã©ã¡ãŒã¿ãŒãå°ãªãããããã¬ãŒãã³ã°ãå°ãè¯ã䞊ååïŒå€§ããªãã±ãããµã€ãºïŒã§ãããã¥ãŒã©ã«ãããã¯ãŒã¯ã¯ããéãåæããŸãïŒã€ãŸããçæ³çãªæ°åŠé¢æ°ã«è¿ã¥ããŸãïŒã
- æ¬çªç°å¢ã§ã¯ãã¢ãã«ã¯ã¯ããã«å°ãããã¯ããã«é«éã§ãã SqueezeNetã¯10 MBæªæºã®RAMãæ¶è²»ããŸãããInceptionã®ãããªã¢ãŒããã¯ãã£ã¯100 MB以äžãå¿ èŠãšããŸãã éãã¯éåžžã«å€§ãããã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšå¯èœãªã¡ã¢ãªã100 MBæªæºã®ã¢ãã€ã«ããã€ã¹ã§äœæ¥ããå Žåã¯ç¹ã«éèŠã§ãã ãŸããå°ããªãã¥ãŒã©ã«ãããã¯ãŒã¯ã¯ã倧ããªãã¥ãŒã©ã«ãããã¯ãŒã¯ãããã¯ããã«é«éã«æçµçµæãèšç®ããŸãã
ãã¡ãããç§ã¯äœããç ç²ã«ããªããã°ãªããŸããã§ããã
- å°ãããã¥ãŒã©ã«ãããã¯ãŒã¯ã¢ãŒããã¯ãã£ã§ã¯å©çšå¯èœãªãã¡ã¢ãªããå°ãªããªããŸããè€éãªç¶æ³ïŒ20,000åã®ç°ãªããªããžã§ã¯ãã®èªèãªã©ïŒããçãã¯ã©ã¹ã®ã¿ã¹ã¯ã§ã®è€éãªç¶æ³ã®åŠçïŒããšãã°ããã¥ãŒãšãŒã¯ã®ãããããã°ã®éããç解ããå ŽåïŒã¹ã¿ã€ã«ãšã·ã«ãŽã¹ã¿ã€ã«ïŒã ãã®çµæãéåžžãå°èŠæš¡ãªãã¥ãŒã©ã«ãããã¯ãŒã¯ã¯ã倧èŠæš¡ãªãããã¯ãŒã¯ããã粟床ãäœããªããŸãã 20,000åã®ImageNetãªããžã§ã¯ããèªèããããšãããšãSqueezeNetã¯58ïŒ
ã®èªè粟床ãã瀺ããŸããããVGGã®èªèçã¯72ïŒ
ã§ãã
- å°ããªãã¥ãŒã©ã«ãããã¯ãŒã¯ã¯åèšç·Žãå°é£ã§ãã æè¡çã«ã¯ãInceptionãšVGGã®å Žåãšåãã¢ãããŒãã䜿çšããŠSqueezeNetã«äœãããå¿ããããããããåèšç·ŽããŠãããããã°ãšéãããããã°ãåºå¥ããããšã劚ãããã®ã¯äœããããŸããã å®éã«ã¯ãåŠç¿ã®ããŒã¹ã調æŽããã®ãé£ãããçµæã¯åžžã«SqueezeNetããŒãããåŠç¿ãããããæºè¶³ã®ãããã®ã§ã¯ãããŸããã§ããã ããã¯ãŸããç§ãã¡ã®äœ¿åœã®ãéãããäžçãã®æ§è³ªã«ãããã®ãããããŸããã
- çè«çã«ã¯ãå°èŠæš¡ãªãã¥ãŒã©ã«ãããã¯ãŒã¯ãåãã¬ãŒãã³ã°ããå¿ èŠã¯ã»ãšãã©ãããŸããããããã€ãã®ãå°ããªãã¢ãŒããã¯ãã£ã§ããã«ééããŸããã ãªãŒããŒãã£ãããšã¯ããããã¯ãŒã¯ã®å°éæ§ãé«ãããããšãæå³ããäžè¬çã«ãããããã°ãèªèããããšãåŠç¿ãã代ããã«ããã¬ãŒãã³ã°ãããããããã°ã®ç¹å®ã®åçã®ã¿ãæ£ç¢ºã«èªèããããšãåŠç¿ããŸãã 人éã®äŸãã¯ããããããã°ãéåžžã¯ãã³ã®ãœãŒã»ãŒãžã§ãå Žåã«ãã£ãŠã¯èª¿å³æãªã©ã§æ§æãããŠããããšãæœè±¡åããã«ç€ºããããããã°ã®ç¹å®ã®åçãæãåºãããšã§ãããããããã°ã®ãŸã£ããæ°ããã€ã¡ãŒãžã衚瀺ãããå Žåããã¯ãããããã°ã§ã¯ãªããšèšãåŸåããããŸãã éåžžãå°èŠæš¡ãããã¯ãŒã¯ã«ã¯ãã¡ã¢ãªããå°ãªããšããäºå®ããããããç¹æ®åããã®ãé£ããã®ã¯å®¹æã«ç解ã§ããŸãã ããããå Žåã«ãã£ãŠã¯ãå°èŠæš¡ãããã¯ãŒã¯ã®ç²ŸåºŠãæ倧99ïŒ ã«è·³ãäžãããçªç¶ãã¬ãŒãã³ã°æ®µéã§ã¯èŠãããªãã£ãç»åã®èªèãåæ¢ããŸããã å ¥åã«ã»ãã©ã³ãã ã¹ãã¬ãã/ãã£ã¹ããŒã·ã§ã³ç»åãè¿œå ãã1000åã®åç»åã§1.00åã§ã¯ãªããç¹å®ã®æ¹æ³ã§åŠç¿ããããšã§1000åã®ç»åã®ããªãšãŒã·ã§ã³ãå€æŽããŠããã®1000åã®ç»åãå ·äœçã«èšæ¶ããå¯èœæ§ãæžãããšãéåžžãå¹æã¯æ¡åŒµããŒã¿ãè¿œå ãããšæ¶ããŸããã 代ããã«ããããããã°ïŒãã³ããœãŒã»ãŒãžã調å³æãªã©ïŒã®ãå åããèªèãããã¬ãŒãã³ã°ã»ããå ã®ç¹å®ã®ç»åã®ç¹å®ã®ãã¯ã»ã«å€ã«é床ã«çµã³ä»ããªãã»ã©æè»æ§ãšæ±çšæ§ãç¶æããå¿ èŠããããŸãã
Kerasããã°æ¡åŒµäŸ
ãã®æç¹ã§ããã¥ãŒã©ã«ãããã¯ãŒã¯ã®ã¢ãŒããã¯ãã£ã調æŽããå®éšãéå§ããŸããã ç¹ã«ããããæ£èŠåã®äœ¿çšãéå§ããããŸããŸãªã¢ã¯ãã£ããŒã·ã§ã³æ©èœãè©ŠããŸããã
- ãããæ£èŠåã¯ãã¹ã¿ãã¯å
ã®ããŸããŸãªæ®µéã§å€ããå¹³æ»åãããããšã§ããã¥ãŒã©ã«ãããã¯ãŒã¯ã®åŠç¿ãé«éåããã®ã«åœ¹ç«ã¡ãŸãã ãªããããæ©èœããã®ãã¯ãŸã æ確ã§ã¯ãããŸãããããã®å¹æã¯ããç¥ãããŠããŸãïŒãã¥ãŒã©ã«ãããã¯ãŒã¯ã®åæãã¯ããã«éããªããŸãã
- ã¢ã¯ãã£ããŒã·ã§ã³é¢æ°ã¯ãããã¥ãŒãã³ããã¢ã¯ãã£ããŒããããã©ããã決å®ããå éšã®æ°åŠé¢æ°ã§ãã å€ãã®ç§åŠèšäºã§ReLUïŒRectified Linear UnitïŒã«ã€ããŠèšåãããŠããŸãããELUã§ããè¯ãçµæãåŸãããŸããã
ãããæ£èŠåãšELUãSqueezeNetã«è¿œå ããåŸããŒãããåŠç¿ãããšãã«90ïŒ ãè¶ ãã粟床ãéæãããã¥ãŒã©ã«ãããã¯ãŒã¯ããã¬ãŒãã³ã°ã§ããŸããããéåžžã«è匱ã§ãããã€ãŸããåããã¥ãŒã©ã«ãããã¯ãŒã¯ã¯ãå Žåã«ãã£ãŠã¯åãã¬ãŒãã³ã°ãŸãã¯åŠç¿äžè¶³ã«ãªãå¯èœæ§ããããŸããå®éã®æ¡ä»¶ã§ã®ãã¹ãã«çŽé¢ããŸããã ããŒã¿ã»ããã«è¿œå ã®äŸãè¿œå ããããŒã¿æ¡åŒµã䜿çšããå®éšãè¡ã£ãŠããéåžžã®çµæã瀺ããããã¯ãŒã¯ãã»ããã¢ããããã®ã«åœ¹ç«ã¡ãŸããã§ããã
ãã®ããããã®æ®µéã¯ææã§ãããåããŠiPhoneã§å®å šã«æ©èœãã1ç§æªæºã§çµæãèšç®ããæ©èœçãªã¢ããªã±ãŒã·ã§ã³ãåããŠæäŸããŸããããæçµçã«4çªç®ã®æçµã¢ãŒããã¯ãã£ã«ç§»è¡ããŸããã
3. DeepDogã¢ãŒããã¯ãã£
from keras.applications.imagenet_utils import _obtain_input_shape from keras import backend as K from keras.layers import Input, Convolution2D, SeparableConvolution2D, \ GlobalAveragePooling2d \ Dense, Activation, BatchNormalization from keras.models import Model from keras.engine.topology import get_source_inputs from keras.utils import get_file from keras.utils import layer_utils def DeepDog(input_tensor=None, input_shape=None, alpha=1, classes=1000): input_shape = _obtain_input_shape(input_shape, default_size=224, min_size=48, data_format=K.image_data_format(), include_top=True) if input_tensor is None: img_input = Input(shape=input_shape) else: if not K.is_keras_tensor(input_tensor): img_input = Input(tensor=input_tensor, shape=input_shape) else: img_input = input_tensor x = Convolution2D(int(32*alpha), (3, 3), strides=(2, 2), padding='same')(img_input) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(32*alpha), (3, 3), strides=(1, 1), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(64 * alpha), (3, 3), strides=(2, 2), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(128 * alpha), (3, 3), strides=(1, 1), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(128 * alpha), (3, 3), strides=(2, 2), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(256 * alpha), (3, 3), strides=(1, 1), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(256 * alpha), (3, 3), strides=(2, 2), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) for _ in range(5): x = SeparableConvolution2D(int(512 * alpha), (3, 3), strides=(1, 1), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(512 * alpha), (3, 3), strides=(2, 2), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(1024 * alpha), (3, 3), strides=(1, 1), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = GlobalAveragePooling2D()(x) out = Dense(1, activation='sigmoid')(x) if input_tensor is not None: inputs = get_source_inputs(input_tensor) else: inputs = img_input model = Model(inputs, out, name='deepdog') return model
èšèš
æçµçãªã¢ãŒããã¯ãã£ã¯ã2017幎4æ17æ¥ã«Google ãMobileNetsã§å ¬éããç§åŠèšäºã®åœ±é¿ã倧ããåããŠããŸãã ããã¯ãããããç§ãã¡ã®ã¿ã¹ã¯ã«ã¯åçŽãããSqueezeNetãšãã¢ãã€ã«ã§ã®äœ¿çšã«ã¯äžå¿ èŠã«éãéè² è·ã®Inceptionããã³VGGã¢ãŒããã¯ãã£ãšã®éã§æå©ãªäœçœ®ãå ããããšãæå³ããŸãã ãã®èšäºã§ã¯ããã¥ãŒã©ã«ãããã¯ãŒã¯ã®ãµã€ãºãšè€éãã調æŽããããã€ãã®å¯èœæ§ãç¹ã«ã¡ã¢ãª/ CPUæ¶è²»ãšç²ŸåºŠã®ãã©ã³ã¹ãéžæããå¯èœæ§ã«ã€ããŠèª¬æããŸãã
ç· ãåãã®1ãæåã«ãç§åŠèšäºã®çµæãåçŸããããšããŸããã èšäºã®å ¬éåŸ1æ¥ä»¥å ã«Kerasã®å®è£ ã GitHubã§æ¢ã«å ¬éãããã®ã¯ãã€ã¹ã¿ã³ããŒã«å·¥ç§å€§åŠã®åŠçã§ããRefik Kan Mullyã®ãããã§ããããã¯ãKeras SqueezeNetã®èŠäºãªå®è£ ãè¡ã£ããšãã«ãã§ã«äœ¿çšããææã§ãã ãã£ãŒãã©ãŒãã³ã°ã³ãã¥ããã£ã®èŠæš¡ãè³æ ŒããªãŒãã³æ§ãããã³REFICãªã©ã®æèœã®ååš-ãããããã£ãŒãã©ãŒãã³ã°ãçŸä»£ã®ã¢ããªã±ãŒã·ã§ã³ã§ã®äœ¿çšã«é©ãããã®ã«ããŠããã ãã§ãªãããã®æ¥çã§ã®ä»äºãä»ã®æè¡æ¥çãããåºæ¿çã«ããŠããŸãç§ã¯èªåã®äººçã«é¢äžããŠããŸããã
æçµçãªã¢ãŒããã¯ãã£ã§ã¯ãå ã®MobileNetsã¢ãŒããã¯ãã£ããã³äžè¬ã«åãå ¥ããããŠããã«ãŒã«ãããç¹ã«æ¬¡ã®ããã«å€§å¹ ã«ç§»è¡ããŸããã
- XCeptionã«é¢ããç§åŠèšäºïŒæ·±ãã®ç³ã¿èŸŒã¿ã«ã€ããŠè©³ãã説æããŠããïŒã¯ãå®éã«ã¯ããããã®ã¿ã€ãã®ã¢ãŒããã¯ãã£ã®ç²ŸåºŠã®äœäžã«ã€ãªããããšã瀺åããŠããããïŒRedditã矩åçã«è¿°ã¹ãŠããããã«ïŒ QuickNetã«é¢ããç§åŠèšäºã®èè ïŒã ãŸãããã®æ¹æ³ã¯ããã¥ãŒã©ã«ãããã¯ãŒã¯ã®ãµã€ãºã®åæžã«ã圹ç«ã¡ãŸãã
- ReLUã®ä»£ããã«ELUã䜿çšããŸããã SqueezeNetã®å®éšãšåæ§ã«ãããã§ELUã¯ReLUãšæ¯èŒããŠåæé床ãšæçµçãªç²ŸåºŠãåäžããŠããŸãã
- PELUã¯äœ¿çšããŸããã§ããã ææã§ã¯ãããŸããããã®ã¢ã¯ãã£ããŒã·ã§ã³é¢æ°ã¯ãã©ã®ããã«äœ¿çšããŠããã€ããªç¶æ ã«ãªãåŸåããããŸãã åŸã ã«æ¹åãã代ããã«ããã¥ãŒã©ã«ãããã¯ãŒã¯ã®ç²ŸåºŠã¯ããã±ããããšã«çŽ0ïŒ ããçŽ100ïŒ ã®éã§å€åããŸããã ãããçºçããçç±ã¯æããã§ã¯ãããŸãããããã¯ãäœããã®å®è£ ãšã©ãŒãŸãã¯ãŠãŒã¶ãŒãšã©ãŒãåå ã§ããå¯èœæ§ããããŸãã ç»åã®å¹ ãšé«ãã®è»žãããŒãžããŠããç¶æ³ã¯å€ãããŸããã§ããã
- SELUã¯äœ¿çšããŸããã§ããã iOSãšAndroidã®ããŒãžã§ã³ã®ãªãªãŒã¹éã®å°èŠæš¡ãªèª¿æ»ã§ã¯ãPELUãšéåžžã«ãã䌌ãçµæã瀺ãããŸããã SELUãåç¬ã§æŽ»æ§åæ©èœã®ç¹å¹è¬ãšããŠåç¬ã§äœ¿çšããããšã¯ã§ãããç§åŠèšäºã®ã¿ã€ãã«ã§ç€ºãããŠããããã«ãçãå®çŸ©ãããSNNã¢ãŒããã¯ãã£ã®äžéšãšããŠäœ¿çšããå¿ èŠããããšèããããŸãã
- ELUãšå ±ã«ãããæ£èŠåãåŒãç¶ã䜿çšããŸããã ããããªãã·ã§ã³ã§ããããšã瀺ãå€ãã®ææšããããŸããããããæ£èŠåãªãã§è¡ã£ããã¹ãŠã®å®éšã§ããã¥ãŒã©ã«ãããã¯ãŒã¯ã¯åæãå®å šã«æåŠããŸããã ãã®çç±ã¯ãã¢ãŒããã¯ãã£ã®ãµã€ãºãå°ããããšã§ãã
- ã¢ã¯ãã£ããŒã·ã§ã³ã®åã«ãããæ£èŠåãé©çšããŸããã ããã¯æè¿ããã€ãã®è«äºã®äž»é¡ã§ãããåæã®æŽ»æ§ååŸã®BNã®é 眮ã®å®éšã§ã¯ãåæããããŸããã§ããã
- ãã¥ãŒã©ã«ãããã¯ãŒã¯ãæé©åããããã«ã 埪ç°åŠç¿çãšïŒã¯ã©ã¹ã¡ãŒãïŒBrad Kenstlerã®åªããKeraså®è£ ã䜿çšããŸããã CLRã¯ããã¥ãŒã©ã«ãããã¯ãŒã¯ã®æé©ãªåŠç¿ããŒã¹ãæšæž¬ããããšããã²ãŒã ããã¬ã€ããŸãã ããã«éèŠãªããšã¯ãåŠç¿ã®ããŒã¹ãäžãããäžãããããããšã§ãCLRã¯èªè粟床ãéæããã®ã«åœ¹ç«ã¡ãŸããããã¯ãç§ãã¡ã®çµéšã§ã¯ãåŸæ¥ã®ãªããã£ãã€ã¶ãŒãããé«ãã§ãã ãããã®äž¡æ¹ã®çç±ãããå°æ¥ã®ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®ãã¬ãŒãã³ã°ã«CLR以å€ã®äœãã䜿çšããçç±ãç解ããããšã¯ã§ããŸããã
- ã¿ã¹ã¯ã§ã¯ãå€ã調æŽããå¿ èŠã¯ãããŸããã§ãã ãŸã㯠MobileNetsã¢ãŒããã¯ãã£ããã ç§ãã¡ã®ã¢ãã«ã¯ã以äžã®å Žåã«ã¿ã¹ã¯ã«ååã«å°ãã ããããŠèšç®ã¯ååã«é«éã§ã ããããã£ãŠãæ倧ã®ç²ŸåºŠãéæããããšã«éäžããããšãéžæããŸããã ãã ãããããã®å€æŽã¯ãå€ãæºåž¯é»è©±ãŸãã¯çµã¿èŸŒã¿ãã©ãããã©ãŒã ã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããšããå Žåã«åœ¹ç«ã¡ãŸãã
ããã§ã¯ããã®ã¹ã¿ãã¯ã¯æ£ç¢ºã«ã©ã®ããã«æ©èœããŸããïŒ ãã£ãŒãã©ãŒãã³ã°ã¯ãã©ãã¯ããã¯ã¹ã®è©å€ãæªãããšãå€ããå€ãã®ã³ã³ããŒãã³ãã¯ç¢ºãã«äžå¯è§£ã§ããå¯èœæ§ããããŸãããç§ãã¡ã®ãã¥ãŒã©ã«ãããã¯ãŒã¯ã¯ãã°ãã°ããããã®ããžãã¯ããªãã¯ã®æ©èœã«é¢ããæ å ±ã衚瀺ããŸãã ãã®ã¹ã¿ãã¯ããåã ã®ã¬ã€ã€ãŒãååŸããç¹å®ã®å ¥åç»åã§ã©ã®ããã«ã¢ã¯ãã£ãåããããã確èªã§ããŸããããã«ãããåã¬ã€ã€ãŒããœãŒã»ãŒãžãããŒã«ããŸãã¯ãããããã°ã®ä»ã®æãé¡èãªå åãèªèããèœåãããããŸãã
ãã¬ãŒãã³ã°
ãœãŒã¹ããŒã¿ã®å質ãæãéèŠã§ããã ãã¥ãŒã©ã«ãããã¯ãŒã¯ã¯åæããŒã¿ãšåçšåºŠã®å質ã§ããããã¬ãŒãã³ã°ã»ããã®å質ãåäžãããããšã¯ããããããã®ãããžã§ã¯ãã«åãçµãã§ããéãã»ãšãã©ã®æéãè²»ããã3ã€ã®ããšã®1ã€ã§ãã ãããæ¹åããããã«ã次ã®éèŠãªã¹ããããèžãã ã
- ããå€ãã®ç»åãšããå€æ§ãªç»åïŒé«ã/å¹ ãèæ¯ãç §ææ¡ä»¶ãæåçç¹åŸŽãé è¿æãæ§å³ãªã©ïŒãæ€çŽ¢ããŸãã
- å¶äœäžã«äºæ³ãããåçã«ç»åã¿ã€ããäžèŽãããŸãã ç§ãã¡ã¯ã人ã ãäž»ã«æ¬ç©ã®ãããããã°ãä»ã®é£ã¹ç©ãæ®åœ±ããããããããæ¹æ³ã§ã©ã³ãã ãªãªããžã§ã¯ãã䜿ã£ãŠã·ã¹ãã ã®è£ãããããšãããšä»®å®ãããããããŒã¿ã»ããã¯ãã®ä»®å®ãåæ ããŠããŸããã
- åæ§ã®ãªããžã§ã¯ãã®äŸãã§ããã ãå€ãæããŠãã ããã äžéšã®æçã¯ä»ã®æçããããããããã°ã«äŒŒãŠããŸãïŒããšãã°ããã³ããŒã¬ãŒããµã³ãã€ããããŸãã¯è£žã®ãããããã°ã®å Žåããããã¯è¥ããã³ãžã³ãŸãã¯èª¿çæžã¿ã®ãã§ãªãŒãããã§ãïŒã ããŒã¿ã»ããã«ã¯ãããåæ ãããŠããŸãã
- äºæ³ãããæªã¿ïŒæºåž¯é»è©±ã®ã»ãšãã©ã®åçã¯ãããžã¿ã«SLRãŸãã¯çæ³çãªç §ææ¡ä»¶ã§æ®åœ±ããããå¹³åçãªãåçãããæªåããŸãã ã¢ãã€ã«åçã¯éãããã€ãºãå€ããæãã«æ®åœ±ãããŠããŸãã ç©æ¥µçãªããŒã¿å¢åŒ·ã¯ããã®åé¡ã解決ããããã®éèŠãªããŒã«ã§ããã
- ããã«ããŠãŒã¶ãŒã¯å®éã®ãããããã°ã«ã¢ã¯ã»ã¹ã§ããªãå¯èœæ§ããããããGoogleæ€çŽ¢çµæãããããããã°ãæ®åœ±ããããšãããããç¹æ®ãªæªã¿ïŒè§åºŠã®ãããåçãæãã«æ®åœ±ãããå Žåãç»é¢ããã®ãã©ãã·ã¥ã®åå°ãã¢ã¢ã¬å¹æïŒã¢ãã€ã«ã«ã¡ã©ã§æ®åœ±ããLCDã¹ã¯ãªãŒã³ïŒã ãããã®ç¹å®ã®åå°ã¯ã ç³ã¿èŸŒã¿ãã¥ãŒã©ã«ãããã¯ãŒã¯ããã®ãã€ãºæµæã®ïŒäžåšïŒã«é¢ããæè¿å ¬éãããç§åŠè«æã§èª¬æãããŠããããã«ããã¥ãŒã©ã«ãããã¯ãŒã¯ã欺ãã»ãŒäžæè°ãªèœåãåããŠããŸãã ã Kerasã§ãã£ã³ãã«ã·ããã䜿çšãããšããããã®åé¡ã®ã»ãšãã©ã解決ãããŸããã
ã¢ã¢ã¬ãšãã©ãã·ã¥ã«ããæªã¿ã®äŸã å ã®åçïŒ ãŠã£ãã¡ãã£ã¢ã³ã¢ã³ãº
- äžéšã®å¢çã±ãŒã¹ã¯ãã£ããããã®ãå°é£ã§ããã ããšãã°ãçé¢åå·®ïŒãœãããã©ãŒã«ã¹ïŒãŸãã¯èæ¯ã®å€æ°ã®ãŒããããããããããã°ã®ç»åã¯ããã¥ãŒã©ã«ãããã¯ãŒã¯ã誀解ãããããšããããŸãã aïŒãœãããã©ãŒã«ã¹ã®ãããããããã°ã®åçãããŸãå€ããªãããïŒãããèãããšãè ¹ã空ããŠããŸãïŒãbïŒãã¥ãŒã©ã«ãããã¯ãŒã¯ã®å®¹éããœãããã©ãŒã«ã¹ã«è²»ããã®ã¯å±éºã§ããå®éã«ã¯ã»ãšãã©ã®åçã¯ã¢ãã€ã«ã®ãã®ã§ããé»è©±ã«ã¯ãã®ãããªãµã€ã³ã¯ãããŸããã çµå±ããã®åé¡ã¯æŠããŠæªè§£æ±ºã®ãŸãŸã«ããŠããããšã«ããŸããã
æçµçãªåœ¢åŒã§ã¯ãããŒã¿ã»ããã¯15äžæã®ç»åã§æ§æããããã®ãã¡ãããããã°ã¯3,000æã®ã¿ã§ããã ã¢ã³ãã©ã³ã¹ã®49ïŒ1ã®æ¯çã¯ãKeras 49ïŒ1ã®ãããããã°ã«æå©ãªã¯ã©ã¹ã®ééèšå®ã§æå®ãããŸããã æ®ãã®147,000æã®åçã®ã»ãšãã©ã¯ç°ãªã£ãæçã§ãããããã3000åã ãããã¥ãŒã©ã«ãããã¯ãŒã¯ãäžè¬åãããè¯ããããããããã°ã«èµ€ãæãçãç·æ§ã®ç»åãæ®ããªãããã«ããããã®é£ã¹ç©ã§ã¯ãããŸããã§ããã
ããŒã¿æ¡åŒµã«ãŒã«ã¯æ¬¡ã®ãšããã§ãã
- æºåž¯é»è©±ã®åãã«æ³šæãæããªãããã«ã¢ããªã±ãŒã·ã§ã³ãããã°ã©ã ãããããå転ã±135°以å ã§é©çšããŸãããããã¯å¹³åãããã¯ããã«åŒ·åã§ãã
- é«ããšå¹ ã20ïŒ æªãã§ããŸãã
- 30ïŒ ã®ç¯å²ã®å²ç€Œã
- 10ïŒ ã®ç¯å²ã§ãºãŒã ããŸãã
- ãã£ãã«ã¯20ïŒ ã·ããããŸãã
- ãã¥ãŒã©ã«ãããã¯ãŒã¯ãäžè¬åãæ¯æŽããã©ã³ãã ãªæ°Žå¹³å転ã
ãããã®ãã©ã¡ãŒã¿ãŒã¯ãæ£ç¢ºãªå®éšãšã¯å¯Ÿç §çã«ãå®éšãšå®éã®æ¡ä»¶ã§ã®ã¢ããªã±ãŒã·ã§ã³ã®äœ¿çšæ¹æ³ã«é¢ããç解ã«åºã¥ããŠãçŽæçã«å°ãåºãããŸãã
ããŒã¿åŠçãã€ãã©ã€ã³ã®æçµæ®µéã§ã¯ããããªãã¯ãããªã²ã¹ã®Kerasã«ãã«ãããã»ã¹ã€ã¡ãŒãžãžã§ãã¬ãŒã¿ãŒã䜿çšããŸããã Kerasã«ã¯ãã«ãã¹ã¬ãããšãã«ãããã»ã¹ã®çµã¿èŸŒã¿å®è£ ããããŸãããPatrickã©ã€ãã©ãªã¯ãçºèŠããæéããªãã£ããšããçç±ã§ãå®éšã§äžè²«ããŠé«éã«åäœããŸããã ãã®ã©ã€ãã©ãªã«ãããåŠç¿æéã3åã®1ççž®ãããŸããã
ãããã¯ãŒã¯ã¯ãå€éšGPUïŒeGPUïŒãæ¥ç¶ããã2015 MacBook Proã©ããããããã€ãŸãNvidia GTX 980 TiïŒãããããä»æ¥å§ããã1080 Tiãè³Œå ¥ããïŒã§ãã¬ãŒãã³ã°ãããŸããã 128åã®ç»åã®ãã±ããã§ãã¥ãŒã©ã«ãããã¯ãŒã¯ããã¬ãŒãã³ã°ããããšãã§ããŸããã ãããã¯ãŒã¯ã¯åèš240ã®æ代ãèšç·ŽããŸããã ããã¯ã15äžæã®ç»åãã¹ãŠã240åééããããšãæå³ããŸãã çŽ80æéããããŸããã
ãã¥ãŒã©ã«ãããã¯ãŒã¯ã3段éã§ãã¬ãŒãã³ã°ããŸããã
- 第1ã¹ããŒãžã¯112æ代ïŒ8æ代ã®ã¹ããããµã€ãºã§7ãã«CLRãµã€ã¯ã«ïŒç¶ããåŠç¿çã¯0.005ãã0.03ã§ãäžè§åœ¢2ã®ã«ãŒã«ã§ïŒããã¯æ倧åŠç¿çã16æ代ããšã«ååã«ãªãããšãæå³ããŸãïŒã
- 第2ã¹ããŒãžã¯ããã«64æ代ïŒ8æ代ã®ã¹ããããµã€ãºã§4 CLRãµã€ã¯ã«ïŒç¶ç¶ããåŠç¿çã¯0.0004ãã0.0045ã§ãäžè§åœ¢ã«ãŒã«2ã§ããã
- 3çªç®ã®ã¹ããŒãžã¯ãããã«64æ代ïŒ8æ代ã®ã¹ããããµã€ãºã§4 CLRãµã€ã¯ã«ïŒç¶ç¶ããåŠç¿çã¯0.000015ãã0.0002ã§ãäžè§åœ¢2ã®èŠåããããŸãã
åŠç¿ã®ããŒã¹ã¯ãCLRç§åŠèšäºã®èè ãæšå¥šããç·åœ¢å®éšãå®æœããããšã§æ±ºå®ãããŸããããçŽæçãªããã§ããããã§ã¯ãå段éã§ã®æ倧ææšã¯ã以åã®æå°å€ã®çŽ2åã§ãããèªè粟床ãåæžããå Žåã®åŠç¿ããŒã¹ãååã«ããããã®æ¥çæšæºã«å¯Ÿå¿ããŸãåŠç¿ããã»ã¹ã¯æé·ãæ¢ããŸããã
æéãç¯çŽããããã«ãUbuntuã®äžã§Paperspace P5000ã€ã³ã¹ã¿ã³ã¹ã®ãã¬ãŒãã³ã°ã®äžéšãè²»ãããŸããã å Žåã«ãã£ãŠã¯ãããã±ãŒãžã®ãµã€ãºã2åã«ãªããå段éã§ã®æé©ãªåŠç¿çã2åã«ãªããŸããã
æºåž¯é»è©±ã§ãã¥ãŒã©ã«ãããã¯ãŒã¯ãèµ·åãã
æ¯èŒçã³ã³ãã¯ããªãã¥ãŒã©ã«ã¢ãŒããã¯ãã£ãèšèšããã¢ãã€ã«ã³ã³ããã¹ãã®ç¹å®ã®ç¶æ³ã«å¯ŸåŠããããã«ãã¬ãŒãã³ã°ãããšããŠããã¢ããªã±ãŒã·ã§ã³ãæ£ããåäœãããããã«ã¯ããŸã å€ãã®äœæ¥ãå¿ èŠã§ããã ãã¡ãŒã¹ãã¯ã©ã¹ã®ãã¥ãŒã©ã«ãããã¯ãŒã¯ã¢ãŒããã¯ãã£ãå€æŽããã«å®è¡ãããšãæ°çŸã¡ã¬ãã€ãã®RAMãããã«æ¶è²»ãããŸããããã¯ãçŸä»£ã®ã¢ãã€ã«ããã€ã¹ã§ã¯ã»ãšãã©èããããŸããã ãããã¯ãŒã¯èªäœã®æé©åã«å ããŠãç»ååŠçæ¹æ³ãšTensorFlowèªäœã®ããŒãæ¹æ³ã§ããããã¥ãŒã©ã«ãããã¯ãŒã¯ã®é床ã䜿çšãããRAMã®éãããã³é害ã®æ°ã«å€§ããªåœ±é¿ãäžããããšãããããŸããã
ããã¯ãããããããžã§ã¯ãã®æãç¥ç§çãªéšåã§ãã ãã®ãããã¯ã«é¢ããæ å ±ãèŠã€ããããšã¯éåžžã«å°é£ã§ãããããããä»æ¥ã®ã¢ãã€ã«ããã€ã¹ã§åäœãããã£ãŒãã©ãŒãã³ã°ã¢ããªã±ãŒã·ã§ã³ã®æ°ãå°ãªãããã§ãã ãã ããTensorFlowéçºããŒã ãç¹ã«Pete WardenãAndrew HarpãChad Whipkaã«ã¯ãæ¢åã®ããã¥ã¡ã³ããšè³ªåã«çããŠããã圌ãã®åæã«æè¬ããŠããŸãã
- ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®éã¿ãäžžããããšã§ããµã€ãºãçŽ25ïŒ å§çž®ã§ããŸããã å®éããã¬ãŒãã³ã°äžã«ååŸããä»»æã®ã¹ããã¯å€ã䜿çšãã代ããã«ããã®æé©åã¯æãäžè¬çãªNåã®å€ãéžæãããã¥ãŒã©ã«ãããã¯ãŒã¯ã®ãã¹ãŠã®ãã©ã¡ãŒã¿ãŒããããã®å€ã«ããŸããããã«ãããzipã¢ãŒã«ã€ãå ã®ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®ãµã€ãºãå€§å¹ ã«åæžãããŸãã ãã ããããã¯è§£ååŸã®ãµã€ãºãã¡ã¢ãªæ¶è²»ã«ã¯åœ±é¿ããŸããã ãã¥ãŒã©ã«ãããã¯ãŒã¯ã¯ãã§ã«ã¿ã¹ã¯ã«ååãªã»ã©å°ãããäžžããã¢ããªã±ãŒã·ã§ã³ã®èªè粟床ã«ã©ã®ããã«åœ±é¿ãããã調æ»ããæéããªãã£ãããããã®æ¹åãçç£ã«å®è£ ããŸããã§ããã
-
-Os
ã¹ã€ããã䜿çšããŠå®çšŒåçšã«ã³ã³ãã€ã«ããããšã«ããTensorFlowã©ã€ãã©ãªã®æé©åã - TensorFlowããäžèŠãªãã©ã°ã¡ã³ããåé€ïŒã©ã€ãã©ãªã¯æåã«ä»®æ³ãã·ã³ããµããŒãããå ç®ãä¹ç®ãé£çµãªã©ãå«ãå€æ°ã®ä»»æã®TensorFlowæäœã解éã§ããŸããåã«TensorFlowã©ã€ãã©ãªããäžèŠãªãã©ã°ã¡ã³ããåé€ããããšã§ãµã€ãºïŒããã³ã¡ã¢ãªæ¶è²»ïŒãââå€§å¹ ã«ç¯çŽã§ããŸã iOSçšã®ã³ã³ãã€ã«ã
- ä»ã®æ¹åãå¯èœã§ãã ããšãã°ãå¥ã®ãããžã§ã¯ãã§ã¯ãäœæè ã¯æ¯èŒçåçŽãªææ³ã§Androidã®ãã€ããªã1 MBåæžããããšãã§ãããããiOSã®TensorFlowã³ãŒããã¿ã¹ã¯ã«æé©åã§ããä»ã®é åããããããããŸããã
iOSã§TensorFlowã䜿çšãã代ããã«ãAppleã®çµã¿èŸŒã¿ã®ãã£ãŒãã©ãŒãã³ã°ã©ã€ãã©ãªïŒBNNSãMPSCNNãããã³ãã以éã®CoreMLïŒã調æ»ããŸããã Kerasã§ãã¥ãŒã©ã«ãããã¯ãŒã¯ãèšèšããTensorFlowã䜿çšããŠãã¬ãŒãã³ã°ãããã¹ãŠã®éã¿å€ããšã¯ã¹ããŒãããBNNSãŸãã¯MPSCNNã§ãã¥ãŒã©ã«ãããã¯ãŒã¯ãåå®è£ ïŒãŸãã¯CoreMLçµç±ã§ã€ã³ããŒãïŒããŠããã©ã¡ãŒã¿ãŒãæ°ããå®è£ ã«ããŒãããŸãã ãã ããæ倧ã®é害ã¯ãæ°ããAppleã©ã€ãã©ãªãiOS 10以éã§ã®ã¿å©çšå¯èœã§ãããå€ãããŒãžã§ã³ã®iOSããµããŒããããã£ãããšã§ãã iOS 10以éãæ®åãããããã®ãã¬ãŒã ã¯ãŒã¯ãæ¹åããããšãå°æ¥ã¢ãã€ã«ããã€ã¹ã§TensorFlowãå®è¡ããå¿ èŠããªããªãå¯èœæ§ããããŸãã
ãã®å Žã§ãã¥ãŒã©ã«ãããã¯ãŒã¯ãå±éããããšã§ã¢ããªã±ãŒã·ã§ã³ã®åäœãå€æŽãã
JavaScriptããã®å Žã§ã¢ããªã±ãŒã·ã§ã³ã«åã蟌ãã®ãçŽ æŽããããšæããªãããã®å Žã§ãã¥ãŒã©ã«ãããã¯ãŒã¯ãå®è£ ããŠã¿ãŠãã ããïŒ æ¬çªç°å¢ã§äœ¿çšããæåŸã®ããªãã¯ã¯ã CodePushã®äœ¿çšãšãã¢ããªã±ãŒã·ã§ã³ãã£ã¬ã¯ããªã§å ¬éãããåŸã®ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®æ°ããããŒãžã§ã³ã掻çºã«å°å ¥ããããã®Appleã®æ¯èŒçèªç±ãªäœ¿çšæ¡ä»¶ã§ããã ããã¯äž»ã«ãªãªãŒã¹åŸã®èªè粟床ãé«ããããã«è¡ãããŸãããçè«çã«ã¯ããã®æ¹æ³ã䜿çšããŠãAppStoreã§2åç®ã®ã¬ãã¥ãŒãè¡ãããšãªãã¢ããªã±ãŒã·ã§ã³ã®æ©èœãå€§å¹ ã«æ¹åã§ããŸãã
#import <CodePush/CodePush.h> ⊠NSString* FilePathForResourceName(NSString* name, NSString* extension) { // NSString* file_path = [[NSBundle mainBundle] pathForResource:name ofType:extension]; NSString* file_path = [[[[CodePush.bundleURL.URLByDeletingLastPathComponent URLByAppendingPathComponent:@"assets"] URLByAppendingPathComponent:name] URLByAppendingPathExtension:extension] path]; if (file_path == NULL) { LOG(FATAL) << "Couldn't find '" << [name UTF8String] << "." << [extension UTF8String] << "' in bundle."; } return file_path; } âŠ
import React, { Component } from 'react'; import { AppRegistry } from 'react-native'; import CodePush from "react-native-code-push"; import App from './App'; class nothotdog extends Component { render() { return ( <App /> ) } } require('./deepdog.pdf') const codePushOptions = { checkFrequency: CodePush.CheckFrequency.ON_APP_RESUME }; AppRegistry.registerComponent('nothotdog', () => CodePush(codePushOptions)(nothotdog));
ããã§ãªããã°äœãããŸãã
ããŸããããªãã£ããããã¹ãããæéããªãã£ããã®ããããããããŸãããä»åŸæ€èšããã¢ã€ãã¢ãããã€ã玹ä»ããŸãã
- æ¡åŒµãªãã·ã§ã³ã®ãã培åºçãªãã¥ãŒãã³ã°ã
- ã¢ããªã±ãŒã·ã§ã³ããªããžã§ã¯ãã®2ã€ä»¥äžã®ã«ããŽãªãåºå¥ãããã©ããããããããã°ãèªèããããã®æçµçãªå¶éãªã©ãæœè±¡åã¬ãã«ã®æçµæž¬å®ãå«ããæåããæåŸãŸã§ã®ç²ŸåºŠã®æž¬å®ïŒèªèéçã0ãè¶ ããå Žåãã¢ããªã±ãŒã·ã§ã³ã¯ããããããã°ããšèšãçµè«ã«éããŸããïŒ ã90ãããã©ã«ãå€ã®0.5ãšæ¯èŒïŒãéã¿ã®äžžãåŸãªã©ã
- ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŒãããã¯ã¡ã«ããºã ãçµã¿èŸŒã-ãŠãŒã¶ãŒãããã°ã©ã ã®èª€ã£ãçµæã«å€±æãè¡šæã§ããããã«ããããããŸãã¯ãã¥ãŒã©ã«ãããã¯ãŒã¯ãç©æ¥µçã«æ¹åããããã
- çŸåšã®224Ã224ãã¯ã»ã«ãããç»åèªèã«é«ã解å床ã䜿çšããŸã-å ·äœçã«ã¯ãå€ãå¢ãããŠ
UX / DXãAIãã€ã¢ã¹ãäžåãªè°·ã®å¹æ
æçµçã«ãéçºè ïŒDXïŒãšAIã¢ããªã±ãŒã·ã§ã³ã®éçºã«ãããçµã¿èŸŒã¿ãã€ã¢ã¹ãšã®ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ïŒUXïŒã®æçœã§éèŠãªåœ±é¿ã¯èšããŸã§ããããŸããã ãããããããã®ãããã¯ã¯ããããå¥ã®èšäºïŒãŸãã¯å¥ã®æ¬ïŒã«å€ããŸããããããã®3ã€ã®èŠå ãç§ãã¡ã®ä»äºã«äžããå ·äœçãªåœ±é¿ã¯æ¬¡ã®ãšããã§ãã
UXïŒãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ïŒã¯ãéåžžã®ã¢ããªã±ãŒã·ã§ã³ãããAIã¢ããªã±ãŒã·ã§ã³ã®éçºã®ãããã段éã§ããããããéèŠã§ãã çŸåšãå®ç§ãªçµæããããããã£ãŒãã©ãŒãã³ã°ã¢ã«ãŽãªãºã ã¯ãããŸãããããã£ãŒãã©ãŒãã³ã°ãšUXã®é©åãªçµã¿åãããçæ³ãšåºå¥ã§ããªãçµæãããããå€ãã®ç¶æ³ããããŸãã UXã«é¢ããæ£ããæåŸ ã¯ããã¥ãŒã©ã«ãããã¯ãŒã¯èšèšã®æ£ããæ¹åãå°ãåºããé¿ããããªãAIé害ã®ã±ãŒã¹ãé©åã«åŠçããéã«éåžžã«è²Žéã§ãã ãŠãŒã¶ãŒãšå¯Ÿè©±ããããšãèããã«AIã¢ããªã±ãŒã·ã§ã³ãäœæããããšã¯ã確ççåŸé éäžãªãã§ãã¥ãŒã©ã«ãããã¯ãŒã¯ãåŠç¿ãããããªãã®ã§ãã
åºå žïŒ æ°ç§åŠè
DXïŒéçºè ãšã®çžäºäœçšïŒãéåžžã«éèŠã§ããããã¯ããã¥ãŒã©ã«ãããã¯ãŒã¯ã®ãã¬ãŒãã³ã°æéããããã°ã©ã ã®ã³ã³ãã€ã«ã®æåŸ ãšãšãã«ãæ°ããhemoã§ããããã§ãã DXãåªå ãªã¹ãã®æåã«ç¢ºå®ã«é 眮ããïŒãããã£ãŠãKerasãéžæããïŒãšç¢ºä¿¡ããŠããŸããããã¯ãåŸç¶ã®å®è¡ïŒGPUã®æå䞊ååããã«ãããã»ãã·ã³ã°ã®ããŒã¿æ¡åŒµãTensorFlowãã€ãã©ã€ã³ãcaffe2 / pyTorchïŒã
TensorFlowã®ãããªæ¯èŒçæããªããã¥ã¡ã³ããå«ããããžã§ã¯ãã§ããããã¥ãŒã©ã«ãããã¯ãŒã¯ã®ãã¬ãŒãã³ã°ãšå®è¡ã®ããã«ååã«ãã¹ããããåºã䜿çšãããèŠäºã«ãµããŒããããç°å¢ãæäŸããããšã«ãããéçºè ãšã®ããåããå€§å¹ ã«ä¿é²ããŸãã
åãçç±ã§ãç¬èªã®éçºGPUãããå®ããŠäŸ¿å©ãªãã®ãèŠã€ããã®ã¯å°é£ã§ããç»åãããŒã«ã«ã§è¡šç€ºããã³ç·šéãããæ°ã«å ¥ãã®ãšãã£ã¿ãŒã§ã³ãŒããé 延ãªãç·šéããæ©èœ-ããã«ãããAIãããžã§ã¯ãã®éçºã®å質ãšé床ãå€§å¹ ã«åäžããŸãã
ã»ãšãã©ã®AIã¢ããªã±ãŒã·ã§ã³ã¯ãããæåçãªãã€ã¢ã¹ã«çŽé¢ããŸãã¢ããªã±ãŒã·ã§ã³ããããããããããšãã°ãæåã«æåçç¹åŸŽãèããæãåçŽãªå Žåã§ãããã¥ãŒã©ã«ãããã¯ãŒã¯ããã¬ãŒãã³ã°ããŠããã©ã³ã¹èªã®ãããããã°ãã¢ãžã¢ã®ãããããã°ãããã³ãããŸã§èããããªãã£ãããã«å€ãã®å¥åŠãªãã®ãèªèããŸãããAIã¯äººéããããè¯ãã決å®ãäžããªãããšãèŠããŠããããšãéèŠã§ããAIã¯äººéãšåããã€ã¢ã¹ã®åœ±é¿ãåãã人éã®åŠç¿äžã«ææãçºçããŸãã