Conditional Generative Model

1. Conditional generative model

1.1 Conditional generative model

image

서로 다른 두 도메인을 translation 한다.! -> 하나의 정보(조건)이 주어졌으므로 condition 이라 칭함.

image

기본적인 Generative Model은 영상이나 샘플은 생성할 수는 있었지만 조작은 할 수 없었다. 생성을 더 유용하게 하기 위 해서는 어떤 형태로든 유저의 의도가 반영할 수 있다면 무수히 많은 응용 가능성이 생긴다. 그런 생성 모델 방식을 Conditional generative model 이라고 한다.

image

Low quality audio을 high quality audio로 높혀주는 것도 Conditional Generative model의 일종이다.

image

image

image

1.2 Conditional GAN and image translation

image

1.3 Example : Super resolution

image

image

image

image

image

image

2. Image translation GANs

2.1 Pix2Pix

Task definition

image

Loss function of Pix2Pix

image

Total loss (GAN loss + (L1 loss = MAE loss)) 를 쓰는 이유

  1. y 가 ground Truth 인데 x 라는 입력을 넣었을때 기대하고 있는 출력 페어를 가지고 있는 데이터에 대해 학습을 진행한다.(supervised learning) 이 경우에, GAN Loss 만 사용한다면 입력된 두개의 페어(x,y)를 직접 비교하지않고 독립적으로 Discriminator 해서 real 이냐 fake 이냐에 대해서만 판별을 한다. 따라서 입력이 무엇이 들어와도 y와 직접 비교하지않기 때문에 GAN만 사용한다면 y와 비슷한 결과를 만들어 낼 수 없다. 따라서 L1 Loss 를 사용해서 기대하는 결과인 y 와 비슷한 영상이 나오고 GAN Loss 를 이용하여 reality 한 영상을 만들 수 있게 해준다.

  2. GAN만으로 학습하기엔 굉장히 불안정하고 어렵기 때문에 학습이 조금 더 안정적으로 이루어질 수 있도록 보조하는 역할도 한다.

image

2.2 CycleGAN

image

지금까지의 Pix2Pix는 supervised learning 기법을 사용했기 떄문에 pairwise data가 필요하다.

하지만 pairwise data 를 항상 얻는게 어렵기 때문에 Unpaired data 데이터를 사용해서 X 와 Y 의 대응관계가 없이 data set으로만 주어졌을때 활용하는 방법에 대해서 고민했고 해결책으로 CycleGAN 이 제시되었다.

image

CycleGAN은 도메인간의 non-pairwise datasets 으로 translation 이 가능하도록 하게 해줌.

Loss funtion of CycleGAN

image

X -> Y 스타일로 가는 방향과 Y -> X 스타일로 가는 방향을 동시에 학습하여 모델링을 한다.

GAN loss in CycleGAN

image

If we sloely use GAN loss

image

GAN Loss만 사용할 경우 (Mode Collapese issue) input에 상관없이 하나의 output 만 계속 출력하는 형태로 학습한다. -> GAN Loss 기준에선 좋은 Loss를 갖게 된다!

Solution: Cycle-consistency loss to preserve contents

image

content 보존을 위한 Loss. x를 input으로 G를 활용해 생성한 y^가 F를 활용해 x^를 생성했을때 x와 x^가 비슷하도록 학습.

2.3 Perceptual loss

image

image

high quality output 을 얻기 위한 Loss

GAN is hard to train

image

pretrained 된 visual perception들이 인간의 visual perception과 유사한 측면이 발견됨. ( 사람의 눈과 비슷한 역할 )

image

Perceptual loss 를 사용하면 GAN을 사용하지 않고도 Loss 하나만을 추가함으로서 쉽게 style transfer를 할 수 있는 generator를 학습시킬 수 있다.

image

Image Transform Net : input image가 주어지면 하나의 style로 transformed 을 해준다.

Loss network(Fix된 VGG16) : image classification network -> feature 추출

image

Feature Reconstruction Loss

input x 에서부터 y^ 생성한다.

y^이 의도한 바로 transform이 되기 위해 VGG 를 사용해 feature 를 추출하고 backpropagation 을 해서 중간 transform을 하려는 f를 학습한다.

Transformed image가 input x에 포함되어 있었던 Content 정보를 유지하고 있는지 권장해주는(?) Loss가 바로 Feature reconstruction loss 이다.

Content Target 은 원본 x 를 입력으로 넣어주고, 이후 VGG 를 통과하여 feature 를 추출한다. 그 다음 마찬가지로 transform된 이미지에 대해서도 feature를 추출한다. 이 두가지를 비교해서 Loss 를 분해한다.

이 두개를 분해할땐 L2 Loss 를 통해 backpropagation 을 이용하여 y를 업데이트 할 수 있게끔 해준다.

image

