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 full-size slide

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

    View full-size slide

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

    View full-size slide

  4. ػցֶश΍Γ͍ͨʂ

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. ͦͷ໊΋
    Core ML

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  30. SSD: Single Shot Multibox Detector

    View full-size slide

  31. ม׵ͯ͠ΈΔ
    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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  38. 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 full-size slide

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

    View full-size slide

  40. 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 full-size slide

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

    View full-size slide

  42. ੾Γऔͬͨ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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide