본문 바로가기
  • AI 개발자가 될래요
컴퓨터비전

[OpenCV] PCA (Principal Component Analysis), 주성분 분석이란 무엇일까?

by 꿀개 2022. 7. 18.

[OpenCV] PCA (Principal Component Analysis), 주성분 분석이란 무엇일까?

 

 

아래에 있는 얼굴 영상을 위한 적절한 기술자는 무엇일까? 영상의 화소값 자체를 특징으로 삼으면 영상을 잘 설명할 수 있을까?

 

 

위 영상은 화소가 150X150개 이므로 22,500 차원의 특징 벡터가 생성된다. 이를 특징으로 사용하여 영상을 설명하기엔 너무 거대하다.

 

이런 상황에서 효과적으로 사용할 수 있는 기법이 주성분 분석(PCA: Principal Component Analysis) 이다.

이 기법은 $D$차원의 특징 벡터를 정보 손실을 최소로 유지하며 $d$ 차원으로 줄이는 것이다. $(D > d)$

 

1. 원리

 

그림 1. 은 주성분 분석의 처리 과정을 보여준다.

먼저 학습 집합을 이용하여 특징 추출에 사용할 변환 행렬 $U$를 추정해야 한다. 

 

그림 1. 주성분 분석 처리 과정

 

학습 집합은 $X=\{x_{1}, x_{2}, \cdots, x_{n}\}$ 이라 표기하자.

$U$를 추정한 후 벌어지는 특징 추출 단계는 식 (1). 과 같이 쓸 수 있다.

입력 벡터 $x$와 출력 벡터 $y$가 각각 $D$와 $d$차원이라면 $U$는 $d \times D$차원 행렬이다.

 

 

                                                                 $y^{T} = Ux^{T}$                                                       $(1)$

 

PCA는 차원 축소를 입력 공간에 정의된 어떤 축으로의 투영으로 표현한다.

축은 D차원 단위 벡터 $u$로 표현하며, $u$축으로의 투영 변환은 식 (2). 로 정의할 수 있다.

$\hat{x}$은 투영된 점을 나타낸다. 

 

                                                                 $\hat{x} = ux^{T}$                                                       $(2)$

 

PCA는 샘플들이 원래 공간에 퍼져 있는 정도가 변환된 공간에서도 얼마나 잘 유지하는지를 성능 평가 척도로 삼는다. 그리고 이 척도는 샘플들의 분산으로 측정한다.

따라서 "변환된 샘플들의 분산을 최대화하는 단위 벡터 $u$를 찾아라" 는 최적화 문제로 정리할 수 있다.

 

2. 알고리즘

 

투영된 점의 평균 식은 식 (3). 과 같다.

투영된 점의 평균은 원래 점의 평균 벡터 $\tilde{x}$룰 구한 다음, 그것을 $u$로 투영한 것과 같다.

분산은 식 (4). 로 구할 수 있다.

 

 

이제 "분산 $\hat{\sigma}$ 을 최대화하는 $u$를 찾아라" 는 최적화 문제로 바꿀 수 있다.

식 (4). 를 보면 $u$가 크면 클수록 분산도 커짐을 알 수 있다.

이는 최대화 문제이기 때문에 특정한 조건 없이 이 문제를 풀면 무한대 크기의 $u$가 답이 된다.

그러나 $u$가 단위 벡터라는 사실을 이용하면 $uu^{T}=1$ 이라는 조건을 만들 수 있다.

이 조건을 추가하면 조건부 최적화 문제가 된다.

조건부 최적화 문제는 라그랑주 승수를 이용해서 식 5. 와 같이 쓸 수 있다.

 

식 5. 의 라그랑주 함수 $L(u)$를 $u$로 미분하면 다음과 같이 식을 정리 할 수 있다.

세 번째 줄에 나타난 괄호는 공분산 행렬(Covariance Matrix)이다.

이는 앞으로 $\Sigma$로 대치한다.  

$\Sigma$는 공분산 행렬 특성 상 대칭이므로 네 번째 줄은 마지막 줄로 바꾸어 쓸 수 있다.

 

 

$L(u)$를 최적화하는 $u$는 $\partial{L(u)} \over \partial{u}$ $ = 0$ 을 만족해야 한다.

따라서 식 6. 이 도출된다.

$u$는 공분산 행렬 $\Sigma$의 고유 벡터(Eigen Vector)이고, $\lambda$는 고유값(Eigen Value)임을 알 수 있다.

 

                                                             $\Sigma u^{T} = \lambda u^{T}$                                                 $(6)$

 

고유 벡터는 고유값을 갖는데 고유값이 클수록 중요도가 크다.

따라서 교유값을 기준으로 정률한 후, 상위 $d$개의 고유 벡터를 선정하면 된다.

이를 주성분(Principal Component)라 부른다.

이 $d$개의 주성분을 이용하여 변환 행렬 $U$를 구성한다.

이는 $d \times D$인 행렬이다.

 

식 7. 은 PCA로 구한 변환 행렬 $U$를 이용하여 입력 벡터 $x$를 출력 벡터 $y$로 변환하는 식이다.

 

                                                                 $y^{T} = Ux^{T}$                                                       $(7)$

 

이상 PCA의 개념, 원리, 알고리즘에 대해 알아보았다.

 

 

Eigen Vector, EigenFace

PCA를 응용한 예시인 EigenFace에 대한 설명은 아래 링크에 해놨다.

 

https://hsyaloe.tistory.com/30

 

[OpenCV] PCA, Eigenface

이번에는 PCA를 이용한 Eigenface에 대한 소개를 하겠다. PCA에 대한 자세한 내용은 아래 링크에 설명해 놓았으니 참고하길 바란다. https://hsyaloe.tistory.com/29 [OpenCV]PCA PCA 아래에 있는 얼굴 영상을 위한

hsyaloe.tistory.com

 

 

 

 

* 이 글은 <컴퓨터 비전(Computer Vision) 기본 개념부터 최신 모바일 응용 예까지> (오일석, 한빛아카데미) 책으로 공부하며 작성한 것이다.