Feature reconstruction loss는 Pre-trained 모델 Hidden Layers에서 출력이미지와 원본이미지의 두 Feature space 을 추출하여 연산하며, 두 Feature space 간의 Euclidean distance를 나타낸다. 해당 Loss의 특징은 아래 그림과 같이 이미지 전반적인 구조(Overall spatial structure)를 유지하며, 그 외 색상이나 질감에 대한 특징은 보존하지 않는다.

Style reconstruction loss

image

변환하고 싶은 style image 를 style target 으로 입력한다.

style target 과 transformed image 를 VGG에 입력으로 넣어줘서 feature를 추출한다.

image

Style reconstruction loss는 바로 위에 설명했던 Feature reconstruction loss와 정반대로, 이미지의 전반적인 구조보다는 원본이미지의 색상이나 질감을 출력이미지가 표현할 수 있도록 만드는데 기여하는 Loss 이다.

Gram Matrices

이미지 전반에 걸친 통계적 특성을 담기 위함.

gram matrix란 flatten feature maps 간 계산한 covariance matrix이다.

이미지 데이터의 style은 CNN 모델의 feature map과 feature map의 correlation(gram matrix)으로 사전 정의한다. 결국 기존 그림의 gram matrix와 새로운 그림의 gram matrix의 loss 차를 최소화 시켜 새로운 그림에 기존 그림의 style을 입히겠다는 의미를 갖는 것이다.

segmentation, localization

1. Instance segmentation


1.1 What is instance segmentation?

image

semantic segmentation 과 instance segmentation 의 가장 큰 차이는 객체, 즉 instance 가 다르다면 구분이 가능한지의 여부이다.

1.2 Instance segmenters

image

RoIAlign (New Pooling layer) : interpolation 을 통해서 정교한 소수점 pixel level 의 pooling을 지원함으로써 조금 더 정교한 feature를 뽑을 수 있게 되어 성능 향상을 이루었다.

image

image

image

  1. 기본 backbone 구조는 feature pyramid 구조를 가져와 사용한다.

  2. 가장 큰 특징은 Mask의 prototypes을 추출해서 사용한다는 점이다. (Mask R-CNN에서는 실제로 사용하지 않는다고 해도, 80개의 클래스를 고려하고 있다고 가정하면, 80개의 각각 독립적인 Mask를 한번에 생성해내는 구조, 여기서는 Mask 는 아니지만 Mask를 합성해낼 수 있는 기본적인 여러 물체의 soft segmentation component들을 생성해낸다.)

  3. Predition Head에서 Prototype들을 잘 합성하기 위한 계수들(coefficient)을 출력한다.

  4. 이 계수들과 prototype을 선형결합해서 각 detection에 적합한 Mask response map을 생성해준다.

  5. 이후 Bounding box 에 맞춰 Crop 도 진행해준다.

여기서 Mask를 효율적으로 생성하기 위해서 prototype 개수를 80개 전부 사용하지 않고, object 개수와 상관없이 적당히 작게 설정하여 그것의 선형 결합으로 다양한 Mask를 생성하는게 Key point 이다.

image

이전 Frame에서 Key Frame에 해당하는 feature를 다음 Frame에 전달해 feature map 의 계산량을 획기적으로 줄였다.

Object detection


1. Object detection

1.1 what is object detection?

image 인식 분류의 기초

image

Semantic segmentation와 imstance segmentation, panoptic segmentation 의 차이점은 같은 클래스라도 객체가 다르다면 구분이 가능한지 아닌지의 여부이다.

image

Object detection 은 Classification 과 Box localization 을 동시에 추정하는 문제.

1.2 What are the applications of object detection?

image

image

그림과 같이 자율주행에 이용되기도 한다.

image

image

Optical Character Recognition 에서도 복잡한 배경 속에서 글자를 인식하여 위치를 특정해야 하기 때문에, object detection이 필요하다.


2. Two-stage detector (Regional proposal과 Classification이 순차적으로 진행)

image

Neural network 이전의 object detection 을 해결하기 위한 과정들.

Selective search

image

  1. 다양한 물체들에 대해서 Bounding box 를 제한을 해준다.

  2. 영상을 비슷한 색끼리 잘게 분할한 후(Over-segmentation) 분할된 영역들을 비슷한(색깔이나 gradient의 유사성) 영역끼리 반복해서 합쳐준다.

  3. 이를 반복하면 큰 segmentation 이 만들어지고, 이를 포함하는 Bounding box를 설정해 물체의 후보군으로 사용한다.

image

  • 기존 Object detection 의 단점

    • 기존에는 sliding window 방식으로, 물체가 있을만 한 곳을 하나씩 탐색하여 물체를 탐색했다. Sliding window 방식은 크기가 고정되지 않아 여러 크기로도 순차적으로 계산해야 하기 때문에 경우의 수가 폭발적으로 증가하여 이를 분류하기 위해서는 연산량이 많아지고 연산시간이 오래걸려 비효율적이다.

