레이블이 AI-Edge인 게시물을 표시합니다. 모든 게시물 표시
레이블이 AI-Edge인 게시물을 표시합니다. 모든 게시물 표시

1/10/2024

ESP TinyML (Edge AI)

1. Edge AI (TinyML)  

TinyML을 Meetup or Linkedin을 통해 여러번 보기만 하고, 관련자료들을 거의 잘 정리하지 않아, 
아래와 같이 간단히 정리하도록 한다. 
우선 TinyML 을 알기전에 기본적인 Machine Learning 과 Deep Learning을 좀 알아보고 
Tensorflow or Edge Impulse를 사용해보는게 맞을 것 같다. 


ESP32/ARM 기반의 TinyML
TinyML 관련된 부분 내용이며, 개발 Tool 과 Inference를 위한 NN network 관련자료 

Tensorflow/Tensorboard 
Tensorflow 와 Tensorboard 기본사용법 과 분석방법  (오래되어 많이 까먹음) 

MNIST 모델의 기본이해 
가장 기본인 MNIST 모델을 이해

CNN(Convolutional Neural Network) 관련자료 
Convolution Network 예전에 정리한 자료 

Jupiter/Colab 사용법 
기본 Jupyter(Colab) 사용법 


1.1 Edge AI/TinyML 개발 Tool 

Edge Impulse or Tensorflow Lite를 사용방법은 서로 비슷하리라고 본다. 
아직 Edge Impulse는 사용해보지 못하고 매번 글만 읽어 보기만 했으며, 관련 Tool들만 간단히 소개한다. 

TensorFlow Lite for Microcontrollers
TinyML 기반으로 진행할 경우, Tensorflow 와 Tensorboard로 진행 

Edge Impuse 
TinyML Meetup에서 알게되었으며, 이걸로도 많이 진행하며, 주로 보면 Tensorflow와 비슷하리라 본다. 

TensorFlow Lite for ESP32 
ESP32 의 Tensorflow 관련자료 


1.2 Edage AI Use Case 와 Cloud 

Edge AI, TinyML을 주로 많이 사용하는 것 같으며, ARM 뿐만 아니라 ESP32 시리즈 각 CPU 아키텍쳐마다 
이를 지원을 해주는 것으로 보인다. 

  • Edge AI Use Case
요즘 Edge AI , TinyML은 거의 들어갈 것으로 보이며, 핵심을 주로 보면, Cloud와 조합이다.
Edge는 Edge 일 뿐이며, Cloud와 어떻게 조합할 것이며, 역할을 어디까지 정하는게 중요할 것 같다. 

  • Google Firebase 
Realtime Database를 제공해주고 있으며, 간단한 IoT를 제작하여 실시간으로 확인하고 싶다면 괜찮은 것 같다. 

  • AWS 
AWS는 현재 거의 사용해본게 AWS EC2 와 IoT(S3) 만 사용해봐서 뭐라고 말을 못하겠다.
추후에 AWS를 좀 더 잘 알면, 그때 더 보도록 하자. 특히 Lamda !!! 

  • AWS/GCP/Azure 
Could를 사용해보면, 항상 이곳에서 이 기능을 제공하며, 거의 다 다른 곳에서도 비슷한 기능을 제공해준다.  
나도 Cloud를 좀 더 사용해보고 말을 해야 겠지만, 얼추 제공은 다 해주는 것 같다. 

  • RealTime Chart 관련자료 
이전에 Chart 관련 JavaScript을 Firebase기반으로 Realtime으로 이용한 적 있는데, 추후 이를 다시 이용할때 확인 



2. ESP 기반의 TinyML 분석 

ESP32 or ESP32-S3 기반으로 TinyML을 구성하기 위해서는 기본적으로 아래의 Component기본으로 사용한다.
ARM 과 달리 ESP 경우 DL을 별도로 또 제공해주고 있다. 

ESP-NN(Neural Network)
ARM도 이를 제공하고 있으며, 나중에 Inference할 때 같이 사용 

ESP-DL(Deep Learning Model)
아래를 보면, ESP32-S3기반으로 성능측정된게 있는데, Data Cache만 64KB사용했을 경우이다.

ESP32 Memory (SRAM)
문제는 나중에 SRAM이 될 것 같으며, 이 부분은 별도로 생각을 해야 할 것 같다. 


2.1 Human Activity Recognition Edge AI 

ESP32-S3 기반의 TinyML기반 동작되어진다. 
마지막에 보면 Model을 ESP-DL로 Converting 해서 사용하며, 이는 .cpp 와 hpp로 구성되어진다. 
나중에 직접 실행을 해보면 알겠지 ㅋㅋㅋ (Fine Tuning 도)
 
  
  • Model 구조 
