Multiple Instance Learning Track (MILTrack)

Multiple Instance Learning Track (MILTrack)

이 글은 Boris Babenko의 Visual Tracking with Online Multiple Instance Learning 논문을 review한 것이며 자세한 수식이나 배경지식은 필자의 귀차니즘으로 인해 이 글에 담지 못했음. 논문을 읽기전, 간단히 이해하는 수준이 필요하다면 이 포스트로 충분하다고 생각함.

MIL Tracking

이제 본격적으로 Image tracking by detecting을 시작해볼건데요. 이전에 사실 Online Discriminative Feature에 대한 논문을 읽었어요. 그 논문에서 MILTrack과 비교하며 설명하는데 이것을 알아야 그 것도 좀 더 쉽게 이해될 것 같아 읽어봤네요.

MIL은 Multiple Instance Learning의 약자로 여러개의 Instance를 학습하는 classifier를 만드는 거라고 대충은 알아낼 수 있겠죠. 뭐 방법이야 어쨌든 여기에서는 결국 원하는 물체를 화면에서 찾아서 따라다니는 겁니다.

그걸 잘찾는 알고리듬을 계속 변형하거나 업그레이드해서 더 잘 따라다니게 하는것이 이 분야의 길인 것 같습니다. 그러므로 요즘 트랜드의 방법이나 알고리듬을 뜯어보면 여러 단계를 거쳐 진화했다는것을 알수 있을 것입니다. 여기서도 몇가지 방법이 융합되거나 업그레이드되었네요.


1. 사용된 기술

  1)Online MIL Boost
  2)Stump for weak classifier
  3)Randomized Haar-like feature
  4)Simple motion model greedy local search


2. Algorithm

우선 Tracking이 진행되는 순서부터 설명합니다. 이 것은 여느 Tracker와 비슷합니다. Appearance를 Box를 이용해서 자르고 positive, negative를 구분해 학습하네요.

  1). 이미지를 자른다. 이때 $x$와 이전 프레임의 tracked location와의 거리가 $s$이하
이어야 한다. 그리고 그 $x$들의 feature vector($X_s$)를 뽑아낸다.

  2). MIL classifier를 이용해서 $X_s$안에 $p(y=1|x)$를 측정한다.

  3). 측정한값을 가지고 가장 큰 $x$를 찾아서 거기를 새로운 tracked location으로 만든다.

  4). 이번엔 두개의 이미지를 자른다. 하나는 tracked location 거리와 $r$이하로 떨어진 $x$들(positive samples), 또 하나는 $r$보다는 크고 $b$보다는 작은 $x$들(negative samples)의 이미지를 자른다.

  5).MIL appearance model을 하나의 positive bag과 여러개의 negative bag을 가지고 업데이트한다.

여기서 AdaBoost와 다른점은 MIL을 사용하는 부분(appearance model에서 Bag을 사용한다는 것)이 특별합니다. 당연히 appearance model이 다르니깐 classifier가 달라지는것을 생각한다면 달라진 appearance model을 중점적으로 보면되겠네요.

이 Bag이란 것은 positive한 feature가 하나라도 들어있으면, 그 Bag에 들어있는 instance들 모두 positive로 labeling됩니다. 그에 반에 instance모두가 negative feature 이어야 그 Bag이 negative로 labeling되는 거죠. 즉 어떤 범위를 모두 positive로 보아서 그 영역을 찾습니다. 마치 여자인지 판단할때, 머리길이, 신체사이즈, 얼굴생김새, 목소리를 모두 보고 판단하는 것과 같습니다. 어 머리길이만 보고 좀 기내? 여자인것같다. 이렇게 하나의 feature만 보면 틀릴 확률이 더 크겠죠.

그럼 각 instance를 따로 학습하지 않고 Bag을 사용하는 이유는 Tracker를 헷갈리게 하면 안되므로 그러는건데요. 한 물체를 Tracking 할때 시간이 지날수록 Tracking하는 곳이 모호해지고 빗나가게 됩니다. 여러개의 인스턴스를 가지고 있으면 더욱 그러하겠죠? Tracking이 되더라도 tracked location이 자주변경되 Box가 흔들리고 안정적이지 못할겁니다. 물론 그 와중에 계속 새로운 positive를 학습하니깐 tracker는 더 헷갈릴것이고요. 그러므로 Bag을 이용해 여러개의 positive sample들을 사용하면서 헷갈리지는 않는 tracking을 할 수 있어요.
기계학습 그리고 패턴인식.

