레이블이 AI-Machine/Deep Learning인 게시물을 표시합니다. 모든 게시물 표시
레이블이 AI-Machine/Deep Learning인 게시물을 표시합니다. 모든 게시물 표시

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)


10/10/2019

Inference Quantization (양자화/최적화 링크)

  • 양자화 Quantization 란 
ADC의 기본이 되는 Audio의 경우 Sample Rate에 따라 각 Data를 수집한 후, 수집된 Data들을  일정범위을 가진 변수(정수)로 변화시키는게 양자화다.  
즉, Analog Data는 무한하며, 항상 한계를 정해주어야 하는데, X축(Time)은 Sample Rate로 정하고, 
Y축(Amp)크기는 양자화(Quantization)통해 범위를 정해주는 것이다.

결론적으로, 
X축(Time)의 경우는 Sample Rate 이며, Y축(Amp)은 위에서 설명했듯이, 양자화이다. 

PC 혹은 SoC 입장에서 보면 양자화 하는 이유는 간단하다. 
Float 사용안하고 int 기반으로 고속처리를 하고 싶어서이며, 좀 더 범위를 좁히는 것이다. 
하지만 좀 더 범위를 좁히면, 오류가능성과 이에 관련된 부분은 감수를 해야한다. 
물론 DSP를 사용해서 Float를 기반으로 해도 되지만, DSP도 Float로만 계속연산하면, 부하가 상당하다. 


  • Inference Quantization 관련자료들 
Audio/ ADC 의 양자화와 거의 비슷하며, Training 할때는 가능하다면, 최대의 범위가진 값을 가지고 하고, 
Inference를 할때는 양자화하여 이를 축소해서 사용해서 Optimization하는 것이다. 
대부분 weight 와 bias에서 float 값들을 int로 최적화하는 것이므로 각 부분을 확인하자.


Tensorflow의 Quantization
  https://www.tensorflow.org/lite/performance/model_optimization
  https://www.tensorflow.org/lite/performance/post_training_quantization
  https://www.tensorflow.org/lite/convert/quantization

  https://developer.arm.com/solutions/machine-learning-on-arm/developer-material/how-to-guides/quantizing-neural-networks-to-8-bit-using-tensorflow/single-page
  https://je-d.tistory.com/entry/Quantization-and-Training-of-Neural-Networks-for-EfficientInteger-Arithmetic-Only-Inference

  https://medium.com/tensorflow/tensorflow-model-optimization-toolkit-float16-quantization-halves-model-size-cc113c75a2fa
  https://medium.com/@fanzongshaoxing/post-training-quantization-of-tensorflow-model-to-fp16-8d66b9dfa77f

Jetson AGX Xavier의 DLA 관련자료
  https://devblogs.nvidia.com/nvdla/

Quantization INT8
  https://www.tensorflow.org/lite/performance/quantization_spec
  https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/how_tos/quantization/
  https://intel.github.io/mkl-dnn/ex_int8_simplenet.html
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-developer-guide/index.html#mixed_precision_c
  https://medium.com/tensorflow/high-performance-inference-with-tensorrt-integration-c4d78795fbfe
  https://towardsdatascience.com/low-precision-inference-with-tensorrt-6eb3cda0730b


TF-TFT
  https://docs.nvidia.com/deeplearning/frameworks/tf-trt-user-guide/index.html#precision-mode
  https://docs.nvidia.com/deeplearning/frameworks/tf-trt-user-guide/index.html#int8-quantization

이전자료 GTC 부분을 세부검토 필요
  http://on-demand.gputechconf.com/gtc/2017/presentation/s7310-8-bit-inference-with-tensorrt.pdf

NVIDIA 관련교육
  https://www.nvidia.com/en-us/deep-learning-ai/education/

9/20/2019

IOU (Intersection over Union)

1. IOU 관련사항 


  • IOU (Intersection over Union)

아래와 같이 두개의 Box가 겹칠 경우 Intersection의 부분의 비율을 알아보는 것이다.




출처
  https://medium.com/@ageitgey/snagging-parking-spaces-with-mask-r-cnn-and-python-955f2231c400


1.1 IOU 계산 방법 

  • IOU 계산방법 
  https://inspace4u.github.io/dllab/lecture/2017/09/28/IoU.html

상위 방법은 Python으로 사용하면 쉽게 구할 수 있을 것 같은데, 소스의 동작원리를 정확하게 모르겠다.
일반적인 좌표를 사용하게 되면 어떻게 구현이 될까라는 것도 궁금하다

  • 좌표로만 IOU 직접 계산방법
