🤖 Education/2021석사과정

[딥러닝기초] 3주차 : (CS231 lecture 2) Image Classification Pipeline

데이터분석가SIENNA 2023. 6. 30. 19:00

3주차 : (CS231 lecture 2) Image Classification 

 

GAN : 생성자와 판별자를 두어 네트워크 자체가 돌아가면서 실제 data와 비슷한 data를 만들어내는 네트워크

→ data 생성모델 (fake가 아닌 것처럼 보여주는 기술)

→ 3차원 데이터를 2차원으로 어떻게 투영하는지에 따라 결과를 다르게 볼 수 있다.



[Image Classification]

예 : 고양이 이미지 판별

미리 define된 label 중에서 어떤거냐? 찍기문제

dog, cat, truck, plane… 등 class가 10개라면 이 이미지는 10개중 어느 것에 속하는가?

- 문제 : 이미지의 pixel(picture element)숫자 값만 보고 우리가 알고있는 cat의 특성인 ‘귀가 쫑긋함’(catness)의 특징을 어떻게 판별하는가?

 

- 왜 어려운가 ? 

뷰포인트 다양성 : cat이 변하지 않더라도 카메라, 조명, 모양 등이 움직이면 숫자가 변한다

illumination (조명)

Deformation (변형, 기형)

Occlusion (일부만 있다든지..) 얼굴만...꼬리만..

Background Clutter : 배경이 객체와 비슷하여 인식이 어려움

Intraclass variation : 같은 cat(같은 class)인데 모양(shape, color, texture)이 서로 다르다. = 이미지 pixel 값이 서로 다르다.

 

Hand-made rules for cat recognition = 사람이 생각하는대로 hard-coding

문제점

① Super brittle 굉장히 불안정한

② Not scalable (각 class별 다른 rule을 만들어야 함) → 조금 어긋나는 놈은 분류가 안 됨

 

→ Data-Driven Approach : 학습data를 가지고 스스로 rule을 만들게 하자!

→ 학습 데이터가 바뀌면 모델도 바뀐다.

 

[Data-Driven Approach] : 데이터 중심 접근방법

객체의 특징을 규정하지 않고, 다양한 사진들과 label을 수집하고, 이를 이용해 모델을 학습하여 사진을 새롭게 분류하는 방식

classifier를 program하지말고 자동생성하자. 기존과는 다르게 2개의 함수로 구성

-train / predict(classifier)

  1. 이미지 및 레이블의 데이터 세트를 수집한다
  2. 머신러닝을 사용하여 분류기를 훈련한다
  3. 새 이미지에서 분류기를 평가한다

 

[Nearest Neighbor]

: test이미지를 모든 학습 이미지와 비교하여 가장 비슷한 이미지의 label을 결과로 출력

모든 데이터와 라벨을 기억시킨다 > 트레이닝 이미지와 가장 가까운 라벨로 예측한다.

(학습데이터와 모두 비교해야하여 시간이 오래 걸린다)

 

- Nearest Neighbor의 의미 : 256x256 크기 흑백 이미지

= 256x256차원 공간에서의 점

= 가능한 서로 다른 이미지 개수 = 2의 256x256승



예시 데이터 : CIFAR10 

10 classes

50,000 training images

10,000 testing images

32*32 (32-bit color)

→ 이미지 1장을 1024차원의 벡터로 본다



거리 잣대 : L1 distance (=맨하탄 디스턴스)

test image의 픽셀값 - training image픽셀값 = 결과 행렬값을 모두 더한 값!

→ 똑같은 이미지라면 이 값이 0이 나온다.

 

red : 1byte 0~255

green : 1byte 0~255

blue : 1byte 0~255

=> bmp파일

 

B or W → 1byte

8bit = 2의 8승 = 256

256*256*256 = 2의 32승 = 16,000,000가지 색



Q : With N examples, how fast are training and prediction?

N개의 예에서, 훈련과 예측은 얼마나 빠릅니까?

A : Train O(1), predict O(N)

 

단점은 모든 사진의 픽셀값의 계산하기 때문에 예측 과정에서 소요되는 시간이 상당하다.

이러한 비효율적인 문제를 해결하기 위해 보완된 방이 K-Nearest Neighbor이다.

 

* 차원의 저주

1) 1차원 6개 data

2) 2차원 : 1차원에서의 비슷한 밀집도를 가지려면 2차원에서는 36개가 필요 (6x6)

3) 3차원 : 1차원 처럼 밀집도를 바탕으로 해서 분류 알고리즘을 만들기 위해서는 data가 6*6*6개 만큼 있어야 1)과같은 밀집도, 성능을 낼 수 있다. 하지만 그 데이터를 채울 수가 없다(어렵다). 데이터를 표현하는 차원이 고차원이 될 수록, 어느정도의 성능을 내기 위해서는 학습에 필요한 데이터가 기하급수적으로 늘어난다. 

