[OpenCV] PCA (Principal Component Analysis), 주성분 분석이란 무엇일까?
아래에 있는 얼굴 영상을 위한 적절한 기술자는 무엇일까? 영상의 화소값 자체를 특징으로 삼으면 영상을 잘 설명할 수 있을까?

위 영상은 화소가 150X150개 이므로 22,500 차원의 특징 벡터가 생성된다. 이를 특징으로 사용하여 영상을 설명하기엔 너무 거대하다.
이런 상황에서 효과적으로 사용할 수 있는 기법이 주성분 분석(PCA: Principal Component Analysis) 이다.
이 기법은 D차원의 특징 벡터를 정보 손실을 최소로 유지하며 d 차원으로 줄이는 것이다. (D>d)
1. 원리
그림 1. 은 주성분 분석의 처리 과정을 보여준다.
먼저 학습 집합을 이용하여 특징 추출에 사용할 변환 행렬 U를 추정해야 한다.

학습 집합은 X={x1,x2,⋯,xn} 이라 표기하자.
U를 추정한 후 벌어지는 특징 추출 단계는 식 (1). 과 같이 쓸 수 있다.
입력 벡터 x와 출력 벡터 y가 각각 D와 d차원이라면 U는 d×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)를 최적화하는 u는 ∂L(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) 기본 개념부터 최신 모바일 응용 예까지> (오일석, 한빛아카데미) 책으로 공부하며 작성한 것이다.
'컴퓨터비전' 카테고리의 다른 글
[C++/OpenCV] 공간 주파수, 이산 푸리에 변환, DFT (0) | 2022.07.19 |
---|---|
[OpenCV] PCA, Eigenface (0) | 2022.07.19 |
[Python/OpenCV] 디렉터리에서 이미지 데이터셋 가져와 .npy 로 저장하기 (0) | 2022.05.10 |
[Python/OpenCV] Perspective Transform(투시 변환) (0) | 2022.05.06 |
[Python/OpenCV] Affine Transform (0) | 2022.05.06 |