본문 바로가기
개인 프로젝트/대학원 수업 정리

[CV] 기말고사 정리

by 응_비 2025. 12. 3.

🟦 1. Stereo Vision — “두 카메라로 3D를 이해하는 전체 과정”

Stereo Vision 강의는 3D 구조를 복원하기 위해 필요한 기하학적 관계를 단계적으로 소개하는 흐름으로 구성된다.
따라서 기말에서도 “개념 간 연결”을 묻는 문제가 자주 나온다.


1) Epipolar Geometry: 두 카메라의 기하 구조를 설명하는 언어

(출처: Stereo Vision p.4–17 )
Stereo Vision은 “두 카메라가 어떻게 같은 3D 점을 서로 다르게 관측하는가?”를 이해하는 것이 출발점이다.
이때 등장하는 핵심 개념이 바로 **Epipolar Geometry(에피폴라 기하)**이다.

● Epipolar Geometry가 필요한 이유

두 이미지에서 같은 물체의 점을 찾는 것은 매우 어려운 작업이다.
전체 이미지에서 아무 곳이나 대응점을 찾는다면 비용이 너무 크다.
그래서 “해당 대응점이 반드시 존재해야 하는 선”을 정의해 탐색 공간을 줄인다.

● 구성요소

  • Baseline: 두 카메라 중심을 잇는 선.
  • Epipole: 한 카메라 중심이 반대 카메라의 이미지 평면에 투영된 점.
  • Epipolar Plane: 두 카메라 중심과 3D 점 X가 만드는 평면.
  • Epipolar Line: Epipolar Plane과 이미지 평면이 만나는 직선.

● 핵심 제약

3D 점 X의 대응점 x′는 반드시 epipolar line 위에 있어야 한다.
→ 즉, 2D 검색 → 1D 검색으로 줄어든다.
이는 나중의 stereo matching의 효율을 근본적으로 개선한다.


2) Essential Matrix: 보정된 카메라에서의 epipolar 관계를 수학화

(출처 p.18–23 )
Epipolar Geometry를 수학적으로 표현한 것이 **Essential Matrix(E)**이다.

● 정의

정규화된 카메라 좌표계에서 두 이미지의 대응점 (x, x′)은 다음 관계를 만족한다:
x′TEx=0x'^T E x = 0x′TEx=0

● Essential Matrix가 하는 일

  • 점 x가 주어지면 E를 통해 epipolar line l′ = Ex 를 얻는다.
  • 즉, E는 “점 → 선”의 변환을 수행한다.
  • E는 “총체적인 카메라 위치 관계(R, t)”를 포함한다.

● 왜 중요한가?

E는 3D 구조 복원에서 반드시 필요한
카메라의 상대 자세(rotation, translation) 를 계산하는 기본 요소이기 때문이다.


3) Fundamental Matrix: 일반(비보정) 카메라에서 E를 확장

(출처 p.24–27 )
현실에서는 카메라 내부 파라미터(K)를 모르는 경우가 많다.
이때 사용하는 것이 Fundamental Matrix(F)이다.

● 정의

x′TFx=0x'^T F x = 0x′TFx=0

● F의 특징

  • Pixel 좌표계에서 바로 적용 가능
  • 카메라 내부 파라미터를 몰라도 평가 가능
  • 점을 epipolar line으로 변환하는 기능은 동일
  • E와의 관계:F=K−TEK−1F = K^{-T} E K^{-1}F=K−TEK−1

● 왜 F를 먼저 구하는가?

실제 이미지 두 장이 있을 때는 E보다 F를 먼저 구한다.
이후 camera calibration 정보를 사용해 E로 변환한다.


4) F를 어떻게 구하는가? — 8-Point Algorithm

(출처 p.28–32 )
Epipolar 제약식 x′Fx = 0은 점 1개당 1개의 방정식을 준다.
따라서 최소 8개 점이 있으면 F를 구할 수 있다.

● 알고리즘 핵심 흐름

  1. 점 정규화(normalization)
    → 수치적 안정성을 높이기 위해 매우 중요.
  2. Ax = 0 형태의 선형 시스템 구성
  3. SVD로 해 구함
  4. F의 rank-2 제약 적용
  5. 다시 unnormalization