좌표구조로 구성되고 BBOX가 사각형이라고 하면 아래와 같이 구성이 될 것 같다.
Left(X), Top(Y) , Width, Height

이때 사각형의 대각선 좌표값으로,  X, Y 좌표와   (X+Width) , ( Y+Height) 좌표 두개로 쉽게 IOU를 감지하고 이를 계산가능

ex) A-BBOX의 좌표   X(3) , Y (3) , widht (3)  ,height(4) 이라고 하면 아래 두 좌표로 4각형을 인지가능

  1. A-BBOX의  A-MIN 좌표  (3,3)
  2. A-BBOX의  A-MAX 좌표 (6,7) 

  • B-BBOX 의 B-MIN 좌표  X >=3  &&  Y>=3 일 때  
    1. B-MIN 좌표의 X, Y가 아래 두 조건 충족시 IOU 계산 
      1. 3 <  X <  6  (3+width)
      2. 3  < Y  < 7  (3+height)
    2. InterSection Size  =  A-MAX - B-MIN   (각각의 크기나옴)

  • B-BBOX의 B-MIN 좌표   X < 3  || Y  < 3 일 때   
    1. B-MAX 좌표의 X, Y가 아래 두 조건 충족시 IOU 계산
      1. 3 <  X <  6  (3+width)
      2. 3  < Y  < 7  (3+height)
    2. InterSection Size =  B-MAX - A-MIN   (각각의 크기나옴)

상위와 같이 InterSection Size만 알면, 모든 계산이 쉬어진다.
현재 상위 조건은 모눈종이에 직접 그려서 생각해본 것 이며, 오류가 아직 존재할 수 있다.
추후 소스로 작성된 소스 검증을 해봐야겠다.


  • 모눈종이 PDF 문서

머리가 나뻐서 자꾸, 모눈 종이가 필요해서 아래 링크
  http://blog.daum.net/miparang/7058252


  • IOU 관련소스 자료모음 
  https://stackoverflow.com/questions/4549544/total-area-of-intersecting-rectangles/32244956
  https://bskyvision.com/465

아래의 소스는 상위 소스에서 간단히 IOU를 만드는 소스를 만들어 보았는데, 아직 검증을 제대로 해보지를 못했다.


static int max(int v1 , int v2)
{
 if(v1 > v2) return v1;
 else return v2;
}

static int min(int v1 , int v2)
{
 if(v1 > v2) return v2;
 else return v1;
}

static int interSection(int Ax1, int Ay1, int Ax2, int Ay2, int Bx1, int By1, int Bx2, int By2)
{
    int left   = max(Ax1, Bx1);
    int top    = max(Ay1, By1);
    int right  = min(Ax2, Bx2);
    int bottom = min(Ay2, By2);
    int interArea = 0;

    if (left < right && bottom > top)
     interArea = ((right - left) + 1) * ((bottom - top)+1);

   return interArea;
}



1.2  IOU 사용용도 

IOU 사용용도는 다양한  것 같으며, 일단, 아래의 사이트 에서 처럼  실제 BBOX와 예측된 BBOX의 차이를 알아서 교정을 위해서 도 사용이 되어진다.

  1. Ground-Truth bouning Box:  실제 모델의 Box, 손으로 직접 Label
  2. Predicted bouning Box:  Deep Learning을 통해 예측된 BBOX 

IOU 관련내용
  https://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/

또한 동일한 Object를 여러개의 Object로 인식을 할 경우, 이때  IOU값에 따라 나머지를 없애는 데에도 사용되어 지는 것 같다.

더불어 Tracking 알고리즘에서도 역시 IOU는 사용이 되어지는데, Object Detection이 되고 이전 Frame 과 이후 Frame IOU값을 가지고 지속적으로
Tracking 하기위해서도 사용되어지는 것 같다.

이외에도 개인적으로 생각을 해보면, ROI(Region of Interest) BBOX 와 Object Detection 된 BBOX의 IOU를 이용도 가능 할 것 같다.
이는 각각의 ROI의 영역이 서로 겹칠 경우,  상위 Smart Parking System일 경우 이용 가능할 것 같다.

간단하지만, 생각해보면 아주 다양하게 이용이 되어지기 때문에  꼭 필요하다

7/12/2019

Video Annotation Tool(VATIC)

Video Annotation Tool

