2014년 8월 17일 일요일

Blog Visited

[Unit test]
C++ 프로젝트에 단위 테스트 도입하기
http://www.slideshare.net/mobile/zone0000/c-7522148
stinkfist : 구글테스트 시작하기
http://stinkfist.egloos.com/m/2262578
Rebooting Reiot
http://reiot.com/2008/07/04/google-test/
googletest 환경 구축 :: moltak
http://moltak.tistory.com/m/post/295


[LSH]
다음 블로그 NLP:  http://blog.daum.net/hazzling?bz=blog
LSH(locality sensitive hashing)
GibHub로 이사: http://dsindex.github.io/


[DreamPark]
Windows Embeded 8.1 Industry Pro 리뷰:
http://ccami.tistory.com/92
MS dreampark에서 대학계정 무료 배포


[SWIG]
SWIG Tutorial
http://ppiazi.tistory.com/m/post/entry/SWIG-Tutorial#
C/C++ Wrapping에 의한 Tcl, Perl, Python, Java, C# 함수 제공


[SQLite]
SQLite 와 C++ 연동방법 :: 인생의무한루프
http://mins79.tistory.com/entry/SQLite-%EC%99%80-C-%EC%97%B0%EB%8F%99%EB%B0%A9%EB%B2%95
수까락의 프로그래밍 이야기 : SQLite - 튜토리얼 with CppSQLite
http://sweeper.egloos.com/m/3053076
CppSQLite - C++ Wrapper for SQLite - CodeProject
MFC + SQLite3 연동 :: 개발환경을 만들자
[運]과 함께하는 세상 : SQLite 와 C++ 연동방법
SQLite 쿼리 간단 사용법 매뉴얼 기본 동작 상세 설명 :: 포쿠테


[Matlab]
MATLAB 때려잡기 - 01강 - Modern Control Theory 때려잡기 - What is Control Theory?


[Consumer Camera]
범용 카메라를 이용한 이미지 처리: Nikon Imaging | SDK Download


[usb3 Camera]
Buy e-con's Camera Boards | Camera Modules | Computer on Modules | Reference designs
http://www.e-consystems.com/webstore.asp


[Graphics Models]
Classical Probabilistic Models and Conditional Random Fields
http://www.scai.fraunhofer.de/fileadmin/images/bio/data_mining/paper/crf_klinger_tomanek.pdf
Machine Learning: Generative and Discriminative Models
http://www.cedar.buffalo.edu/~srihari/CSE574/Discriminative-Generative.pdf

discriminative vs. generative, classification vs. categorization



[MCMC]
Sampling and MCMC (intractable integral)
http://arongdari.tistory.com/m/post/62#
Sampling and Markov Chain Monte Carlo
http://www.stat.cmu.edu/~larry/=sml2008/lect2.pdf
Toy code
http://www.ece.sunysb.edu/~zyweng/MCMCexample.html
Monte Carlo Methods
http://www.cs.cmu.edu/~ggordon/MCMC/
Impacted paper
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.13.7133&rep=rep1&type=pdf
Sampling & MCMC
http://arongdari.tistory.com/m/post/entry/Sampling-MCMC#


[L1-Regularized Min]
Parallel Coordinate Descent for L1-Regularized Loss Minimization
http://www.select.cs.cmu.edu/publications/paperdir/icml2011-bradley-kyrola-bickson-guestrin.pdf


[GoPro Hero4 Livestream]
The new HERO4 Black and Silver edition cameras use a different, more powerful chip (ambarella A9). The traditional URL for HERO2/HERO3/HERO3+ http://10.5.5.9:8080/live/amba.m3u8 does not work for the new HERO4 camera.
Here is how to get the live stream:

http://www.reddit.com/r/gopro/comments/2md8hm/how_to_livestream_from_a_gopro_hero4/


OpenCV in C++
https://gist.github.com/KonradIT/8554673

#include <opencv2/opencv.hpp>
int main()                                                    
{
    cv::VideoCapture cap( "http://10.5.5.9:8080/live/amba.m3u8" );
    cv::namedWindow( "GoPro" );
    cv::Mat frame;

    do {
        cap >> frame;
        cv::imshow( "GoPro", frame );
    } while ( cv::waitKey( 30 ) < 0 );

  return 0;
}

2014년 8월 12일 화요일