2.1 R-CNN

image

첫 deep learning 기반 object detection

R-CNN은 기존 object detection의 단점을 보완하고자 Region Proposal 이라는 방식을 제안한다.

Selective search를 활용해 물체가 있을 법한 장소를 2000개 탐색하고, 이에 대해서 분류를 진행한다.

R-CNN 논문

위 논문에서는 물체가 있을법한 장소를 추출한 뒤, 크기에 상관없이 227x227로 이미지를 압축한다.

그리고 이렇게 모인 이미지를 CNN을 거쳐 feature vector를 계산하고 Linear SVM을 통해 object를 분류하게 된다.

image

2.2 Fast R-CNN

이전 R-CNN 의 문제점

1. 학습이 multi-stage pipline으로 이루어진다.

2. 학습에서 경제성이 떨어진다.

3. object detection이 느리다.

image

이러한 문제를 해결하기 위한 Fast R-CNN 의 출현

Fest R-CNN 모델 구조

1. input image와 multiple regions of interest(ROI = 이미지상 내가 관심있어하는 일부 영역)가 입력으로 사용된다.

2. 각각의 ROI는 ConvNet 연산을 통해 고정된 크기의 ROI에 해당하는 feature map 으로 pooling되고,

FC layers 를 통해 feture vector로 맵핑된다.

3. ROI 별 두개의 output을 가지고, 더 정밀한 bounding box 를 추정하기 위해

bounding box regressor과 softmax 를 통한 classification 을 수행한다. 

Fast R-CNN

image - ROI Pooling layer

2.3 Faster R-CNN

image

IOU = (두 영역의 교집합 / 두 영역의 합집합)

Anchor boxes

image

  • 직관적으로 설명하자면, 동일한 크기의 sliding window를 이동시키며 window의 위치를 중심으로 사전에 정의된 다양한 비율/크기의 anchor box들을 적용하여 feature를 추출하는 것이다. 이는 image/feature pyramids처럼 image 크기를 조정할 필요가 없으며, multiple-scaled sliding window처럼 filter 크기를 변경할 필요도 없으므로 계산효율이 높은 방식이라 할 수 있다. 논문에서는 3가지 크기와 3가지 비율의, 총 9개의 anchor box들을 사용하였다. positive 한 box 들과 negative 한 box 들의 loss를 줘서 학습하도록 유도한다.

image

core contribution = RPN(Region Proposal Network)

image

RPN 의 구조

- feature map 관점에서 fully convolution 하게 sliding window 방식으로 이동하며 매 위치마다 k 개의 anchor box를 고려한다.

각 위치에서 256 dimension 의 feature map 을 추출하고 여기서 2k 개의 classification score 를 출력한다. 

그리고 4k 개의 정교한 bounding box를 만들기 위한 regression output 을 출력한다.

NMS (Non Maximum Suppression)

    1. 동일한 클래스에 대해 높은-낮은 confidence 순서로 정렬한다.
    1. 가장 confidence가 높은 boundingbox와 IOU가 일정 이상인 boundingbox는 동일한 물체를 detect했다고 판단하여 지운다.

image

image

R-CNN Famaily

image


3. Single-stage detector (Region Proposal과 Detection 를 한번에 수행)

One-stage vs tow-stage

image

  • Single-stage detection 은 정확도를 조금 포기하더라도 속도를 확보해 real-time detection 을 가능하도록 설계하는 것에 목적을 둠.

3.1 You only look once (YOLO)

image

  1. input 이미지를 SxS grid로 나눈 후, 각 grid 에 대해서 b 개의 bounding box(4개의 좌표)와 bounding box의 confidence score 를 갖는다. (*confidence score 란 박스가 객체를 보유하고 있다고 생각하는 모델의 신뢰도와 예측하는 박스의 정확도를 반영한다.)

  2. 각 위치마다 Class probability map

image

최종 결과로 NMS 알고리즘을 통해 전개된 bounding box 만을 출력한다. (bounding box 구성 : x, y, w, h, confidence)

image

YOLO 구조

image

YOLO 논문

3.2 Single Shot MultiBox Detector (SSD)

YOLO 는 마지막 layer에서 1번만 prediction 을 하기 때문에 localization 정확도가 떨어지는 결과를 나타냈다. 이를 보완하기 위해 SSD가 나왔다. SSD는 Multi-scale object를 더 잘 처리하기 위해서 중간 feature map을 각 해상도에 적절한 bounding box 들을 출력할 수 있도록 multi-scale 구조를 만들었다.

image

SSD 구조

image

4. Two-stage detector vs. one-stage detector

4.1 Focal Loss

image