CNN 기반으로 가속도계 센서 기반으로 사람의 행동 파악
  1. Input: 가속도계 센서 (MPU6050)
  2. Output: 7가지 행동패턴 

  • Tensorflow 기반의 CNN 구조 및 설명 
Model을 만들어가면서 설명해주고 있어 괜찮음


  • Espressif Blog (Human Activity Recognition)
상위 내용들은 모두 아래의 Blog 기반으로 작성되어있으며, 아래의 Blog을 읽으면 세부적인 내용이 나온다.  

2.2 Hand Gesture Recognition Edge AI 

ESP32-S3 기반의 TinyML기반 동작되어지며, 상위와 비슷하다.
Jupyter를 Colab을 사용한다고 하며, 나중에 ESP-DL Format으로 Convert해서 사용한다고 하며, 
ONNX로 한다고 하는데, 내가 까먹었다. (CNN는 동일) 

  • ONNX
나중에 시간되면 다시 보면 되겠지 

  • Edge AI H/W Optimzation 과 관련내용 
좋은 설명을 해주고 있는데, 내가 아직 이해를 다 못하겠다. 
  
  • Model 구조 
CNN 기반으로 Model이며, 카메라에서 얻은 것을 ESP32-S3 EYE
  1. Input: Camera Image (ESP32-S3 EYE)
  2. Output: 손가락 Pattern (현재 6개의 Gesture, score기반으로 구분)

Model의 Dataset (Kaggle 것 사용)

  • 관련자료 수집


Espressif Blog (Hand Gesture Recognition)
상위 내용들은 모두 아래의 Blog 기반으로 작성되어있으며, 아래의 Blog을 읽으면 세부적인 내용이 나온다.  


2.3 기타 Edge Impuse 기반 자료

  • Edge Impuse 기반 진행 
ESP32 TinyML 
개발 Tool : Edge Impulse 와 Arduion IDE으로 진행을 한 것으로 보이며, 다양하게 존재하며 
대부분 카메라 중심으로 되어있다. 

9/15/2022

ESP32-S3 TinyML (Edge AI )

1. Arduino IDE 와 TinyML 

우연히 LinkedIn에서 보게되었는데, MCU기반으로 Machine Learning을 해서 동작이되는 것을 보고, 좀 쇼크를 받았다. 
Arduino 기반으로 Transfer Learning하여 이를 지원하는 것으로 보이며 음성인식을 하여 로봇 손을 제어한다. 
아이러니한 것은 소스를 보면, BLE로 동작되는 걸로 보인다. 

  • HW 사양 
  1. Board: Arduino Nano 33 BLE Sense (Nordic 사)
  2. 기타: Servo 와 BreadBoard(빵판) 과 Jumper 

  • 개발 Tools 
  1. Edge Impulse Studio 
  2. Arduino IDE 

일단 Transfer Learning(Training) 알려고 하면, 어쩔 수 없이 상위 Edge impulse Studio를 좀 알아야 할 것 같다. 
 
  • 음성인식 방법(모델?)
  1. MFCC(Mel-Frequency Cepstral Coefficient)
  2. MFE 

MFE 와 MFCC 비교 


  • Inference
NVIDIA Jetson 처럼 INT8 까지는 아니여도, INT16까지 양자화해서 Inference하는 것으로 보인다. 

  • 결론 
MFCC or MFE 사용한다고 하며, 아직 MFE는 검색이 안되어서 잘 모르겠다.
MFCC는 상위 블로그로 읽어보면, 간단히 동작방식의 핵심 다음과 같다고 생각되어진다. 

Mel-Filter Bank 라는 것을 일종의 Pattern을 저장해서 Machine Learning하는 것으로 보인다. 
다만 가성주파수 영역에 (300Hz ~ 3300Hz) 집중적 배포하여 사람 목소리인 음성인식을 하는 것으로 보인다. 

다시 DCT도 나오고 그렇는데, 오랜만에 다시 DSP를 보니 골치아프다. 
DCT 와 DFT/FFT 의 차이는 간단히 말해, 허수 사용여부이다. 
추후 시간이되면 좀 더 자세히 알아보도록 하자 .


1.1 Edge Impulse Studio 

Edge Impulse가 무엇인지 궁금해서 찾아 보게되었는데, 아래 사이트에서 쉽게 답을 얻었다. 