Path planning of mobile robot

작성 중...






$V(t)$와 $\omega(t)$는 control input.



로봇의 시작 점과 목표 점이 주어진다고 할 때,


Path는 $P(u)$에 의해 정의된다.  파라메터인 $u$는 0에서 1까지 변하는 값으로 0은 로봇의 시작 점, 1은 목표 점을 가리킨다.  

이 수식은 아주 많은 파라메터들로 구성되는데 이 값들을 바꾸면 다양한 형태의 path가 생성된다 [1]. 


만일 장애물을 회피하여 목표 점까지 이동한다 가정하자. 경로는 시작 위치에서 장애물을 피하고 목표 위치로 부드럽게 수렴하는 경로를 얻는 것이 필요하다.     

여러 파라메터 중에서 2개의 파라메터를 고려하면,

$Path=f(\eta_3, \theta_a)$

이고 path는 다양한 파라메터 중에서 두 변수가 중요하게 작용하므로 이들의 함수이다. 

현재 로봇이 가진 각도를 기준으로 전방 180도로 정의하면,  
$\theta_a$를 0~180에서 10도씩 나누고, 각 $\theta$에 대해 10개의 $\eta$를 정의한다. 
그러면 위 그림의 상부와 같은 경로들이 나온다.  

즉, 10도씩 나누어 19개의 set가 있고, 각 set 내에는 ($\eta$의 변화에 따라) 10개의 path가 존재한다.  

이렇게 정의한 여러 path 중에서 최적인 하나를 선정하는 것이 필요하다. 

로봇은 자체 회전이 가능하여 어떤 출발 각도를 가지고도 출발할 수 있다.
이동 경로 길이가 짧으면서 장애물 충돌 없이 목표에 도달하는 것이 필요하다.

예를 들면 출발 각이 목표 각과 비슷하면 경로 길이는 짧아 진다. 



경로를 결정하였으면 로봇이 경로를 따라 잘 이동하도록 제어하는 것이 필요하다.


current 위치에서 destination으로 위치와 자세를 바꾸기 위해서 오차를 위 행렬 식처럼 정의한다. 




Lyapunov함수를 이용하여 비용함수 $V$를 정의한다. 식을 보면 $x_e, y_e, \theta_e$가 모두 0으로 가면 $V$도 0으로 수렴한다. 



References




Online boosting



초기에 지정된 영역을 5개 부분으로 나누어 (+1/-1)로 학습. 
물체 추적 시에는 물체 크기의 window를 sliding시켜 ROI 내부를 검색.
현재 위치에 대해 window 내부의 특징을 classifier로 평가하고 confidence 계산.
ROI 내부의 confidence map를 저장하고, map에 대해 integral image를 적용시켜 최대 confidence 영역을 찾아 냄.
최대 영역이 새로운 물체의 위치(+)가 되고, 이 물체의 배경(-)과 함께 다시 학습(update).

   

2014년 8월 4일 월요일

Naive Bayes Classifier




k-NN Classification




Test 샘플에 대해 유사도가 가장 높은 k개를 선정하고, 선정된 것들의 label이 무엇인지 체크한다.

영상 특징에 대한 이해

작성 중....


물체 검출(object detection)은 머신비전에서 가장 중요한 주제 중의 하나이다. 물체 검출의 실행에 있어 물체를 포함하는 입력 데이터나 영상 정보를 그대로 사용하지 않고 재구성을 요구한다. 재구성된 특징의 구별성이 더 좋을수록 더 간단한 학습과 분류가 가능하다. 따라서 입력 데이터를 재구성하는 것은 대단히 중요하다. 보통 입력 영상의 픽셀 밝기를 직접적으로 이용하지는 않고, 대신 밝기나 카메라가 물체를 찍은 주시점, 형상, 외관, 자세변화에 불변하는 영상 표현이 요구된다.
물체 검출을 위해 다양한 영상특징이 개발되었고 그중 HOG, Haar 웨이브릿, LBP, BoW, SIFT등이 대표적인 영상 특징이다.  여기서는 일반적으로 널리 사용되는 몇 가지 특징에 대해 분석하고 이러한 특징이 분류기에 사용되었을 경우, 학습 성능, 계산량, 분류성능 등의 비교를 통해 가장 적합한 특징을 선정하고 본 연구에서 목표로 하는 물체 인식에 이용하기 위한 토대를 마련한다.

