Edge ImpulseでSpresense用の物体検出モデル作成(その1)」に引き続き、Edge ImpulseでSpresenseのカメラ画像を使ったAIモデルを作成します。ここでは物体検出を行うために、物体検出モデルを作成して、作成した物体検出モデルをArduino用としてDeployします。

Impulse design

Edge Impulseの左側メニューから「Impulse design」の「Create impulse」を選択し、次のデータを設定して「Save Impulse」ボタンをクリックします。

  • Image dataで「Image w」と「Image h」をそれぞれ「160」、「Resize mode」を「Fit shortest」に設定する
  • Imageを選択して「Add」ボタンを押す
  • Object Detection (Images)を選択して「Add」ボタンを押す

Edge Impulseの左側メニューから「Impulse design」の「Image 」を選択し、「Generat features」タブを選択し、「Generat features」ボタンをクリックします。「Feature explorer」により学習データのクラスタ状態を確認します。

Edge Impulseの左側メニューから「Impulse design」の「Obuject detection」を選択し、「Start training」ボタンをクリックすると学習が開始されます。終了すると次のように「Confusion matrix」が表示され学習結果が表示されます。

Model testing

Edge Impulseの左側メニューから「Model testing」を選択し、学習状況をtest学習データを使用して確認します。次のように正確度とその分布が表示されます。

Deployment

Edge Impulseの左側メニューから「Impulse design」の「Deployment」を選択し、次のように「arduino」を選択して「Build」ボタンをクリックします。

Arduino libraryとして学習モデルが作成され、次のようにスケッチ例を含むzip形式のファイルとしてダウンロードされます。

Arduino IDEでzip形式のArduino librarを展開すると、ライブラリ「tomosoft-project-1_inferencing」がフォルダ「libraries」に作成されます。

G:\DOCUMENT\ARDUINO\LIBRARIES\TOMOSOFT-PROJECT-1_INFERENCING
│  library.properties
│  neda
│  
├─examples
│  ├─nano_ble33_sense_accelerometer
│  │      nano_ble33_sense_accelerometer.ino
│  │      
│  ├─nano_ble33_sense_accelerometer_continuous
│  │      nano_ble33_sense_accelerometer_continuous.ino
│  │      
│  ├─nano_ble33_sense_camera
│  │      nano_ble33_sense_camera.ino
│  │      
│  ├─nano_ble33_sense_microphone
│  │      nano_ble33_sense_microphone.ino
│  │      
│  ├─nano_ble33_sense_microphone_continuous
│  │      nano_ble33_sense_microphone_continuous.ino
│  │      
│  ├─nicla_sense_inference
│  │      nicla_sense_inference.ino
│  │      
│  ├─nicla_vision_fusion
│  │      nicla_vision_fusion.ino
│  │      
│  ├─nicla_vision_microphone
│  │      nicla_vision_microphone.ino
│  │      
│  ├─nicla_vision_microphone_continuous
│  │      nicla_vision_microphone_continuous.ino
│  │      
│  ├─portenta_h7_camera
│  │      portenta_h7_camera.ino
│  │      
│  ├─portenta_h7_microphone
│  │      portenta_h7_microphone.ino
│  │      
│  ├─portenta_h7_microphone_continuous
│  │      portenta_h7_microphone_continuous.ino
│  │      
│  └─static_buffer
│          static_buffer.ino
│          
└─src
    │  tomosoft-project-1_inferencing.h
    │  
    ├─edge-impulse-sdk
    │  │  .gitignore
    │  │  sources.txt
    │  │  
    │  ├─anomaly
    │  │      anomaly.h
    │  │      
    │  ├─classifier
    │  │  │  ei_aligned_malloc.h
    │  │  │  ei_classifier_config.h
    │  │  │  ei_classifier_smooth.h

・・・・

    │  │              
    │  └─third_party
    │      ├─flatbuffers
    │      │  │  LICENSE.txt
    │      │  │  
    │      │  └─include
    │      │      └─flatbuffers
    │      │              base.h
    │      │              flatbuffers.h
    │      │              flexbuffers.h
    │      │              stl_emulation.h
    │      │              util.h
    │      │              
    │      ├─gemmlowp
    │      │  │  LICENSE
    │      │  │  
    │      │  ├─fixedpoint
    │      │  │      fixedpoint.h
    │      │  │      fixedpoint_neon.h
    │      │  │      fixedpoint_sse.h
    │      │  │      
    │      │  └─internal
    │      │          detect_platform.h
    │      │          
    │      └─ruy
    │          └─ruy
    │              └─profiler
    │                      instrumentation.h
    │                      
    ├─model-parameters
    │      dsp_blocks.h
    │      model_metadata.h
    │      model_variables.h
    │      
    └─tflite-model
            trained_model_compiled.cpp
            trained_model_compiled.h