機械学習のブルーオーシャン Core ML by 堤 修一 #iOSDC Japan 2020

19d7ae634445d4bd9b10c7961a462260?s=47 shu223
September 20, 2020

機械学習のブルーオーシャン Core ML by 堤 修一 #iOSDC Japan 2020

iOSDC Japan 2020 9/20 13:20〜 Track Eでのトークです。

------------------------------------------------------------

■概要

今や技術面で何か画期的なことが達成される場合、十中八九、機械学習/ディープラーニングが利用されています。大学で専門的に機械学習を学ぶ人も多く、技術書でもオンライン講座でも機械学習系は非常に人気です。今や猫も杓子も機械学習を学び一見レッドオーシャンとなっている機械学習分野ですが、我々iOSエンジニアには実は「機械学習のブルーオーシャン」が残されています。それがCore MLです。

『Core ML?触ってみたことあるけど、簡単だし、今更トークで聞くことなくない?』

と思われた方もいるかもしれません。しかし、多くの人が触ったことがあるのは、CoreML.framework止まりです。

CoreML.frameworkは既存のモデルをiOSで扱う際に利用するフレームワークに過ぎず、実はそれはCore MLのポテンシャル全体からみれば氷山の一角にすぎません。たとえば近年のWWDCでは毎年多くのML関連の新機能が発表されますが、CoreML.frameworkのレイヤーだけ知っていてもその機能の多くは活かせず、そもそも具体的に何がどこまでできるということすら理解は難しいと思われます。

Core MLはCore MLのモデルフォーマットと、そのモデル作成を担うCore ML Tools(coremltools)を理解してこそその真価を発揮できます。そして、iOSで最先端の機械学習モデルを効率的に動作させるには、このCore MLの全体を理解しつつ、iOSアプリ開発についても熟知し、その上で機械学習にも理解がある必要があるので、機械学習の専門家でも簡単には参入できないブルーオーシャンとなるわけです。

本トークではiOS×ML分野で仕事をするために必要な技術領域全体について解説します。

------------------------------------------------------------

■参考書籍

・「Core ML Tools実践入門 - iOS × DEEP LEARNING」
https://booth.pm/ja/items/1723495

・「Metal入門」
https://booth.pm/ja/items/826318

------------------------------------------------------------

■その他関連リンク

・本トークのプロポーザル
https://fortee.jp/iosdc-japan-2020/proposal/2d8f5458-140e-4c68-95f1-30964d605013

・iOSDC 2020タイムテーブル
https://fortee.jp/iosdc-japan-2020/timetable

・堤のTwitter
https://twitter.com/shu223

19d7ae634445d4bd9b10c7961a462260?s=128

shu223

September 20, 2020
Tweet