➀ LBP 적용 연구
Local Binary Pattern(LBP)은 단순하지만 강력한 영상 텍스춰 묘사자(texture descriptor)이다. LBP는 텍스춰 패턴을 정량화하며 자세나 크기, 밝기 변화에 강인한 특징을 보인다. 또한 계산이 단순하여 실시간 처리 작업에 적당하다. 적용 분야는 얼굴이나 표정인식, 물체 인식, 배경추출, 자세나 응시 게이트 인식 등이다. 영상에서 어떤 픽셀의 LBP는 이 픽셀의 밝기 값과 이웃 밝기 값을 비교함에 의해 생성되는 일련(series)의 이진수이다. 이웃 반경의 크기나 이웃 픽셀의 수는 자유롭게 선택 가능하다. 이진수 계산은 중심 픽셀과 이웃 픽셀 값을 비교하는 것으로 만일 이웃 픽셀 값이 더 커면 이진수는 1, 그렇지 않으면 0이다. 


그림 1. LBP 연산 과정

예를 들어, 3x3픽셀영역에서 LBP를 계산하면 그림 1에 표현된다. 중심 픽셀 값 5와 함께 주위 값을 비교함에 의해 이진 값들이 얻어진다. 주어진 예제에서 얻어진 이진 값은 좌측 중심을 시작점으로 반시계 방향으로 회전 했을 때 01101011이다. 이때, 이진 값에 가중치를 보태어 하나의 숫자로 만든다. 가중치는 2의 배수로 할당되고 주어진 이진 코드에 대한 값은 1+2+8+32+64=107이다. 어떤 픽셀의 LBP 코드 값은 다음과 같은 식으로 주어진다.

$LBP_{P,R}=\sum_{p=0}^{P-1}s(g_p-g_c) \cdot 2^p$

$s(x)=\begin{cases} 1, if \space x \ge 0\\ 0, otherwise\end{cases}$



상기한 수식 에서 P는 이웃 픽셀의 수이고, gp와 gc는 이웃 픽셀과 중심 픽셀의 밝기 값이다. 이웃은 그림 2과 같이 원형이나 사각형으로 구성할 수 있으며, 패턴의 출발점은 미리 정해진다. 일단 P와 R이 정해지면, LBP는 만들어진다. 


그림 3은 텍스춰를 정의하기 위해 선택한 P와 R의 세 가지 다른 값을 보여준다. LBP는 쉽게 계산되지만 위치에 매우 민감하기 때문에 그대로 사용하기는 어렵다. 위치가 달라지면 오차가 매우 커진다. 따라서 실용적 사용을 위해 많은 수의 LBP 특징을 포함하는 어떤 셀(cell)에 대한 LBP 히스토그램(histogram)을 만들 필요가 있다.

요약하면, LBP 특징 벡터는 다음 단계로 만들어 진다.
1    (1) 히스토그램이 만들어질 셀의 크기를 결정한다(예를 들면 16x16). 그리고 현재 윈도를 셀들로 분할한다.
      (2) 셀 내의 픽셀들에 대해 LBP 패턴을 계산한다. 패턴의 출발점과 회전 방향을 정의하고 중심 픽셀과 이웃 픽셀을 비교하여 중심픽셀의 패턴 값을 얻는다.
      (3) 각 셀의 히스토그램을 계산한다. 즉, 이진 패턴이 나타내는 숫자의 발생 빈도를 얻는다.
      (4) 선택적으로 히스토그램을 정규화하거나 모든 셀의 정규화 된 히스토그램을 연결하여 현재의 탐색 윈도를 표현한다.


➁ BoW
BoW(Bag of Words)는 전산학의 자연어 처리(natural language processing) 분야에서 시작되어 Visual한 요소를 다룰 수 있도록 응용되어 Bag of Visual Words란 이름으로 머신비전 분야에서 널리 사용되고 있는 영상 분류 기법 중에 하나이다.
Bag이란 문서에서 반복되어 나타나는 단어나 영상에서 반복되어 보이는 패턴들의 집합이다. 문장에서 생각해 보면, 단어순서나 문법은 무시되고 문서는 단순히 단어들의 집합으로 표현된다. BoW는 문장에서 나타나는 항목(entry)의 발생빈도를 표현한다. 이때 사용되는 사전(dictionary)이란 항목들의 집합으로 문장 내에서 나타나는 모든 단어들로 만들어 진다.
예를 들어, 다음과 같은 두개의 문장이 있다고 가정하자:

문장 1: Mary likes to play volleyball. John likes too.
문장 2: Mary also likes to play basketball.

이때 사전은 다음과 같다:

{1: Mary, 2: like, 3: to, 4: play, 5: volleyball, 6: John, 7: too, 8: also, 9: basketball}

최종적으로 두 문장은 사전의 항목 인덱스들의 발생빈도로 표현된다. 아래는 두 문장의 BoW이다.

문장 1: [1 2 1 1 1 1 1 0 0]
문장 2: [1 1 1 1 0 0 0 1 1]

BoW의 개념을 영상인식 분야에 적용한다면, 영상은 문장에 대응되고 단어들의 Bag은 그림 4에서 보이는 영상의 부분 특징들을 표현한다. BoW에 대응되는 Bag of visual words는 이러한 부분 영상 특징들의 사전 내 항목의 발생 빈도 값의 벡터가 된다. 가장 많이 사용되는 부분 영상 특징 중의 하나는 SIFT이다. SIFT는 물체의 크기, 밝기, 어파인 변화에도 특징 값이 불변하는 신뢰성을 가진다.


BoW의 절차는 항목 생성(Vocabulary Generation)과 영상 표현(Image Representation)으로 나누어 아래 그림 5와 같이 수행된다.

Vocabulary generation:
     1) Extract SIFT feature of all training images.
     2) Cluster the SIFT features extracted in Step 1 to a pre-defined groups (such as 300 groups) by K-means algorithm and express each cluster as a "center features" compose the vocabulary.

Image representation:
     3) Extract SIFT feature of the image that is required to be represented.
     4) Calculate the Euclidean between the SIFT features acquired in Step 3 and each entry of the vocabulary, and label each feature by the vocabulary index with the smallest distance.
     5) Create the histogram of indexes that were achieved in Step 4, and this histogram is the BoW of the image.

그림 5. BoW 과정

본 연구에서는 먼저 사람의 학습 영상에 대해 SIFT를 적용하여 사전을 구성한다. 사전의 엔트리는 전부 30개(즉, 특징 값의 K-means 클러스터링 후에 얻어진 중심 특징의 개수)로 한다.
학습 영상이 주어지면 먼저 영상을 8x8 크기의 패치로 분할한다. 각각의 패치에 대해 SIFT특징을 하나 추출한다. 이 특징으로 30개의 사전 엔트리와 유클리디안 거리 30개를 얻는다. 이 거리 값의 역(inverse)을 취해 30개의 값을 가진 벡터 하나를 구성한다. 학습 영상의 모든 패치에 대해 벡터를 추출하면 패치의 개수만큼 벡터가 생기게 된다. 학습 영상의 개수는 아주 많으므로 벡터의 개수는 매우 많다. Positive 학습영상과 Negative 학습영상에 대해 이 벡터들을 추출하여 SVM을 학습한다.




 














Bayes Theory를 이용한 도로 영상 분할

(1)에서 부류를 나타내는 $X$는 차선($L$), 도로($P$), 물체($O$), 기타($U$) 4가지이다. $X=[L, P, O, U]$이다. Given $z$(측정값, 즉 어떤 하나의 픽셀이 주어졌을 때)에서 사후 확률(이 픽셀이 4가지의 부류 중에서 어디에 속할지를 나타내는 $X$를 결정하는)을 바로 계산할 수가 없기 때문에 베이스 이론을 적용하여 우도(likelihood)와 사전 확률(prior)을 통해 계산하고자 한다.

           $p(X|z) = {p(z|X)p(X) \over p(z)}$                                                           (1)


(1) 우도의 계산

우도는 $p(z|X)$이고 우도 계산에 사용할 측정 데이터는 2가지가 존재한다. 하나는 원 이미지(흑백 이미지) 데이터에서 나온 확률 분포이다.

           $p(i|X)$                                                                                                    (2)

다른 하나는 차선추출을 위해 적용한 모폴로지 필터가 적용된 결과 영상에서 나온 분포이다.

           $p(L|X)$                                                                                                   (3)

