AlexNet (8-layer)

Top-5 error: 15.4%

이후 Layer를 쌓는 시도가 증가

VGG (19-layer)

7.3%

GoogleNet (22-layer)

6.67%


새로운 의문점...

Q. 과연 Layer를 많이 쌓는 것이 좋은 결과를 가져오는가?

A. ㄴㄴ. ResNet Depth-152짜리가 ResNet Depth-20짜리보다 CIFAR-10에 대해 에러율이 더 안좋게 나옴

    더 높은 training error를 발생시킨 꼴

    이유: backpropagation되는 gradient가 점점 약해져서 소멸되는 문제 (Gradient vanishing)


단순히 깊게 쌓는 것이 좋은게 아님. 어떻게 이러한 문제를 해결해야 되는가..?


1. 넓게 쌓는다. (추후 설명)

2. Residual Unit(일종의 지름길)을 사용한다.


ResNet (152-layer)

3.6%

Residual unit을 사용해 Layer를 쌓아서 Backpropagation 문제를 해결


Residual Unit


Residual unit의 개념을 알아차린 사람들은 이런 과감한 시도를 함.




R-CNN (Region-based CNN)


 이미지에서 region을 추출하고 CNN함


Q. Region 추출은 어떻게 하는가? bruteforce는 cost가 너무 크지 않나?

A. CNN 이전에 개발된 Segmentation을 사용해서 쪼개보자.


그래서 나온 것이 Fast R-CNN


Fast R-CNN


  RoI (Region of Interest)를 projection시켜서 convolution network에 집어넣어 버림



파레이돌리아 (Pareidolia)


  사람이 보기에도 얼핏 대상이 아니지만 비슷하게 생겼다고 느끼는 현상

이게 NN에서도 동일하게 나타남, Alt-text generator (캡션 만들어 주는 도구)가 잘못된 Caption 생성하는 경우가 있음



Becoming fully convolutional

  하나만 Convolution하는 것은 1x1의 배열을 주욱 늘어놓은 모양새




  이를 H x W의 사이즈 인풋으로 1x1이 아닌 H/32 x W/32의 크기로 Multiple output을 낼 수 있도록 모양을 변경


-> YOLOv3의 Object detection과 같은 쾌거를 낳음



Upsampling with transposed convolution

    stride 값을 더 크게 줘서 더 넓은 output을 만들 수 있음


Output feature map


  좌측 상단부터 합쳐진 값에 따라 output feature map 작성 (stride와 kernel size에 유의)

stride값은 original size를 벌려놓는 값 (1이 가장 붙어있고, 2가 한칸 떨어짐)

kernel은 읽어오는 단위


Q. 이렇게 만든 이미지의 품질은 어떤가?

A. Grid effect가 발생함 (전에 배운 Fourier transform에서 edge가 강화되는 문제)


    이는 Low frequency영역을 날려버리면 그러한 아티팩트가 제거됨

Propagation

Forward propagation


  순차적으로 Divide and conquor형식을 따라 값을 구해나감. 역산이 쉬워짐.


Chain rule


  수학 시간에 배운 내용, 미분 결과를 짬뽕해서 최종적으로 필요한 값을 구하는 방법

Backpropagation을 구하기 위해 필요함  


Backpropagation


  역으로 전파하는것, 값을 역으로 구함. (https://youtu.be/573EZkzfnZ0?t=341)



1. Forward로 계산되어 있는 값을 이용하되, 주어진 식을 미리 최종적으로 구할 x, w에 해당하는 미분방정식으로 구해놓음



2. Chain rule을 이용해 각 미분값을 구함



3. 미분값으로부터 Chain rule을 사용하면 w와 x값을 구할 수 있음


Example) Sigmoid


  이러한 Sigmoid형태는 애써서 미분할 필요가 없다.


Graph로 그려보기


가장 오른쪽 perceptron에 해당하는 1/x의 미분값만 알면 됨.

나머지는 계속 Chain rule에 의해서 계속 곱하고 곱하고 곱하고해서 사라져버림. 결국 최종적으로 dz/dg값을 구할 수 있음