나의 경우는 거의 Arduino를 거의 사용해본 경험이 없는데, 거의 Arduino 기반으로 Library가 제공되어지는 것으로 보인다. 

  • EdgeImpulse Studio 
이 사이트 기반으로 Project를 진행하는 것으로 보이며, 나도 오늘 가입을 했다. 


1.2 Tensorflow light for MCU

Tensorflow를 보니, 지원되어지는 MCU Board는 적은 것으로 보이며, 다행히 Espressif 사의 ESP도 지원가능한걸로 보인다. 
다만, 대체적으로 Arduino 기반으로 Project가 진행이 되는 것으로 보인다. 
일단 Arduino 와 ESP32 or 다른 MCU EVM이 필요하다 

TensorFlow light for Microcontroller

ESP32 와 Tensorflow Lite for Microcontroller
ESP-IDF 와 ESP-NN을 사용한 것으로 보이며, CNN구조의 간단한 예제 


2. TinyML 

좀 생소하기는 한데, 아직 제한적으로 사용되어지는 것 같으며, MCU기반으로 사용되어지는 걸로 보인다. 
검색을 해보면, 책까지 나왔을 정도로 많이 보편화가 된 것으로 보이며, 현재 관심을 두고 보고 있다.
대부분 Inference를 할 경우, 각 NN Library와 연결하여 사용하는 것으로 생각되어진다. 


2.1 TinyML 관련책 과 세미나  


TinyML 
O'REILLY 에서 처음 영문으로만 나왔는데, 한글로 나옴 

TinyML Home 

Google TinyML 

Meetup TinyML
Meetup을 통해서, 자주 Youtube에 관련내용들이 공유되어지고 있음 


2.2 ARM 의 TinyML

ARM을 주로 보면 Cortex-M 기반으로 CMISIS-NN으로 연결하여, 주로 Inference용으로 사용하는 것 같다. 





2.3 ESP32의 TinyML 

ESP경우, ESP-NN이 존재하며, 연결하여 확장해서 ESP-DL 
주로 Inference용으로 사용


ESP-NN(Neural Network) 와 ESP-DL(Deep Learning Model)


1/04/2020

Edge computing ( Google Coral / Intel / NVIDIA)

1. Edge Computing 의 개념

Edge Computing 이라는 말을 최근에 들은 것이 Coral 사의 TPU 때문인 것 같으며, 주로 Jetson 시리즈와 비교 때문에 이것을 찾아보게 되어진 것같다.

Edge Computing의 기본컨셉을 보면 IoT에서 자주사용되어지는 것으로 보이며, 아래를 봐도 Cloud에 부담을 줄이기 위해서
복잡한 AI의 계산 및 특정 계산을 이 곳에서 처리하는 방식을 말하는 것으로 보인다.
일종의 분산처리라고 생각이되며, 현재 개발 버전으로는 Coral 것이 가장 많이 사용되어지는 것으로 보이는 것 같다.

현재 보이는 것들은 거의 Machine Learning의 복잡한 Inference 기능을 대신 수행해주기 위해서 사용되어지는 Edge TPU가 될 것 같다.


이외에도 Jetson AGX Xavier에서 사용되어지고 있는  NVDLA(NVIDIA Deep Learning Accelerator)도 존재한다.
이를 FPGA or RISC-V에 연결하여 사용하려고도 하려는 것 같으며, 이미 Sifive or FPGA기반으로 연결하여 사용하는 것 같다.


Edge Computing
  https://en.wikipedia.org/wiki/Edge_computing


2.  Google Coral 의 Edge TPU 들 과 Intel의 Edge

화자가 많이 되는 것이 Raspberry Pi 와 Coral USB Accelerator 의 조합과 Jetson Nano시리즈와 비교가 많이 되고 있으며,  성능을 봐도 괜찮아 보인다
하지만, 무조건 좋은것은 아니며, Jetson 과 비교하여 Google Coral은 모델을 많이 지원을 못해주고 있는 것이 좀 문제인 것 같지만,
이 부분은 점차적으로 개선이 되어질 거라고 생각하고 크게 생각하지 않고 본다.

더불어 최근에는 Corla Deve Board까지 출시되었는데, NXP의 i.MX 기반에 Edge TPU를 부착한 기능이다. (PCIe 연결)

Google Coral Edge TPU 시작
  https://coral.ai/docs/accelerator/get-started/#

Google Coral의 전체 제품군
  https://coral.ai/products/


  • USB Accelerator ( USB Edge TPU)