그런데 두 데이터의 측정은 서로 독립적이다. 따라서

           $p(z|X) = p(i|X)p(L|X)$                                                                                   (4)

이다.  이제 남은 문제는 $p(i|X)$ $p(L|X)$의 결정이다. 서로 관계가 없으므로 $p(i|X)$만 따로 결정해 보고, 이 방법을 $p(L|X)$를 결정하는데 그대로 사용한다.

$p(i|X)$에서 부류 $X$ 4가지이고, 각각의 부류는 정규분포(normal distribution)을 가진다고 가정하자그러면 $p(i|X)$ 4가지의 부류가 서로 합성된 분포, Gaussian분포 4개가 섞인 혼합모델이 된다. Gaussian Mixture Model(GMM)이다.

따라서 지금부터 문제는 GMM 분포의 4개의 분포를 결정하는 문제가 된다. 4개의 분포는 8개의 파라메타를 가진다. 평균 4개와 분산 값 4개이다. , 주어진 데이터를 사용하여 8개의 파라메타를 결정해야 한다데이터는 픽셀의 밝기 값이다원 영상을 평면 변환(plane homography)한 영상의 각 픽셀에 대해 이 픽셀이 4개의 부류 중에서 어디에 속할 것 인지와 이 소속도를 가지고 각 부류의 평균, 분산을 계산하여야 한다.

GMM 모델은 EM(Expectation and Maximization) 알고리즘을 이용하여 풀어지는데 EM 알고리즘은 먼저 이미지 내의 각 픽셀이 4개의 부류 중에서 어디에 속할 것인지의 소속 확률을 가정한다.
초기에 아무 지식이 없다면 어떤 픽셀이 0.25의 크기로 각 분포에 속한다고 가정할 수 있다(E 단계).
다음 이 소속도를 사용하여 4가지 분포의 평균, 분산, 각 분포의 가중치 파라메터 값들을 계산한다 (M 단계).
이 값들을 사용하면 다시 각 픽셀들의 4가지 분포에 대한 소속도를 갱신하는 것이 가능하다(다시 E 단계).
소속도가 갱신 되었으니 다시 평균, 분산, 가중치의 갱신이 가능하다(다시 M 단계).

이러한 과정을 반복하고 수렴하면 각 픽셀이 4가지 부류의 어디에 속하는지를 정확하게 계산하는 것이 가능하다. 파라메터를 모두 얻으면 $p(i|X)$값이 GMM 모델로서 완전하게 결정된다.

이러한 과정을 $p(L|X)$에 대해서도 동일하게 적용하면 $p(L|X)$의 파라메터들을 얻는 것도 가능하다.
그런데 EM 알고리즘의 보다 정확한 수렴을 위해서는 초기 값을 잘 설정해야 하는데 논문에서는 각 픽셀의 초기 소속도를 얻기 위한 전처리 기법이 나와 있다. 잘 분할된 초기 값에서 출발하면 정확한 파라메터를 쉽게 얻을 것이다


(2) prior 확률 $p(X)$를 계산  

우도를 결정하였으므로 Bayes 식 적용을 위해서는 사전 확률 $p(X)$를 계산하여야 한다. 그런데 도로 영상은 차량에 설치된 카메라에서 볼 때 시간 축에서 비슷한 영상이 연속적으로 취득된다. 두 연속 영상은 비슷하다. 따라서 $p(X)$는 이전 영상의 사후 확률을 다음 단계의 사전 확률로 그대로 사용해도 무관하다.

첫 프레임에는 사전 확률은 균일하게 두고 사용할 수 있을 것이다, 터널 진출입과 같이 밝기 분포가 급격하게 바뀌는 경우만 따로 취급할 수 있다(논문 참조).


우도와 사전 확률이 모두 결정되었으면 Bayes 모델을 새로운 Test 영상에 대해 적용한다. Test 영상 내의 각 픽셀 측정치 $z_i$의 밝기 값 $I_i$와 필터링 값 $L_i$Bayes 모델에 적용되고 $p(X_p|z_i)$, $p(X_L|z_i)$, $p(X_o|z_i)$, $p(X_u|z_i)$를 계산 후 가장 큰 확률을 가진 부류에 이 픽셀을 할당한다.


References

[1] M. Nieto et. al., Road environment modeling using robust perspective analysis and recursive Bayesian segmentation, Machine Vision and Applications, 2011.