VATIC(Video Annotation Tool from Irvine, California) 이라고 부르며, 무료로 제공해주는 Video Annotation Tool 이다.
VATIC은 Ubuntu기반에서 Apache 2.2 HTTP Server 와 MySQL를 설치된 상태에서 테스트가 가능하다고 한다.

$ git clone https://github.com/cvondrick/vatic
$ cd vatic 
$ ./vatic-install.sh  // 필요한 Package 설치 (python, mysql), 

$ cat ./vatic-install.sh  // Shell Script 확인 
sudo apt-get install -y git python-setuptools python-dev libavcodec-dev libavformat-dev libswscale-dev libjpeg62 libjpeg62-dev libfreetype6 libfreetype6-dev apache2 libapache2-mod-wsgi mysql-server-5.1 mysql-client-5.1 libmysqlclient-dev gfortran 

sudo easy_install -U SQLAlchemy wsgilog pil cython mysql-python munkres parsedatetime argparse
sudo easy_install -U numpy

git clone https://github.com/cvondrick/turkic.git
git clone https://github.com/cvondrick/pyvision.git
git clone https://github.com/cvondrick/vatic.git

cd turkic
sudo python setup.py install
cd ..

cd pyvision
sudo python setup.py install
cd ..

echo "*****************************************************"
echo "*** Please consult README to finish installation. ***"
echo "*****************************************************"


$ dpkg -l python-setuptools python-dev libavcodec-dev libavformat-dev libswscale-dev libjpeg62 libjpeg62-dev libfreetype6 libfreetype6-dev apache2 libapache2-mod-wsgi mysql-server-5.1 mysql-client-5.1 libmysqlclient-dev gfortran  

+++-===========================-==================-==================-============================================================
un  apache2                                               (설명 없음)
un  gfortran                                              (설명 없음)
ii  libfreetype6:amd64          2.6.1-0.1ubuntu2.3 amd64              FreeType 2 font engine, shared library files
ii  python-dev                  2.7.12-1~16.04     amd64              header files and a static library for Python (default)
ii  python-setuptools           20.7.0-1           all                Python Distutils Enhancements
dpkg-query: no packages found matching libavcodec-dev
dpkg-query: no packages found matching libavformat-dev
dpkg-query: no packages found matching libswscale-dev
dpkg-query: no packages found matching libjpeg62
dpkg-query: no packages found matching libjpeg62-dev
dpkg-query: no packages found matching libfreetype6-dev
dpkg-query: no packages found matching libapache2-mod-wsgi
dpkg-query: no packages found matching mysql-server-5.1
dpkg-query: no packages found matching mysql-client-5.1
dpkg-query: no packages found matching libmysqlclient-dev


How to install Vatic tool
  https://glentimemaker.github.io/Install-and-Use-Vatic-Annotation-Tool/

VATIC(Video Annotation Tool from Irvine, California) 활용
  http://www.cs.columbia.edu/~vondrick/vatic/

VATIC Source
  https://github.com/cvondrick/vatic

2/07/2019

Deep Learning 의 기초자료 수집 (CNN)

1. Deep Learning 부분 자료 수집 

오늘 Meetup의 Data Science 모임을 다녀와서 Deep Learning에 관련된 용어 및 관련구조 흐름을 파악하고, 관련된 부분을 정리한다.
최근에, Machine / Deep Learning에 대해 알기 위해서 자료수집을 비롯하여, 관련내용들을 정리하기로 하였다. 

  • CNN(convolutional neural network)
Deep Learning하게 되면 꼭 듣게되는 CNN 설명이며, Wiki 설명이 잘되어있다. 

합성곱(Convolution)을 좀 더 이해하고자 하면, 동작원리를 알면, 쉽게 상위 CNN부분도 이해가 간다.
구지, Deep Learning 이 아니여도, DSP에서도 Audio/Video에서도 사용되는 것이므로, 반드시 기본개념은 이해해야한다.
아래의 그림예제가 있으니, 쉽게 이해가 갈 것이라고 생각되어진다. 

  • Tensorflow Colab 기반으로 실습 및 설명
최근에 다시 찾은 것으로 설명 및 실습이 너무 잘되어있다. 


  • 2D Convolutions 의 기본동작 
Convolutions 의 동작을 보면 아래와 같이 좌측 Input 과 Filter 역할을 하는 Kernel 과 최종 Output로 볼 수 있다. 
좀 확대해서 생각하면 Filter 개념으로도 생각해도 될꺼 같다. 