기계학습 그리고 패턴인식.

기계학습에 있어서 패턴인식은 가장핵심적인 부분인 동시에 대체되는 단어로도 사용할 수 있을 것 같에요. 인공지능 프로그램은 상황을 인지할 때, 어떤 패턴을 이용하여 인식한 후에 원하는 행동을 하게 되는 것이겠죠. 즉 학습하기 위해서는 인지한 것을 자기것으로 소화시켜야 하는거죠. 그 부분이 패턴인식이고요.

패턴 인식

Pattern Recognition system은 어떤 객체를 분석해서 올바르게 분류해내는 시스템이에요. 사물을 보고 어떤 물체인지 알아내거나 어떤 행동을 하기 위한 기준을 만드는 것이죠. 이러한 작업에는 공통된 일련의 작업들이 있어요.

1. sensing
2. pre-processing and segment
3. feature extraction
4. classification

5. post-processing

대충 제목들만 봐도 알겠죠? 인공지능과 흡사하기때문에 사람이 인지하고 생각하기까지를 예를 들어볼게요.

1. sensing은 인간으로 치면 오감을 이용해서 상황을 느끼는 거에요. (여자들은 sixsense를 가지고 있다는데 정말인가요?)
2. pre-processing and segment 는 전처리부분으로 눈이 않 좋은 사람들이 안경을 끼는 것과 비슷하죠. sensing을 더 확실히하기 위한 방법이죠. 노이즈가 많은 음성데이터나 영상데이터등을 분석하기전에 좀 더 깔끔하게 하는 것입니다.
3. feature extraction은 여자를 볼때 얼굴, 가슴, 다리, 엉덩이, 목, 어깨, 팔,,, 성격 등을 보며 판단 하는 것과 같습니다. 이렇게 sensing으로 얻은 데이터를 feature로 표현해서 판단의 근거를 만드는 것이죠.
4. classification 으로 위의 feature들을 가지고 판단을 하는 부분입니다. 사전에 데이터를 가지고 이 정도면 Positive이다, Negative이다 선택 하는 것이죠. 이전에 Positive와 비슷한 feature들을 가지고 있으면 Positive라고 분류될 확률이 크겠죠?
5. post-processing은 위에서 잘못판단을 할 수도 있으니깐 최대한 맞추려고 노력하는 것입니다. 한가지 예로는 사진을 인식할 때 바다 한가운데 피아노가 있으면 이상하니깐 이 피아노는 잘못된 분류라고 생각하는 것입니다.

이 단계들은 모두 중요합니다. 그런데 제가 하려는 패턴인식은 3번과 4번이 중점이 되겠어요. sensing은 하드웨어 쪽에서 카메라를 잘만들고 자이로센서, 마이크등 센서를 잘만드는 분들이해 주셨으니 전 열심히 최선을 다해서 특징추출하고 분류해서 답내고 또 답이 잘안나올거같으면 후처리를 합니다.


특징생성
특징생성이란 단어가 특징추출로도 쓰이기도 합니다. 여기선 특징생성은 특징을 추출해서 그러한 특징을 선택하는 것까지 를 특징생성이라고 할게요. 즉, 특징생성 = 특징추출+특징선택

위에서 말한것과 같이 어떤 객체를 분류하기전에 그것을 대표할 특징들이 필요하겠죠. 이것을 특징벡터라고할게요. 이 특징벡터은 첫째, 분별력이 좋아야하고 둘째는 또 차원이 낮아야합니다. 어떤 특징들의 분별력은 좋지만 계산할 때 너무 오래걸릴만큼의 차원이면 실용적이지 못하겠죠. 반대로 계산이 가능할 정도의 차원이지만 분별력이 낮은 특징벡터는 쓸모가 없겠네요. 그러므로 이 두가지를 고려해서 특징벡터를 만들어야해요.