● F를 구하면 무엇이 달라지는가?

이제 대응점이 존재할 선(epipolar line)을 정확하게 그릴 수 있고,
이는 stereo rectification과 stereo matching의 기반이 된다.


5) Stereo Rectification: epipolar line을 수평화 (검색을 더 단순하게)

(출처 p.48–62 )
Rectification은 두 이미지를 변환하여
모든 epipolar line을 수평(horizontal) 으로 정렬하는 과정이다.

● 왜 필요한가?

초기 이미지에서는 epipolar line이 기울어져 있어 검색이 복잡하다.
Rectification을 하면 대응점을 단순히 같은 y좌표에서 찾으면 된다.


6) Stereo Matching + Disparity + Depth

(출처 p.63–79 )
Rectification이 끝나면 대응점 찾기가 단순해진다.

● Stereo Matching

대표적 유사도 비교

  • SAD
  • SSD
  • NCC (조명 변화에 강함)

● Disparity

d=xL−xRd = x_L - x_Rd=xL−xR

● Depth 계산

Z=fBdZ = \frac{fB}{d}Z=dfB
→ d가 클수록 가까운 물체, d 작을수록 먼 물체.


🟦 2. Motion Tracking – Optical Flow에서 Tracking까지 완전 흐름


핵심 개념

✔ 정의

Optical Flow = 시간에 따라 변화하는 영상의 각 픽셀 움직임(velocity field)

간단히 말하면
“이 픽셀은 여기서 저기로 움직였다!”를 프레임마다 계산하는 기술이야.



예시 이해하기

🎥 예시 1

사람이 걸어가는 영상 →
Optical Flow는 발, 팔, 몸통 각각이 어떻게 움직였는지 **화살표(벡터)**로 표현

🎥 예시 2

차가 달리는 CCTV 영상 →
차 앞부분, 뒤부분 픽셀 변화 방향을 측정해서 속도를 추정



언제 사용되나?

✔ 1) Motion Tracking(물체 추적)
• 물체가 어디로 움직이는지 추적할 수 있어

✔ 2) Video Stabilization(영상 흔들림 보정)
• 손떨림 잡아서 영상 부드럽게 만들기

✔ 3) Action Recognition
• 사람이 뛰는지, 걷는지, 점프하는지 모션 분석

✔ 4) SLAM, 로봇 비전, 자율주행
• 카메라만으로 이동 거리 계산하고 지도 만들기



수학적 핵심

Optical Flow는 두 가지 가정으로 계산돼:

✔ 1) Brightness Constancy (밝기 불변 가정)

물체는 움직여도 밝기는 변하지 않는다.

즉, 픽셀이 움직였지만 같은 “색/밝기”라고 가정한다.

✔ 2) Small Motion Assumption (미세 움직임 가정)

두 프레임 간의 움직임은 작다고 가정한다.

그래서 연속적인 영상에서 계산하기 좋다.



대표 알고리즘

🔹 Lucas–Kanade (루카스–카나데)
• 가장 유명한 Optical Flow 계산 방법
• 작은 공간(윈도우)에서 평균 운동 벡터 계산

🔹 Horn–Schunck
• 전체 이미지에서 부드러운 Flow Field를 만드는 방법

이 둘이 기초 알고리즘이라고 보면 돼.



결과 표현 방식

Optical Flow를 계산하면
영상 위에 화살표들로 표시되는데:
• 화살표 방향 → 움직이는 방향
• 화살표 길이 → 속도(얼마나 많이 움직였는지)

그래서 영상의 “운동 정보”가 한눈에 보인다.



딱 한 줄로 정리

Optical Flow는 영상에서 시간에 따른 픽셀 이동을 벡터로 표현해 움직임을 추정하는 기술이다.


1) Optical Flow의 출발점: Brightness Constancy

(출처: Motion Tracking p.10–14 )
Optical Flow는 “프레임 간 픽셀의 움직임”을 추정하는 기술이다.
핵심 가정은 다음과 같다.

● Brightness Constancy