(https://youtu.be/573EZkzfnZ0?t=926)




그래서 Tensorflow에서는 모든 것이 그래프로써 그려진다.



Pattern of Backward flow

ADD(+) gate

  Gradient distributor (Gradient를 분배함)


MUL(*) gate

  Gradient switcher (선택된 곳만 Update)


MAX(최대값) gate

  Gradient router (한 쪽만 반영)


Loss Function

현재의 Classifer가 주어진 Dataset에 대하여 얼마나 좋은지 나타내는 함수



예시) Linear classifier

3개의 training example, 3개의 class


이전에도 설명했듯이, f(x, W) = xW + b (b = bias, W = weight of parameters)



prob\GT    cat    car    frog

cat            3.2    1.3     2.2

car            5.1    4.9     2.5

frog         -1.7    2.0    -3.1


GT들은 각각 3.2, 4.9, -3.1이다.



Multiclass SVM Loss 구하기


각각 개별에 대한 Loss 구하는 방법

foreach true_negative in true_negatives:

  max = max(0, true_negative - GT + 1)


cat-cat의 loss는 2.9


전체에 대한 Loss 구하는 방법

  구해진 Loss들의 합에서 N을 나눈 값: Loss over Full dataset (Average)



Q. Loss가 0인 Weight값을 찾았다면, W는 유니크한 값인가?

A. Unique하지 않다. 2W도 Loss가 0이다.


Car에 대한 Loss가 0인것으로부터 생각할 수 있음


Softmax Classifier


초기에 주어진 Unnormalized log probability가


cat

cat          3.2

car          5.1

frog        -1.7


일 때, 각 probability에 exponential을 취해서 unnormalized probability를 생성


cat        e^X

cat          3.2        24.5    

car          5.1        164.0

frog        -1.7        0.18


각 e^X 값의 비중이 얼마나 차지하는지 계산하여 probability 생성


cat        e^X        probability

cat          3.2        24.5        0.13

car          5.1        164.0       0.87

frog        -1.7        0.18        0.00


실제 probability는 -log(probability)을 취함으로써 얻어짐


cat        e^X        probability        real_probabliity

cat          3.2        24.5        0.13                    0.89

car          5.1        164.0       0.87

frog        -1.7        0.18        0.00


Q. 왜 이렇게 하는가?

A. Cost function의 미분값을 convex하게 만들어주기 위해서


Softmax vs SVM


Hinge loss 를 제거하여 0-확률 문제를 제거함



Optimization

Gradient descent

  

epoch와 Learning rate에 관계에 중요한 역할을 가짐


Convex function에 최적의 값을 찾아주는 것을 보장 (Non-convex할 경우 Local minimum에 빠짐)

대부분의 vision problem이 non-convex임


Stochastic Gradient Descent

Q. Gradient descent를 적용하기에는 데이터셋이 너무 큰 경우가 존재하는데 어떻게 하는가?

A. Mini-batch를 사용해서 Gradient descent를 수행함.

    단, minibatch는 랜덤하게 뽑고, shuffle된 값이기 때문에 weight를 정해주어야 함.


Mini-batch를 수행하는 주기를 Epoch라고 함. (pytorch에서는 DataLoader 함수를 사용하고, iteration 시킴)


Learning rate를 설정하는 방법


Gradient descent oscillations

높을 수록 Curve를 잘 타서 Local minimum에서 빠져나올 수 있음.

단, 높은 LR은 변화에 민감해서 Loss의 최소값과 최대값 사이를 크게 진동하는 경향을 보임.

낮을 수록 안정적으로 수렴, Epoch에 따라서 LR을 조절해줄 필요가 있음 (점점 낮게, 보통 이니셜은 0.1에서 점차 줄임)


적절하게 LR을 조절하면, 최종적으로 Loss가 어느 정도에 수렴하게 됨 (좋은 알고리즘의 경우 Loss가 거의 0에 수렴)



How to set the Hyperparameter

1. Dataset(전체를 Training set으로 퉁침)에 맞는 hyperparameter를 찾는다 (문제: Training data에 대해서만 완벽함)

2. Dataset을 training set과 test set으로 구별하고, hyperparameter를 찾는다.

    (과제 했던 것 처럼 trainloader와 testloader를 따로 두는 방법, 문제: 새로운 데이터의 결과가 어떻게 나올지 모름)

