Monday, August 21, 2017

Docker 다루기

Docker

개념

  • Immutable Infrastructure
    • 호스트OS와 서비스 운영환경(서버 프로그램, 소스 코드, 컴파일된 바이너리)을 분리하고, 한번 설정한 운영 환경은 변경하지 않는다.
  • docker 이미지(실행파일) 자체는 변하지 않는다.
    • cf. 하이퍼바이저 기반 가상머신(Virtual Machine)의 이미지는 계속 변화한다.
  • docker 컨테이너를 또 다른 이미지로 만들 수도 있다.

설치 및 삭제

Editions

  • EE
    • 2017년 3월 2일 Docker Enterprise Edition이 announce됨
      • Basic
      • Standard, Advanced: advanced 컨테이너 관리 및 Security Scanning 기능 추가
  • CE
    • 종래 오픈소스 Docker는 Community Edition으로.
      • 매달 release: Edge 버전
      • 분기별 release: Stable 버전

Versions

  • YY.MM 방식으로.

How to Install @ Ubuntu 16.04 (Xenial)

  • 방안1. repository 구축
  • 방안2. 패키지(.deb) 다운로드
    • 업그레이드 필요시, 다시 다운로드 받아서 설치 필요.
    • pool/stable/ 폴더에서 amd64 선택 후 원하는 버전 선택.
      • amd64 = x64 = x86-64
      • docker-ce-17.06.1 (2017.08.18)
  • 방안3. Script 구동.

How to uninstall

  • 패키지 삭제
    • $ sudo apt-get purge docker-ce
  • 이미지, 컨테이너, 설정파일 모두 삭제
    • $ sudo rm -rf /var/lib/docker

사용법

  • 현재 user를 docker group에 추가
    • Docker daemon connect permission denied 문제 해결 방법
      • $ sudo usermod -a -G docker $USER
      • reboot 또는 {log out 후 다시 log in}
  • 설치 확인
    • $ docker version
  • 이미지 불러오기
    • $ docker images
    • $ docker search Ubuntu
    • $ docker pull xxxx
  • 이미지(실행파일) 실행 후 컨테이너(프로세스) 수행
    • $ docker run –it Ubuntu:14.04 /bin/bash (실행하고 그 안으로 들어감)
      • -i : 입출력 보여주도록
      • -t : 가상 터미널 환경 이용
  • 컨테이너 관리
    • $ docker ps (실행 중인 컨테이너만 보여줌)
    • $ docker ps –a (이미 종료된 것도 보여줌)
    • $ docker start (실행만 하고 들어가지 않음)
    • $ docker attach (실행한 컨테이너 안으로 들어갈 때)
    • ctrl + p + q : 실행중인 컨테이너에서 빠져나오기.
    • $ docker rm -f xxx (실행 중인 컨테이너 지우기)
    • $ docker rmi xxx (이미지 자체를 완전히 지우기)
  • 도커 내에서 GUI 이용하는 프로그램 구동하려면, (예: eclipse)
    • $ docker run 의 인자로 다음을 추가
      • -e DISPLAY=$DISPLAY \
      • -v /tmp/.X11-unix:/tmp/.X11-unix \

참고

Scale-invariant feature transform (SIFT) 개념

Scale-invariant feature transform

  • computer vision에 있어, 이미지의 local feature를 식별;묘사하는 알고리즘
    • 1999년 David Lowe가 특허 출원.
      • Distinctive image features from scale-invariant keypoints (Lowe, 2004)
    • low-level feature 기반 영상 비교에 활용됨
      • 이미지 밝기(intensity) 정보의 low-level gradient가 scale-space에서 어느 방향으로 향하는 것인가만을 살펴보는 방식
      • 즉, gradient 방향성에 대한 히스토그램 특성을 128차원 벡터로 표현
  • 이미지를 feature vector 집합으로 transform.
    • each of which is invariant to image translation, scaling, and rotation, partially invariant to illumination changes and robust to local geometric distortion
  • 다음 4개 step을 통해, 특정 object에 대한 descriptor를 생성
    • Scale-space extrema를 찾기
      • difference of gaussian (DoG)를 이용하여, 의미없는 잡음을 걸러내어 강인한 feature(=extrema)을 찾아냄; 이후 이미지의 scale을 바꿔가면서 동일한 작업을 수행.
      • 즉, 입력 이미지의 scale이 달라지더라도 동일하게 코너점(코너성이 로컬하게 극대이면서 임계값 이상인)으로 검출되는 점을 찾기. -< image pyramid에서 Laplacian(2차 미분값의 합)을 이용하여 급격한 밝기 변화가 일어나는 곳을 찾아냄.
    • Key-point localization & filtering
      • 의미있는 정보들만을 추출.
    • Orientation 할당
      • gradient 방향에 따른 histogram 이용.
    • Descriptor 생성
  • 단점
    • 경계값의 연결, 물체의 일부분이나 전체에 대한 mid/high-level feature에 대해서는 식별할 수 없음.
    • 속도가 느림
    • 원래의 SIFT는 흑백 영상에만 적용 가능; 이후 HSV-SIFT, OpponentSIFT, HueSIFT, W-SIFT, rgSIFT 등이 제안됨.