I(x,y,t)=I(x+u,y+v,t+1)I(x, y, t) = I(x+u, y+v, t+1)I(x,y,t)=I(x+u,y+v,t+1)
즉, 같은 점의 밝기는 시간에 대해 변하지 않는다.

● Small Motion

움직임이 작다고 가정하면 테일러 전개 가능.
→ Optical Flow Equation 도출:
Ixu+Iyv+It=0I_x u + I_y v + I_t = 0Ixu+Iyv+It=0
하지만 식 하나로 미지수 u,v 두 개를 구할 수 없다 → Aperture Problem.


2) Aperture Problem: 왜 Optical Flow는 픽셀 단위로 안 되는가?

(출처 p.26–28)
경계를 작은 창(aperture)으로 보면 “수직 방향의 움직임만” 관측되므로
u와 v의 모든 방향을 추정할 수 없다.
→ “엣지 방향 성분만 보이고 나머지는 모른다.”
이 문제를 해결하는 두 가지 접근이 바로 LK(Local)와 HS(Global).


3) Lucas–Kanade (Local Optical Flow)

(출처 p.22–30)

● 해결 방법

“작은 패치 내에서는 flow가 일정하다”고 가정하여
해당 패치의 여러 픽셀에서 여러 개의 식을 얻고 LSQ로 (u,v) 추정.

● Good Features to Track

AᵀA의 두 eigenvalue가 모두 커야 안정적
→ 코너(corner)가 tracking에 좋은 이유.
→ KLT tracker로 연결된다.


4) Horn–Schunck (Global Optical Flow)

(출처 p.32–36)
Optical Flow의 전역적인 smoothness를 가정하는 방식.

● 목적

  • 전체 이미지에서 flow field가 부드럽다고 가정
  • 에너지 최소화 문제로 정식화

E=(Ixu+Iyv+It)2+α2(∣∇u∣2+∣∇v∣2)E = (I_x u + I_y v + I_t)^2 + \alpha^2 (|\nabla u|^2 + |\nabla v|^2)E=(Ixu+Iyv+It)2+α2(∣∇u∣2+∣∇v∣2)


5) Visual Tracking (KLT, Mean-Shift, CamShift)

(출처 p.40~)

● KLT Tracker

  • feature → LK 적용
  • 코너점 위주 선택
  • 빠르고 정확한 sparse tracking

● Mean-Shift

  • 히스토그램 기반 확률 분포의 모드 탐색
  • 물체 색 분포 기반 위치 추적

● CamShift

  • mean-shift + bounding box 자동조절
  • scale 변화 대응 가능

🟦 3. Classification — 머신러닝 분류가 어떻게 발전했는가(기말 서술형형 상세 기술)

3.1. Bag-of-Words(BoW) 모델: 딥러닝 등장 전 이미지 분류의 표준 방식

(출처: Classification(1) p.17–31 )
초기 컴퓨터비전에서 이미지는 “전체를 한 번에 이해하는” 방식이 아니라
여러 지역(local) 특징들의 모음으로 표현하는 것이 효과적이라고 여겨졌다.
이러한 접근의 대표가 **Bag-of-Words 모델(BoW)**이다.

① BoW의 등장 배경

이미지마다 밝기 변화, 회전, 크기 변화 등 변형이 많이 발생하므로
이미지 전체를 그대로 비교하면 분류가 어려웠다.
따라서 변형에 강한 국소 특징(local features) 를 추출해
이미지를 “단어들의 빈도수 histogram”처럼 표현하는 방식을 채택했다.

② BoW 구체적 절차

  1. Local Feature Extraction
    • 대표적으로 SIFT, SURF 등을 사용한다.
    • 각 특징은 이미지 패치 주변의 gradient 패턴을 기술한다.
  2. Visual Vocabulary 생성
    • 수많은 feature vector를 K-means로 군집화하여 visual words 생성.
    • 예: 1000개의 cluster → 1000개의 visual words.
  3. Feature Quantization → Histogram 생성
    • 각 이미지의 local feature를 가장 가까운 visual word에 매핑
    • 이미지 전체는 “visual words의 등장 빈도수”로 표현됨
  4. Classifier 적용(SVM, NB 등)
    • histogram을 입력으로 분류 수행