특징 추출

특징생성에서 데이터의 종류가 무엇인가에 따라서 2차원 이미지인가, 음파처럼 파형을 이루는 데이터인가 등등 실세계에 나오는 데이터마다 추출방법이 바뀔 수 있고 데이터의 종류가 같더라도 분류방법에 따라서도 바뀔 수 있어요. 그리고 데이터의 종류가 같고 분류방법이 같아도도 어떤 객체를 구분해낼 것인가, 어떤 상황에서 그객체를 구분해 낼것인가에 따라서 추출방법이 다양해요


특징 선택

특징선택은 특징추출에서 나온 특징벡터에서 필요한 특징만을 뽑아내 차원을 줄이는 단계에요. 이 필요한 특징을 추려냄에 있어서 특징마다 분별력을 측정해야죠. 분별력이란 그 특징이 가지고 있는 성질로, 같은 특징부류이면 동일성을 같고(분산이 작은) 다른 특징부류들과는 구분될수 있는 (분산이 큰) 능력을 말해요. 분별력을 측정할수 있는 방법은 여러가지가 있네요. 예를들면 KL divisions, training sample distance 측정, 특정한 classifier를 위한 selection 등등. 이렇게 분별력을 토대로, 생성된 특징벡터에서 쓸모 없는 특징을 빼내면서 특징 벡터를 최적화하는 거죠. 이 때 부분집합 선택문제를 가지겠죠. 즉, 분별력이 높은 특징들만으로 특징벡터를 만든다고 그 특징벡터가 가장 좋은 특징벡터라고 말할 수 없는거죠. 어떤 특징들로 한 객체를 표현하는데 구분력이 높은것만 가져다 놓을때엔 조합의 문제를 신경쓰지 않은것 이므로 오히려 더 않좋은 특징벡터가 될수 있는것이죠. 예를 들면 이쁘고 안이쁜 여자를 구분할 때 허리사이즈와 몸무게그리고 키가 있는데,개별적으로 봤을때 몸무게로 구분하는게 가장 구분하기 쉽고, 그 다음 허리사이즈 마지막으로 키로 구분할때 가장 쉽다는 결과가 나왔다고 해볼게요. 그러면 몸무게와 허리사이즈를 선택해야할까요? 아니죠. 몸무게와 허리사이즈는 어느정도 연관관계가 있어서 몸무게만봐도 허리사이즈를 어느정도 가늠할수있습니다. 그러므로 몸무게와 키를 선택하는게 가장 좋은 특징벡터일수 있죠. 이렇게 특징 을 선택할땐, 최종조합의 분별력도 고려해야되요.




AdaBoost

AdaBoost
AdaBoost는 Boost의 종류의 하나로 Adaptive Boot의 줄임말입니다. 적응한다는 것인데요. 어디에 적응하냐 하면 'error'에 적응하는 것입니다.

샘플을 잘 살펴보고 에러를 최소화 할수 있는 weak classifier로 분류를 합니다. 그래도 error가 생기는 샘플이 있을 수 있겠죠? 원래 Positive인데 Negative로 분류되었거나 그 반대인 경우입니다. 이 error가 발생한 샘플에 가중치를 더 두고, 다시 그 것을 잘 분류 할 수 있는 weak classifier를 고릅니다. 그리고 다시 에러 난 샘플에 가중치를 더두고 weak classifier를 찾습니다. 이 행위를 여러 번하면 충분한 weak classifier들을 만들어지고, 그 것들을 합치면 가지고 있는 샘플들에 대한 에러가 거의 없게 되겠죠. 그 합친 classifier를 Strong classifier라고 부르며, weak classifier들의 선형 조합으로 표현됩니다.
$$F(x)={ \alpha }_{ 1 }{ f }_{ 1 }(x)+{ \alpha }_{ 2 }{ f }_{ 2 }(x)+\cdots +{ \alpha }_{ n }{ f }_{ n }(x)$$
여기서 $F$는 strong classifier, $\alpha$는 weight, $f$는 weak classifier 입니다.