https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1

  1. Input 5x5 Matrix (청색)
  2. Kernel 3x3 Matrix  
  3. Output 3x3 Matrix  (Weight의 합으로 특징을 추출, 녹색)

좌측청색은 Input 이며, Kernel(Weight)이 합성곱(Convolution)을 이용하여, 슬라이드로 움직이면서 Output(Weight 합) 추출 

Kernel 
0 1 2
2 2 0
0 1 2

  • 2D Convolution 의 Padding (확장)
2D Convolution 기본동작시 Kerenl을 Input의 양끝까지 적용하여 사용하려고 하면 Padding 문제가 생기는 것으로 보인다. 
  1. Input 5x5 Matrix
  2. Kernel 3x3 Matrix
  3. Output  5x5 Matrix 
결과적으로 Output 즉 특징을 3x3 -> 5x5로 확장하고자 할때 사용하는 것으로 보인다
Kernel을 순차적으로 움직이면, Kernel 과 동일한 Output은 3x3이지만, Padding하여, 확장한다. 
아래를 보면 Input 과 Output Matrix가 동일하다. 
물론 Input의 Padding으로 양끝의 오차는 발생할 것이며, 이를 감수하고 사용할 것 같다.  

https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1

  • 2D Convolution 의 Striding (축소)
상위기본에서 Output 즉 특징을 3x3에서 2x2로 축소하고자 할때 사용하는 것으로 보인다. 
원래대로 하면, Output은 Kernel과 동일한 3x3 으로 나와야 하지만,한 번 건너 뛰어서, 이를 축소한다. (3x3->2x2)
  1. Input 5x5 Matrix
  2. Kernel 3x3 Matrix
  3. Output  2x2 Matrix 


  • 영상에서 특징추출
상위 자료를 보면서 이전에 Camera의 Bayer Pattern 이 기억이 나면서 각 그림들이 쉽게 이해가 간다. 
재미있는 것은 아래와 같이 Edge도 추출도 하고,  추출된 Feature들을  Visualzation도 가능하다고 하는데, 그 부분이 많이 흥미로웠다.

  1. 좌측 Input 
  2. 중간 kernel 
  3. 우측 Output

Convolution 의 이해 내용출처 

  • CNN의 사용되는 구조 및 용어파악
MNIST의 CNN(Convolutional Neural Network)의 구조인 것으로 보이며, 상위 사이트 설명과 많은 부분이 중복되지만, 쉽게 설명이 되어있어 쉽게 CNN을 이해했다. 

Batch Size 부터 각 용어들을 설명해주어 쉽게파악 
AI에 관련된 기술 및 관련내용이 많다고 해서 가입하고 관련내용들을 보고 있다. 
  https://www.kaggle.com/
  https://developers.ascentnet.co.jp/2017/11/24/kaggle-process-review/
  https://en.wikipedia.org/wiki/Kaggle
  https://www.kaggle.com/c/titanic/kernels


  • Data Pipeline 의 구조 (BigData)
Cloud 기반으로 BigData를 수집하고 이를 Piple Line형태로 연결하여 빠르게 데이타를 연결하고 Deep Learning를 학습한다.
  https://www.dativa.com/best-practice-data-pipeline-architecture-in-2018/
  https://docs.aws.amazon.com/ko_kr/datapipeline/latest/DeveloperGuide/what-is-datapipeline.html
  https://cloud.google.com/solutions/big-data/?hl=ko

  • AWS/Azure/Google  DATA  Pipe line
  https://aws.amazon.com/ko/datapipeline/
  https://docs.microsoft.com/ko-kr/azure/hdinsight/spark/apache-spark-creating-ml-pipelines
  http://www.ciokorea.com/news/39248
  https://cloud.google.com/data-science/?hl=ko
  https://aws.amazon.com/ko/blogs/korea/get-started-with-deep-learning-using-the-aws-deep-learning-ami/

  • DATA Pipeline 한글자료
  https://www.slideshare.net/deview/236-67609108
  http://slides.com/openstack/sktechx11th#/

  • xgboost
다른 한 외국 친구가 아래 것을 자꾸 언급하면서 최적화 및 관련사항을 문의하고 하는데,  이해하지 못해 아래와 같이 관련자료만 수집한다.
  https://brunch.co.kr/@snobberys/137
  https://xgboost.readthedocs.io/en/latest/

  • Bigdata 의 Data Visualization