③ BoW 방식의 의미

  • 이미지를 텍스트처럼 단어(count) 기반 표현으로 바꾼 혁신
  • 조명/크기/약간의 회전에 강함
  • 그러나 이미지의 공간적 구조는 잃게 된다
    → 이 한계를 CNN이 해결하게 된다.

3.2. Classical Classifiers (kNN, Naïve Bayes, SVM)

(출처: Classification(1) p.30~ )

1) k-NN

  • 새로운 샘플이 주어지면, 훈련 데이터 중 가까운 k개의 레이블을 보고 다수결 결정
  • 장점: 매우 단순
  • 단점: 고차원/대규모 데이터에서는 테스트 비용 매우 큼

2) Naïve Bayes

  • feature 간 조건부 독립을 가정해 확률을 단순화
  • P(c∣x)∝P(c)∏iP(xi∣c)P(c|x) \propto P(c)\prod_i P(x_i|c)P(c∣x)∝P(c)i∏P(xi∣c)
  • 계산이 빠르고 간단
  • 실제 이미지처럼 feature 의존성이 높은 데이터에는 부정확해질 수 있음

3) SVM

  • 두 클래스를 가장 멀리 떨어지게 하는 결정 경계(margin) 를 찾는 최적화 문제
  • 선형 분리가 어려울 경우 kernel trick을 통해 비선형 공간에서 분류
  • BoW와 SVM 조합은 당시 최강의 이미지 분류기였음

🟦 4. Deep Learning Classification — CNN을 중심으로 한 현대 분류 체계

딥러닝은 BoW처럼 사람이 만들던 feature를 버리고,
네트워크가 직접 feature를 학습하는 형태로 전환했다.

4.1. CNN이 필요한 이유

(출처: Classification(2) p.4–20 )
이미지는 2D 공간 구조를 갖는다.
그런데 기존 MLP(fully-connected)는 공간 구조를 무너뜨리고 벡터로 펼쳐 처리했다.
CNN은 이를 해결하기 위해 등장했다.

● CNN의 두 가지 핵심 철학

  1. Local Receptive Field
    • 필터가 작은 영역만 보고 특징을 추출함
    • edge, corner와 같은 지역 패턴 감지 가능
  2. Weight Sharing
    • 동일한 필터를 전체 이미지에 적용
    • 학습해야 할 파라미터 감소
    • translation invariance 획득

● Layer 구성

  • Convolution Layer
  • Non-linear activation (ReLU)
  • Pooling(subsampling)
  • FC layer

CNN은 이미지의 공간 구조를 유지한 채 고차원 의미 구조를 학습한다.


4.2. CNN 모델의 발전 흐름: AlexNet → VGG → ResNet

(출처 p.20~)

① AlexNet (2012)

  • ReLU 활성함수 도입 → gradient 문제 개선
  • Dropout → overfitting 해결
  • GPU 활용 → 대규모 CNN 학습 가능
  • 이미지넷 챔피언으로 CNN 시대의 시작

② VGG

  • 3×3 conv 반복해 깊이를 증가
  • 구조 단순하여 연구/활용이 쉬움
  • 파라미터 증가 문제는 존재

③ ResNet

  • 딥러닝의 가장 큰 난관: gradient vanishing
  • Residual Block:y=F(x)+xy = F(x) + xy=F(x)+x→ shortcut connection을 통해 학습 안정화
  • 100층 이상의 네트워크도 학습 가능

4.3. Vision Transformer(ViT): CNN을 넘어선 새로운 구조

(출처 p.40~)
이미지를 패치 단위로 나누고,
Transformer encoder 구조를 적용한다. (Self-attention)

● 특징

  • global dependency를 더 잘 학습
  • CNN처럼 국소적이지 않음
  • 대규모 데이터에서 매우 강력한 성능

🟦 5. Detection & Segmentation — “분류를 넘어서 위치와 형태”

Detection은 단순히 무엇인지(classification)뿐 아니라
어디에 있는지(location) 까지 알아야 하는 문제다.


5.1. Detection의 기본 문제

