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/

댓글 없음 :