처음 visualization이 OpenCV이나 이런 Vision 관련부분을 처리하는 기능의 의미하는 줄 알았는데, 관련모임에서 만난 친절한 다른 외국인이 자세히 설명해주어 이해하기가 쉬었다.
일단, Deep Learning System Training 혹은 Inference를 하게 되면, 이를  확인 및 검증을 위해서 수치화 및 통계 자료가 필요한데, 
이를 쉽게 그래프 및 다양한 차트로 이를 보여주는 기능이다.

Tensorflow에서 Data Visualization 하면 Tensorboard라고 생각하면 될 것 같다.
  https://en.wikipedia.org/wiki/Data_visualization

  • Data Visualization에서 많이 사용되어지는 Zepplein
제플린은 Android에서도 많이 들어보고, Spark에서도 들어보고, 여러군데에서 사용이 되어지는것 같은데, 
Data Visualization을 위해서 많이 사용되어지는 것 같으며, 나중에 설치해서 한번 이용해보자.


오래전에 자료 모은 것 과 같이 어떤 구조로 동작이 되는지 어떻게 임베디드에 적용이 되는지를 확인을 해야 겠다.
현재 파악된 것은 상위 Data pipe line을 가진 Server에서 AI모델을 Training을 하며, 생성을 하는데, 
이때 많은 데이타를 이용하기위해서 배우는 것이 Big data 이며, 이런 Data들의 흐름을 연결하는 것이 Pipeline이다. 
내가 Server가 있다면, 각각 아래와 같이 구성을 해야 할 것 같으며, 마지막에 Jupyter로 연결하여 구성하면 될 것 같다. 

  • Bigdata
  1.   Hadoop
  2.   Apache Spark
  3.   Apache Zeppelin
  4.   https://jupyter.org/

일단 라즈베리파이에서 소스를 Download하여 구성을 해보자.
골치아픈 딥러닝
 https://github.com/tensorflow/tensorflow
 https://gitlab.com/inverseai/tensorflow/tensorflow

Getting Started with TensorFlow for Raspberry Pi
 https://www.youtube.com/watch?v=ukkNek46h_8

How to Set Up TensorFlow Object Detection on the Raspberry Pi
 https://www.youtube.com/watch?v=npZ-8Nj1YwY

Detect ANY Object with Raspberry Pi and TensorFlow
 https://www.youtube.com/watch?v=zqIBce4LKx8


  • Gitlab의 다중화자 음성합성 엔지 소스 및 관련자료 
Tensorflow로 구성이 되어있는데, 지금 나의 실력으로는 이해를 하지 못하겠다. 
추후 음성을 Text로 변경해야할일 있을때 다시 보도록 하자. 
  https://git.quendi.moe/public-archive/multi-speaker-tacotron-tensorflow

  • Machin Learning 기본학습자료 
처음 기초부터 각 모델에 대한 설명을 비롯하여 잘 설명해주고 있어서 좋다. 

  • Colab
Google에서 무료로 제공해주는 Jupyter로 간단하게 테스트하고 사용하기가 쉽다
  https://colab.research.google.com/notebooks/welcome.ipynb

  • Jupyter notebook
  https://dataninja.me/ipds-kr/python-setup/
  https://jupyter.org/
  https://datascienceschool.net/view-notebook/f9d9fddb7cc7494a9e4be99f0e137be0/

2/05/2019

MNIST 관련자료

1. MNIST 의 기본이해 


가장 기본이되는 Neural Network로 MNIST는 Tensorflow를 가던, Keras를 가던 가장 기본이되는 학습이며,  Hello World 처럼 이 구조를 이해를 해야, 
CNN이든 다른 구조를 이해하기가 쉽다.

  • 기본동작
  1. 28 픽셀 의 정사각형으로 데이타 입력  28x28 = 784  Pixel로 구성 
  2. 이 정사각형에 입력된 데이타를 각 단계를 걸쳐 최종 각 0~9의 숫자로 인식 

1의 경우 아래의 28x28 =784 Pixel 로 표시되며 이는 Matrix로 보면 다음과 같다. 



  • 전제조건
칼라가 아닌 흑백이며 명암구분됨 (Gray Scale)

  • MNIST의 모델 구조  및 동작 
  1. Input Layer는 상위 Matrix와 일치 (총 784 Pixel 구성)
  2. Hidden Layer1(renu)는 128 Node로 구성 (Hidden Layer의 Node구성 변경가능)
  3. Hidden Layer2(renu)는 64 Node로 구성  (Hidden Layer의 Node구성 변경가능)
  4. Output Layer(softmax) 10 Node로 classfication 구성되며, 이곳에서 숫자선택됨 (다중 선택도 가능)
  5. 상위 선택된 10개 중 다시 최종 확률이 높은 것으로 결정 