(출처: Detection p.3–9 )

  • 이미지 속 객체는 크기, 위치, 비율이 달라짐
  • “하나의 label만 예측”하는 classification과 달리
  • detection은
    (1) bounding box 위치
    (2) box 안의 클래스
    두 가지를 모두 학습해야 한다.

5.2. R-CNN 계열 (Two Stage Detector): 정확도 중심 접근

① R-CNN

(출처 p.15)

  • selective search로 region 후보(약 2000개)를 생성
  • 각 region을 CNN으로 분류
  • 매우 느림 (region마다 CNN 반복)

② Fast R-CNN

(출처 p.17–18)

  • 전체 이미지를 CNN으로 한 번만 처리 → feature map 생성
  • RoI Pooling으로 region별 feature 추출
  • 속도 큰 폭 개선

③ Faster R-CNN

(출처 p.19–21)

  • RPN(Region Proposal Network)으로 region 후보 자체를 CNN이 학습
  • End-to-end 학습 가능
  • 높은 정확도 + 합리적 속도 = 가장 안정된 two-stage detector

5.3. YOLO / SSD (One Stage Detector): 속도 중심 접근

(출처 p.22–30)

① YOLO

  • 이미지를 S×S grid로 나누고
  • 각 grid가 bounding box + confidence + class를 한 번에 예측
  • 하나의 forward pass로 결과 생성 → 매우 빠름
  • 실시간 응용 가능

② SSD

  • 여러 scale의 feature map을 사용
  • small object부터 large object까지 대응
  • default box 개념 활용 → 다양한 aspect ratio 커버

5.4. Segmentation

(출처: p.31~)
Detection의 확장에서 segmentation이 등장한다.

● Semantic Segmentation (FCN)

  • 픽셀 단위로 class를 예측
  • CNN의 fully connected layer를 1×1 conv로 바꾸어 dense prediction 수행

● Instance Segmentation (Mask R-CNN)

  • Faster R-CNN에 mask branch 추가
  • bounding box 단위로 binary mask 생성
  • 같은 클래스라도 서로 다른 객체를 구분 가능

🟦 6. Generative Models — PixelCNN → VAE → GAN → Diffusion 완전 상세 서술

생성 모델 파트는 강의의 마무리를 장식하며,
“이미지를 더 잘 이해하기 위한 모델”에서 “이미지를 직접 만들어내는 모델”로 확장되는 흐름이다.


6.1. Generative vs Discriminative

(출처 p.4–7 )