3. dataset을 training set, validation set, test set으로 구별하고, validation set의 결과가 좋은 hyperparameter를 찾는다.

    (Training과 Validating을 분리하는 것이 중점. 이 때, Validation set은 Train에 사용될 수 없음.)

4. Dataset을 잘개 쪼개서 Fold로 만들고 각각의 Fold에 대해 Validation set으로 삼음, 3번과 동일하게 Hyperparameter를 찾는다.

    (작은 데이터셋에 유용하지만 딥러닝에서는 잘 안쓰임)


Machine Learning의 한계

  세상에 존재하는 데이터셋들을 모두 총괄하는 Learning algorithm은 존재하지 않음 (No free lunch for supervised learning)

그러나, 문제에 알맞는 특성을 통해 알고리즘을 개발하면 성능을 극적으로 끌어올릴 수 있음.


Curse of Dimensionality


  n개의 binary variable -> 시간복잡도 O(2^d)

차원이 높아질수록 위치의 가능성이 기하급수적으로 증가하게 됨


Q. 이를 어떻게 해결하는가?

A. End-to-End learning을 통해 이미지를 전처리하고, Feature extraction을 하고... classifying을 하고...



Neural Network

Perceptron


  perceptron은 wx + b의 형태로 이루어져 있음. 여기서 w는 weight, b는 bias를 뜻함.


예시) 28x28사이즈의 input image가 들어오는 경우, x는 1 x 784로 표현될 수 있음 (Binary 형태의 1차원 배열)

이 때, w는 vector의 weight이 되므로 784 x 1로 표현될 수 있음.

wx + b의 결과로 1*784 + 784*1 + b = 1 * 1 + b


How about Multiclass?

  multiclass의 경우에는 perceptron을 추가하여 구현할 수 있음.


예시) 10개의 perceptron이라면, wx + b의 w는 Matrix of weights for each pixel로 취급됨

그러므로 W = 10 * 784 (10개의 perceptron, 10-class classification)

Result of wx + b = 1*784 + 10*784 + b


Bias를 perceptron에 변수로써 추가(fake feature)해서 bias convenience를 구성할 수 있음


Composition


  이렇게 구성된 perceptron들은 Matrix를 구성하는 일부가 되며, 이를 Layer라고 부름.


Activation Function

 해당 neural network를 Activation시킬 지 정하는 함수(perceptron). Sigmoid, ReLU등이 있음.

예시) Linear classifier에 활용


Multi-Layer Perceptron (MLP)

non-linear한 activation function들이 서로 연결된 형태

Feed-forward network라고 부르기도 함


SVM(Support vector machine)과 Perceptron의 관계

  SVM은 Class별의 margin을 극대화시키는 support vector를 알아내는 것

  근데 Perceptron은 아님, perceptron과 SVM이 classifying한다는 점은 동일함.

  

Activation Function: ReLU (Rectified Linear Unit)


f(x) = max(0, x)의 형태, ReLU를 거친 데이터는 음의 값을 가질 수 없음 (음의 데이터를 가진 NN을 deactivation함)


많은 Layer가 필요한 이유


  Low level parts에서 바퀴를 검출하고, mid-level part에서는 바퀴를 포함한 프레임을 검출하는 등

High level part에서는 이 물체가 무엇인지 prediction하도록 하려면 Multiple layer가 필요하게 됨


Q. 그럼 대체 몇개가 필요한가?

A. 그것을 정하는 것이 바로 hyperparameter이다. (NN의 넓고 깊음의 최적화 필요)


Convolution Neural Network (CNN)

CNN의 간단한 비유


  여러 가지의 경우의 수를 고려하고, 최종적으로 Decision making에 반영하는 형태.

여러 가지 경우의 수 내에도 또 다른 여러가지의 경우의 수가 존재함.


NN에 이미지를 넣으면...



  매우 많은 수의 parameter가 생성됨으로써 공간의 낭비가 심함.


Q. 이를 해결하기 위해서는 어떻게 해야하는가?

A. 1. Receptive field를 이용하기 (local neighborhood만을 찾기, Local에서 global로 expansion하는 layer가 필요함)

    2. Parameter sharing을 통해서 NN내에 존재하는 perceptron들이 사용할 weight을 동일하게 함