아래의 구조를 MLP(MultiLayer Peceptron)이라고 하며 이는 CNN의 기초라고 하는데, 각 함수들을 이해하도록 해야겠다. 
동작방식은 각 Layer를 걸쳐 특징을 추출하여, 이를 최종선택되는 구조이다. 
최종 선택시 사용되는 것이 Activation Function 이며, 아래와 같이 각 ( Softmax/Sigmoid/Relu) 사용되어진다. 

  • Activation Function
Weight, Bias를 적용되어진 상태에서 어느 기준에서 On/Off를 하는 것이라고 생각하면 될꺼 같다. 
그러므로, 각 함수의 특징을 어느 정도는 인지를 하고 있어야 할 것으로 보인다. 
쉽게 생각하면,  Threshold 를 어디에 어떻게 적용하는 역할이 될 꺼 이기 때문인 걸로 생각되어진다. 


  • 기본 MNIST 모델 구성확인 
Activation 함수로 Sigmoid 대신 ReLu를 사용했으며, 변경해서 사용해도 된다. 
https://mxnet.apache.org/versions/1.3.1/tutorials/python/mnist.html


세부설명 및 참조 


1.1  Weight 의 Matrix 구성방법

각 Layer를 연결할때 필요한 것이 Weight 와 Bias 이며, 이를 Matrix 형태로 구성하여 Feature를 추출한다고 한다. 
Input 과 Weight Matrix를 구성하는 방법이며, 쉽게 생각하면 행렬(Matrix)를 어떻게 해서 Faeture를 추출할지를 구성하는 방법이다. 


  • Weight 의 Matrix 의 구성방식
  1. Feature를  Column 로 구성 
  2. Feature를  Row로 구성 

  • Feature as Column 방식 
  1. Column: Feature ( Weight 곱)
  2. Row: Sample 의 갯수 (각 Node)
상위 X들은 Sample 즉 각 Node의 갯수 



  • Feature as Row 방식 
  1. Column: Sample의 갯수 (각 Node)
  2. Row: Feature



  • Matrix의 기본동작과 구성방식 
  1. Feature as Column 방식  :  X * W  + B 
  2. Feature as Row 방식       : W * X  + B
Feature의 위치에 따라 상위와 같이 Weight의 위치가 변경이 되어진다. 


  • Matrix 로 Weight 와 Bias 결합
각 Layer는 Weight의 합으로 연결되어  Activation 함수를 걸쳐 최종 Output Activate를 결정함
Activation 함수: Sigmoid /ReLu 등 다양함



1.2  Feature as Column 방식 Matrix 예제 


각 Layer 구성이 다음과 같이 구성이 되어있다고 생각하고, 각 Layer0 과 Layer1을 Matrix로 연결해보자. 




  • 2개의 Layer Feature as Column 방식으로 연결 
  1. Layer0:  4 Node  
  2. Layer1:  6  Node  

Layer0의 Input Node 4 와 Weight는 반드시 동일 

Layer1 의 Output Node 이므로, Output Node 6개는 Bias와 동일하게 맞춤

최종 Layer 0 과 1의 구성되는 Matrix 
이곳에 최종 Activation 함수만 적용하면된다.
 


상위 각 Matix의 구성 살펴보자 (Red: X , Blue: W , Green:B/Y)




상위그림을 보고 쉽게 이해하자.

Weight/Bias 의 Matrix 의 이해 


1.3 MNIST의 의 Matrix 구성과 Bias 의 필요성

상위 맨위의 MNIST를 각 Layer 중 Input Layer 와 Hidden Layer1을 Matrix로 구성을 보도록하자.

  • MNIST의 Input Layer와 Hidden Layer1 연결 
  1. Input Layer:  784 Node
  2. Hidden Layer1: 128 Node
구성으로 될 것이며, 이를 상위와 같이 Matrix를 구성하면 상위를 참조하여 구성한 후 ReLu로 최종 Activation을 하면된다. 

  • Bias 의 필요성
처음 Bias의 필요성에 대해서 왜 사용하는지 몰랐으나, 지금까지 이해한 것으로는 단지 offset이 아닌 Activation의 최종 Threshold를 조절하기 위해서 보정값으로 봐야 할 것 같다. 

  • Activation 함수들 과 Bias