USB 3.0으로 USB Type-C로 지원을 해주는 Edge TPU이며 현재  Raspberry Pi와 많이 연결하여 사용하고 있다.



  https://coral.ai/products/accelerator/
  https://coral.ai/docs/accelerator/datasheet/



  • i.MX 8M 기반으로 Edge TPU Dev Board 
i.MX 8M 과 Edge TPU는 PCIe 와 I2C/GPIO로 연결되어있다고 하며, 이 보드와 Jetson TX2와도 성능이 궁금하다
왜냐하면 i.MX8M의 경우 별도의 GPU도 존재하는데, 이부분과 같이 동작할지 의문이다. 



  https://coral.ai/products/dev-board/
  https://coral.ai/docs/dev-board/datasheet/

최근을 보면 거의 SOM(System On Module) 잘 제공해주고 있어서 HW적으로 편하게 작업이 가능할 것이다.  Jetson Nano 역시 SOM을 지원을 해주고 있다


  • Intel 사의 NCS2 (Neural compute Stick 2) 
Intel 사의 Edge Device 로 Intel의 OpenVINO도 지원가능하며 주로 개발로 Raspberry Pi에 연결하여 사용하는 것으로 보인다.

  https://software.intel.com/en-us/neural-compute-stick
  https://software.intel.com/en-us/articles/intel-movidius-neural-compute-stick
  https://www.youtube.com/watch?v=sRYs0dZLXkw&feature=youtu.be


2.1  Jetson Nano 와 Coral Edge TPU Dev Board 의 비교 


  • Jetson Nano 와 Croal Edge TPU Dev Board  비교 
우선 가격적으로 보면 Jetson Nano가 싸지만, Coral Dev Board는 eMMC 이지만, Jetson Nano는 SD Card 만 지원한다.
Jetson Nano의 경우 WIFI 와 Bluetooth를 지원하지 못한다.



  • Jetson Nano / Raspberry Pi3 / Raspberry Pi3+Intel NCS2 / Edge TPU Dev Board

상위 보드들을 성능을 비교하기 위해 각각의 모델 마다 성능을 알수 있는지표이다.
아쉬운게 있다면, 이곳에 Coral USB와 조합도 있었으며, 딱 좋을 것 같은데 없으며, 대체적으로 보면 Intel의 NCS2 or Edge TPU의 경우 미지원되는 Model Network 이 많이 존재한다.

아래의 Model를 보면 영상처리 기반에서 많이 사용되는 Model로 비교하므로 이를 염두해두 보도록하자.
SSD Mobilenet-v2의 경우 Kernel Size가 300x300 을 보면 상대적으로 TPU Dev Board가 높지만,
이상하게 Inception v4의 경우는 상대적으로 낮은 수치를 보이는데, Tensorflow가 아니라서 그런지 아래의 데이터를 가지고는 정확한 성능비교는 불가능해 보인다.


https://devblogs.nvidia.com/jetson-nano-ai-computing/






자료출처
  https://towardsdatascience.com/google-coral-edge-tpu-board-vs-nvidia-jetson-nano-dev-board-hardware-comparison-31660a8bda88




  • 각 보드 성능비교 사이트 
대체적으로 보면 각각의 모델마다 다른 성능을 보여주고 있는데, 이 부분은 정확도와 같이 봐야 성능비교가 될 것 같다.
왜냐하면, NVIDIA만 보더라도, Precision을 변경하여, 정확도는 좀 떨어지지만, 성능이 개선이되는 것을 보면 각각의 Model기준으로는 정확한 비교를 위해서는 정확도가 있어야 비교가 될 것 같다.




  https://github.com/jolibrain/dd_performances




  • NVIDIA Jetson Nano/TX2/AGX Xavier 비교 
NVIDIA의 TensorRT 에서 GoogleNet의  FP16 과 INT8 Mode의 성능비교이며, 역시 Xavier는 INT8의 성능이 대단하다




세부사항은 각 Model마다 각 Batch size와 Precision에 따라 비교하므로 아래참조
  https://www.phoronix.com/scan.php?page=article&item=nvidia-jetson-nano&num=3



  • MobileNetV2 기준비교 
내가 재미있게 본 것은 아래의 블로그이며, MobileNetV2 기준으로 성능 측정을 했으며 각각의 개별성능을 보여주고 Jetson Nano와 TPU와 조합 재미있다.

자료출처
  https://blog.raccoons.be/coral-tpu-jetson-nano-performance


주의해야할 것은 Jetson 과 비교를 해봐도 모든 모델이 지원이 되지 않지만 점점 늘어가는 추세이다.


  • Edge TPU Benchmark 