Convolution (합성곱)


  여러개의 필터(local perceptron = kernel)를 배우고, 합성곱을 통해 필요한 데이터만을 NN에서 취급하게 함.

hyperparameter로는 stride(얼마나 shift할 것인지), kernel size(NxN kernel)등이 있음



Convolution layer output size

(N - F) / stride + 1

Pooling Layer


  Pooling은 downscaling과 비슷한 개념으로 이해하면 됨.

Pooling에는 대표적으로 Max pooling과 average pooling이 있음


Average pooling

  stride수 만큼 shift하면서 Convolution filter(kernel)크기 내에 있는 값을 평균내어 receptive field 생성

Max pooling

  stride수 만큼 shift하면서 Convlution filter(kernel)크기 내에 있는 값 중 가장 큰 값을 통해 receptive field 생성


Receptive field의 크기

filter size (K x K), Stride (S), Pool size (K)

patch size: (P+K-S) * (P+K-S)



Overfitting problem



dropout(Layer에 포함된 일부 weight중 일부만 참여시키는 것)으로 해결



Architecture for Classification


  1. Convolution -> Local contract normalization -> Max pooling

  2. Convolution + Max pooling

  3. Fully connected layers


Recognition


인식


scene understanding의 한계와 극복

한 scene에 각각의 어떠한 장소를 대표하는 사물이 여러개 있을 경우, 잘못된 결과를 가져올 수 있음

단, 그러한 abnormal에 대해 상세하게 specify해줌으로써 올바른 recognition 결과를 얻을 수 있음


도로변만 봤을때 Urban, 도로변 뒷쪽에 성만 봤을때 Castle로써 해당 장면을 해석하기 어려움.

이때 scene이 Urban 과 Castle 그리고 몇가지 feature를 더 포함하여 학습시키면 정상적으로 recognition 가능


Sliding window approach

  recognition을 위한 window를 순차적으로 sliding하면서 찾는 것


Q. 32x32 window를 사용하면 64x64나 16x16은 못 찾지 않나?

A. 못찾는다. 그래서 Image pyramid를 사용해서 작은 사이즈부터 큰 사이즈까지 detection을 진행해야 모두 찾아낼 수 있다.


*face unlock처럼 특수 목적이 있는 애플리케이션들은 작은 window로부터 진행하며 recognition을 진행함

1개만 찾아 낸 이후로부터는 보통 크기나 큰 크기의 window를 사용할 필요가 없어지기 때문임


Image pyramid를 사용한 recognition

  32x32 -> 64x64 -> 128x128 순으로 Sliding window의 Image pyramid를 구성하고, 작은 것 부터 큰 것까지 recognition하게 되면 scene내의 검출 가능한 모든 얼굴 등을 찾아낼 수 있다.


Recognition models

1. Parts-and-shape model

  Parts만을 사용하면 shape 정보가 없어서 실제와는 다르게 recognition 할 수 있음. 그래서 shape 정보 또한 혼합형 모델로써 사용.

예시) 머리카락, 눈, 코, 입의 배치 관계 (shape)


2. Constellation model

  삼각측량법을 이용해 중요한 3파트만 이용해 분류하고 recognition함



Bag of Words

  이미지에 등장하는 Feature의 모음


Histogram에서의 Bag of words


  그림처럼, Quantization을 통해 패턴을 생성(Bag of words)하고 이들이 input image에서 얼마나 반복되는지를 recognition함

sliding window of quickpoint (얼마나 패턴이 자주 등장하는지 counting, 의미 있는 patch 만드는 것이 중요)


Patch (words)를 생성하는 방법

  K-means clustering (local patch)



Bag of words를 통한 recognition을 위해서는 Visual words를 잘 구성하기, 의미있는 patch만드는 것이 중요


Regular grid vs interest regions

  Regular grid: stride(shift)를 통해 모든 이미지를 스캔해서 feature extraction하는 것: 정보량이 많으나 느리고 Occlusion에 약함

  Interest regions: quickpoint, 특정 코너에서만 뽑기 때문에 정보를 잃을 수 있으나 Occlusion에 강함



Precision and Recall

Precision: true positive / true + false positive (아닌데 맞다고 한거)

Recall: true positive / false negatives (원래 맞는데 아니라고 한거)

