본문 바로가기
AI & Data

[AI / Computer Vision] Singular Value Decomposition (SVD)

by Henry Cho 2023. 10. 9.
728x90

Singular Value Decomposition (SVD)

포스트 난이도: HOO_Middle


# Computer vision에서의 SVD

Computer vision에서의 Singular Value Decomposition (SVD)는 결과를 산출해 내기 위한 기본적인 매트릭스 계산 방법이다. 눈으로 보이는 물체를 우리는 이미지나 영상으로 담아냈고 이것을 컴퓨터가 분석하거나 인지하게 만들기 위해서는 픽셀 단위로 살펴봐야 한다. 이때 엄청난 픽셀의 수를 계산하고 분석하는 데 있어 간단하게 만들어줄 수 있는 아주 기초적인 방법이 바로 SVD인 셈이다. 그래서 우리는 SVD를 통해서 Data reduction, Fast fourier transform, Tailored에서 발생되는 특정 문제들을 해결할 수 있는 등이 가능하다는 것을 배웠을 것이다. 한마디로 말하자면 SVD를 통해서 Simplized가 가능했기에 문제해결이 가능했다고 볼 수 있다.

 

SVD는 이미지 및 영상의 데이터를 처리를 간단하게 해주는데, 여기에 포함된 또 다른 중요한 요소는 향상된 처리 속도이다. SVD를 Computer vision에 어떻게 사용하느냐에 따라서 필요한 주요 요소들만 처리하여 종합적으로 처리 속도를 높여줄 수 있다. 이러한 이유로 많은 IT 대기업들에서 computer vision에 대한 부분을 다룰 때 SVD를 활용하고 있다. 사실 SVD를 활용하고 있다고 말하기 부끄러운 것이 SVD는 Computer vision의 기초이기 때문이다. 마치 "카카오 개발자들은 파이썬 언어를 사용해요!"라고 말하는 거와 같다. 그렇기에 Computer vision을 다루고 싶다면 SVD에 대한 계산 방식부터 어떻게 이미지에서 픽셀의 효율성을 높일 때 SVD를 통해서 값 조정이 이루어지는지에 대해서 명확히 알고 있어야 한다.


# SVD

SVD에 대해서 다시 한번 간단하게 특징들만을 복습 해보자. 우선 우리가 알고 있는 SVD와 별반 다를 바가 없다. 다만 중요한 요소들을 짚어보자면, U, V는 Unitary이다. 그리고 시그마는 Diagonal에 해당한다 (참고로 시그마는 코드에서 S라고도 표기를 많이 한다). 따라서 U와 V는 Singular vectors에 해당하고 시그마는 Singular values가 된다. U과 왼쪽에 있으니 우리는 Left singular vectors라고 부르며 V는 오른쪽에 위치해 있으니 Right singular vectors라고도 부르는데 사실 Signular vectors라는 점만 알고 있으면 된다. 또한 마지막으로 각 Signular vectors들에는 고윳값이라고 불리는 Eigenvectors 또는 Eigenfaces들이 있는데 어떤 식으로 계산이 이루어지는지 이해하고 있어야 한다.


import numpy as np

array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[3, 4], [1, 2]])

# Perform SVD on both matrices
U1, S1, VT1 = np.linalg.svd(array1, full_matrices=True)
U2, S2, VT2 = np.linalg.svd(array2, full_matrices=True)

# Printing the results
print("Matrix 1: \n", array1)
print("Matrix 2: \n", array2)

print("\nSVD for matrix 1:")
print("U1:")
print(U1)
print("S1:")
print(S1)
print("VT1:")
print(VT1)

print("\nSVD for matrix 2:")
print("U2:")
print(U2)
print("S2:")
print(S2)
print("VT2:")
print(VT2)


# github link

https://github.com/WhoisHOO/HOOAI/blob/main/Python%20Examples/simple_svd


 

728x90

댓글