Pseudo-code
입력: 라벨링된 데이터
w를 초기화한다.
T번 반복(T개의 weak classifier)
    weighted error를 보고 가장 좋은 weak classifier를 선택해 추가한다.
    틀린 샘플에 weight를 더 준다.
T개의 weak classifier를 합쳐서 Strong Classifier로 만든다.


밑에 애니메이션을 보면 이해하기 쉽습니다.
AdaBoost 애니메이션 from a presentation by Qing Chen, Discover Lab, University of Ottawa

통계에 있어서 기본적인 것들(3)

통계에 있어서 기본적인 것들(3)



저번에 다중비교와 자유도 그리고 분포까지 알아보았는데요. 역시 별로 어려울게 없습니다. 고수준의 이해를 필요로 하지도 않고요. 이제 여기에 포스트된 것까지만 하면 통계의 기본은 끝납니다. 그 다음부터는 적용의 문제가 기다리고있죠. 언제 어떤 분포를 사용하고 언제 어떤 방법으로 통계치를 분석할 수 있을 지 등등이요. 하지만 이 통계에 기본에 기초하고 있는것이라 사용하는데에는 큰 문제 없을거에요. 그럼 오늘은 중심극한정리모수적방법 그리고 자료의 정규성검정까지 알아볼게요.

중심극한정리

중심극한정리는 "많은 수의 표본이 있으면 그 표본의 합이나 평균이 정규분포를 따른다." 라는 말인데요. 이렇게 적어놓으면 어렵죠. 정육면체의 주사위를 열번정도 굴리면 어떤 숫자는 적게나오고 어떤 숫자는 더 많이나오고 어떤숫자는 아예 안나올 수도 있죠? 그런데 수백번,수천번 굴렸다고 해보죠. 그럼 각각의 나온 횟수가 1/6에 근사하게 나올겁니다. 그렇다면 주사의를 두개를 수천번 굴려서 그 합을 나타내볼까요? 그렇다면 아마 기대값에 가까운 숫자는 높게 그와 떨어진숫자들은 점점 적게 나올겁니다. 마치 정규분포의 모양처럼요.

이렇게 표본을 충분히 많이 확보할 수 있으면 그 표본변수의 합이나 평균같은게 정규분포를 따른다는 말이에요. 그 원래 모집단의 분포에 따라서 그 표본의 개수는 차이가 있겠죠. 분산이 큰 표본은 더 많은 수의 표본을 필요로 하고 이런것들이요. 그러나 모집단의 분포를 몰라도 표본이 충분히 크다면 구지 신경안써도 되는 부분입니다.

이렇게 중심극한정리를 이용하면 집단간에 평균비교로 집단차이를 비교할수 있고요. 또 정규분포라는 가정하에 하는 실험들도 많이있습니다.


모수적방법 VS 비모수적방법

추출된 표본의 평균이나 분산 표준편차 같은걸 통계량이라고 하고요. 원래 모집단의 평균 분산 표준편차를 모수라고 합니다.

그런데 위에서 봤듯이 겁나 많은통계의 평균혹은 분산은 정규성을 띈다고 볼 수 있으므로 그것을 이용한 것이 모수적방법입니다. 이때 표본의 크기가 작다고 생각될때 정규성 검정을 할 수 있죠. 정규성 검정은 밑에서 다시설명하겠습니다. 

그런데 정규성검정에서 떨어지거나 표본이 얼마없는 소규모의 실험은 순위합검정 같은 비모수적 방법을 사용합니다. 이것도 대부분 모수적방법과 비교해봤을 때 만약 표본이 정규분포를 따를때에도 검정력이 크게 떨어지지는 않는다합니다. 그리고 표본의 분포가 멀리떨어진 경우에는 어쩔 수 없이 비모수적 방법을 사용해야겠지요.

그러나 모수적방법의 선호 이유는 검정력이 다소높고 비교 군 사이에 크기차이가 있는 경우엔 차이정도도 함께 제시할 수 있기때문입니다.


정규성검정

위에서 말했듯이 통계적방법들은 보통 정규분포를 따른다고 가정합니다. 그러나 모든 표본이 정규분포를 따르는 것은 아니기 때문에 이 정규성 검정을 거쳐야 될 때도 있죠. 표본수가 10개보다는 많은데 그렇다고 충분할 정도로 많지 않으므로 정규성검정을 거치는 거에요. 검정방법은 Kolmogorov-Smirnov Test와 Shapiro-Wilk Test가있습니다.
통계에 있어서 기본적인 것들(2)