Dataset의 종류

Training set: 학습을 위한 데이터셋

Validation set: validation을 위한 데이터셋 (for tuning hyperparameters 등)

Testing set: 정상적으로 학습되었는지 확인하기 위해 사용하는 데이터셋


Q. 왜 데이터셋을 나눈거지?

A. 교차검증을 위해서 나눔 (local minimum에 빠지는 등의 위험요소를 피하며 제대로 학습 했는지)

Q. Validation set을 Training set으로 써도 될까? (적당히 많은 학습이 성능 향상을 불러오므로)

A. 하지 않는게 원칙이며 가능하면 하지 않는게 좋다.


Training


Image features

 - 이미지의 feature를 뽑아낸다.


SURF/SIFT vector라던지, deep-learning feature라던지


Labels

 - human inputs, 이미지가 무엇인지 레이블링 하는 것.


  바이크를 찾고 싶으면 바이크의 이미지와 그 이름을, 바이크의 엔진, 체인 등을 찾고 싶으면 그것보다 더 많은 레이블링을 해야 함


Weakly supervised - 자동차의 위치를 파악하는 것 (있어요/없어요)

Fully supervised - 위치와 경계를 포함하여 동시에 여러개의 물체를 인식


Training

 - Training 결과가 weighted되지 않도록 균일하게 training


Trained Classifier: trained model (단위벡터, hyperparameter 등)


The machine learning framework


형태로 이루어져 있음


x = 이미지의 feature

y = label



trained model의 경우



의 값이 최소가 되는 f(x_i) 값을 찾으면 됨.


f(x_i) = estimation 

y = ground truth


Classification

  종류의 개수를 나눌 수 있는 만큼의 decision boundary들을 구성한다.


Classifiers



  단순히 classification 작업은 training을 요구하지 않음. input에 대해 가장 가까운 training example을 찾아내기 위함.


Q. 문제점은?

A. 가장 가까운 example을 찾아내기 때문에 잘못 학습된 데이터가 존재할 경우 잘못된 데이터가 만들어질 수 있음.

    해결 방법으로는 K-nearest neighborhood를 사용해서 여러개를 가지고 판단하면 됨.


Linear classifiers: SVM (Support vector machine)


f(x) = sgn(w*x+b) // 형태: y = ax+b (linear; 1차함수 형태)


Q. non-linear하게 분포되어 있지 않은 데이터들은 어떻게 하는가?

A. 한 차원 더 높여서 decision boundary를 생성한다.



  실제적으로 vector의 차원이 높아지는 것은 아니지만, 차원을 늘리는 kernel과 해당 kernel의 hyperparameter를 통해 데이터를 non-linear하게 mapping한다.


*Polynomial과 RBF가 대표적이다.


Q. 클래스가 2개가 아닌 3개 그 이상인 경우는 어떻게 해결하는가?

A. One vs the others(One vs one)로 해결하면 된다.


Multi-class SVM은 확실히 정해진 방법이 없으나, One vs the others로 해결할 수 있음.


  예를 들어 A, B, C라는 3개의 class가 있을 때 A를 제외한 B, C를 the others로 보고 2-class SVM으로 취급하여 classification하고, B와 C의 경우에도 A를 classification했던 것 처럼 진행하면 된다.


Q. One vs the others (one)의 문제점은 무엇인가?

A. 그림 내에 negative set(the others로 삼아지는 데이터들)이 많지 않은 경우 성능이 좋지 않음.


SVM의 좋은점과 나쁜점

최적화만 잘 하면 Support vector만 뽑아낼 수 있게 되어 작은 training sample size를 가지게 됨.

직접적인 multi-class SVM이 존재하지 않아서 two-class SVM의 조합으로 사용해야 함.

이때 발생하는 문제점으로 computing power와 memory가 더 많이 필요해짐. (Learning capacity가 좋은 편은 아니다)


Bias-Variance Trade-off

Bias(편향, underfitting): estimated된 평균 model과 true model의 차이

Variance(분산, overfitting): 서로 다른 training set들과 estimated된 model의 차이


  너무 적은 수의 parameter가 학습되는 모델일수록 bias가 심해져서 부정확하며, 너무 많은 수의 parameter가 학습되는 모델일수록 variance가 심해져 부정확해진다. (적당한 선의 학습이 필요함)