더불어 Activation 함수들이 많은데,  왜 이 많은 함수들을 사용하는지 완벽히 이해하지 못했지만, 짐작으로 보면,  
각 Activation 함수의 각 동작의 조건이 달라지기 때문으로 보인다. 
예를들면, 각 x의 range에 따라 y의 range 범위의 변경이 되던가 혹은 함수마다 range, 범위가 다른것이 존재하여 이를 목적에 맞게 사용하는 것으로 보인다. 
더불어 bias는 이곳에 offset으로 범위(range)의 위치를 변경하여, 최종 Threshold 값을 결정하여 on/off를 결정하는 것으로 보인다. 
 
  • Weight 와 Bias 와 Activation 
  1. Weight: 각 Neuron에는 Weight , 즉 가중치값이 존재하며, 이는 각 특징을 추출
  2. Bias:  일종의 최종 offset 이며, Activation 값에 영향을 미쳐 변경 
  3. Activation:  Machin Learning에서 On / OFF 를 결정하는 함수로 각 특성이 있음
    1. Sigmoid
    2. ReLu
    3. Softmax 등 다양함 

  • Matrix 구성으로 본 Weight와 Bias 
  1. Input Layer:  784 Node
  2. Hidden Layer1: 128 Node

상위 예제로 간단하게 Matrix를 구성해보도록 하고 Weight 와 Bias를 넣어보자.
  1. W:  Weight                     784x128구성 
  2. X:  Input Node (Sample)    784 구성하지만, 옆으로 구성 
  3. B:   Bias                         128 구성 (Output과 항상 동일)
  4. Y:  Output Node (Result)   128 구성되며 최종 Activation 함수 적용(ReLu)



Matrix Input/Output 구성방법 
Layer간에 Input /Output Node의 갯수의 구성을 맞추기 위해서 Matrix를 수정 


두 Layer 간의 구성 
  1. Weight 와 Input 적용          (W1 * X1 + W2* X2 + ... W64 * X64)
  2. Bias 적용                          (W1 * X1 + W2* X2 + ... W64 * X64) + B1
  3. Activation 적용         Active( (W1 * X1 + W2* X2 + ... W64 * X64) + B1 )

Weight 와 Bias를 넣은 후 최종 Softmax 연산 



각 Activation 함수들 특징들은 아래 링크 참조 

ReLU
Activation Function으로 일정값 이상이면, On이 되어 동작 

Softmax

Softmax vs Sigmoid 


  • Get started with TensorFlow's High-Level APIs (Google I/O '18)
Colab에 대해서 나오며, 설명을 보면 MNIST 관련부분과 CNN 설명해주고 있다. 
  https://www.youtube.com/watch?v=tjsHSIG8I08

  • Tensorflow의 MNIST 설명 
기본 MNIST

CNN을 이용한 MNIST 

4/23/2018

Deep/ Machine Learning 자료 와 Cuda 자료 링크들

현재 Deep learning 및 AI 에 관련일을 하지 않기 때문에, 관련부분은 링크로 자료수집하며, 추후 시간이 된다면, 관련교육내용 사항을 정리하자. 
추후 관련일을 하거나 공부할 일 있다면, 그때 다시 재 정리를 하도록 하자. 
  • Machine 과 Deep Learning의 차이 
아래의 그림을 보면, AI에서 Machine Learning으로 그리고 Deep Learning의 변화를 간단히 볼 수있다. 
차이는 존재하겠지만 그 기본은 동일한 것으로 보인다. 

  • Cell 기반의 Layer의 구조 
Machine / Deep Learning의 구조를 보면, 각각의 Cell 로 구성된 Layer들로 구성되며, 이는 인간의 뇌의 뉴런/ Cell을 기본구성으로 생각하고 
이를 만들었다고 하는데, 글을 보면 추상적으로 는 이해가 되지만, 정확히 어떻게 동작되는지는 이해가 되지 않는다. 



  • 인간의 뉴런구조 와 이를 구현하기 위해서 만든 Cell 구조 




  • Tensorflow 와 Keras 기반으로 설명해주는 Deep Learnig MNIST 설명부분 
어느 사이트를 가든 기본으로 설명되는것이 MNIST인데, 이부분을 정확하게 이해하도록해야겠다.
  https://codelabs.developers.google.com/codelabs/cloud-tensorflow-mnist/#0
  http://cs231n.stanford.edu/syllabus.html
  http://neuralnetworksanddeeplearning.com/chap1.html


  • Docker 설치 및 구조