single-stage 방법들은 ROI pooling이 없다보니 모든 영역에서의 Loss가 계산이 되고, 일정 gradient 가 발생한다. 따라서 유용하지 않은 영역에서 오는 정보들로 Class imbalance 문제를 가지고 있다.

이러한 Class imbalance 해결하기 위한 방법으로 Focal Loss 가 제안되었다.

image

Focal loss는 분류 에러에 근거한 loss에 가중치를 부여하는데, 샘플이 CNN에 의해 이미 올바르게 분류되었다면 그것에 대한 가중치는 감소한다. 즉, 좀 더 문제가 있는 loss에 더 집중하는 방식으로 불균형한 클래스 문제를 해결했다. Focal loss는 Sigmoid activation을 사용하기 때문에, Binary Cross-Entropy loss라고도 할 수 있다. 특별히, $r$ = 0 일때 Focal loss는 Binary Cross Entropy Loss와 동일하다. (정답에 대한 gradient 보다 오답에 대한 gradient 를 중점으로 두고, 기울기에 대해 생각해볼 것 -> $r$ 이 클때 오답에 대한 Loss 의 기울기가 더 크다.)

4.2 RetinaNet

image

Low level 특징과 high level 특징을 둘다 잘 활용하면서도 각 scale 별로 물체를 잘 찾기 위한 Multi-scale 구조를 갖기 위해 이렇게 생겼음.

5. Detection with Transformer

DETR

image

image

DETR 은 Transformer 를 object detection 에 적용한 사례이다. 기본적인 CNN 의 feature 와 각 위치의 multi-dimension 으로 표현한 encoding을 쌍으로 해서 input token 을 만들어준다. 이렇게 encoding 이 된 후 transformer encoder 를 거치게 되고, 정리된 특징들을 decoder 에 넣어준다. 이후 object queries 를 활용하여 token 이 나타내는 object 가 무엇인지에 대한 질의를 한다. 이후 token 의 위치 정보를 파싱해서 결과값이 출력된다.

DETR 설명 나동빈님 유튜브

image

Semantic segmentaiton

1.1 Semantic segmentation ?

  • Semantic segmentation 이란 image classification 을 영상 단위로 하는게 아니라 pixel 단위로 분류하는 문제(하나의 pixel이 사람에 속하는지, 오토바이에 속하는지 등에 대한 구분하는 문제). 같은 클래스이지만 서로 다른 물체를 구별하지는 않는다.

image

1.2 Where can semantic segmentation be apllied to ?

Application

  • Medical images 나 Autonomous driving 응용 등 영상 내의 장면에 대한 컨텐츠를 이해하는데 다양하게 사용될 수 있다.

image

2.1 Fully Convolution Networks (FCN)

Fully convolutional networks

  • 첫 end-to-end 구조의 semantic segmentation

  • end-to-end 란? 입력부터 출력까지 모두 미분가능한 nueral network 의 형태로 구성되어 입력과 출력데이터의 페어만 있다면 학습을 통해 target task (중간의 nueral network를 학습하여) 를 해결할 수 있다.

image

Fully connected vs. Fully convoltional

  • Fully connected layer : vector 가 주어지면 matrix 가 multiplication 되서 또 다른 fix dimension 이 나오는 구조.

  • Fully convolutional layer : 입력과 출력이 activation map 이고 spatial coordinate(공간 좌표)를 유지한 채, operation이 수행된다. 그리고 1x1 convolution을 활용한다.

image

interpreting fully connected layers as 1x1 convolutions

image

AlexNet에선 Flattening 을 통해 긴 vector 형태로 만들어 주어서 Fully-connected layer 에 input 으로 넣어준다. 이러한 경우 영상의 공간 정보를 고려하지 않고, 하나의 vector 로 섞이게 된다. 어떻게 하면 각 위치마다 classification을 할 수 있도록 할 수 있을까?

image

-> 각 위치 마다 채널 축으로 flatten을 한다. 채널 축의 각각의 값을 vector로 쌓는다. 이렇게 되면 각각에 대해서 입력에 Fully-connected layer를 적용할 수 있게 된다.

image

채널 축으로 1x1 Convolution kernel 이 Fc layer의 한 weight columns 이라고 볼 수 있다. 따라서 filter 갯수만큼 통과시킨다면 우리가 각각의 위치마다 FC layer를 별도로 돌려서 결과값을 채워넣는 것과 동일한 결과를 가질 수 있다.

결론적으로 FC Layer 를 1x1 Convolution 으로 대체할 수 있게 되고, 어떤 입력 사이즈에도 대응이 가능한 그런 Fully-Convolution Neural network 를 만들 수 있게 된다.

이렇게 semantic segmentation 을 통하면 굉장히 작은 score map을 얻게 된다. stride나 pooling layer를 통하면서 최종적으로 굉장히 저해상도인 activation map이 되는데 이러한 저해상도 문제를 해결하기 위해 upsampling이 활용된다.