Transcript

  1. ػցֶशͷϒϧʔΦʔγϟϯ Core ML

  2. ࣗݾ঺հ • ϑϦʔϥϯεiOSΤϯδχΞ • GitHub, Twitter, note: shu223 • BOOTHͰ͍Ζ͍ΖຊΛग़ͯ͠·͢

    • YouTube: ΤϯδχΞͱਓੜ
  3. ۙ೥ͷٕज़తϒϨʔΫεϧʔ͸ ΄΅ػցֶशབྷΈ • ҩྍ • ࣗಈӡస • ೶ۀ • ϩϘοτ

    • etc.
  4. ػցֶश΍Γ͍ͨʂ

  5. ૚ͷް͍ઌਓͨͪ • େֶ౳Ͱઐ໳తʹػցֶशΛֶΜͩਓͨͪ • ϑϧλΠϜͰػցֶशΤϯδχΞͱͯ͠ಇ͍͍ͯΔਓͨͪ • Kaggleͷڧ͍ਓୡ • ΦϯϥΠϯίʔεͰ΋ٕज़ॻͰ΋ػցֶशܥ͸௒ਓؾ

  6. ׬શͳΔϨουΦʔγϟϯ

  7. զʑiOSΤϯδχΞʹ͸ ػցֶशͷϒϧʔΦʔγϟϯ ͕࢒͞Ε͍ͯΔ

  8. ͦͷ໊΋ Core ML

  9. !

  10. ! • ͳͥCore MLʁ • Core ML௒؆୯ͩ͠ɺԿΛࠓߋʁ

  11. ͳͥCore MLʁ iOSσόΠεͰMLಈ͔͢ʹͯ͠΋͍Ζ͍Ζબ୒ࢶ͸͋Δ • PyTorch MobileʢLibTorchʣ • Tensor Flow for

    iOS • Tensor Flow Lite
  12. iOSσόΠεͷੑೳΛ࠷΋׆͔ͤΔͷ ͸Core ML • PyTorch MobileʢLibTorchʣ -> CPU • Tensor

    Flow for iOS -> CPU • Tensor Flow Lite -> CPU, GPU • Core ML -> CPU, GPU, Neural Engine
  13. Core ML௒؆୯ͩ͠ɺԿΛࠓߋʁ

  14. ଟ͘ͷਓ͕৮ͬͨ͜ͱ͕͋Δͷ͸ɺ CoreML.framework • ֶशࡁΈͷը૾෼ྨϞσϧΛಈ͔͠ ͯΈ͚ͨͩͩͬͨΓ...

  15. CoreML.framework͸࠷ऴతͳϞσϧΛiOSͰѻ͏෦෼͠ ͔ఏڙ͠ͳ͍

  16. ࣮຿Ͱ͸ʮCore MLϞσϧΛͭ͘Δʯ෦෼΋ؚΊͯશମΛݟ Δඞཁ͕͋Δ

  17. ྫɿ ΧελϜ෺ମݕग़ • ਫ଒ؗͷڕ΍ಈ෺Ԃͷಈ෺ • ໊ࢗ΍ாථ • → ඪ४ػೳʹ͸ͳ͍ʢʮҰൠ෺ମݕ ग़ʯͳΒ͋Δ͕ʣ

    • → ϞσϧΛࣗ࡞͢Δඞཁ͕͋Δ
  18. ࣮Ҋ݅Λྫʹղઆ͠·͢ʂ

  19. ࣮ྫ1: طଘϞσϧͷߴ଎Խ

  20. ՝୊ɿ ෺ମݕग़ͷϦΞϧλΠϜॲཧ͕஗͍ ໿18fps

  21. ঢ়گ • TensorFlowͰಠࣗσʔληοτͰֶशͨ͠.pbϞσϧΛiOS Ͱ௚઀ར༻ • TensorFlow for iOSʢC++Ͱॻ͔Εͨެࣜϥούʔʣར༻

  22. ํ਑ɿ Core MLԽ͢Δ • TensorFlow for iOSʢC++Ͱॻ͔Εͨެࣜϥούʔʣ = CPU ॲཧ

    • → Core MLԽ͢Ε͹GPU + Neural EngineͰॲཧ͞ΕΔΑ͏ ʹͳΔ
  23. Core MLϞσϧΛͲ͏࡞Δ͔ʁ

  24. Core MLϞσϧΛͲ͏࡞Δ͔ʁ

  25. TensorFlowϞσϧΛCore MLϞσϧʹม׵

  26. Core ML Tools • ͞·͟·ͳϞσϧΛCore MLϞσϧ ʢ.mlmodelʣʹม׵͢Δπʔϧ • Φʔϓϯιʔε •

    https://github.com/apple/ coremltools • Pythonύοέʔδͱͯ͠͸ coremltools
  27. coremltools 3.xͱ4 • 2020.9.9ݱࡏɺ4͸·ͩϕʔλ ʢ4.0b3ʣ • ࠓճ͸3.xϕʔεͰղઆ • Unified Converter

    • PyTorchϞσϧͷ௚઀ม׵
  28. coremltoolsͷΠϯετʔϧ $ pip install -U coremltools

  29. coremltoolsͰTensorFlowϞσϧΛม׵ import tfcoreml mlmodel = tfcoreml.convert(tf_model,...)

  30. SSDϞσϧͷม׵ ʢ˞࣮Ҋ݅ͱ͸ผͷҰൠެ։ϞσϧͰ୅༻ͯ͠ղઆʣ

  31. SSD: Single Shot Multibox Detector

  32. ม׵ͯ͠ΈΔ import tfcoreml mlmodel = tfcoreml.convert( tf_model_path = tf_model_path, #

    .pbϞσϧͷύε mlmodel_path = mlmodel_path, # .mlmodelग़ྗύε input_name_shape_dict = in_dict, # ೖྗϊʔυ໊ͱshape output_feature_names = out_names, # ग़ྗϊʔυ໊ ...)
  33. Τϥʔൃੜ ValueError: Graph has cycles.

  34. ϞσϧͷάϥϑΛݟͯΈΔ Netronར༻

  35. ϞσϧͷάϥϑΛݟͯΈΔ Netronར༻ʢ֦େʣ

  36. ϞσϧͷάϥϑΛݟͯΈΔ Tensorboardར༻

  37. αϒάϥϑΛ੾Γग़͢

  38. αΠΫϧͷͳ͍෦෼Λ੾Γग़͢ • tensorboardͰϞσϧͷத਎Λݟͯɺ੾Γग़͢෦෼ͷ͋ͨΓ Λ͚ͭΔ • Ͳ͕͜୅༻Մೳ͔ʁ • Preprocessor෦෼͸ม׵ίϚϯυͷΦϓγϣϯͰ෇༩ • MultiGridAnchorGenerator͸੩తͳ஋Ͱ୅ସՄೳ

    • Postprocessor͸ಉ༷ͷॲཧΛSwiftͰ࣮૷Մೳ
  39. None
  40. strip_unused_lib ͰαϒάϥϑΛ੾Γग़͢ from tensorflow.python.tools import strip_unused_lib in_names = ['Preprocessor/sub'] #

    ೖྗϊʔυ໊ͷ഑ྻ out_names = ['Squeeze', 'concat_1'] # ग़ྗϊʔυ໊ͷ഑ྻ gdef = strip_unused_lib.strip_unused( input_graph_def = original_gdef, input_node_names = in_names, output_node_names = out_names, placeholder_type_enum = dtypes.float32.as_datatype_enum)
  41. ৽͍͠Ϟσϧͷάϥϑ

  42. Core MLϞσϧ΁ม׵͢Δ import tfcoreml input_shapes = {"Preprocessor/sub:0":[1,300,300,3]} output_tensor_names = ['Squeeze:0',

    'concat_1:0'] mlmodel = tfcoreml.convert( tf_model_path = tf_model_path, mlmodel_path = ml_model_path, input_name_shape_dict = in_shapes, output_feature_names = out_names, image_input_names = image_in_names)
  43. ੾Γऔͬͨ෦෼ͷิర

  44. ੾ΓऔͬͨPreprocessor෦෼Λม׵ΦϓγϣϯͰิర mlmodel = tfcoreml.convert( tf_model_path = tf_model_path, mlmodel_path = ml_model_path,

    input_name_shape_dict = in_shapes, output_feature_names = out_names, image_input_names = image_in_names, red_bias = -1.0, green_bias = -1.0, blue_bias = -1.0, image_scale = 2./255)
  45. MultiGridAnchorGenerator෦෼ͷิర • ੩తͳ஋Ͱ୅ସՄೳ • ֘౰෦෼ͷग़ྗΛಘ͓ͯ͘

  46. Postprocessor෦෼ͷิర • ಉ༷ͷॲཧΛSwiftͰ࣮૷͢Δ

  47. SSDϞσϧม׵Ͱ΍ͬͨ͜ͱͷ੔ཧ

  48. Core MLϞσϧ΁Ҡߦͨ݁͠Ռ • ໿300%ͷߴ଎Խʹ੒ޭ ! ʢ18fps -> 55fpsʣ • ͞ΒͳΔ଎౓޲্ͷݟࠐΈ΋͋Δ

  49. ࣮ྫ1ͷ࢓ࣄͰඞཁͳ஌ࣝ • iOSσόΠε, iOS SDK, Swift • Core ML Tools

    • TF, Python, ػցֶश͸গ͠ • → iOSΤϯδχΞ΋ઓ͑Δʂ
  50. ࣮ྫ2: σʔληοτ࡞੒ ɾֶश͔Βߦ͏

  51. ·ͱΊ • CoreML.framework͸iOSʹϞσϧΛ૊ΈࠐΉͱ͜Ζ͚ͩ • ࣮຿Ͱ͸Ϟσϧ࡞੒ΛؚΉશମΛݟΔ • Core MLϞσϧม׵Λ୲͏Core ML Tools͕؊

  52. Core ML Tools iOS × Deep Learning TensorFlow, Kerasͱ coremltools

    ʹΑΔΧελϜϞσϧߏங ࣮ફೖ໳ Core ML Toolsʹ͍ͭͯ ΋ͬͱֶͿ • ެࣜϦϙδτϦͷαϯϓϧ • ެࣜυΩϡϝϯτ • ॻ੶ʮCore ML Tools࣮ફೖ໳ʯ • ٯҾ͖Ϩγϐ͖ͭ
  53. iOSͷGPU/Metalʹ͍ͭͯ ֶͿ • εϥΠυʮඈͼಓ۩Ͱ͸ͳ͍Metalʯ ʢiOSDC 2017ʣ • ॻ੶ʮMetalೖ໳ʯ

  54. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