Machine / Deep Learning을 보다 보면, Docker를 자주 사용해야하는데, 관련부분도 자세히 알아야함
  https://datascienceschool.net/view-notebook/661128713b654edc928ecb455a826b1d/


TensorFlow 영어 교육 및 실습

  • 모두를 위한 딥러닝 관련 학습자료 

딥러닝의 Andrew Ng 교수내용이라고 하는데, 내용이 좀 많이 길다.
  http://jaejunyoo.blogspot.com/2017/03/kr-nips-2016-tutorial-summary-nuts-and-bolts-of-building-AI-AndrewNg.html

  • 상위자료 및 다양한 자료들을 수집해놓은 사이트 
  http://hunkim.github.io/ml/


  • Tensorflow 관련내용들 링크 
  https://www.slideshare.net/JunKim22/tensorflow-tutorial-68885890
  https://github.com/golbin/TensorFlow-Tutorials
  https://github.com/uosdmlab/tensorflow-tutorial
  https://www.tensorflow.org/tutorials/

  • Deep learning 와 Cuda관련자료
Deep Learning관련부분을 찾다보면, 연산량때문에 반드시 Nvidia의 Cuda가 나오며, 관련자료들을 링크 
  http://blog.naver.com/PostList.nhn?blogId=sogangori&from=postList&categoryNo=6
  http://blog.naver.com/PostList.nhn?blogId=sogangori&from=postList&categoryNo=7
  http://jaejunyoo.blogspot.com/2017/01/generative-adversarial-nets-1.html
  https://plus.google.com/+JaeJunYoo
  http://blog.naver.com/PostView.nhn?blogId=laonple&logNo=220648539191


  • Yollo and Yollo9000 설명 
설명이 비교적 쉽게되어 있어서 대충은 이해가 가지만, 완벽히는 이해가 되지 않지만, 추상적으로는 알겠다. 
이해가 되지 않는 이유는 보면, 수학함수와 왜 사용을 해야하는지 이해가 되지 않는다. 
  http://blog.naver.com/PostView.nhn?blogId=sogangori&logNo=221011203855&parentCategoryNo=6&categoryNo=&viewDate=&isShowPopularPosts=true&from=search

  • Caffe / Caffe2
  http://caffe.berkeleyvision.org/
 

이쪽 자료가 너무 방대해서 한번에 알기는 너무 힘들며, 라즈베리파이로도 Tensorflow는 지금 현재 지원이 되는 방향으로 간다.
현재 이쪽 흐름이 어떻게 갈지 모르기때문에 추후 지켜보고 전망 후 사용할 플랫폼 결정이 필요하며,
Tensorflow or Caffe 이외 다른 것도 존재하므로, 지금 공부해야할 것을 정하기가 좀 애매하다.
이 모든 것을 공부하기에는 너무 많다.

  • Bigdata 
BigData 부분은 Machine/ Deep Learning의 학습을 위해서 반드시 필요하다. 
  https://ahyuo.blogspot.com/search/label/Bigdata

  • 임베디드 관련보드 기반의 AI 추후 자료찾기 
  1.  TI 기반으로 구성된 보드에서는 AI 관련자료를 찾기가 힘듦
  2.  TI 역시 DSP기반으로 제공할 것 같은데, 이부분도 지속적으로 검색해야함
  3.  NVIDIA의 Jetson TX1/TX2  (Tensorflow 및 TensorRT 지원)
  4.  Zynq (Xilinx Soc)  JetsonTX2 와 비교해봐야함 
  5.  Google기반의 TPU가 지원가능한 SoC가 나올 경우 관련 SoC 검색
  6.  Qualcomm도 DSP 기반으로 상위 플랫폼지원을 한다고 하는데, 추후 검색

7/12/2017

TensorFlow 관련자료링크 와 비교되는 Open Source

Tensorflow를 관련내용만 자료수집하며, 추후 사용할 일이 있다면, 별도로 공부를 해야할 것 같으며,  Deep Learning이나 Machine Learning에 대해 
구조적인 세부사항까지 알아야 할 것 같다. 

Tensorflow 공식사이트 
Google에서 만든 Deep/Machine Learning  Free Open Source로 현재 많이 사용 
  https://www.tensorflow.org/


Tensorflow 및 Machin Learning 강의자료 (책 및 Youtube)
  https://tensorflow.blog/