현재지원가능한 Network(Model) 들과 성능을 알수 있으며, Tensorflow lite 부분도 최근에 관심이 있는데, 이 부분 지원역시 재미있다.

  https://coral.ai/docs/edgetpu/benchmarks/

개인적으로 Jetson Nano를 구입할 생각을 했으나, 지금 좀 더 지켜보고 각각의 기능을 좀 더 지켜보기로 했다.



3. Jetson AGX Xavier의 NVDLA(Deep Learning Accelerator)

상위 설명한 Edge 기능이 Jetson NVDLA 역시 동일한 것 같으며, 이를 어떻게 다른 CPU에 연결하는지가 궁금하다.
NVDLA 인 경우 ARM 이외에도 RISC-V와 연결되어 사용되어 질 것 같은데, 어떻게 될지  사용이 될지가 궁금하다.

참고로 제목에도 설명했듯이 DLA는 현재 Jetson AGX Xavier에서 제공되어지고 있으며, 마지막으로 Jetson Xavier에서 DLA 기능을 Deep Learning 사용시 연결해서 사용한다고 했지만,
내 기억으로는 그 때  초반이라 그런지 DLA의 성능을 전부 사용하지 못한 것 같다.

요즘 관심사가 Open Core인 RISC-V도 관심이 많으며, 관련부분도 계속 보려고 한다.

NVDLA의 구성의 경우 상위 Coral사의 차이를 보면 Interface가 차이가 날 것이며,

3.1 NVDLA 구성과 Interface 

Interface는 아래와 같이 3가지로 기본으로 구성이 되며  기본적으로 생각하면, 구성은 간단하다. 
CPU에서 Control해서 이를  Interrupt로 확인을 받고 Data는 공유메모리 방식으로 가지는 것이다. 

  • CSB (Configuration Space Bus) Interface
32bit 동기적인 BUS로 low bandwith를 가진 BUS라고 한다.
CPU가 NVLDA를 Configuration 즉, Control을 할 때 사용되어지는 Bus 인 것이며, 연결은 CPU or FPGA 와  Memory Mapped IO 방식으로 연결될 것 같다.


  • IRQ (Interrupt ) Interface
1 bit Level Trigger 방식의 Interrupt라고 하는데, 사용을 유추하면, CPU에서 Control 하면,  ACK로써 Complete or Error 체크로 보면 될 것 같다.
CPU에서는 이를 기반으로 ISR로 다시 CSB의 Register를 읽어 확인을 하면 될 것 이다.



  • DBB ( Data BackBone) Interface
동기적인인 High Bandwith Memory Bus 로 유사한것이 AMBA의 AXI라고 하는데, 목적은 Shared Memory 인 것 같다.
TI를 예를 들면, Davinci or OMAP에서  ARM 과 DSP 사의 Shared Memory Interface를 통한 빠른 Data 통신이 될 것이다.


세부구성 사항은 아래의 출처에서 보면 될 것 같다.



3.2  NVDLA와 CPU 연결방법 


  • Small NVDLA 와 Large NVLDA 차이 
성능향상을 위해 확장 SRAMIF도 존재하는데, 이를 사용여부가 될 것 이며, 그리고, 중간에 NVDLA를 Control을 하기위해서 Micom 사용여부가 될 것이다. 
Small or Large를 Headless 와 Headded라고 부르는 것 같으며, 둘다 Edge로써 IoT로 ARM이면, Cortex-M에 적합할 것이며,  RISC-V는 PicoRV32가 적합하다고 한다.
핵심기술은 공유메모리를 위한 MMU에 연결하는 것이 될 것이다.


Linux SW 입장에서 보면 UserMode 와 Kernel Mode로 구분이 되고 구현이된다.
세부사항은 아래의 링크에서 확인가능하다.



NVDLA 관련내용
  http://nvdla.org/
  http://nvdla.org/primer.html
  https://devblogs.nvidia.com/nvdla/


3.3 RISC-V or FPGA 와 NVDLA 연결 
OpenCore의 Sifve의 RISC-V와 NVDLA의 기능형태


SiFive의 Risc-V 와 NVLDA 관련내용
  https://content.riscv.org/wp-content/uploads/2018/12/Nvidias-Deep-Learning-Accelerator-Meets-SiFives-Freedom-Platform-Frans-Sijstermans-and-Yunsup-Lee.pdf

FPGA 와 NVDLA 연결내용
  http://nvdla.org/_images/nvdla-vp-fpga.svg
  http://nvdla.org/vp_fpga.html


관련내용
  https://github.com/nvdla/hw
  https://github.com/nvdla/sw
  https://github.com/sifive/block-nvdla-sifive