통계에 있어서 기본적인 것들(2)





지난번 독립변수, 종속변수, 자료분류, 가설검증방법, 유의수준에 이어서 이번에도 통계에 있어서 기본적인 것들 다중비교, 자유도 그리고 분포를 알아볼게요.

다중비교

A = B = C 라는 것을 검증할 때 흔히 하는 실수가 있습니다. 유의수준을 5%라고 하면 A = B를 검증할때도 5%이하의 오류율을 보이고 B=C를 검정할때도 5%, C=A도 5%이렇게 된다면 전체 실험의 유의수준은 5%보다 훨씬 올라가겠죠? 예를 들면, 유의수준5%는 원하는 가설을 채택했을때 그 채택한 가설이 참이될 확률을 95%이상이 되겠금하는 것이죠. 그런데 한번의 가설을 채택하는데 유의수준을 각각 책정한다면 최종적으로는 .95 x .95 x .95 = .857 밖에 맞을확률이 없는 것이네요. 그러므로 이런 다중비교를 할때는 전체유의 수준이 5%를 넘지 않도록 해야하죠. 이렇게 동시에 비교를 하기위해서 Bonferroni, Turkey, Ducan, Scheff 방법등이 있어요.


자유도

자유도는 실질적으로 독립인 값들의 개수이죠. 그렇다면 m개값의 평균을 낼때 그 자료의 자유도는 m-1이죠? m-1개의 값이 정해지면 나머지 1개는 저절로 정해지니깐요. 그리고 m x n의 교차표는 (n-1) x (m-1)의 자유도를 가집니다.


분포

동일한 실험을 여러번 하고 그 실험의 결과값을 그래프로 그려보면 특정한 모양을 띕니다. 평균값에 몰려있고 평균과 멀어질수록 적은 결과를 가지고있는 모양이 대부분이죠?

파일:Normal Distribution PDF.svg
정규분포

파일:Student t pdf.svg
T-분포

파일:Chi-square distributionPDF.png
카이제곱 분포
푸아송 분포
                               
정말 여러 모양의 분포들이 있죠? 이런 분포들은 쓰는 상황이 각자 다릅니다. 그래서 이렇게 많이 만들어져 있겠죠? 사용하는 이유는 이러한 분포모양을 예측함으로써 많은 실험을 하지 않고도 어떤 값이 나올 확률을 알 수 있습니다. 그래프의 아래의 면적을 모두 합치면 1이됩니다. 그러므로 어떤값 이상이나 어떤값이하가 나올 확률을 면적으로 구하면 되는거죠. 그러한 면적들 값도 표로 정리되어 있어서 가져다 쓰는 방법만 알면 복잡한 적분없이도 확률예측을 할 수 있게됬어요. 고맙네요.






통계에 있어서 기본적인 것들(1)

통계에 있어서 기본적인 것들(1)

왜 통계가 어려울까?

통계라는 것은 어렸을때 중학교,고등학교 때부터 확률의 연장선으로 항상 따라다니던 부분이죠. 그 만큼 중요성과 활용성은 학창시절 배우는 것중의 탑클래스라 생각됩니다. 뭐든 중요하지만요. 그런데도 통계, 확률만 나오면 어렵게만 생각되는 이유는 뭘까요? 매번 큰 그림없이 간헐적으로 기법들만 배우다보니 그런것이 아닌가 생각됩니다. 이런 생각도중에 책한권을 소개받았습니다. "닥터 배의 술술 보건의학통계" 라는 책인데요. 이 책은 통계의 기본을 가지고 의학에 필요한 실험, 분석등을 예시로 들면서 설명하는 책입니다. 여기서 나오는 의학적인 내용은 상당히 기본적이므로 통계를 배우는데에는 지장없을 정도입니다. 뿐만아니라 그림 예시가 많으므로 그 만큼 독자들의 이해정도는 더 높아집니다.

