Image Classification Problem:
입력 이미지(input image)를 미리 정해진 카테고리 중 하나인 라벨(label)로 분류하는 문제로써 Computer Vision에서 매우 핵심적인 문제로 알려져있다. 현재 이미지를 구별하는데 여러 현실적인 문제가 존재한다.
- semantic gap: 우리 눈: 고양이가 한 눈에 들어온다! VS 컴퓨터: 매우 크고 다양한 숫자들로 이루어진 배열로 인식!
- 컴퓨터가 이것이 무엇인지 정확히 이해하고 있는 것이 아니고 무엇을 뜻하는지 알아내는 것이 쉽지 않음
- 조금만 카메라를 돌리면 사진을 이루는 픽셀의 숫자가 바로 바뀌게 됨 -> 다시 학습을 해야함
문제점
1. Viewpoint variation(시점 변화)
2. Scale variation(크기 변화)
3. Deformation(변형): 대부분의 물체는 고정된 모습이 없음(변형되어 보일 수 있음)
4. Occlusion(폐색): 물체의 일부분만 보임
5. Illumination conditions(조명상태): 조명의 영향으로 픽셀값이 바뀌게됨
6. Background clutter(배경 분류): 주변 환경에 섞여 알아보기 힘들게 됨
7. Intra-class variation(내부클라스 다양성): 동물이라면 나이와 종에 따라 다른 것을 보고 하나의 동물이라는 것을 파악해야함
Data-driven approach: 데이터 기반 방법론
이미지를 각각의 카테고리로 인식하기 위한 방법 중 하나
즉, 모델을 train을 한 후 이 모델을 이용하여predict하여 효과를 검증하는 가장 중심적이고 일반적인 방법
- Input: Collect a dataset of images & labels(N개의 이미지를 K개의 class로 label= training set)
- Learning: Use ML to train a classifier: training set을 이용해 각각의 class를 train!
- Evaluation: Evaluate the classifier on new images
- ground truth(실측자료): 많은 예상치들이 답, 즉 ground truth과 일치하기를 기대함
이제부터는 Image Classification을 위한 2가지 classifier(NN, K-NN)에 대해서 알아보고 어떻게 컴퓨터가 Classfication을 진행하는지 알아보게 될 것이다!
1. Nearest Neighbor Classifier
매우 직관적이고 단순한 분류기(최근접 이웃 분류기)이며
- Memorize all data & label
- Predict the label of the most similar training image
- 새로 들어온 image에 대해 training data에 있는 사진들 중 가장 비슷한 애를 가져오게 됨!
- 정확히 같은 class에 있는 사진을 가져오는 성능이 낮은 편!
[[CS231n 12. Visualizing and Understanding]] : 후에 나오는 12강에서 NN classifier이 다시 나오게 됨
그럼 이 classifier은 어떤 기준으로 비슷한 training set을 가져올까?
The choice of distance (거리 선택)
거리를 계산하는 방법은 많음
L1 distance: 두 개의 백터간의 차이를 계산!(즉, 모든 픽셀값 차이의 합을 이용!)
- 특정 vector가 개별적인 의미를 가질 때(키, 몸무게) 주로 사용됨
- 두 백터 값의 차가 커지는 것에 덜 민감한 것이 특징
- 하나의 큰 차이든 여러개의 적당한 차이든 단순히 값의 차이로 결정
- coordinate axis(좌표축)와 관련이 되어 있어 좌표계 회전시 거리가 달라짐
- 이때 distance가 우리가 흔히 기하학적으로 생각하는 distance와 다름!(그렇기 때문에 좌표계 회전시 우리가 생각하는 거리가 달라짐)
- 즉, distacne !=(우리가 흔히 생각하는) 거리
- 각 좌표의 절대값을 사용하기 때문에 좌표의 순서나 회전에 따라 결과가 달라지게 됨
L2 distance: 기학적으로 두 백터간의 #euclidean_distance 를 계산하는 방법 (우리가 흔히 그래프에서 거리를 구하는 방법!= 제곱의 루트의 합!)
- vector 요소의 의미를 모르거나 별로 없을 때
- L1 distance에 비해서 두 백터값의 차가 커지는 것에 대해 훨씬 더 크게 반응함!(제곱)
- 하나의 큰 차이가 있는 것보다 여러 개의 적당한 차이가 생기는 것을 선호
- 좌표계 회전에 영향을 받지 않음
- 회전을 하더라도 어차피 좌표간의 차이를 제곱하고 더한 후 제곱근을 취하기 때문에 영향을 받지 않음
- L2 distance== (우리가 흔히 생각하는) 거리
2. K-Nearest Neighbor
training set에서 가장 비슷한 이미지를 찾는 것 대신 가장 비슷한 k개의 이미지를 찾아 test 이미지의 label에 투표를 하여 정해주는 방법이다! (1-Nearest Neighbor == Nearest Neighbor Classifier)
- 새로운 데이터를 입력 받았을 때 가장 가까이 있는 K개가 무엇인지를 중심으로 새로운 데이터의 종류 정해주는 알고리즘
- k의 값이 커질수록 classifier은 이상점(outlier)에 더 강인하고, 분류 경계가 부드러워지는 효과가 있음
더 나은 점!
1. island 문제 해결(ambiguously classified)
예를 들어, 빨간색이 많은 지점에 초록색이 하나 끼어있는 경우, 이를 최소한 두개의 class로 묶어 애매한 지점임을 보여주고 조그만한 섬들이 생기지 않도록 부드럽게 연결!
2. noisy에 강함
값 하나가 있다고해서 그 곳이 그 색깔 영역이 되지는 않음 (주변이 다른 영역으로 둘러쌓여있다면 값 하나에 의해 그 값이 맞다고 생각하는 것에 무리가 있음)
=> 더 나은 일반화(generalization) 성능을 보임
흰색 지점: 투표의 결과 적어도 2개의 class가 tie를 이룰 때! =ambiguously classified
색깔: 개, 고양이와 같은 사진의 종류, 점: 사진(image)를 의미
어떤 K를 골라야할까, 어떤 #metric 을 사용할지?= ( #hyperparameter )
Validation sets for Hyperparameter tuning(방법 3가지)
hyperparameter을 조정하기 위해 테스트 셋을 절대 사용하면 안됨
Test set은 매우 귀중한 자료이고 잘못된 경우 #overfitting 될 수 있다
- Split data into train & test
- 새로운 데이터가 들어왔을때 알고리즘이 얼마나 효과적인지 모름
- train data: unseen data(test data)에는 효과적이지 않을 수 있음
- Split data train, validation, test
Training set을 다시 2개로 쪼개 validation set을 생성 -> 가짜 테스트 셋으로 활용- test data: iid(identical independence distribution)이기 때문에 확률적으로 기존 데이터와 비교해보았을 때 매우 무관할 가능성이 낮음 -> 무작위로 나누어도 상관없음
- validation data: accuract를 확인하며 얼마나 모델이 정확하지 확인
- 이후 그래프를 그려, 가장 잘 동작하는 k값을 정할 수 있음
- test data: iid(identical independence distribution)이기 때문에 확률적으로 기존 데이터와 비교해보았을 때 매우 무관할 가능성이 낮음 -> 무작위로 나누어도 상관없음
- Cross-Validation [[14-1. Cross Validation]] 14강에서 다시 이 내용이 나옴
- fold(small dataset)으로 데이터를 나누어 여러번 검사하는 방법
- 딥러닝에는 사용하지 않음(시간이 너무 오래걸림)
Cf) trainig data에 50~90%를 trainig용으로 나머지는 validation data로 활용(validation set의 크기는 여러 변수에 영향을 받음) - hyperparmeter의 개수가 매우 많으면 validation 크기를 늘리는 게 좋음
- 수백개 정도로 적다면 cross-validaion 이용하는 것이 안전
- 주로 3,5,10 fold로 사용됨
Pros and Cons of Nearest Neighbor classifier
장점:
1. 이해하고 실행하기 매우 간편함
2. train에 걸리는 시간이 적음
단점:
- test time이 매우 느림(=computational cost)
- 컴퓨터나 스마트폰에 적용을 할 때 시간이 오래 걸림
- 딥러닝에서는 완전히 반전되어 test time을 매우 길게 만듦!
- 픽셀의 distance(차이)가 정보적이지 않음
만약 데이터가 low-dimension일때는 효과적일 수 있지만 image classification에는 효과적이지 않음- 이미지는 high dimensional object (차원이 높을수록 커버해야하는 범위가 지수의 속도로 증가!
- 차원의 저주(curse of dimensionality) 에 빠지게 됨
- 데이터가 고차원 공간으로 이동하면 데이터 간의 거리가 예상보다 빨리 증가
- 고차원에 모든 방향으로 데이터가 흩어져 더 많은 neighbor를 찾아야 적잘하게 특정 지점을 표현 가능
- 고차원일수록 거리가 증가함에 따라 성능 저하 및 계산 비용의 증가를 가져옴
- 고차원에서의 distance에 대한 직관이 우리와 달라질 수 있음
- 고차원 공간에 많은 변수와 차원에 의해 거리 개념이 일반적인 기하학적 해석과 달라지게 됨
- 이럴 경우 distance를 이용한 NN classifier가 제대로 작동하지 않을 수 있음
- training example을 커버하는 범위가 매우 커짐
- pixel을 기반으로 한 L2 distance의 경우 우리가 인식하는 유사점과 거리가 있게 됨
- 실제 물체의 특징과는 별개로 배경이 바뀌었단 이유로 가까이 있을 수 있음
- 아래 사진모두 L2 distance가 같을 수가 있는데 이에 대한 정보는 매우 다르다는 것을 알 수 있음
- 아래 사진모두 L2 distance가 같을 수가 있는데 이에 대한 정보는 매우 다르다는 것을 알 수 있음
- 이미지는 high dimensional object (차원이 높을수록 커버해야하는 범위가 지수의 속도로 증가!
'AI 공부하기 > CS231n' 카테고리의 다른 글
CS231n 4. Introduction to Neural Networks (요약,정리!) (2) | 2024.03.14 |
---|