Upsampling

image

  • Upsampling 의 두가지 방법

    1. Transpose convolution
    2. Upsample and convolution

image

image

transpose convolution를 사용할 때에는 매우 주의해야 할 부분이 convolution kernel size 와 stride 를 잘 조절해서 중첩이 생기지 않도록 신경써서 튜닝을 해줘야 한다. (반복되는 blocky 한 checkboard 구조가 생기지 않도록)

(https://runebook.dev/ko/docs/pytorch/generated/torch.nn.upsample)

Better approaches for upsampling

image

일부분이 Overlap 되는 Transfose 방법과 달리 upsampling은 그러한 중첩 문제가 없고 골고루 영향을 받게 한다.

Adding skip connections for enlaging the score map

image

초반부(낮은 layer)에서는 receptive filed size가 작으므로 굉장히 국지적이고 작은 detail에 민감한 경향이 있고, 후반부(높은 layer)에서는 해상도는 낮아지지만 큰 receptive filed 를 가지며 영상에서 전반적이고 의미론적인 정보들을 많이 포함하는 경향이 있다.

image

Data augmentation


1.1 Learning representation of data set

데이터 셋은 대부분 편향적이다.

image

train data (=camera image) 들은 실제와 다른 image 들을 표현한다.

image

image

편향된 이미지로부터 모델은 Robust하게 학습할 수 없다. (=근본적으로 dataset이 real data를 충분히 표현하지 못했기 때문에)

image

몇몇 데이터들이 주어졌을 때, 이 데이터에 옵션을 추가해서 모델이 더욱 다양성 있게 학습할 수 있도록 해주는 것이 Augmentation 이다.


1.2 Data augmentation

  • dataset 으로 부터의 다양한 이미지 변환을 적용시키기

    • Crop, Shear, Brightness, Perspective, Rotate 등
  • OpenCV나 NumPy 라이브러리에 사용하기 쉽게 잘 구현되어 있다.

목적 : training dataset과 real dataset의 분포를 유사하게 만드는 것!


1.3 Various data augmentation methods

  • Various brightness in dataset

image

def brightness_augmentation(img):
    #numpy array img has RGB value(0~255) for each pixel
    img[:,:,0] = img[:,:,0] + 100 # add 100 to R value
    img[:,:,1] = img[:,:,1] + 100 # add 100 to R value
    img[:,:,2] = img[:,:,2] + 100 # add 100 to R value

    img[:,:,0][img[:,:,0]>255] = 255 # clip R values over 255
    img[:,:,1][img[:,:,1]>255] = 255 # clip G values over 255
    img[:,:,2][img[:,:,2]>255] = 255 # clip B values over 255
  • Rotate, flip

img_rotated = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)
img_flipped = cv2.rotate(image, cv2.ROTATE_180)

image

  • Crop
y_start = 500
crop_y_size = 400
x_start = 300
crop_x_size = 800
img_cropped = image[y_start : y_start + crop_y_size, x_start : x_start + crop_x_size, :]

image

  • Affine transformation

    • Preserve 'line', 'length ratio', and 'parallelism' in image
rows, cols, ch = image.shape
pts1 = np.float32([[50,50],[200,50],,[50,200]])
pts2 = np.float32([[100,100],[200,50],,[100,250]])
M = cv2.getAffineTransform(pts1,pts2)
shear_img = cv2.warpAffine(image, M, (cols,rows))

image

image

Modern augmentation techniques

  • Cutmix

    • Mixing both images and labels

image

  • RandAugment

    • 다양한 augmentation 방법이 존재한다. 적용시킬 최적의 augmentation of sequence를 자동으로 찾아준다.

image

어떠한 augmentation 을 사용할 지? 강도(magnitude)는 얼마나 적용시킬 것 인지? 를 parameter로 받는다.


2. Leverageing pre-trained information

2.1 Trainsfer learning

  • 기존의 미리 학습시켜놓은 사전 지식을 활용하여 연관된 새로운 Task 의 적은 노력으로도 더 높은 성능으로 도달이 가능한 방법이다.

  • A Dataset 에서 배운 지식을 B Dataset 에서 활용 가능하다.

image

Approach 1 : pre-trained 된 모델의 마지막 Layer 를 새로운 FC Layer 로 추가하여 학습시키는 방법.

image

Approach 2 : pre-trained 된 모델의 마지막 Layer 를 새롭게 교체하고 전체 model set 에 대하여 learning rate를 다르게 주어 학습하는 방법.

image

2.2 Knowledge distillation

이미 학습된 Teacher Network 지식을 더 작은 모델인 Student Network 에 주입을 시켜 학습한다. (big model -> small model로 지식 전달)