= 차원이 늘어날 수록 성능이 떨어짐



차원이 낮은 형태의 feature vector (특징벡터)로 변형시켜 

(예) 2048 차원으로 만들어서 이걸 갖고 classify를 많이 한다.

→ 옛날에는 shift feature, 요즘엔 CNN으로 특징벡터를 끄집어 낸다.

→ 특징벡터를 끄집어 내기 전, 일정한 사이즈로 이미지를 리사이징한다.

(CNN의 경우 256*256을 일반적으로 사용, HD급이면 1920*1086*3)

이미지를 리사이징해서 줄일경우, 차원이 낮아지는 것으로 보면 된다.

이미지가 크면 좋겠지만, 이미지를 키워서 모델링할 경우, 계산량이 많아져 모델사이즈가 커진다.

 

* off the shelf model : 미리 trained 된 모델들 구글링 or 깃허브로 얻을 수 있다.



[K-Nearest Neighbors] → 노이즈를 없앤 분류기를 만들자

distance metric를 이용해서 가까운 이웃을 k개만큼 찾고, 이웃간에 투표를 하여 득표수가 많이 얻은 label로 예측하는 방법이다. 하지만 가장 가까운 이웃이 존재하지 않으면 흰색으로 표기된다.

가장 가까운 이웃에서 레이블을 복사하는 대신, 가장 가까운 K 지점에서 다수결 획득

 

1) NN일 경우 : 노란색에 제일 가까우므로 노란색으로 분류

2) K-NN일 경우

K=1 : NN과 똑같음

K=3 : 주위에 있는 놈 3개를 보겠다! 

노란점은 노란색에 제일 가깝더라도, 주위에 초록색이 더 많기 때문에 초록색으로 분류

 

- Majority voting : 가장 비슷한 것 k개를 골라, k개가 다수인 label이 무엇인지 찾는다 =voting

→ 조금 더 합리적. 주위에 있는 것들을 같이 봐서, 주위 놈들의 label이 뭔지 voting 을 해서 쫓아가자!

 

하이퍼 파라미터 : KNN을 사용하려면 학습 전 사전에 K와 거리척도인 하이퍼파라미터를 선택해야 한다.

하이퍼 파라미터를 선택하는 방법은 문제의존적(problem-dependant) 이므로, 여러 시도를 한 다음 성능이 좋은것을 선택한다.

일반적으로 데이터를 Train, Validation, test로 3개로 나누어 학습하고 예측하는 방법과

Cross Validation(교차검증)이 있다. 교차검증은 작은 데이터셋일 경우 많이 사용하고 딥러닝에서는 많이 사용하진 않는다.

 

[Linear Classification] 선형분류

- K-NN과 다른 점 : K-NN은 모든 학습 데이터를 keep하였다. 여기서는 학습 데이터의 특징을 W (parameter)에 저장

- 매번 DB에 있는 걸 다 비교하면 오래걸리니까 대푯값을 하나 만들어놓자.

- 각 class별로 대푯값을 만들어서 대푯값과의 distance만 계산하자.

 

• Score = Image pixel들의 weighted sum (1차 함수)

• template (prototype) matching : cat 입력 이미지에 대한 score가 크게 되기 위하여서는 Wcat이 cat이미지와

비슷해야 한다.

• Wcat은 cat이미지에 대한 template이다.

• One template for each class

• 각 class에 대한 template (대표이미지)를 어떻게 만들 것인가? → 학습에 의하여

-예:  CIFAR10 데이터의 경우 대표이미지를 만들려면 pixel값을 다 더해서 10으로 나눈다. (class가 10개니까) 그랬더니...머리가 2개인 말 이미지가 생성됨

 

• Linear의 의미

-입력 값에 W값을 곱하였다.

-Score값은 입력 데이터의 1차원 함수이다.

→ data space상에서 각 점들인데, 그 점들을 직선으로 각각 영역을 구분

→ 점이란 것 자체가 1차원 곱하기 해서 더한 것이라 linear라고 함

(non-linear classify : 곡선으로~)

 

이미지를 고차원 공간으로 보게되면 , Linear Classifier는 각 클래스를 구분해주는 선형 경계 역할을 하지만, 일차함수 직선으로 분류되지 않은, 즉 데이터의 분포에 따른 선형으로 분류할 수 없는 데이터가 대부분(Multimodal problem)이다. 이러한 단점을 보완하기 위해 W 가중치 설정이 중요하다.

 

* grayscale image : 밝기 단계를 256단계로 나누어 1 byte (8bit)를 이용해 한 pixel을 나타내 주는 것

* color image : 1 pixel의 값을 RGB값으로 나타내주는 것