참고 링크
http://aikorea.org/cs231n/ -> 한글 번역
Image classification: Data-driven Approach, k-Nearest Neighbor, train/val/test splits
image classification (이미지 분류) : 입력 이미지를 정해진 카테고리 중 하나인 label로 분류하는 문제
-> object detection, segmetation 과 같은 다른 컴퓨터비전 문제에 쓰임
나타날 수 있는 문제점들
1. viewpoint variation(시점 변화): 객체의 단일 인스턴스는 카메라에 의해서 시점이 달라질 수 있음
2. scale variation(크기변화): visual class는 대부분 크기변화를 나타내는데, 이미지 크기 뿐만 아니라 실제 세계에서의 크기도 포함함
3. deformation(변형): 많은 객체들은 고정된 형태가 없고, 극단적인 형태로 변형될 수 있음
4. occulstion(폐색): 객체들이 전체가 아니라 매우 적은 픽셀만 보일 수 있음
5. illumination conditions(조명 상태): 조명의 영향으로 픽셀 값이 변형됨
6. background clutter(배경 분규): 객체가 주변 환경에 섞여서 알아보기 힘듬
7. intra-class variation(내부 클래스 다양성): 분류해야할 클래스의 범위가 큰 경우가 있음 (객체의 형태가 많음)
data-driven approach (데이터기반 방법론): 각 클래스에 대한 많은 예제들(data)을 주고, 이 예제들을 보고 시각적으로 학습할 수 있는 학습 알고리즘을 개발하는 것
-> 라벨화된 이미지들 = training dataset이 필요함
the image classification pipeline
- image classification: 이미지를 픽셀들의 배열로 표현하고, 각 이미지에 label을 하나씩 할당하는 문제
--> input: n개의 이미지로 구성, k개의 별개 클래스로 라벨화 => training set으로 사용
--> learing: training set을 이용하여 각각의 클래스 학습 => training classifier / learing a model
--> evaluation: 새로운 이미지에 대해 어떤 label로 분류되는지 예측하여 classifier 성능 평가 (+ 실측자료: ground truth)
Nearest Neighbor Classifier (최근접 이웃 분류기)
test 이미지를 가져와서 training 이미지의 모든 개별이미지와 비교하여 가장 비슷한 training 이미지의 label 로 예측함.
--> 벡터간의 L1 distance 계산하는 것: 2개의 이미지를 I1, I2 벡터로 나타내고, 그 벡터간의 L1 distance를 계산함 (이미지를 각각의 픽셀값으로 비교하고, 그 차이를 모두 더하는 것)
--> 벡터간의 L2 distance를 계산하는 것
-> L1 vs L2 : L2 거리는 L1 거리에 비해 두 벡터 간의 차가 커지는 것에 더 크게 반응함. L2 거리는 하나의 큰 차이가 있는 것보다는 여러개의 적당한 차이가 있는 것을 선호함
K-Nearest Neighbor classifier (KNN 분류기)
training data set 에서 가장 가까운 하나의 이미지만 찾는게 아니라, 가장 가까운 k개의 이미지를 찾아서 test 이미지 라벨에 대해 투표
(k=1 인 경우, 원래의 nearest neighbor classifier임)
k=1: nearest neighbor와 같음
k=3: 가장 가까운거 3개로 판단
k=5: outlier가 없도록 부드럽게 이어줌 (generalization), 흰색 부분은 애매하게 분류된 것들임.
k가 커질수록 outlier에 더 강하고 분류 경계가 더 부드러워짐 -> 더 나은 일반화 성능을 보임
validation set과 cross-validation, hyperparameter
knn 분류기에서의 k값, 데이터 비교할 때 사용하는 거리$의 종류 같은 것들을 hyperparmeters라고 함.
-> hyperparameter 값을 조정하기 위해서 test set을 사용해서는 안됨!!
-> test set은 학습한 분류기의 일반화된 성능을 평가할 수 있는 척도로 활용
=> test set에 성능을 평가하는 것은 맨마지막에 단 한번만!!!
hyperparameter 값을 조정하기 위해서 validation set을 사용함
-> 학습 데이터셋을 training set과 validation set으로 나눔. validation set을 활용해서 hyperparmeter들을 튜닝함. test set에 대해서는 최종적으로 돌려보고 성능을 리포트함.
(이미지 분류 데이터셋의 예로 CIFAR-10 dataset이 있음
60,000개의 작은 이미지로 구성되어있는데, 50,000개의 이미지가 training set(학습데이터셋), 10,000개의 이미지가 test set임)
(validation set을 예를 들어 설명하면, 50,000개의 이미지가 학습 data set이었는데 이를 49,000개는 training set, 1,000개는 validation set으로 두는 것. 그러면 이 validation set은 hyperparameter를 튜닝할 때, 가짜 test set으로 활용되는 것임)
-> cross-validation: 학습 데이터셋의 크기가 작을 경우에 주로 사용하는 방식임. k-fold 방식에서 k번 반복하지 않고, 한번만 하는 것이라고 볼 수 있음.
-> k-fold cross validation: 학습 데이터셋을 k개의 크기 같은 그룹으로 쪼개고, 1개를 validation set으로 쓰고, 나머지를 training set으로 쓰는 방식임. training set으로 학습하고 validation set으로 검증하는 과정을 k번 진행하고 k개의 결과의 평균이 학습 모델의 성능이 됨.
* hyperparameter 개수가 매우 많으면, validation set의 크기를 늘리는게 좋음
* validation set의 데이터 개수가 매우 적으면, cross-validation 방법을 사용하는 것이 좋음
* 학습 데이터가 작을 때, validation data도 작음
-> cross validation은 계산량이 많아서 하나의 validation set을 정하는 것이 나음. 보통 학습 data의 50~90%가 training이고, 나머지가 validation임
Nearest neighbor classifier 장단점 정리
- 방법을 이해하고 구현하는 것이 쉬움.
- 분류기를 학습할 때, 학습 데이터 셋을 저장하고 기억만 하면 되니까 학습시간이 매우 적음. (근데, 학습할 때 계산량이 없어서 테스트할 때 계산량이 많음) -> neural network는 학습할 때 많은 계산량이 요구되고, 테스트할 때는 계산량이 매우 적음. 그리고 이러한 형태가 실제 환경에서는 더 바람직함.
- 데이터의 차원이 낮을 때는 좋음
knn은 image classification에서 사용되지 않음...(실제 이미지 분류 문제에서는 대부분 효과적이지 않음)
1. 이미지가 고차원적이고, 수많은 픽셀로 이루어져있음. 고차원 공간에서의 거리는 직관적이지 않은 경우가 많음 -> 색의 분포나 배경의 종류에 영향을 많이 받고, 실제 의미가 담긴 클래스에는 큰 영향을 받지 않음.
2. test time이 너무 오래 걸림
3. 차원의 저주: 차원 하나 증가할때마다 필요한 data가 exponetially 하게 커짐
linear classifier (선형 분류기)
: 이미지에 함수를 적용해서 각 score로 반환함
f(xi, W, b) = W*x1 + b
-> xi = [Dx1]
-> W = [KxD]
-> b = [Kx1]
W와 b는 이 함수의 parameter W는 weight, b는 bias
* b는 입력 데이터 xi와 어떠한 상호작용 없이 출력 score 값에 영향을 줌.
* 입력데이터 (xi, yi)는 주어진 값으로 고정되어 있지만, 파라미터인 W와 b는 조절할 수 있는 parameter임.
* 최종 목표는 전체 학습 데이터에 대해서 계산할 score 값들이 실제 라벨과 가장 일치하도록 parameter를 정하는 것!!
* 학습에 사용된 데이터셋은 학습 이후에는 메모리에서 지워도 됨. (새로운 테스트 이미지가 입력으로 들어올 때 함수에 의해 score를 계산하고, 계산된 스코어를 통해 바로 분류되기 떄문임.)
linear classifier 장단점 정리
* 이미지를 열벡터로 펼치기 때문에 각 이미지를 고차원 공간 상 하나의 점으로 생각할 수 있음.
* 학습에 사용된 데이터셋은 학습 이후에는 메모리에서 지워도 됨. (새로운 테스트 이미지가 입력으로 들어올 때 함수에 의해 score를 계산하고, 계산된 스코어를 통해 바로 분류되기 떄문임.)
* non-linear인 것 분류 불가능
'Computer Vision > 메모 + 정리' 카테고리의 다른 글
[Depth Estimation] Depth Estimation 개론 (0) | 2023.04.30 |
---|---|
[WSSS] Weakly-supervised semantic segmentation (0) | 2023.02.14 |
[Segmentation] Seed Region Growing algorithms (0) | 2023.02.12 |
IoU & dice score (0) | 2023.01.25 |
[memo] cnn hyperparameter, neural network architecture (0) | 2023.01.22 |