최근엔 Teacher 에서 생성된 output 을 Unlableled 된 데이터에 가짜 label으로 자동 생성하는 매커니즘으로 사용한다. 그렇게해서 가짜 label로 더 큰 student network 를 사용할 때도, regularization 역할로 사용할 수 있다. ( 더 많은 데이터를 사용할 수 있기 때문에)

image

  • Distillation loss 는 teacher model과 유사한 예측 output을 뽑아내기 위한 loss이다.

image

  • Hard label (One-hot vector)

    • Typically obtained from the dataset
    • indicates whether a class is 'true answer' or not
  • soft label

    • Typicall output of the model (=inference result)
    • Regard it as 'knowledge'. Useful to observe how the model thinks

image

  • softmax with temperature(T)
    • Softmax with temperature: controls difference in output between small & larget input values
    • A large T smoothens large input value difference
    • Usefull to synchronize the student and teacher models' outputs

image

  • Distillation Loss

    • KLdiv(Soft label, Soft prediction)
    • Loss = difference between the teacher and student network's inference
    • Learn what teacher network knows by mimicking
  • Student Loss

    • CrossEntropy(Hard label, Soft prediction)
    • Loss = difference between the student network's inference and true label
    • Learn the "right answer"

3. Leveraging unlabeled dataset for training


3.1 Semi-supervised learning

unlabeled data 가 많을 경우.

Semi-supervised learning : Unsupervised(No label) + Fully Supervised(fully labeled)

image

labeled dataset 을 Model에 넣어 Unlabeled dataset 을 Pseudo-labeling 을 실시해 Pseudo-labeled datset으로 만든 뒤 학습에 이용한다.

image

3.2 Self-training

Recap : Data efficient learning methods so far

self-training -> Augmentation + Teacher-Student networks + semi-supervised learning

image

self-training with noisy student

image

image

FaceNet

FaceNet은 각각의 얼굴 이미지를 128차원으로 임베딩하여 유클리드 공간에서 이미지간의 거리(거리가 얼굴 유사도를 나타냄)를 통해 분류하는 모델이다.

image

이 논문에서 Face-Vertication, Recognition, Clustering 세가지의 통합 시스템을 소개한다.

임베딩 공간의 squared L2 Distances(유클리드 거리의 제곱)은 얼굴 유사도와 곧바로 일치한다. 즉 같은 사람의 얼굴은 적은 거리를 가지고 다른 사람일 경우 큰 거리를 가지게 된다.

한번 이 임베딩이 만들어지고 나면 앞서 말한 것들은 쉽게 해결할 수 있다. Face-Verification은 두 임베딩 사이의 거리가 일정 차이를 넘는지, Recognition은 k-NN Classification 문제로, Clustering은 k-means나 agglomerative clustering 같은 것으로 바로 해결이 가능하다.

이전의 deep net 기반 얼굴 인식 접근은 known face identities의 집합으로 학습된 classification layer를 사용하였고 학습에 사용되었던 identities들의 집합을 넘어 얼굴 인식을 일반화하기 위한 방법으로 중간 병목층을 사용했다. 이 접근의 단점은 이 방법의 indirectness과 비효율성이다. 새로운 얼굴에 대해서 병목 representation이 잘 일반화 해주길 바래야 하며, 병목층을 이용하기에 얼굴마다의 representation size가 보통 매우 크기 때문이다. 최근에는 PCA를 이용하여 이런 차원문제를 줄였다.

이러한 접근과는 대조적으로 FaceNet은 LMNN(Large Margin Nearest Neighbor)을 기반으로 triplet loss를 이용하여 128차원 임베딩이 아웃풋이 되도록 곧바로 학습한다. 우리의 triplet은 2개의 일치하는 얼굴과 하나의 다른 얼굴로 이루어져 있으며 loss는 distance margin으로 일치하는 쪽을 불일치하는 쪽으로부터 분리해내는 데 초점을 두고 있습니다. thumbnails는 2D, 3D 정렬이 아니고 얼굴 영역에 맞게 잘려있으며 scale과 translation이 적용 되었다.


Triplet Loss

image

FaceNet은 학습과정에서 Metric Learning을 하기 위해 Triplet Loss를 사용했다. 학습시 미니배치안에서 어떠한 사람(Anchor)에 대해 같은 사람(positive)와 다른사람(negative)를 지정해 놓는다. 그리고 임베딩된 값들의 유클리드 거리를 구해 그림과 같이 Anchor와 Positive의 거리는 가까워지고 Negative와의 거리는 멀어지도록 학습을 스켰고 이러한 과정을 triplet loss로 구현하였다.

image

image

대괄호 안의 첫번째 항이 의미하는 것은 Positive와의 거리이고, 두번째 항은 Negative와의 거리이며 alpha는 마진을 의미한다. 따라서 L을 최소화한다는 의미는 Positive의 거리는 가까워지도록 하고 Negative와의 거리는 멀어지도록 한다는 것이다.