Other

    Saturday, August 19, 2017

    Variational Autoencoder 개념

    Variational Autoencoder

    Paper

    Original paper

    Tutorial paper

      References and tutorials

      • Manifold hypothesis
        • Generative model 및 deep learning 자체가 기반하고 있는 개념; 즉, 고차원의 실제 데이터($X$)를 저차원의 표현(representation, $Z$)으로 나타낼 수 있음.
      • Auto Encoder
        • encode: Input -> Hidden
          • 입력 데이터가 적은 수의 뉴런으로 압축(encoding, dimensionality reduction)된다고 간주되며, 의미있는 특징을 뽑아내는 과정으로 이해됨.
          • (PCA가 선형적인 한계를 가지는 반면,) AE는 non-linearity 및 뛰어난 차원 축소 능력을 가진다.
        • decode: Hidden -> Output
        • label이 필요없이, 입력 데이터 만으로 파라미터 값을 결정하는 un-supervised learning.
        • hidden layer가 여러 계층 누적된 구조를 stacked autoencoder라고 부름.
          • 누적 계층을 인해 capacity가 늘어나면서, 훨씬 다양한 함수 표현이 가능하다고 함. 또한, 해당 구조를 학습하기 위해서, greedy layer-wise training(각 계층별로 단계적으로 탐욕스럽게 학습)을 수행함.
      • Variational Inference
        • 복잡한 densities를 단순하게 근사하는(approximating) 기법 
      • Kullback Leibler (KL) divergence
        • 두 개의 분포, P와 Q가 일치할 때가 zero이고, 일치하지 않으면 항상 양수(non-negative).
      $$D_{KL}(P||Q) = \int p(x)log\frac{p(x)}{q(x)}$$

      Concept

      • X에 대한 Z의 연산식에 확률 $P_{\theta}(X|Z)$을 추가 적용해 보자! 즉, X와 Z를 random variable로 다루자.
        • 즉, 종래의 Auto Encoder가 단순히 Linear Regression에 의해 X를 구했다면, VAE는 Probability를 함께 이용해보자는 것임.
          • 이러한 확률 모델을 기반으로, confidence bounds를 이용할 수 있음
      • 이제 MLE를 활용해서 각 Z에 대한 X를 잘 찾아내보려고 하는데(즉, $p_{\theta}(x)$를 극대화하기 위해), 다음 식에서처럼 intractable posterior를 구하기 어렵다.
      $$ \arg\max_\theta \left [ p_{\theta}(x) = \int_{z}p_{\theta}(x, z) = \int_{z}p_{\theta}(x|z)p_{\theta}(z) \right ] $$
      • 이제 variational inference를 이용하여 복잡한 확률분포를 단순한 확률분포로 근사치를 계산하자.
      $$q_{\phi}(z|x) \approx $ p_{\phi}(z|x)$$
      • log MLE에 대한 식을 풀어보면 다음과 같다(논문의 식1, 식2). 따라서, evidence $p_{\theta}(x)$의 lower bound를 구할 수 있으며, 이제는 ELBO를 최대화한다. 이 때, 제일 아래 식의 $q_{\phi}(z|x)$에 관한 monte carlo sampling에 의해 estimation을 구할 수 있다고 함. 한걸음 더 나아가면, 논문의 식3을 통해 ELBO에서 KL-divergence term을 한번 더 분리해 냄으로써, 보다 variance를 줄일 수 있다고 함.

      Tuesday, August 15, 2017

      Gradient, Jacobian, Hessian, Laplacian, eigenvector, eigenvalue 개념

      요약

      • Gradient : (다변수 함수 f에 대한) 각 변수에 대한 1차 미분
      • Jacobian : 1차 미분
      • Hessian : 2차 미분
      • Laplacian: 2차 편미분값의 합

      Gradient

      • (다변수 스칼라 함수 f에 대한) 1차 미분을 통해, 함수 f의 값이 가장 가파르게 변하는 방향 및 크기(=기울기)를 표현
        • 어떤 함수를 local하게 linear approximation할 경우
        • gradient descent 방식으로 최소값(또는 최대값) peak를 찾을 경우
        • 영상 입력의 edge 및 edge 방향을 찾을 경우.

      Jacobian

      • Jacobian matrix: the matrix of all first-order partial derivatives of a vector-valued function (= 다변수 벡터 함수에서의 1차 미분값을 나타내는 행렬
        • 미분 기울기를 구할 때, $\Delta x$ 후의 $y$값을 선형 근사하여 예측하는 것과 비슷한 원리
        • 복잡하게 얽혀있는 식을 (미분을 통해 linear approximation시킴으로써) 간단한 근사 선형식으로 만들어주는 것
        • 비선형 연립방정식의 해를 구할 때도 활용됨.
      • Gradient는 단일 변수 함수의 1차 미분을 다변수 함수로 확장한 개념이라면, Jacobian은 이를 다시 다변수 벡터 함수로 확장 적용한 개념임.
      • 벡터 함수 vs 스칼라 함수
        • 벡터 함수: 결과값이 다차원인 함수
        • 스칼라 함수: 결과값이 1차원 값인 함수
          • 스칼라 = 크기만 있고 방향을 가지지 않는 양

      Hessian

      • 함수의 곡률(curvature)를 나타내는 행렬
        • 2차 편미분값의 행렬
        • symmetric matrix(=편미분의 순서가 바뀌어도 결과 동일)이므로, 항상 고유값 분해가 가능; 서로 수직인 n개의 고유벡터를 가짐.
      • 함수의 1차 미분값이 0이 되는 지점(=critical point=stationary point=peak)의 종류가 {saddle point, 극대점, 극소점} 중 어떤 종류인지를 구별하기 위해, 2차 미분값을 구하여 계산할 수 있음
        • critical point에서 계산한 Hessian matrix의 고유벡터(eigenvector)는 함수의 곡률이 큰 방향 벡터를 나타냄
        • critical point에서 계산한 Hessian matrix의 고유값(eigenvalue)은 함수의 곡률(2차미분값)을 나타냄
          • 모든 고유값이 positive = 극소점
          • 모든 고유값이 negative = 극대점
          • 고유값에 posive & negative 포함 = saddle point(안장점) 
      • 영상 입력에 대한 Hessian은 픽셀의 밝기를 나타내는 함수로 활용됨.

      Laplacian

      • 각 변수로의 2차 편미분 값의 합
      • 영상 입력에서의 픽셀 밝기를 나타내는 함수로 활용됨
        • +, - 값을 0~255 사이의 값으로 scale하면 급격한 이미지 밝기 변화를 찾는 필터 효과.
      • vs Gradient
        • Gradient의 크기값은 영상의 밝기 변화가 급격할 수록 큰 값을 나타냄
        • Laplacian의 크기값은 {영상 밝기 변화}의 변화가 급격할 수록 큰 값을 나타냄. 즉, 밝기 변화의 속도가 일정하다면, 작은(0에 가까운) 값을 가짐. 
          • 영상의 밝기 변화가 평면형(planar)를 이룰 때 최소값을 가지며, 극대/극소점에서 처럼 모든 방향으로의 밝기 변화가 심할 때 최대값을 가짐 -> blob이나 corner point 를 찾는 용도로 활용 가능.

      Other

      • 영상 특징점 추출방법 (2014.04)
      • Image scale 다루기 (2014.05)
        • 영상 입력에서의 개체 특징을 계산함에 있어 다중의 크기(multi-scale)를 고려하여 분석하기
          • 방법1) image pyramid: 이미지를 단계적으로(예: 1.05배 또는 1.1배씩) 축소시켜 생성된 이미지들의 집합에 대해 (고정 크기의) sliding window(=filter=kernel)을 이용하여 특정 개체 존재 여부를 판단하는 기법
          • 방법2) scale space: 대상이 가질 수 있는 다양한 스케일의 범위를 한꺼번에 활용하고자, Gaussian blurring으로 smoothing된 이미지들을 이용. ->  scale parameter(=sigma) 값이 높아질 수록 blur 정도가 높아져서 흐릿한 이미지가 생성됨. -> 이미지의 blur 정도가 높아지면 세부적인 detail이 사라지고, 보다 큰 scale에서의 이미지 구조를 파악할 수 있다고 함.
          • 기타 방법) Gaussian Pyramid: bluring과 sub-sampling을 반복하여 입력을 1/2씩 축소하여 피라미드를 생성하는 방식. -> scale 변화가 매우 coarse하게 sampling하는 방식이므로 연산 비용 및 시간 단축되나, 개체 비교/매칭이 다소 어려워진다고 함. 
      • eigenvalue, eigenvector (2013.10)
        • eigenvector : (n x n정방행렬 = 선형 변환) $A$에 의한 변환 결과가 자기 자신의 (0이 아닌) 상수배가 되는 벡터 $v$
          • 이 때의 상수배 값을 eigenvalue(고유값)이라고 정의함.
          • $Av = \lambda v$ ($\lambda \neq 0$)
          • 결국, 주어진 선형 변환에 의해 방향이 보존되는 방향 벡터를 의미함 (예를 들어, 지구의 자전운동에 해당하는 회전변환의 경우, 회전변환에 의해 변화하지 않는 회전축을 고유벡터로 간주될 수 있음)
            • 선형변환이 일어나더라도 방향이 변하지 않는 벡터.
          • 예를 들어, 그림을 선형변환 시켰을 때, 변화하지 않는 축 방향의 벡터로 볼 수 잇음.
        • eigendecomposition (고유값 분해)
          • $AP=P\Lambda$ -> $A=P\Lambda P^{-1}$ 
          • 정방 행렬 $A$를 eigenvector 행렬($P$)와 eigenvector 행렬($\Lambda$)을 이용한 행렬 곱으로 대각화 분해하는 기법.
          • 고유값분해를 이용할 경우, A의 행렬식(determinant=선형변환의 scale 및 방향), A 거듭제곱, 역행렬, 대각합(trace), 행렬 다항식을 손쉽게 계산할 수 있다고 한다.
        • eigenvector 개념에 대해서 가장 잘 설명한 블로그

      Wednesday, August 9, 2017

      Kalman Filter (칼만필터) 개념

      Kalman filter

      • linear quadratic estimation (LQE)
      • (잡음 또는 불확실성이 암묵적으로 포함된 환경에서) 측정된 데이터를 기반으로 통계적 예측을 수행하는 알고리즘. optimal recursive processing algorithm.
        • 예) 자율 주행차의 경우, 차량 및 보행자의 미래 위치를 예측하는 데 활용.
        • 예) 시스템의 상태를 추적하거나 추정하는 데 활용.
        • 따라서, (가우시안 에러를 고려하여) 예측하고자 하는 값의 평균과 분산을 고려한 예측치를 도출하고 있음.
        • 바로 직전 시점에서 추정된 상태와 현재의 측정값을 바탕으로 현재 상태를 예측하는 방식
      • 현재 상태 예측 + 업데이트(현재 상태에서 관측된 측정까지 포함한 값을 통한 예측)
        • prediction/motion updates: convolution 수행
        • measurement updates: 베이즈 규칙을 활용하여, prior 업데이트. 즉, 가우시안의 평균값과 분산값을 업데이트.
      • 측정값에 포함된 (확률에 기반한다고 전제된) 잡음을 제거함으로써 원하는 신호나 정보를 골라내고자 함. 
        • (통계적인 잡음이 포함된) 시계열로 측정된 값에, Baysian inference를 적용하여 변수들의 joint 확률 분포를 추정하는 방법 
        • 비행기, 우주선, 로봇, 미사일의 운항 및 제어에 주로 활용됨.
        • 과거와 현재값을 가지고, recursive 연산을 통해, 다음의 순간에 대한 최적 예측값을 추정하는 것.
        • 수학적으로는 linear system(선형 시스템)의 상태를 예측해서 발생할 수 있는 오류를 최소화하면서 예측을 하는 방식
          • linear system: 시스템을 모델한 수식이 linear operator로 표현이 가능한 시스템
      • 관련 자료
      • Kalman gain = 새로운 측정값을 얼마나 반영하여 추정값 업데이트에 활용할 지를 결정하는 계수. 값이 1에 가깝다면, 측정값이 정확하다는 것을 의미하는 대신, 추정값이 unstable함을 나타냄. 즉, 새롭게 측정되는 값에 의해서, 예측값이 크게 변동한다는 것임. 반대로, 값이 0에 가깝다면, 추정값이 안정적이며, 새롭게 측정되는 값을 상대적으로 적게 반영해서 예측하겠다는 것임. 궁극적으로는 K 값이 작은 상태로 수렴해야, 예측값이 안정적으로 나올 수 있음을 의미함.
        • 상태 변화에 대해서는 State Covariance 및 Measurement Covariance Matrix가 이용됨.
        • 선형(LKF)보다는 비선형에 대한 EKF(Extented) 또는 UKF(Unscented)가 많이 활용됨.

      Wednesday, August 2, 2017

      Coherence, Cross Spectrum, Random Process 개념

      Cross power spectrum

      • Wiki
        • Cross spectral density (CSD) = cross power spectrum = cross-correlation 함수의 fourier transform 
          • 따라서, PSD는 CSD의 특수한 경우($x(t)=y(t)$)라고도 볼 수 있음.
        • 연관된 개념: Total signal power, $R(0)$ = PSD 아래의 면적 = zero lag에서의 autocorrelation = 신호를 구성하는 데이터의 variance.
      • 의미
        • 두 개의 신호가 있을 때, (각 주파수 별로) 한 쪽 신호가 다른 쪽 신호에게 얼마나 많은 linear information을 전달하는 지에 대한 지표를 나타냄

      Coherence

      • Wiki
        • Spectral coherence: 두 개의 신호(또는 데이터 집합) 사이의 관계를 나타내는 통계치; 0에서 1사이의 값으로 표현됨.
          • 즉, 두 개의 신호가 존재할 때, (주파수 차원에서) 한쪽 신호의 변화가 다른쪽 신호의 변화에 '선형적으로' 얼마나 영향을 미치는 지 판단할 수 있음; 선형 시스템에서 외부 잡음이 없다면, 해당 값은 1이 될 것임.
          • 만약 값이 0이라면, 두 신호는 전혀 관련되어 있지 않은 것을 나타냄.
          • 다음의 coherence 식은 때때로 magnitude-squared coherence (MSC)라고도 불림 (MathWorks 설명 참조). 한편, MSC를 계산할 때, 모든 주파수에서 1로 동일한 값을 얻는 상황을 방지하기 위해, averaged MSC estimator을 사용해야 한다고 함 (예: WOSA). 
      $$ C_{xy}(f) = \frac{\left |G_{xy}(f)  \right |^2}{G_{xx}(f)G_{yy}(f)} $$
        • 의미
          • 선형 시스템에서 Input과 output 간의 power transfer 추정에 사용되어 왔음. 
          • Ergodic 신호에 대해서라면, Input과 output 간의 인과관계 추정도 가능함.
          • 그러나, 두 신호의 관계가 선형적이지 않을 경우의 coherence 값은 erroneous 하게 됨.
          • 또한, Input/output 의 causal 관계 해석에 있어 혼동될 여지가 있을 수 있음을 주의할 필요.
          • 다른 한편, 어느 주파수 대역에서 두 신호가 가장 선형적인 관계가 되는 지 찾아볼 수도 있음.
          • 수식으로 살펴보자면, coherence는 각 신호의 spectrum을 이용한 "normalized" cross spectrum으로 볼 수 있음.

        Random processes

        • Random process > Wide-sense Stationary > Stationary > Ergodic
        • 주요 개념
          • Random process (= stochastic process)
            • 무한히 많은 random variables의 집합; 일반적으로는 random variables을 시간 함수로 확장한 것을 의미함(확률 변수가 시간적으로 전개되는 과정).
          • WSS Random process
            • 어느 시점에 구하던지, 평균(1차 평균)과 자기 상관함수(2차 평균)이 일정한 경우
          • Stationary process
            • 시간에 따라 통계적 특성이 변하지 않는 random process; N차 통계에 대해 모두 시간 축의 이동에 무관할 경우 Strictly Stationary.
          • Ergodic process
            • 어떤 함수에 대해서도 앙상블 평균(시간을 고정시켜놓고 무한 개의 샘플함수로 계산한 것)이 시간 평균(임의의 샘플 함수를 선택해서 무한대의 시간에서의 구한 경우)과 같은 경우의 random process
        • 참고 블로그

        Windows 10 High DPI 에서 Java application의 Font 조절

        Reference:  How do I run Java apps upscaled on a high-DPI display?  @superuser.com Summarize 1) Find java.exe you installed.  2) Righ...