Loading [MathJax]/jax/output/CommonHTML/jax.js
본문 바로가기
  • 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={x1,x2,,xn} 이라 표기하자.

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

입력 벡터 x와 출력 벡터 y가 각각 Dd차원이라면 Ud×D차원 행렬이다.

 

 

                                                                 yT=UxT                                                       (1)

 

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

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

ˆx은 투영된 점을 나타낸다. 

 

                                                                 ˆx=uxT                                                       (2)

 

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

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

 

2. 알고리즘

 

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

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

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

 

 

이제 "분산 ˆσ 을 최대화하는 u를 찾아라" 는 최적화 문제로 바꿀 수 있다.

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

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

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

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

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

 

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

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

이는 앞으로 Σ로 대치한다.  

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

 

 

L(u)를 최적화하는 uL(u)u =0 을 만족해야 한다.

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

u는 공분산 행렬 Σ고유 벡터(Eigen Vector)이고, λ고유값(Eigen Value)임을 알 수 있다.

 

                                                             ΣuT=λuT                                                 (6)

 

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

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

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

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

이는 d×D인 행렬이다.

 

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

 

                                                                 yT=UxT                                                       (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) 기본 개념부터 최신 모바일 응용 예까지> (오일석, 한빛아카데미) 책으로 공부하며 작성한 것이다.