Testing


Image features: training할 때 feature extraction method에 의해 생성된 feature들을 의미

About K-means


좋은점

다양한 데이터셋에 적용이 가능하다. (데이터 간 distance가 정의 가능하다면)

데이터의 사전 분석이 필요하지 않다. (탐색적인 기법)

빠르고 구현하기 쉬움


나쁜점

직접 K값과 threshold를 지정해야 한다. (dataset에 적합한 hyperparameter를 찾아줘야 함)

느려질 수가 있음 (time complexity: O(KNd) *K=threshold, N=height, d=dimensions)

Local minimum에 빠질 확률이 높음


어떨 때 적용하면 좋을까?

Data mining에서 classification 알고리즘으로 활용


Design choices

Randomly하게 K point로 initial cluster를 활용함, Optimization 시 local minimum에 빠질 위험이 높아짐. (Global minimum이 있음에도 불구하고 local mininum에 빠지게 되는 현상)


이상적인 클러스터링과 현실 (K값 선택의 딜레마)

  개체가 K-means의 K값인 2만큼 clustering되어야 하는데, outlier를 포함해야 하므로 hyperparameter인 k값을 찾지 못하면 아래처럼 outlier까지 잘못 분류해내는 현상이 나타남.

Validation Set*

여러 수의 cluster 수로 돌려봄과 동시에 performance를 비교함

K-means의 K 값을 validation set으로 활용

hyperparameter를 도출하는 set


최종은 test set을 쓰는데, validation set으로 greedy search를 함.


Agglomerative clustering


이 clustering 방법은 K-means와는 다르게 initial K 를 주지 않아도 됨


procedure

1. 모든 point들을 each cluster로 취급한다.

2. 가장 비슷한 pair를 찾고 tree로 clustering한다.

3. parent cluster로 merge한다

4. 2-3과정을 반복해서 binary tree 구축


결과적으로 그림과 같은 tree가 구축되고, 원하는 distance level (depth)에서 짜름으로써 cluster 개수 결정 가능


Pros and cons

Pros

적용 범위가 넓고 구현하기 쉬움

클러스터들은 적응형의 모양을 가지게 됨

클러스터의 수직계층구조를 제공 (binary tree 형태 구성의 특징)


Cons

weighted될 수 있음

K-means처럼 cluster의 수와 threshold를 지정해줘야 함

ultrametric(hyperparameter와 유사한 의미)를 사용해여 의미있는 계층 생성 가능



Attraction basin


  모집단이 가우시안 분포를 따르고 있으면 데이터들이 중앙으로 모이도록 한다.



Mean shift (평균 이동)


Region에 대해 중심값의 boundary(k-means의 k같이)를 주고 mean shift vector만큼 이동한다.

mean shift vector은 kernel density estimation을 통해서 계산한다.

* cluster와 tracking에도 사용이 가능함


Spectral clustering

특징: 개느림 (N개에 대한 모든 distance를 계산하기 때문에)



Segmentation as a result


  segmentation의 결과는 영상에서 최대한 많은 부분을 차지하고 있을 때 가장 좋다.

위쪽 사진은 K값이 2이기 때문에 2개의 꽃을 찾아냈다.





Image frequency로부터 Feature를 뽑아 내는 일련의 작업들을 전처리라고 한다면, 후처리도 존재한다.

후처리에는 대표적으로 Recognition작업과 Reconstruction으로 나누게 된다.


Recognition은 CNN(Convolution Neural Network)등을 통해 장면/장소/물체를 인식하는 것.

Reconstruction은 이미지를 복원하는 것. 


Recognition과 Detection은 엄연히 다른데, 가장 큰 차이점으로써 Detection은 물체의 유/무를 가린다고 하면 Recognition의 경우 물체가 무엇인지에 대해 판단하는 것이라고 볼 수 있다.


Machine Learning

데이터에 대해 학습하고 데이터를 예측하는 것


대표적 예시

1. Face recognition

2. Object classification (등록된 물체를 구분없이 찾는 것)

3. Scene Segmentation (Unsupervised learning)


ImageNet

카테고리별 굉장히 많은 이미지들이 있는 사이트 (WordNet에 있는 각각의 카테고리에 해당하는 이미지)


