Standford University의 cs231n: Convolutional Neural Networks for Visual Recognition
https://youtube.com/playlist?list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYv&si=6hRJutxYjNPxEVz_
Lecture Collection | Convolutional Neural Networks for Visual Recognition (Spring 2017)
Computer Vision has become ubiquitous in our society, with applications in search, image understanding, apps, mapping, medicine, drones, and self-driving car...
www.youtube.com
한글 강의
https://youtube.com/playlist?list=PL1Kb3QTCLIVtyOuMgyVgT-OeW0PYXl3j5&si=8qj7o-1ByNMdOaV5
딥러닝기반영상분석 (cs231n)
cs231n 강의를 우리말로 설명한 동영상
www.youtube.com
Image classification
입력이미지를 받은 후에, 우리가 미리 정해놓은 카테고리 집합을 보고 어떤 곳에 넣을지 정하는 것

컴퓨터에게 이미지는 기본적으로 숫자(0~255)로 구성된 3D array이다.
ex) height x width x color channel
여기서 의미론적인 차이(semantic gap)가 발생한다.
초기 이미지 분류의 한계점
VIewpoint variation(다양한 관점), Illumination(조명, 밝기 등), Deformation(형태의 변형), Occlusion
(가려짐, 은폐, 은닉), Background Clutter(배경과 비슷함), Intraclass variation(다양성)
Image classifier의 형태
def predict(image):
#????
return class_label
새로운 데이터 중심 접근방법(Data-Driven Approach)
고양이는 무엇이다, 물고기는 무엇이다 하는 명시적인 규칙 없이, 대량의 데이터를 활용해 모델이 스스로 패턴을 학습하고, 학습한 모델로 새로운 이미지도 인식을 가능하게 하는 방식이다.
입력이미지를 인식하기 위해서는 두 가지 함수가 필요하다. (key insight)
1. train 함수: train image와 label을 받아서 학습한 모델을 도출해냄
2. predict 함수: 학습한 모델과 test image를 입력하면 label을 반환함
def train(train_images, train_images):
#build a model for images -> labels...
return model
def predict(model, test_images):
#predict test_labels using the model...
return test_labels
1. Simple Classifier: Nearest Neighbor
(현재는 거의 사용하지 않는 교육용 모델)
train 단계: 단지 모든 학습 데이터(images , labels)를 메모리 상에서 기억
predict 단계: 새로운 이미지가 들어오면 새로운 이미지와 기존의 학습 데이터를 비교해서 가장 유사한 이미지로 label을 예측
example dataset: CIFAR10 (ML에서 자주 쓰는 연습용 데이터셋)

왼쪽 이미지: CIFAR-10의 test images
오른쪽 이미지: 맨 왼쪽 열은 CIFAR-10의 테스트 이미지이며, NN 알고리즘을 적용하면 오른쪽 방향으로 테스트 이미지와 유사한 순으로 학습 이미지를 정렬하게 된다
('트럭'과 가장 유사한 첫 번째 이미지가 '말'인 것을 보면 정확도는 좋지 않음을 알 수 있다.)
그렇다면 이미지를 어떻게 비교할 것인가?
1) L1 Distance (Manhattan distance)


픽셀 간의 차이 값을 계산하고 모든 픽셀의 수행 결과를 모두 더한다.
training data가 늘어날수록, 분류(test)하는 데 걸리는 시간은 선형적으로 증가한다.
2) L2 distance (Eculidean distance)
제곱 합의 제곱근을 거리로 이용하는 방법