모델 종류목표
Discriminative P(y
Generative P(x) 또는 P(x

생성 모델은
“데이터의 본질적인 분포를 이해하고 새로운 샘플을 생성하는 능력”
을 추구한다.


6.2. PixelCNN — Autoregressive 방식의 출발점

(출처 p.8–11)

● 목표

픽셀들이 joint distribution
p(x)=∏ip(xi∣x<i)p(x)=\prod_i p(x_i|x_{<i})p(x)=i∏p(xi∣x<i)
을 만족한다고 보고, 순차적으로 pixel을 생성.

● Mask A/B

  • Mask A: 현재 pixel과 미래 pixel 정보 차단 (strict autoregressive)
  • Mask B: 이후 레이어에서는 동일 채널 포함 완화(mask relaxation)

● 장점

  • 정확한 likelihood 계산 가능
  • 안정적이고 학습 쉬움

● 단점

  • sequential generation → 매우 느림
  • 고해상도 이미지 생성엔 부적합

PixelCNN의 한계는
“한 번에 전체 이미지를 생성할 수 있는 모델이 필요하다”는 요구로 이어졌다.
→ VAE 등장.


6.3. Autoencoder → VAE

(출처: p.13–24)
기본 Autoencoder(AE)는 입력 x를 latent z로 압축했다가 다시 복원하는 구조이다.
하지만 z 공간의 확률적 구조를 알 수 없어 생성 모델로는 사용할 수 없다.

● VAE의 핵심 통찰

“z를 확률 분포로 정의하고(z~N(μ,σ²)), 이를 샘플링해서 이미지를 생성하자.”

● Likelihood 문제

직접 likelihood p(x|z)를 최대화하는 것은 불가능(intractable).
그래서 ELBO(Evidence Lower Bound) 를 도입한다.
log⁡p(x)≥Eq(z∣x)[log⁡p(x∣z)]−DKL(q(z∣x)∣∣p(z))\log p(x) \ge E_{q(z|x)}[\log p(x|z)] - D_{KL}(q(z|x)||p(z))logp(x)≥Eq(z∣x)[logp(x∣z)]−DKL(q(z∣x)∣∣p(z))

  • Reconstruction term: 입력을 얼마나 잘 복원했는가
  • KL term: posterior q(z|x)가 prior p(z)와 얼마나 비슷한가

● Reparameterization Trick

z를 직접 샘플링하는 대신
z=μ+σ⊙ϵ(ϵ∼N(0,1))z = \mu + \sigma \odot \epsilon \quad (\epsilon\sim N(0,1))z=μ+σ⊙ϵ(ϵ∼N(0,1))
으로 변환해 gradient 흐름을 유지한다.

● 장단점

  • 장점: latent space가 연속적이고 의미 있는 구조 학습
  • 단점: blurry image 생성

이 흐림(blurry)이 GAN의 등장으로 이어진다.


6.4. GAN — 생성 모델의 대전환점

(출처 p.27–35)
GAN은 “판별기(D) vs 생성기(G)”의 경쟁 구조를 통해
가장 sharp하고 현실적인 이미지를 생성하는 모델로 등장했다.

● 구조

  • Generator: random z → fake image
  • Discriminator: real인지 fake인지 판별

● 학습 목표 (minimax game)

min⁡Gmax⁡DV(D,G)\min_G \max_D V(D,G)GminDmaxV(D,G)
→ D는 real/fake를 구분하도록 학습
→ G는 D를 속이는 방향으로 학습
→ 경쟁을 통해 점점 더 사실적인 이미지가 생성됨

● 문제점

  • 학습 불안정
  • mode collapse
  • likelihood 계산 불가능

GAN의 한계는 “안정적이고 고품질의 생성”에 대한 요구로 이어져
Diffusion Model이 등장하게 된다.


6.5. Diffusion Model — 현재 최강의 생성 모델

(출처 p.36–43)

● 핵심 아이디어

이미지를 점진적으로 noise로 바꾸는 forward process
noise에서 원본 이미지를 복원하는 reverse denoising process를 학습한다.

Forward

q(xt∣xt−1)=N(1−βtxt−1,βtI)q(x_t|x_{t-1}) = N(\sqrt{1-\beta_t}x_{t-1}, \beta_t I)q(xt∣xt−1)=N(1−βtxt−1,βtI)

Reverse

이 확률을 직접 구하는 대신 network가 noise 제거를 학습한다.

● 장점

  • 매우 고품질 이미지
  • 학습 안정적
  • 조건부 생성 가능 (텍스트, 이미지 등)

Stable Diffusion, DALL·E 2 같은 최신 모델들의 기반 구조.


🟦 전체 단원 흐름 요약 — (시험 논술형에 그대로 넣을 수 있는 버전)

이 강의는 컴퓨터비전 분야의 주요 문제들을
다음과 같은 논리적 순서로 설명한다:
Stereo Vision
→ 3D 구조와 카메라 기하를 이해하여 depth를 복원하는 방식 학습
Motion Tracking
→ optical flow를 이용하여 시간적 변화(움직임)를 분석
Classification
→ 이미지 이해의 기본 과제(무엇인가?)를 classical ML과 CNN으로 해결
Detection/Segmentation
→ classification을 확장해 “어디 있는가”와 “어떤 형태인가”까지 해결
Generative Models
→ 기존 모델이 이해한 것에 더해, 이미지 자체를 생성하는 수준으로 확장

'개인 프로젝트 > 대학원 수업 정리' 카테고리의 다른 글

기계학습특론_3주차  (0) 2026.03.19
기계학습특론 2주차 정리  (0) 2026.03.12
[CV] Classification, Segmentation  (0) 2025.12.02
[CV] 과제3_3번  (0) 2025.11.20
[CV] 과제3_문제2  (0) 2025.11.20

댓글