Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

shu223

September 20, 2020
Tweet

More Decks by shu223

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. ۙ೥ͷٕज़తϒϨʔΫεϧʔ͸
    ΄΅ػցֶशབྷΈ
    • ҩྍ
    • ࣗಈӡస
    • ೶ۀ
    • ϩϘοτ
    • etc.

    View Slide

  4. ػցֶश΍Γ͍ͨʂ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. ͦͷ໊΋
    Core ML

    View Slide

  9. !

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. Core ML௒؆୯ͩ͠ɺԿΛࠓߋʁ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. ࣮Ҋ݅Λྫʹղઆ͠·͢ʂ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  22. ํ਑ɿ Core MLԽ͢Δ
    • TensorFlow for iOSʢC++Ͱॻ͔Εͨެࣜϥούʔʣ = CPU
    ॲཧ
    • → Core MLԽ͢Ε͹GPU + Neural EngineͰॲཧ͞ΕΔΑ͏
    ʹͳΔ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. Core ML Tools
    • ͞·͟·ͳϞσϧΛCore MLϞσϧ
    ʢ.mlmodelʣʹม׵͢Δπʔϧ
    • Φʔϓϯιʔε
    • https://github.com/apple/
    coremltools
    • Pythonύοέʔδͱͯ͠͸
    coremltools

    View Slide

  27. coremltools 3.xͱ4
    • 2020.9.9ݱࡏɺ4͸·ͩϕʔλ
    ʢ4.0b3ʣ
    • ࠓճ͸3.xϕʔεͰղઆ
    • Unified Converter
    • PyTorchϞσϧͷ௚઀ม׵

    View Slide

  28. coremltoolsͷΠϯετʔϧ
    $ pip install -U coremltools

    View Slide

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

    View Slide

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

    View Slide

  31. SSD: Single Shot Multibox Detector

    View Slide

  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, # ग़ྗϊʔυ໊
    ...)

    View Slide

  33. Τϥʔൃੜ
    ValueError: Graph has cycles.

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  39. View Slide

  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)

    View Slide

  41. ৽͍͠Ϟσϧͷάϥϑ

    View Slide

  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)

    View Slide

  43. ੾Γऔͬͨ෦෼ͷิర

    View Slide

  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)

    View Slide

  45. MultiGridAnchorGenerator෦෼ͷิర
    • ੩తͳ஋Ͱ୅ସՄೳ
    • ֘౰෦෼ͷग़ྗΛಘ͓ͯ͘

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  49. ࣮ྫ1ͷ࢓ࣄͰඞཁͳ஌ࣝ
    • iOSσόΠε, iOS SDK, Swift
    • Core ML Tools
    • TF, Python, ػցֶश͸গ͠
    • → iOSΤϯδχΞ΋ઓ͑Δʂ

    View Slide

  50. ࣮ྫ2:
    σʔληοτ࡞੒
    ɾֶश͔Βߦ͏

    View Slide

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

    View Slide

  52. Core ML Tools
    iOS × Deep Learning
    TensorFlow, Kerasͱ coremltools
    ʹΑΔΧελϜϞσϧߏங
    ࣮ફೖ໳
    Core ML Toolsʹ͍ͭͯ
    ΋ͬͱֶͿ
    • ެࣜϦϙδτϦͷαϯϓϧ
    • ެࣜυΩϡϝϯτ
    • ॻ੶ʮCore ML Tools࣮ફೖ໳ʯ
    • ٯҾ͖Ϩγϐ͖ͭ

    View Slide

  53. iOSͷGPU/Metalʹ͍ͭͯ
    ֶͿ
    • εϥΠυʮඈͼಓ۩Ͱ͸ͳ͍Metalʯ
    ʢiOSDC 2017ʣ
    • ॻ੶ʮMetalೖ໳ʯ

    View Slide

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

    View Slide