1/22/2024

Rust 기반의 Virtio

1. Rust 언어 

Rust는 대충 다 알 거같아, 만약 필요하다면 그때 다시 언급하며, Linux Kernel 이나 Open Source에서 가장 이슈인 언어인 것 같다. 
나도 보기만 여러번 보고, 간단히만 사용해봤지, 아직 더 알아야 하기에 나중에 안 다음에 자세히 남기겠다. 

Rust 관련 

Linux 
추후 한번 사용해보지 


2. 가상화(Virtualization)

가상화는 한마디 Hypervisor라는 가상 CPU를 이용하여 Guest OS를 실행하여 동시에 동작시키는 것이다. 
일단 Docker 와 가상화 차이부터 그림으로 알자 

Docker 와 가상화 차이 
Hypervisor 존재여부차이  

가상화(Virtualization,Hypervisor)
이전에 간단히 가상화 부분을 정리한 것이며 간단히 참고만하자 

AMP/SMP 관련내용 
상위내용에 AMP/SMP 빼먹어서 아래참고  

ARM용 Multi Core방식소개 
오래전에 ARM용 Multi Core 방식을 간단히 정리한 것이며, 틀리수 있다. 
(상위에도 ESP32링크에도 있음) 



2.1 가상화 중요성 

요즘 Embedded SoC/AP의 성능이 좋은 것은 기본적으로 Hypervisor 사용하고 이를 통신하면서 사용한다. 
자동차로 보면, IVI 를 가상화로 돌리는 것을 많이 볼 것 같다. 
Host OS는 RTOS(QNX)기반으로 사용하고 Guest OS를 Linux/Android로 동작하겠다는 것 같으며, 거의 추세로 가는 것 같다. 
임베디드에서도 가상화는 필요하다. 


2.2 Window 가상화 

Window에서는 주로 나의 경우, Virtual Box 와 VMWare로 사용했으며, 아래를 참조하고 알아두기만 하자.
최근에 Broadcom이 VMware인수 했으니, 어떻게 될지도 지켜봐야하니 

  • Virtual Box 
VMWare의 경우, 유료라서 내가 Blog에 기록은 안한 것 같은데, 찾으면 나올 것 같기도 하다(귀찮음, 나중에 다시 VMWare는)

  • VMWare
나도 사용한지 너무 오래되었으며, 가장 기대하는 것은 Cloud 기반이며, 추후 사용해보고, 그때~~~  


참고로, 상위 두 개도 Linux에서 지원해주며, Window용으로 한정해서 생각하지 마시길~ 


2.3 Linux Rust 기반 Virtio

Linux에서 사실 Virtio는 사용한 기억이 거의 없으며, 나중에 시간이 되면 한번 사용해보겠다.

  • Virtio 관련설명 
설명을 잘해주셔서 감사하며, 나중에 사용해보도록 알아보도록 하겠다. 
QEMU이 이것을 사용하는 줄은 몰랐으며, QEMU은 Yocto에서 쉽게 사용가능하다  
KVM도 지금보니, 다시 업데이트 된 것 같으며, Wiki에서 쉽게 이해하시길 

  • Rust Virtio
그림을 보면 쉽게 이해가 가며, 가장 내가 주의깊게 보는 것은 공유메모리이며, 나중에 좋은 AP에서 이용해보도록 하겠다.  
관련소스 

  • Chip 제조사 링크 
참고로, Samsung Exynos 처럼 TI 도 카메라 12개 까지 되는 것이 봤는데, 위치를 찾았다.

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으로 진행을 한 것으로 보이며, 다양하게 존재하며 
대부분 카메라 중심으로 되어있다.