하지만 모데의 성능을 높이기 위해서는 Hard Positive(같은 사람이지만 다르게 보이는 사람)과 Hard Negative(다른 사람이지만 닮은 사람)와 같이 학습을 방해하는 요소를 제어할 필요가 있었고, 이러한 문제를 해결하기 위해 아래와 같은 식을 사용했다.

image


모델 구조

image

모든 실험에서 SGD를 이용한 CNN 활용.


참고자료

https://hwangtoemat.github.io/paper-review/2020-04-02-FaceNet-%EB%82%B4%EC%9A%A9/

https://marades.tistory.com/9

CutMix


image

  • 우리는 물체를 분류할때 특정 부분만 보고 분류하는 경향이 있다. 예를 들면 개의 얼굴만 보고도 개라고 분류를 할 수 있다. 이와 마찬가지로 neural network 또한 특정 부분만 보고 이미지를 분류 할 수 있다. CutOut과 같은 Regional dropout 방식들은 neural network가 특징적인 부분만 보고 분류를 진행하지 않고 조금 덜 특징적인 부분도 확인하고 분류할 수 있도록 하여 일반화 성능을 높여준다.

  • 그러나 이러한 방식들은 학습 이미지의 유용한 특성들을 손실시킨다는 문제점이 있다. CNN이 일반적으로 Data를 많이 필요로 한다는 점에서 이러한 것들은 심각한 개념적인 한계가 될 수 있다.

  • 이러한 Regional dropout의 한계를 극복하고자 CutMix가 제안되었다. CutMix는 이미지의 픽셀을 단순히 지우는게 아니라 제거된 영역을 다른 이미지로부터 가져온 patch로 대체한다. 이를 통해 Regional Dropout의 장점인 Neural Network로 하여금 조금 덜 특징적인 부분을 보게 한다는 장점을 보유함과 동시에 학습시에 Regional Dropout에 의해 제거된 유익하지 않은 Pixel이 없다는 장점이 존재한다. 또한 추가된 patch들은 모델이 부분적인 view만 보고 물체를 식별할 수 있게 함으로써 localization ability를 증대시키게 된다.


관련 연구


Random Erasing

image

  • 이 방법은 CutOut과 유사하게 이미에서 사각형 영역을 잘라내어 random value 또는 ImageNet mean 으로 대체한다.

Cutout

image

  • input image에 대해서 특정적으로 연속적인 부분에 대해서 DropOut을 실시한다.

DropBlock

image

  • DropBlock은 기존 Rando Erasing 이나 Cutout 이 input image 에서 행해진 것과 달리 feature map 에서 연속적인 영역을 drop 시키는 방법이다. 이때 CutOut에서 마찬가지로 랜덤하게 Pixel을 골라서 Drop 시키는게 아니라 연속적인 영역을 Drop 하게 된다.

Mixup

image

  • Mixup은 두 개의 샘플을 뽑아 Linear interpolation을 통해 학습 내 이미지와 라벨을 만드는 방법이다. 하지만 Mixup으로 만들어진 샘플들은 지역적으로 모호하거나 자연스럽지 않은 부분이 있기 때문에 localization 에 있어서 모델을 혼란스럽게 하는 문제점이 있다.

CutMix 추가 설명

  • 두 개의 training sample을 조합하여 새로운 training sample을 만든 후 원래의 loss function 으로 모델을 훈련시키는 방식으로 이루어진다. x_a 라는 이미지가 있고 x_b 라는 이미지가 있을 때 x_a에서의 특정 사각형 영역을 x_b의 이미지로 부터 값을 가져와서 채워넣는 방식으로 이루어진다. 이 때 라벨은 이미지에서 각각의 training sample이 차지하는 비중으로 linear interpolation을 수행해 값이 정해진다.

image

  • CutMix 는 하나의 이미지에서 두 개의 부분적인 view만 가지고도 인식될 수 있도록 하면서 물체의 전체가 Classification 단서로 활용될 수 있게 한다. CutMix가 각각의 부분적인 view 만으로도 두 개의 물체를 인식하는지 확인하기 위해 Class Activation과 CutOut 과 Mixup 이랑 비교한 그림이 아래 그림이다.

image

  • CutOut 의 경우 덜 특징적인 부분에 집중된 것을 볼 수 있다. 하지만 CutOut된 이전의 Pixel을 사용하지 않음으로써 비효율적이라는 단점이 있다.

  • Mixup 의 경우 모든 Pixel을 사용함으로써 부자연스러운 이미지가 형성되게 되고, 그 결과 CAM을 보면 모델이 물체를 인식할 때 어떤 부분을 단서로 삼아야 하는지 혼란스러워 하는 것을 확인할 수 있다. 이러한 혼란스러움이 Classification 과 localization 에서 차선의 결과를 가져오게 된다.

  • 위의 CutMix 의 CAM을 보면 두개의 물체를 정확하게 Localize 한 것을 확인할 수 있다.