이 책에 있어서 가장 중요한 부분은 첫 번째에 나와있습니다. 통계방법을 설계하고 기법을 선택할 수 있는데 있어서 기본인 부분입니다.


독립변수 vs 종속변수

우선 독립변수와 종속변수의 관계부터 이해하죠. 독립변수는 어떤 상황에 있어서 독립인 변수죠. 전의 실험이나 확률에 대해서 영향 받지 않는 변수입니다. 그 반대가 종속변수이므로 종속변수는 그 전의 변수에 의해서 영향을 수이죠.  


자료 분류

자료들은 분류될수있겠죠? 이 분류하는 방법에 따라서 discrete과 continuous으로 나눌 수 있습니다. discrete은 수치화 하기 어려운 것아니면 수치를 구간으로 나누어 순서로 활용할 때 더 이용하기 쉬운 데이터들 입니다. 예를 들면 털이 많다, 적다, 중간이다. 이런 식으로 구분해놓은 데이터는 discrete이고 털이 1센치 제곱만큼의 구역에 몇가닥이 있다. 이런식으로 수량화해놓은 것은 continuous입니다. 그런데 주위할 것은 숫자가 나와서 continuous 데이터로 착각하면 안됩니다. 털이 많고 적음을 5개의 구간으로 나워서 1급~5급까지 나눠 놨다면 이것은 discrete 데이터입니다.


가설검증방법

귀무가설 : 내가 검증하려는 것과 반대
대립가설 : 내가 검증하려는 것

이렇게 놓고 귀무가설을 입증하는 데 귀무가설이 맞을 확률이 0.05% 미만이면 대립가설을 채택하고 귀무가설을 기각합니다. 그러므로 우위성을 입증하냐, 동등성을 입증하냐에 따라서 귀무가설, 대립가설 설정이 다릅니다.

우위성입증인 "A약이 B약보다 효과가 있다"를 입증할 때는 "A약과 B약은 효과에 차이가 없다"가 귀무가설입니다. 반대로 동등성입증인 "A약과 B약은 효과에 차이가 없다"를 입증할 때는 "A약과 B약은 효과에 차이가 있다"가 귀무가설입니다.


5% 유의수준

가설검증에서 귀무가설이 실제로 참일 때 귀무가설에 대한 판단의 오류수준(잘못 기각할 확률)을 말하며, 제1종 오류의 위험성을 부담할 최대 확률을 가설의 유의수준이라고 한다.
[네이버 지식백과] 유의수준 [level of significance] (교육평가용어사전, 2004.5.31, 학지사)
귀무가설을 기각할 때 판단하는 오류수준입니다. 귀무가설이 나올확률이 5%이상이면 귀무가설을 채택하고 대립가설을 기각함으로써 알파오류를 경계하는 것입니다. 가설을 검증하는데 있어서 오류를 2가지로 나눌 수 있겠죠?

하나는 귀무가설을 기각했는데 실제로는 귀무가설이 참인 경우입니다.
두번째는 귀무가설을 채택했는데 귀무가설이 거짓인 경우입니다.

그런데 두번째 경우에는 내가 검증하려는 것과 반대의 결과가 나옴으로써 이 실험은 발표되지 않습니다. 그러므로 위험성이 첫번째 경우보다 적다고 할 수 있겠죠? 첫 번째는 대립가설이 채택되서 발표했는데 사실상 그렇지 않은 경우가 많으므로 위험성이 크다고 할 수 있죠. 그래서 이 오류를 알파오류, 두번째 오류를 베타오류라고 하는겁니다.

이 알파오류가 나올 확률을 5%미만으로 하자고 학계에서 권고를 합니다. 그리고 귀무가설이 기각되었고 실제로도 귀무가설이 거짓일 경우에 (1-베타오류수준)으로  효과를 증명할 수 있습니다. 이것을 검정력이라고 하며 이 검정력을 최대로 하기위해서 많은 실험에서 통계기법을 각자 다르게 사용하는 것입니다.



이 외에 다중비교, 자유도, 분포, 검정통계량, 중심극한정리, 모수적방법과 비모수적방법, 정규성검정 방법 등 여러가지의 기본은 다음에 계속할게요.