L1은 어떤 좌표 시스템이냐에 따라 많은 영향을 받지만, L2 distance는 좌표계의 영향을 받지 않음
- L1 거리: 좌표축을 따라가는 길이의 합
- L2 거리: 직선거리(피타고라스)
만약 특징 벡터의 각각 요소들이 개별적인 의미를 가지고 있다면 (키, 몸무게 등) L1 distance 이용
특징 벡터가 일반적인 벡터이고, 요소들 간의 실질적인 의미를 잘 모르는 경우라면 L2 distance 이용
train set의 이미지가 총 N개 라면 train/test 함수의 속도는?
train: O(1) : 데이터를 기억하기만 하면 되므로
predict: O(N) : N개의 학습 이미지를 테스트 이미지와 비교해야 함
하지만 우리가 원하는 것은 train time > test time (CNN 같은 모델은 test time이 월등히 빠름)

NN분류기는 공간을 나눠서 각 레이블로 분류하기 때문에 잡음(noise)이나 가짜(spurious)가 생긴다는 문제점이 있다.
이러한 문제들이 발생하기 때문에 좀 더 일반화된 버전인 k-NN 알고리즘이 탄생하였다.
2. K-Nearest Neighbors
단순히 가장 가까운 이웃만을 찾는 것이 아니라 거리 기반으로 가장 가까운 이웃을 K개만큼 찾고, 다수결 투표로 분류를 결정한다.

(사실 이미지 분류에서 그다지 좋은 방법은 아니다.)
내 문제와 데이터에 딱 맞는 모델을 찾으려면?
주어진 환경에서 데이터에 맞게 다양한 하이퍼파라미터 값(ex. K, 거리 척도)을 시도해 보고 가장 좋은 값을 찾는 것
실험 방법
1. 학습 데이터의 정확도와 성능을 최대화하는 하이퍼 파라미터를 선택하는 것 (BAD. 과적합 발생함)
2. 데이터셋 중 학습 데이터를 쪼개서 일부를 테스트 데이터로 사용하는 것 (BAD. 그저 테스트 셋에서만 잘 작동함)
3. 데이터의 대부분은 트레이닝 셋으로 나누고, 일부는 validation set, 그리고 나머지는 테스트 셋으로 나눔
다양한 하이퍼파라미터로 train set을 학습, val set으로 검증 후 가장 최적의 하이퍼파라미터 값 선택, test set에서는 오로지 한 번만 수행 (처음 보는 데이터셋에 대해서도 잘 작동하게 될 것)
4. 교차 검증(cross-validation)

test set을 정해두고 나머지 데이터를 train set, val set으로 나누고 train set을 여러 부분으로 나눈다.
처음 4개의 fold에서 하이퍼 파라미터를 학습시키고 남은 한 fold에서 알고리즘 평가 이를 순환하며 반복한다.
(계산량 많아서 딥러닝할 땐 잘 쓰지 않고 작은 데이터셋일 경우에 주로 사용한다.)
K fold cross-validation을 통해 test set이 알고리즘 성능 향상에 미치는 영향을 알아볼 수 있다.
3. Linear Classification (선형 분류)
입력 이미지(x)와 파라미터, 가중치(W)를 이용해 f(x, W) 스코어를 계산해 스코어가 높을수록 정답에 가까운 것 (parametric approach)
f(x, W)=Wx
(행렬과 벡터의 곱)

b는 편향으로 데이터와 무관하게 특정 클래스에 대한 우선권을 부여하는 것

just a weighted sum of all the pixel values in the image
counting colors at different spatial position
각 클래스를 구분시켜주는 선형 결정 경계를 그어주는 역할로, 각 클래스를 하나의 템플릿으로 평균화하여 표현하기 때문에 복잡하고 다양성 있는 분포, 비선형 경계, 반전 문제 등에 잘 대응하지 못하는 한계가 있다.
'AI > Stanford Univ. cs231n' 카테고리의 다른 글
| 7강 Convolutional Neural Networks (0) | 2025.04.05 |
|---|---|
| 6강 Training Neural Networks 2 (0) | 2025.04.04 |
| 5강 Training Neural Networks 1 (1) | 2025.04.04 |
| 4강 Introduction to Neural Networks (0) | 2025.04.04 |
| 3강 Loss Functions and Optimization (0) | 2025.04.04 |