Top 5 error



  위 사진 중 달마시안과 체리가 나온 사진을 보면 달마시안과 체리가 함께 있는데도 불구하고, Recognition의 결과 중 Top 5에서 1st의 결과가 recognition의 결과로 표시되는 것을 확인할 수 있다.

Ground truth는 cherry인데 Top 5 이내에서 인식하지 못한 것을 Top 5 error라고 한다.


ImageNet Competition

2012년, Krizhevsky가 ImageNet competition에서 처음으로 Traditional CV의 recognition rate를 이겨먹는 결과를 보여줌.

이후로 deep learning은 폭발적으로 증가. 구글과 마소가 2015년 human score를 박살내버리는 쾌거 기록



Supervised and Unsupervised Learning

Supervised learning은 지도 학습, 사람이 학습을 직접 시키는 모델. 예를 들어 어떤 물체에 대해 label을 기록해주는 것. 예시로써 얼굴 인식, 지문 인식이 있다.


Unsupervised learning은 비 지도 학습, 학습을 지가 알아서 하는 모델. 대표적으로 Compressing(압축)이 있다.

asdf


Dimensionality Reduction

다차원을 낮은 차원으로 변환하는 작업

PCA, ICA, LLE, Isomap 등의 method가 있는데, 대표적으로 PCA를 사용함


PCA (Principal component analysis)

데이터를 가장 잘 나타내는 새로운 축을 생성해서, Mean 값을 빼버려서 0으로 재정렬

축에 대해 Minimization을 진행함 (분산이 줄어들게 됨)

이 때, 생성한 eigenvector(Major vector)와 수직(orthogonal)인 vector인 Minor axis가 생김


특성

Compressing은 잘 되는데 classification이 잘 안됨

Representation에 특화되어 있고 classification에는 약함



Eigenvalue and Eigenvector

상세한 설명은 요 블로그에 잘 되어 있으니 참고: https://darkpgmr.tistory.com/105


Eigenfaces

Eigenanalysis(통계적 데이터 분석)를 활용한 얼굴 분석 기술 (99' MIT MediaLab)


Mean을 제거한 variance들. (얼굴들의 eigenvector들)

요 면상과 평균 얼굴을 합치면 원래 얼굴을 복원할 수 있음.


처리 시 mean을 제거하지 않으면 요것처럼 평균 얼굴이 나옴 (input 대비 평균 얼굴)


 -> coefficient + model = original faces



10*10 이미지를 1*100과 컨볼루션해서 100*400의 벡터를 만들어냄 (400개의 얼굴 vector)


Clustering

Image segmentation (이미지를 쪼개서 무엇인지 판단)에 많이 쓰임. Unsupervised learning의 한 종류.

잘게 쪼개서 비슷한 색상끼리 grouping해서 superpixel을 생성


Oversegmentation and Undersegmentation

Oversegmentation은 너무 많이 segmentation한 것 (ex> 100개의 Pixel value로 segmentation)

Undersegmentation은 너무 적게 segmentation한 것 (ex> 3개의 pixel value로 segmentation)


Hierarchical segmentations

Oversegmentation과 undersegmentation사이의 threshold값들

몇 개의 cluster로 이미지를 clustering할 것인가?


Process

1. Summerizing data

   데이터를 분류함 (남/여 -> 나이 -> 인종 등)

   patch-based compression 이나 denoising을 진행함 (quantization이라고 부르는데 이때, flunctuation이 낮아짐)

2. Counting

   텍스쳐, 색상, SIFT vector의 Histogram이 이용됨

3. Segmentation

   이미지를 서로 다른 구역으로 분리함

4. Prediction

   같은 클러스터에 있는 이미지들은 같은 label을 가짐


How do we cluster?

K-means, Agglomerative clustering, Mean-shift clustering, spectral clustering등의 methodologies 사용


K-means

1. K Center를 임의로 지정

2. 각각의 점을 가까운 center로 할당

3. 새로운 center(mean) 값을 연산

4. 2-3 과정 반복 (2 과정에서 center로 re-assigned되는 경우가 없을 경우 break)


문제점

initial seed가 randomly하게 변하기 때문에, 결과값이 상이한 문제점이 생김