본문 바로가기
Study 공부할레나

[컴퓨터비전 정주행 Kit] Part2 ch01

by LENA-cfg 2023. 12. 16.

Linear Algebra in Computer Vision

- vector space: image understanding = image description + Decision Making

 

image description(이미지가 어디에 어떤 피처가 있는지 분석) 

- 어떤 x쪽 방향의 그래디언트와 y쪽 방향의 그래디언트를 구한 다음에 그것의 오리엔테이션,

방향성을 에그리게이션해서 보팅을해서 히스토그램을 만드는 이런 걸 고전적으로 사용했음

아래처럼 히스토그램을 벡터로서 사용하고 로컬 피처들을 전체 에그리게이션해서 전체 디스크립터를 구하거나 로컬 디스크립터를 사용해서 매칭 또는 오브젝트 디텍션, 로컬한 정보들을 얻을 수 있음

 

Decision Making

 

인풋 x(=이미지) => 사람을 구분해주는 함수 => output

디시전 바운더리를 찾으면 디시전 바운더리에서 사람인지 아닌지 판단하는 함수 f(x)를 찾는게 컴퓨터 비전임

 

Vector

- 크기와 방향성을 가진 지오메트릭 오브젝트

표현법 x가 R에 실수범위의 N개의 어떤 채널을 가지는 x다

그래서 x는 x1~xn을 가지는 1차원 길이의 리스트로 볼 수 있음

 

벡터의 크기(magnitude)는 각각의 x에 제곱을 더한 후 루트를 씌움=> 유클리디안 스페이스로 거리를 구함

 

Vector Operations

 

벡터 x, y 내적은 벡터의 사이즈를 구한 후에 코사인 세터, x와 y의 각도를 곱해주는 거라고 할 수 있음

또는 x,y를 곱하고 더해줄 수도 있음

 

내적 특징

- 대칭적

- 분배법칙 성립

- 선형성 보장됨(상수를 앞뒤에서 곱해도 같음)

- positive definite: 내적된 결과는 항상 0보다 크다

 

Vector Norm: 벡터의 길이

 

이게 어떻게 사용되냐면, 나중에 옵티마이제이션 할 때 L1디스턴스 같은 걸 사용할 수 있는데

이거 표적해서 희소성을 보장해주는 형태로 적용됨

*희소성이 잘 모르겠어서 딥러닝 sparsity를 찾아봤는데 아래의 내용이 있었음

Linear Dependency

- 벡터의 성질 중 하나

- k의 벡터 셋이 있을때 선형 컴비네이션은 a1이라는 스칼라 또는 밸류값에 x1을 곱해줘서 벡터의 사이즈의 크기를 키워주고 줄여주는 것임

-그래서 X는 리니어 컴비네이션으로 표현할 수 있을때 리니어 디펜던트라고 할 수 있는 것임

 

Basis

- 벡터의 리니어 인디펜던트가 있다고 하고 팽창 한다고 할때 standard basis는 아래와 같음

- basis의 성질은 basis끼리는 모두 직교한다는 성질이 있음

- 자기와 자기를 곱하면 값이 1이 됨

 

Rank of Matrix

- linearly independent(어떻게 축으로 나누어질 것인가)한 로우와 컬럼의 개수 

예시에서 첫번째 행 -1, 2에 어떤 한 스칼라(-4)를 곱하면 4, -8이 될 수 있음 그러면 rank는 1이됨

두번째 매트릭스에서는 위처럼 하나의 값으로 변하지않음 비율자체가 달라져버림 그래서 rank가 2가 됨

 

inverse matrix

- 조건: square로 행과 열의 길이가 같아야함, non-singular여야함(모든 basis가 매트릭스 값과 같아야함)

 

Eigen Decomposition

- 매트릭스 A가 있을때 A에 x를 곱하면 람다 x곱한것이 같다는 수식이 정립되면 x는 아이겐벡터, 람다가 아이겐 벨류

최적화 문제를 푼다고 했을때 Ax의 최소가 되는 걸 구하고 싶을 때 transpose A의 eigenvector를 찾아서

가장 작은 eigenvalue를 찾으면 eigenvector와 eigenvalue를 곱한 것에 최소화하는 값을 찾으면 optimization problem을 풀 수 있다는 것임

 

Probability in Computer Vision

- 컴퓨터 비전에서 확률은 visual sensing은 불확실하고 노이지함

- 확률 모델이란 것이 이러한 불확실성을 유용하게 다루기 위한 것 

 

베이지안 이론

- 조건부확률에서 P(A|B)는 P(A,B) /P(B)라고 할 수 있음

P(A,B) = P(A|B)P(B) = P(B|A)P(A) 이고

P(A|B) = P(B|A)P(A) / P(B)라고 할 수 있는 것임

A가 일어나는 사후 확률은 B가 일어날 어떤 가능성 곱하기 P(A)를 한 것과 비례관계를 갖는 다는 것

 

Gaussian Distributions(정규분포)

- 자연 현상에서 나타나는 숫자를 확률 모형으로 나타낼때 사용하고 

수집된 자료의 분포를 근사할때 자주 사용

- 확률 밀도 함수(pdf)로 나타냈을때 종모양을 가짐

- 평균이 0이고 분산이 1임

 

OpenCV

- 단점: GPU operation에 대한 지원을 명시적으로 파이썬과 연계해서 하지 않음

- BGR 형태로 이미지를 읽어줌 그래서 matplotlib을 사용해서 보여줄 때 채널을 스와핑을 해줘야함

 

ORB(Oriented Fast and rotated BRIEF)

- 피쳐매칭알고리즘

- Fast 알고리즘을 사용해 특징점 검출 근데 코너 뿐만 아니라 가장자리도 반응해서 해리스 코너 검출 알고리즘 사용

이 과정에서 이미지 피라미드를 구성해 스케일 공간 검색을 수행

이 후 스케일 크기에 따라 피처 주변 박스 안의 강도 분포에 대해 x,y축을 기준으로 1차 모먼트 계산

1차 모먼트는 그레디언트 방향을 제공해서 피처의 방향을 지정할 수 있음

 

BRIEF 알고리즘

- 검출된 특징점에 대해 기술자를 생성

- 특징점 주변 영역의 픽셀을 다른 픽셀과 비교해 어느 부분이 밝은지를 찾아 이진 형식으로 저장

 * 기술자란 서로 다른 이미지에서 특징점이 어떤 연관성을 가졌는지 구분하게 하는 역할

 

Matplotlib

import matplotlib.pyplot as plt 

plt.subplot(1, 3, 1) # 행, 열, 행 위치

 

** opencv는 h, w = image.shape

    pil은 w, h = image.size

 

scikit image도 있는데 넘파이와 호환되어있음, pil과 마찬가지로 이미지 조작과 필터링이 가능

 

PyTorch

-gpu와 cpu를 사용해서 딥러닝을 하기위해 최적화된 텐서 라이브러리

-자동 미분 모듈, 최적화 모듈, nn 모듈

-텐서플로우는 그래프를 만들어놓고 한번데이터를 통과시키고 스태틱한 그래프로 바꾸기 까다롭고

파이토치는 그때그때 레이어를 추가하거나 다이나믹한 그래프를 만들어서 마지막 아웃풋을 만드는 형태