CAM(Class Activation Map)

  • CAM 은 우리가 어떤 사진을 보고 특정물체라고 판단할 때 어느 부분을 보고 Neural Network 가 판단을 했는지를 히트맵으로 볼 수 있게 해준다.

image


참고자료

http://dmqm.korea.ac.kr/uploads/seminar/20210402_DMQA%E1%84%89%E1%85%A6%E1%84%86%E1%85%B5%E1%84%82%E1%85%A1_Mixup_%E1%84%89%E1%85%B5%E1%86%AB%E1%84%8B%E1%85%AE%E1%86%A8%E1%84%89%E1%85%AE.pdf

https://arxiv.org/abs/1710.09412

https://arxiv.org/abs/1708.04552

https://arxiv.org/abs/1810.12890

https://youtu.be/INEaSakYb-U

주간학습정리

1. 강의 복습 내용

https://junhyuk93.github.io/til/2021/08/23/Ai-BoostCamp-Day-15-EDA/

https://junhyuk93.github.io/til/2021/08/24/Ai-BoostCamp-Day16-DataSet/

https://junhyuk93.github.io/til/2021/08/25/Ai-BoostCamp-Day17-Model/

https://junhyuk93.github.io/til/2021/08/26/Ai-BoostCamp-Day18-Train-Inference/

https://junhyuk93.github.io/til/2021/08/27/Ai-BoostCamp-Day19-Mentorship/

2. 과제 수행 과정 / 결과물 정리

DarkNet53 구현

Resnet 논문 리뷰 및 구현

대회 브론즈 한번 달성 해보기


3. 피어세션 정리

회의록 참고

https://www.notion.so/level1-18-645fd2ecad4c451caf3fb86bd8f35d07


4. 학습 회고

드디어 P-Stage가 시작 되었다. 분류 대회가 진행 되었는데 첫날부터 결과 파일을 제출하는 선생님(?)들이 계셨다... 나는 라벨링 하고 있었는데.. 역시 세상엔 고수가 많고 앞으로 더 열심히 배워야겠다는 생각이 들었다.

다음 날 부터 Competition 에 관한 Baseline 코드가 조금씩 공개가 되었는데, 내 코드와 비교해보니 내 코드는 프랑켄슈타인같은 잡코드 같았다... 꾸준히 하다보면 나도 저런 코드를 만들 수 있겠지..?

그렇게 요일이 지나갈수록 코드가 공개가 되었고, 중간에 우연히 무거운 모델을 돌렸던 것을 제출해서 10등권에 한번 들었다가 그뒤로 추락하고 있다..ㅎㅎㅎ 나는 jupyter notebook 에 계속 작업 하고 있었는데 완전체로 공개된 Baseline 템플릿처럼 py 파일로 이루어져 있었다. 주말에 이 부분을 열심히 봐서 내껄로 만들어야 될 것 같다. 서로를 상속하고 불러오는 이 과정이 익숙치않은데, 열심히 하면 되겠지.. 화이팅! (ง •̀ᴗ•́)ง

image

Train Inference


  • 학습 프로세스에 필요한 요소는 크게 세가지(Loss, Optimizer, Metric)으로 나누어진다.

Error Backpropagation

imageimageimageimageimageimage


Focal loss / Label Smoothing loss

논문(https://arxiv.org/pdf/1708.02002.pdf)

RetinaNet 모델을 학습시키는데 Focal loss가 성능 향상

Focal loss는 분류 에러에 근거한 loss에 가중치를 부여함.

샘플이 CNN에 의해 올바르게 분류되었다면 그것에 대한 가중치는 감소한다.

즉 좀 더 문제가 있는 loss에 더 집중하는 방식으로 불균형 클래스 문제 해결

image

KakaoTalk_20210825_130723576{: height="500"}

Model

  • Model 에서는 nn.Module을 상속받아 init 으로 초기 설정을 하고 모델이 호출되었을 때 실행되는 함수인 forward를 실행하게 된다. 모든 nn.module은 child module을 가질 수 있고, 모델을 정의하는 순간 그 모델에 연결된 모든 module을 확인할 수 있다.

  • 모델에 정의되어 있는 모듈들이 가지고 있는 계산에 쓰일 파라미터들을 확인할 수 있다. 각 모델 파라미터들은 data,grad,require_grad 변수 등을 가지고 있으므로, trainning precess 과정에서 유용하다.

KakaoTalk_20210825_130723932{: height="500"}

KakaoTalk_20210825_130724326{: height="500"}

+ Recent posts