🟦 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를 구할 수 있다.
● 알고리즘 핵심 흐름
- 점 정규화(normalization)
→ 수치적 안정성을 높이기 위해 매우 중요. - Ax = 0 형태의 선형 시스템 구성
- SVD로 해 구함
- F의 rank-2 제약 적용
- 다시 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 구체적 절차
- Local Feature Extraction
- 대표적으로 SIFT, SURF 등을 사용한다.
- 각 특징은 이미지 패치 주변의 gradient 패턴을 기술한다.
- Visual Vocabulary 생성
- 수많은 feature vector를 K-means로 군집화하여 visual words 생성.
- 예: 1000개의 cluster → 1000개의 visual words.
- Feature Quantization → Histogram 생성
- 각 이미지의 local feature를 가장 가까운 visual word에 매핑
- 이미지 전체는 “visual words의 등장 빈도수”로 표현됨
- 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의 두 가지 핵심 철학
- Local Receptive Field
- 필터가 작은 영역만 보고 특징을 추출함
- edge, corner와 같은 지역 패턴 감지 가능
- 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) 를 도입한다.
logp(x)≥Eq(z∣x)[logp(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)
minGmaxDV(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 |
댓글