본문 바로가기
Study 공부할레나

[컴퓨터비전 정주행 Kit] Part2 ch04 표현학습

by LENA-cfg 2024. 1. 27.

# representation learning

- feature extractor가 있을때 이제 로컬 피쳐나 아웃풋 레프리젠테이션을 뽑는데 그 레프리젠테이션을 잘 학습하고 자 하는 것

- 데이터의 유사도나 차이를 파악하고자하는 가장 중요한 요소이고 레프리젠테이션을 학습하는게 중요한 요소

 

# metric

- 어떤 측도, 측정 정도

- 예) accuracy, l2-distance, cosine similarity 

- 학습에서 어떤 메트릭을 쓰겠다는게 metric learning 핵심

 

# image clustering

- 비슷한 데이터들끼리 군집하는 것

- relational database 상의 데이터라고 하면 다양한 클러스터링 기법들이 있음

- high dimensional한 이미지는 w by h by rgb channel의 엄청 큰 디멘션을 가지는 데이터인데 그 이미지를 클러스터링 할때 어떻게 할 것인지, 그걸 군집해서 모아서 데이터를 어떻게 할 것인지에 대해서 배우는 게 두번 째

 

# data augmentation

- 학습 데이터를 얻기 어렵거나 학습 데이터가 있는 상황 속에서 여러 개의 데이터를 보여줄 수록 모델이 좀 더 좋은 함수를 학습할 것

- 어떻게 증강할 것인지, 어떤 증강 종류가 있는지

- 예) 이미지를 비틀거나 지터링, 컬러 체인지등

 

# self supervised learning

- 레이블이 주어지지 않고 데이터만 보고 유사도를 군집해가지고 학습을 하게 되는 것

 

# semi supervised learning

- 지도 비지도 학습이 합쳐진 것

- 지도 레이블이 아주 조금만 있고 나머지 데이터들을 다 레이블이 아예 없음

- 어떻게 그 데이터가 없는 것들을 잘 쓸 것인지 탐구하는 러닝 기법

- 예) 지도 레이블이 있는 데이터로 모델을 간단히 학습한 다음에 그 지도 레이블이 없는 unsupervised data set에 대해서 수도 레이블(가짜 레이블)을 줘서 지도 학습 또는 클러스터링을 해서 학습하는 방법

 

# few shot learning(one shot, zero shot learning이라고 함)

- 적은 수의 데이터 샷으로 학습을 했을 때 보지 않은 데이터 샷에서(보지 않은 도메인에서) 평가를 하는 것

- 예) 20개의 클래스가 있으면 10개의 클래스에 대해서 학습을 하고 학습하지 않는 10개의 클래스에 대해서 평가를 하는 세팅

- 적은 수의 레이블이 있는 데이터 샷으로 어떻게 더 잘 일반화가 잘 되도록 학습할 것인지에 대한 것

 

# meta learning

- 학습하는 방법을 학습

- 적은 데이터로도 적절한 일반화가 가능

- 모델을 어떤 메타 러너를 두고 이제 어떤 latent variable(잠재변수)를 가지고 있어서 각 모델들이 어떻게 잘 학습되는지 그걸 조정하는게 메타 러닝

 

# transfer learning

- 사전학습 모델을 학습을 하고 그걸 트랜스퍼 했을 때 어떻게 잘 되게 할지, downstream task(최종적으로 해결하려고 하는 작업)에서 얼마나 잘 되게 할지 탐구하는 것

 

# knowledge distillation

- 지식 증류 기법

- 큰 모델을 작은 모델로 증류해서 사용하고자 했을 때 지식 증류 기법을 사용함

- 실생활에서 사용하려면 작은 모델을 사용해야함(온칩 디바이스에서 사용할 수 있음)

 

# domain adaptation

- 도메인 적응, 도메인이 바뀌었을 때 어떻게 잘 적용할지에 대한 그런 task를 푸는 방법

-  예) gta 게임 같은 데서 가상 환경에서 학습을 하고 실제 리얼 환경에서 적용을 하려고 할 때 그 도메인 갭이 있는데 그 도메인 사이에서 얼마나 잘 이게 적용이 되게 할지 그러면 어떤 테크닉을 써야될지에 대해서 배움 

- 예) 배치 논 파라미터를 트랜스퍼를 fix하고 트랜스퍼를 하면 잘된다 이런거

 

# anormaly detection

- 데이터 분포들 사이에서 어노멀한 이상한 데이터를 찾아내는 기법

 

# multi modal representation learning

- 서로 다른 종류의 데이터셋을 동시에 학습하는 것 

 

# vision & language

- 이미지와 랭귀지가 들어왔을때 관계를 계산해서 문제를 푸는 것

 

# vision & audio


# Metric learning section

 

1. information retrieval(정보 검색)

- 옷의 어떤 특정한 포인트 위치들을 기반으로 어떤 피처를 추출해야함

- 그 피처를 임베딩 스페이스로 보내서 가장 유사한 옷들을 비교해가지고 어떤 키포인트들을 비교해서 retrieval하는 테스크

 

2. face identification/verification

- identification: 사람의 이미지를 검출해서 1D vector가 있을 것이고 gpu 연산을 통해 이미지 하나의 벡터가 들어왔을 때 그 임베딩 공간에서 가장 비슷한 걸 retrieve 해주는 것

- verification: 얼굴에 있는 키포인트들이 있는데 점들을 사용해서 어떤 verify하는 테스크

 

3. person re-identification

- 어떤 데이터베이스에 사람들이 쭉 들어가 있을 때 어떤 사람이 지나가면 그 사람인지 아닌지 판단해주는 테스크

 

4. visual object tracking

- 시각적인 물체의 트래킹, 따라가는 것

 

5. local patch matching for stereo imaging

- 스테레오 두 장의 약간 좁은 베이스라인이 있는 이미지가 들어왔을 때 로컬 패치에 매칭 하는 것 

- 예) 두장의 베이스라인을 알고 있는 카메라 사이의 매칭을 알면은 두 장 카메라 깊이를 알 수 있음

 

6. Visual representation learning

- 비디오는 이미지들이 계속 프레임들이 중첩된 타임축으로 축이 하나 더 생긴 어떤 데이터

- 레이블이 없는 패치 트래킹하는 테스트를 학습 시켜서 트래킹 아이디를 어떻게 찾아낼지

- 가까워져야 되는 건 가까워지고 멀어져야 되는 건 멀어지게 해서 어떤 유사도 컴브 네트워크를 학습하는 것

- 비지도 패치 트레킹을 가지고 모델 학습을 하고 다운스트림 테스크인 siamese-triplet network, 즉 오브젝트 트레킹에 다시 한 번 적용하는 테스크를 푸는 것


# Classical metric learning

 

1. Euclidean distance

 

- 값 들간의 거리를 구하는 알고리즘, 여러 차원의 거리를 계산할 수 있음

 

2. mahalanobis distance

- 맥락을 고려한 상대적인 거리

- 데이터 분포를 정규화 시켜서 유클리드 거리를 계산해보면 상대적 거리를 계산할 수 있다

 

링크: https://angeloyeo.github.io/2022/09/28/Mahalanobis_distance.html


# Deep metric learning

- 단일의 신경망 구조는 데이터 표현과 디시젼 메이커를 동시에 학습하는 구조

- 데이터로부터 레프리젠테이션을 학습할 수 있다는 구조

- deep metric learning은 딥뉴럴네트워크를 사용해서 레프리젠테이션 펑션을 학습하자

- 펑션을 어떻게 학습하느냐, 같은 것은 같게 다른 것은 다르게의 관계를 만족시키도록 딥뉴럴네트워크의 함수를 학습 시키는 것이 딥 메트릭 러닝임

 

1. siamese network

논문: https://www.cs.cmu.edu/~rsalakhu/papers/oneshot1.pdf

유튜브: https://www.youtube.com/watch?v=SthmLerAeis

 

=> supervised metric based 방식과 siamese neural network를 이용해 image에 대한 학습을 진행하고 학습된 feature들을 retraining 없이 one-shot learning에 이용하는 것

==> 뉴럴넷에 2개의 이미지를 입력하고, 결과로 같은 카테고리인지 아닌지를 학습

 

Train

- verification model을 학습

- input pair가 입력 되었을 때, 이 패어가 같은 클래스인지 아닌지를 잘 구분할 수 있도록 학습

 

Test

- pairwise 방식으로 각 class의 이미지와 score를 매겨 highest score를 얻은(distance가 가장 짧은) pairing이 one-shot task에서 highest probability를 얻음

 

* one shot learning

- 칼 이미지를 하나를 보여줬을 때 다른 이미지의 칼을 보여주면 그것도 칼이라고 알 수 있는 것 처럼 기계도 사람처럼 소량의 이미지를 보여주고 새로운 칼의 이미지를 보여줬을 때 알 수 있게 하는 방법이 없을까? => 원샷러닝

-> use meta-learning

-> train robust feature learning model(=siamese network)

 

* few shot learning

-  에피소드 학습 방법: 전체 데이터를 여러개의 support data, query data로 쪼개는 과정이 필요함

 

* 이미지 간의 거리 계산

- 유사도 펑션 = 비슷한 이미지라면 이미지 간의 거리를 작은 값을 가지도록, 다른 이미지면 이미지 간의 거리를 큰 값을 가지도록 함

 

* metric learning

- 임베딩 스페이스 상에서 다양했던 포인트들이 거리학습을 한 후 유사하면 가까이에 위치하고 다르면 멀리 맵핑됨

 

* Embedding function

- 데이터를 저차원으로 임베딩하는 함수

* Distance

- 임베딩 공간에서 데이터간 거리

 

1) siamese architecture: a pair of neural networks sharing parameters

2) contrastive loss: designed for learning the architecture(클래스가 같은 것은 가깝게, 다른 것은 멀게) 

3) learning the Siamese network

- 거리 측정 D: Euclidean distance 

-  Minimize of L(W;yij, xi, xj) with respect to W

W* = argminw L (W;yij, xi, xj)

 

2. Triplet network

- 예시의 관계성을 더 빼앗아내려고 이미지에 pair가 아니라 triplet을 넣는 것임, 같거나 틀린게 아니라 같은 거 하나랑 틀린거 하나를 묶어서 같은건 가깝게 틀린건 멀게 만드는 것임

원래 앵커 이미지(왼)와 같은 클래스를 가진 positive image의 피쳐의 거리(D)를 계산

원래 앵커와 다른 클래스를 가진 negative image의 피쳐의 거리(D)를 계산하고

가장 왼쪽에 있는 기호(마진), 마진 값 이상으로 앵커와 포지티브 거리를 작게 만들어줌


# 샘플링이 왜 중요한지(sample selection also matters)

- 우리가 모든 페어나 트리플렛을 데이터셋에서 다 볼 수 없기 때문

- n개의 트레이닝 샘플이 있을 때 페어 개수를 샘플링 하려면 n제곱 개의 페어를 샘플링 할 수 있지만(이론적으로)

너무 많은 수량을 이터레이션 할 수 없음

- 그리고 너무 쉬운 샘플은 거리가 계속 가까울 것이기 때문에(학습에 도움이 안되기 때문에), 네거티브 샘플이 너무 어려우면 훈련을 unstable하게 만들 것이기 때문에 선택을 잘하는 것도 중요함

- 즉, 샘플 셀렉션을 잘 하면 더 나은 모델을 얻을 수 있고 학습도 가속화 시킬 수 있음


# Quadruplet network

- triplet loss에서 같은 클래스끼리 더 응집할 수 있도록 제약을 추가한 손실함수

- 같은 클래스는 더 응집력 있게 임베딩 되며, 다른 클래스 끼리 더 거리가 멀어지게 임베딩할 수 있게 학습을 함

- 예) 멀티 오브젝트 트래킹은 여러 장의 이미지에서 오브젝트 여러개를 트랙킹 하는 테스크, 타임 축에 대해서 어떤 포지티브 샘플이 서로 다른 관계를 가질 수 있음

 

- 두개의 트리플랫 랭크 로스의 선형 조합임


# A basic technique: Nearest Neighbor Search

- 특정한 공간에서 훈련 예시들 중 가장 가까운 것을 찾는 것

- knn(k nearest neighbor)라고도 함

 

# person re-identification

- 다른 카메라를 통해 사람을 확인 하는 것

- 임베딩 공간에서 가장 가깝게 위치한 것을 찾는 것(Nearest neighbor)

 

# dense triplet loss

https://youtube.com/watch?app=desktop&v=kXYz_qKkzD8

 

# log ratio loss

- 다시 정리


# NetVLAD: CNN architecture for weakly supervised place recognition

- cnn을 활용하여 현재 이미지와 유사 위치에서 찍은 비슷한 이미지를 검색해주는 딥러닝 모델

https://www.youtube.com/watch?v=XIA-9JjNA34

 

visual place recognition이란?

- 주어진 쿼리 이미지에 해당하는 위치 이미지를 검색하는 것

- Query, DB 이미지들에는 geotag(위도, 경도 등)가 있다.

 

why challenging?

- 동일한 장소의 이미지 간의 camera pose/illumination 변화, occlusion, truncation등이 발생할 수 있다.

* occclusion(가림현상):한 객체가 다른 객체 또는 환경에 의해 부분적으로 또는 완전히 가려지는 현상

* truncation(절단현상): 객체의 일부분만 이미지 내에 나타나는 경우

 

Application of visual place recognition

- 자율 주행, 가상현실에서 또는 어떤 장소에서 쿼리 이미지를 넣었을때 그 데이터베이스 이미지를 가져와서 그 데이터 베이스 이미지가 아니라 어떤 3차원 모델을 영역을 리트리브해서 렌더링하는것(포켓몬고 처럼)

 

VLAD(vector of locally aggregated descriptors)

- 딥러닝 시대 이전에 자주 사용하던 descriptor pooling 방식

- instance-level retrieval이나 classification에서 많이 사용됨

- 블라드는 이미지를 컴퓨터가 이해하고 연산이 가능하도록 벡터로 변환해주는 것

1. 전체 이미지의 그래디언트를 구함

16 by 16 윈도우 안에서 앵글 히스토그램을 통해 키포인트 디스크립터를 구함

일정 threshold 이상의 값을 가진 키포인트로 생성되게함(가장 오른쪽이미지)

2. 생성된 이미지들을 K개의클러스터로 만듦(위의 이미지의 k는 3임)

각 클러스터의 중심 포인트(centroid)를 대표 키포인트로 정함

대표 키포인트는 16by16형태의 윈도우가 됨

3. 하나의 클러스터 안에 대표 키포인트가 cij이고 같은 클러스터 안에 있는 키포인트는 xj임

vlad 벡터를 생성하려면 같은 클러스터 안에있는 키포인트들을 대표 키포인트와 빼준값을 써메이션함

 

NetVLAD

- cnn network를 사용해서 VLAD를 한 것

- d 즉 거리가 작으면 유사 이미지 크면 다른 이미지이고 딥러닝을 통해 이미지를 벡터로 표현하는 함수 f와 함수 f에 들어가는 파라미터 세타를 구하는 것

네트워크 구조

(노란색) cnn에 인풋이미지를 넣음, 마지막 레이어에서 피처를 뽑음

뽑은 피처를 n개의 D차원으로 로컬 디스크립션 수행

(빨간색) cnn 과정에서 만들어진 weight와 bias를 빨간색에 넣어준 값

(초록색) 빨간색을 통과한 값에 소프트맥스를 취해주고 생성된 값이 하나의 파라미터가 됨

(남색) 소프트맥스 취한 값과 이전에 블라드 벡터와 연산을 해줌

(주황색) 남색에서 나온 값을 노멀라이즈해줘서 최종 블라드 벡터값을 뽑아줌

 

이렇게 생성된 값은 다른 블라드 값과 유클리디안 디스턴스를 구해서 거리 계산을 해서 유사한지 판별함

NetVlad source: https://github.com/Nanne/pytorch-NetVlad/blob/master/netvlad.py


# Landmark Recognition

- Deep local feature(DELF)

 

Landmark Recognition이란

- 시각적 장소 인식과 같은 문제 세팅이지만 통상적으로는 더 다양하고 많은 장소를 사용함

 

문제인식

- 기존 instance-based image retrieval은 공통의 규격이 정립이 안되어있었고, 또 데이터셋 수량도 많지 않음

- cnn을 사용한 일부 모델이 있었으나, semantically useful한 정보를 골라 사용하지 못했음

(a) 디스크립터 파인튜닝

-어떻게 피쳐를 잘 뽑을지 고민함

- 어떤 네트워크가 있을 때 그 디스크립터 피처를 네트워크 전체에서 학습을 함

 

(b) attention based keypoint selection

-(a)가 학습이 되고나서 어텐션부분만 따로 학습을 함

-attention score를 계산함 

 

* Loss: cross-entropy loss

 

* 세부적인 테크닉

- (a) 학습할때 클린한 이미지로 학습, occlude 같은게 없음

- (b) 학습할때는 좀 중요한 영역들이 가려져 있는 듯한 이미지들을 잘 샘플링해서 학습함

 

Conclusion

- DELF: CNN 기반의 a new local feature descriptor 제안

  - Attention을 활용한 키포인트 선택

  - image-level label로 dense local descriptor 학습

- Large scale image retrieval benchmark인 Google landmarks dataset 제안

- 기존 모델들보다 잘 나오는 strong baseline 제안

 

- 추가적인 contribution after published

  - local featrues로 사용해도 성능이 좋다

  - 많은 visual corresponden


# Cross Entropy

비용함수:모델로부터 나온 Y값과 실제 Y값의 차이를 최소로 하는 가중치

Entropy: 정보를 표현하는데 필요한 최소 평균 자원량

**다시 공부

 

 

# MAP(mean average precision)


# image clustering

 

# k-means clustering

- distances between points

1. 군집 중심점(centroid)을 지정해 해당 중심에서 가장 가까운 점들을 선택

2.선택한 점들의 평균 지점으로 군집 중심점을 이동하고 다시 가까운 점들을 선택

3. 이 과정을 더 이상 중심점이 이동하지 않을 때까지 반복

 

장점

- 알고리즘이 쉽고 간결

- 대용량 데이터에도 활용 가능

 

단점 

- feature의 개수가 많을 경우 군집화 정확도가 떨어짐(거리 기반, 차원의 저주)

- 반복 횟수가 많을 경우 수행 시간이 오래 걸림

- 몇 개의 군집을 선택해야 할지 정하기가 어려움

- 이상치 데이터에 취약

 

(추가)

- 고차원 데이터에서도 적용할 수 있음 

 

# GMM과 EM 알고리즘(Gaussian Mixture Model & Expectation-Maximization)

-최대우도법: 데이터만 있으면 가장 likelihood를 크게 해주는 모수는 아래와 같다.

우도: 각 데이터 샘플에서 후보 분포에 대한 높이를 다 곱한 것

https://angeloyeo.github.io/2020/07/17/MLE.html

-베이즈정리: 두 확률 변수의 사전 확률과 사후 확률 사이의 관계를 나태내는 정리

https://www.youtube.com/watch?v=EMP5KWJExBw

-나이브 베이즈 분류기: https://www.youtube.com/watch?v=KueAHu7iFNE

 

# Gaussian mixtures

- Mahalanobis distances to centers

https://angeloyeo.github.io/2021/02/08/GMM_and_EM.html

 

EM 알고리즘

- Expectation-Maximization의 약자

- EM 알고리즘은 아래의 두 과정을 반복적으로 수행하는 알고리즘

 

- Expectation: 각 데이터에 라벨을 부여하는 과정

- Maximization: 각 그룹의 모수를 재 계산하는 과정


# Image Clustering: Unsupervised Metric Learning

 

문제 인식

- 라벨이 없는 데이터로도 metric learning하여 embedding space를 만들 수 있지 않을까?

- 기존 supervised metric learning으로 학습된 embedding space는 overfitting의 우려가 있지 않을까?

 

솔루션

- pre-trained embedding에서 label없는 이미지 collection으로 fine-tuning한다.

- Manifold 간의 hard positives와 hard negatives를 구해서 constrative learning을 한다.

 

loss functions

- contrastive loss

- triplet loss

 

결론

- discrete category label없이 fine-grained similarity 학습방법 제안

- Target domain에 대한 image collection만을 사용하고, 다른 class label등을 아예 사용하지 않으므로, annotation cost를 아주 절약할 수 있음

 

단점

- 기본적으로 pre-trained model을 사용해야한다

(embedding space가 형성되어 어느정도 manifold 간의 구분이 있어야 하기 때문) 


T-SNE

https://www.youtube.com/watch?v=zCYKD3YfcSM

- t-Distributed Stochastic Neighbor Embedding(t-SNE)

- 고차원 데이터 셋의 시각화를 위한 차원 축소

 

- Dimensionality reduction

- Feature elimination: feature를 단순히 제거함. 정보 손실이 있음

- Feature selection: 통계적 방법을 통해 피쳐의 중요도에 rank를 매김

  - 정보 손실이 있음. 데이터 셋 마다 rank가 달라져야함

- Feature extraction: 새로운 features를 추출해 냄

  - Linear vs. non linear

 

- t sne는 비선형적인 방법의 차원 축소 방법이고 특히 고차원의 데이터 셋을 시각화 하는 것에 성증이 좋음

- t sne 알고리즘은 고차원 공간에서의 점들의 유사성과 그에 해당하는 저차원 공간에서의 점들의 유사성을 계산함

  - 점들의 유사도는 A를 중심으로 한 정규분포에서 확률 밀도에 비례하여 이웃을 선택하면 포인트 A가 포인트 B를 이웃으로 선택한다는 조건부 확률로 계산 됨

- 그리고 저차원 공간에서 데이터 요소를 완벽하게 표현하기 위해 고차원 및 저차원 공간에서 이러한 조건부 확률(또는 유사점)간의 차이를 최소화 하려고 시도

- 조건부 확률의 차이의 합을 최소화 하기위해 gradient descent 방식을 사용하여 전체 데이터 포인트의 kl-divergence 합계를 최소화 함

  - kullback linear divergence는 한 확률 분포가 두번째 예상 확률 분포와 어떻게 다른지 측정하는 척도

 

- 정리하면 t sne는 두가지 분포의 kl divergence를 최소화 함

1) 입력 객체(고차원)들의 쌍으로 이루어진 유사성을 측정하는 분포

2) 저차원 점들의 쌍으로 유사성을 측정하는 분포

 

- t sne는 다차원 데이터를 보다 낮은 차원 공간으로 맵핑하고 다수의 측징을 갖는 데이터 포인트의 유사성을 기반으로 점들의 클러스터를 식별함으로써 데이터에서 패턴을 발견

 

- t sne 과정이 끝나면 인풋 피처를 확인하기가 어렵고 t sne 결과만 가지고 무언가 추론하기 어려움이 있음 그래서 t sne는 주로 시각화 툴로 사용


 

Data Augmentation

- 학습 데이터의 갯수를 늘리기 위해 샘플에 각종 변환을 적용하는 것

 

- Color Transformation

: Gaussian Blur, Motion Blur, Brightness jitter, Contrast jitter, Saturation jitter, ISO Noise, JPEG Compression

 

- Spatial Transformation

: Flip, Rotation, Crop, Affine

: Detection/Segmentation의 경우 GT도 transform 주의

 

1. Data Mixing or Erasing

- 데이터를 섞거나 지워서 증강하는 방식들

- N-label prediction(multi-label classification) 문제로 치환하여 네트워크 학습을 한다

 

# PatchShuffle Regularization

- window  내의 픽셀을 섞어서 증강하는 기법

  - 피처 수준에서도 적용할 수 있음

- 단점: window  size N을 하이퍼파라미터로 주어야한다

- 윈도우 안에서 섞일 패치의 확률을 주고(0.3이런식으로)섞이고자 정해진 패치를 랜덤으로 섞어줌

=> 윗 줄이 probability인데 이 probability를 주어 stochastic하게 적용한다는 것 

- 해당 논문에서는 probability를 0.05로 주고 패치를 2by2로 준것이 가장 좋았다고 함

 

# SamplePairing

- 두 장의 이미지를 pixel-wise로 섞어서 네트워크에 통과시키는 형태의 augmentation

- 학습은 N-class multi-label prediction으로 수행한다.

 

# Mixup

- 두 장의 이미지를 섞을 때, linear interpolated된 위치로 섞는 것

- 비교 베이스라인: ERM(Empirical Risk Minimization)

 

# Mosaic Augmentation(Cropping and Patching)

- 여러장의 이미지를 패치를 떼고 붙여서 N-label classification 문제로 푸는 방식

 

# Multiple way of Mixing

- 두 장의 이미지를 pixel-wise로 섞어서 네트워크에 통과 시키는 형태의 증강

- pair image를 좀 더 다양하게 mixing하는 8가지 방식을 제안한다.


# Gan 기반의 Data Augmentation

- generative advarsarial networks(Gan)을 사용한 data augmentation을 수행

- 보다 더 자연스러운 이미지를 다양한 modality에 대해 Augment 할 수 있음

 

# Medical Image Augmentation

- paper: https://arxiv.org/pdf/1803.01229.pdf

- 간의 병변 추측 모델 학습을 위해 Gan으로 데이터를 생성하여 학습

 

# DCGAN

참고: https://tutorials.pytorch.kr/beginner/dcgan_faces_tutorial.html

 

# ACGAN

 

# SinGan: Single Image GAN

- 단일 이미지로 unconditional GAN을 학습하는 것

- Fully-convolutional GANs으로, multi scale pyramid로부터 패치 정보들과 이미지 전체 구조를 학습

- 여러개의 이미지 manipulation task에 적용 가능

- 기존의 single image texture generation보다 훨씬 자연스러운 이미지를 만듦

- 기존의 gan은 단일 이미지로는 충분한 학습이 안되고, 부자연스러운 반복되는 패턴만이 학습이 된다

- 기존의 single image texture generation은 natural image generation을 타겟하지 않았기 때문에, 부자연스러운 이미지가 나옴

- Generator: network's capacity가 너무 크면 training data를 암기할 수 있어서 작은 사이즈의 generator model을 사용함

- 3*3 conv batchnorm leaky lelu을 5번 staking한 fully convolutional 구조 사용

- Loss: Advarsarial loss + Reconstruction loss 간단한 두 개의 로스를 사용함

 

결론

- 싱글 이미지로 unconditional gan을 학습하는 간단한 방식 제안

- 제안하는 멀티 스케일 학습 방식은 로컬 텍스쳐 뿐만 아니라 global complex natural image도 잘 생성함

- 다양한 image genration과 image manipulation task에 적용되고, 이 방식을 사용해서 data augmentation에도 적용할 여지가 있음

 

단점

- 한 장의 학습이 오래걸려서 online으로 사용하기는 어려움

- offline으로 여러장의 이미지를 미리 만들어서 data augmentation에 사용하는 것은 가능

 

GANGealing: GAN-supervised alignment

- Gan으로 생성된 이미지를 supervision으로 주어 dense visual alignment 모델을 학습하기 위한 방식

- 별다른 supervision없이 다양한 image data augmentation을 gan을 통해 학습

 

전체 구조

- 여러 웨이트로 학습된 generator G를 사용

- conditioned latent c를 사용하여 generation함

- stns으로 generated image를 align하여 stn을 alignment loss(perceptual loss)로 학습함

 

결론

- gan을 통한 이미지를 생성하여 dense visual alignment 모델 학습 방식을 제안

- pose variation에 대한 clustering loss를 적절히 제안

 

한계

- Conditional Gan을 사용해서 class-specific하게만 사용된다

- pose variation이 큰 경우에 alignment학습이 잘 안된다


# AutoML 기반의 방법

- Data Augmentation Policy를 AutoML을 통해 찾는 방법

 

# AutoAugment

- Neural Architecture Search와 비슷하게 RNN controller를 통해 Augmentation policy를 뽑음

- 이후 네트워크를 학습시켜서 validation accuray를 reward로 policy gradient를 사용한 강화학습을 한다

 

# population based autoaugment

문제인식: autoaugment는 컴퓨팅 연산으로 실행 불가능

해결책

- population based autoaugment

- Population Based AutoAugment

: 여러 증강 정책을 동시에 탐색하고, 이 중에서 가장 성능이 좋은 정책을 선택하여, 시간에 따라 이 정책을 발전시키는 방식으로 작동합니다. 이 과정에서 생성되는 증강 정책 일정은 "non-stationary"입니다. 왜냐하면, 모델이 데이터를 더 잘 이해하게 되면서, 증강 정책이 진화하고 최적화되기 때문입니다.

- exploration and exploitation

exploration: 현재 상황(알고 있는 정보)에서 판단해볼때 가장 베스트 decision을 선택하고 수행하는 것

exploration: 새로운 시도를 함으로써 새로운 정보를 더 모아 보는 것

참고: https://skidrow6122.tistory.com/entry/Exploration-and-Exploitation

 

# Fast AutoAugment

- autoaugment의 efficiency 문제를 지적

- 솔루션

: density matching 기반의 efficient search strategy

: bayesian optimization 기법(tree-structured parzen estimator(TPE))를 사용하여 Augmentation policy 추출

 

# Faster AutoAugment

- 모티베이션: 더 빠른 autoaugment

: 미분 불가능한 policy gradients를 미분 가능하게 하면, gradient descent optimization으로 augmentation policy를 학습 할 수 있지 않을 까?

- 솔루션

: Differentiable AutoAugment

: Gradient based neural architecture search(NAS)의 대표적 방법인 "DARTS: Differentiable architecure search)를 따라함

 

# RandAugment

- 문제 인식: 왜 autoML로 augmentation policy를 찾아야 할까?

- 서치 스페이스도 너무 크다

 

-솔루션

: 아예 찾지 말고, 미니 배치 샘플링 때마다 여러 증강 옵션 중 랜덤으로 선택해서 적용해보자

: 하이퍼파라미터:: 몇개의 operation을 뽑을 지(N), 어떤 범위에서 뽑을 지(M)

 

# UniformAugment

- 두 장의 이미지를 pixel-wise로 섞어서 네트워크에 통과시키는 형태의 augmentation

- 학습은 N-class multi-label prediction으로 수행

- Search 없이 augmentation을 확률적으로 적용하자

- 모든 augmentation 연산을 0과 1사이의 확률 값으로 넣을지 말지 결정

- magnitude도 아예 0과 1사이의 확률값으로 적용

- 매 배치마다 랜덤 샘플하므로 튜닝이 필요없고 서치 스페이스가 0이다

 

# TribialAugment

- 기존 모델들 Effectiveness와 Efficiency 사이에서 trade-off를 고려

- 제안

: 아예 prameter-free로 가기 보다는 몇가지 중요한 factor는 서치하자

: Augmentation 종류와 magnititude는 찾자


# self-supervised learning

 

- 학습 기법의 label에 따른 분류

: 딥러닝 모델 학습을 위해서는 많은 레이블이 필요하다

: 하지만, 비싼 레이블링 없이도 모델을 잘 학습시키는 것은 중요하다

 

- supervised learning 단점

: 레이블 데이터가 많아야함

: 학습되지 않은 데이터가 튀어나오면 예측하기 어려움(Transfer가 잘 안됨)

 

- Reinforcement learning 단점

: 실패해도 다시 시도하면 되는 게임에선 가능

: 현실 세계에서는 실패 자체가 치명적일 수 있어서 적용하기 힘듬

: policy gradients로 학습하는 과정은 불안정함

 

- Self-supervised learning의 필요성

: 주변 상황과 조건을 고려해 예측해야 함

: 실패하기 전에 사고가 난다는 것을 예측해야 함

: 레이블 없는 많은 데이터를 안정적으로 학습해야함

 

- pretext tasks 기반 self-supervised learning(자기 주도 학습) 기법

* pretext tasks: 라벨링 없는 데이터들을 활용하여 정의된 새로운 문제

 

# Exemplar

- STL-10 데이터 셋 사용

- 96*96 이미지 내에서 considerable한 gradient 영역 근처를 32*32로 crop

- 32*32 seed patch를 기준으로 data augmentation을 적용하여 추가 영상 생성

결론

- surrogate labels을 data augmentation을 통해 얻어서 네트워크를 학습하면 transfer 했을 때 성능이 좋다

- Discriminative한 features로서 image matching에 적용했을 때 SIFT보다 좋은 descriptors로서의 결과도 낸다(marginal하지만)

 

한계

- imageNet과 같은 large scale datasets에는 적용하기 어려움

: pretext task의 classes가 아주 많아지기 때문

: 파라미터 수도 아주 많이 필요함

- 당시의 class수가 적은 stl-10, caltech-101같은 데이터셋에서만 평가함

 

# Context Prediction

- context prediction이라는 pretext task를 통해 exemplar의 단점을 해결하려 함

: 3by3개의 patches를 뜯어서 가운데를 기준으로 1~8번 할당

: 가운데를 기준으로 선택한 patch가 몇 번째 패치인지 예측하도록 모델이 학습됨

- 사람도 다소 예측하기 어려움 하지만, 이를 기계에게 학습시키면, 이미지 전반의 representation을 배울 수 있다는 게 모티베이션

- 이미지 패치나 위치는 일정하지 않고 약간의 위치 변화를 주어 샘플링 된다

- 그럼에도, context prediction tasks로 pre-training한 피처 추출를 사용하면 성능이 좋다

 

결론

- context prediction 이라는 pre task로 학습하게 되면 representation learning이 된다

한계 

- 모델이 위치 정보를 boundary, texture등 으로 cheating하여 trivial solution으로 빠질 수 있다

 

# jigsaw puzzles

- 직쏘 퍼즐을 풀게하는 pretext task

- 앞선  context prediction과 3*3 패치를 추출하지만, 임의의  순열로 셔플함

- 하지만, 직쏘 퍼즐은 36만개의 클래스를 배워야해서 이는 어렵다

 - 따라서 유사한 순열을 제거한 100개의 pre-defined permutation만 사용한다.

  - 100-dimension vector prediction(using alexnet / weight sharing of 9 networks)

 

결과 

- alexnet supervised learning model 결과에 점점 가까워짐

- context prediction 보다 좋은 성능

 

# counting

- 한 patch에 대한 object의 특징을 가상의 vector로 표현함(counting visual primitives)

- 각 패치 안에 코 2개, 눈 4개, 머리 1개 등

- 이런 특징들은 각 패치나 전체 이미지가 up/down sampling 되어도 유지가 되어야 함

- 각 패치의 특징 벡터의 합을 prediction하는 것은 원래 이미지의 특징 벡터의 합과 같다는 이론에서 intuition을 얻음

- alexnet을 사용하여 패치별 특징 벡터를 출력하게 함

- 원본 이미지를 downsampling 했을 때 얻는 특징 벡터와, 각 패치별로 넣었을 때 나오는 특징 벡터의 합이 같도록 학습함

- 하지만, 같은 이미지로만 학습하면, 모든 feature vector를 0 으로만 예측하는 trivial solution 이 생김

- 그래서, 다른 이미지 넣었을 때 다른 feature vector를 갖도록 contrastive loss term 추가

 

# Multi-Task

- 2017년 당시에 주요 쓰였던 self-supervised learning 방법들을 동시에 multi-task learning으로 학습시키는 방법 제안

- 하나의 네트워크로 relative patch location(context prediction)+colorization+examplar+motion segmentation의 pretext tasks를 동시에 수행함

- 각 결과를 서로 다른 gpu 머신을 학습해서 gradient를 축적한 다음에 한번에 네트워크 업데이트를 한다

 

# Rotation prediction(rotnet)

- 이미지의 upright 4방향 rotation을 prediction 하는 pretext task

- 회전 이미지가 원본에서 몇 도 회전했는지를 예측하게 함


# contrastive learning 기반  self supervised learning

 

contrastive learning

- 자기 주도 학습의 주된 학습 방법으로 데이터들 간의 특정한 기준에 의해 유사도를 측정하기 위해 샘플 데이터 간의 비교를 통해 학습된 표현 공산 상에서 비슷한 데이터는 가깝게, 다른 데이터는 멀게 존재하도록 표현 공간을 학 습하는 것이다.

 

# Non parametric instance discrimination

1. Non parametric softmac classfier

1) 고정된 가중치가 아닌 피처벡터 v로 대체함(instance 특성학습 위해)

2) L2 norm을 통해 v를 unit sphere에 고정

3) 모든 instance가 class에 상관없이 unit sphere에 골고루 퍼져서 분포하도록 학습

 

2. noise constrastive estimation

1) nce form의 contrastive loss 추가

 

3. procimal regularization

1) 각 인스턴스를 개별 클래스로 두고 학습하면 학습이 불안정해서 procimal regularization 추가함

 

4. Weighted k-NN classifier

1) test time때 들어오는 sample은 k-NN features를 찾아서 classifying 한다.

 

# MoCo: Momentum Contrast

링크: https://www.youtube.com/watch?v=mGroma3gcgE

- Contrastive learning을 unsupervised representation learning에 좀 더 효과적으로 적용시켜보자

- pretext task: positive / negative pairing을 augmentation을 통해 더 많이 만들기

- mini batch 내에서 positive samples / negative samples 만들고, contrastive loss 주어 학습

- encoder가 key reptresentation의 consistency를 해쳐서 학습이 불안정해지는 것을 막기위해 momentum contrast 도입

 

contrast learning: 데이터 셋에 있는 이미지를 비교해서 비슷한 것은 서로 당기고 다른 것은 멀게 만듦

각각의 이미지를 2가지로 증강을 해서 얻은 이미지 데이터를 배치로 해서 샘플들을 나눠 주고 샘플들을 인코더에 넣어줌

앵커와 파지티브 샘플들은 당기고 네가티스 샘플은 멀게 함

 

훈련을 위해 네가티브 샘플을 미니배치로 다룸 성능을 높이기 위해선 데이터의 수량이 많아야함

높은 성능을 위해서 배치 수량을 높임(미니배치 최적화 이슈가 생길 수 있음)

memory bank

데이터 셋에 존재하는 모든 샘플들을 메모리 뱅크에 넣어두고 임의의 샘플을 골라 딕셔너리를 구성하는 방법

쿼리 인코더 값으로 메모리 뱅크를 업데이트하면서 학습을 진행함

메모리 뱅크안에 있는 키들이 빠르게 변화하는 쿼리 인코더 값의 결과값을 업데이트 하기 때문에 딕셔너리가 일관성 있지 않아 학습이 제대로 되지 않음  

 

따라서, 일관성을 해결하기 위한 방법론으로 moco가 있음 

moco는 미리 연산한 네가티브 이미지들을 임베팅 형태로 만들어 딕셔너리에 남아 저장함

이때, 딕셔너리의 구조는 선입 선출인 큐의 구조로 되어있음

그래서 선행하는 미니 배치의 키를 재사용 할 수 있음 

큐를 사용하면 딕셔너리의 사이즈가 미니 배치 사이즈로부터 자유로워짐 그래서 미니 배치 사이즈보다 훨씬 더 크게 만들어 줄 수 있음

왜냐면 네가티브 샘플을 늘려줘서 다양한 학습을 하는 것이 학습 성능에 더 좋은 영향을 끼침

위의 사이클을 계속 돌리면서 샘플들이 빠지는데 다 빠지고 나서 가장 오래된 미니 배치 샘플을 제거 함

 

쿼리 인코더는 학습을 하면서 갱신이 되지만 키 인코더는 모멘텀 업데이트를 통해 서서히  갱신 함

encoder -> 레즈넷 50 으로 구성되어있음

key  encoder에 문제가 있었는데 일관성이 없다는 것임

m이 1에 가까울수록 이전 momentum값이 남아있는 것, 0은 인코더 값을 그대로 카피 한다는 뜻

1에 가까운 0.999를 줌으로써 값을 아주 천천히 업데이트 함

 

그리고 일관성을 유지하기 위해서 suffling batch norm을 사용

일반적인 contrastive learning은 멀티 지피유를 사용하는데 각각의 지피유에 배치를 나눠 담아서 병렬적으로 프로세스를 진행 시킴 그리고 각각의 지피유에 있는 배치별로 노멀라이즈를 하면 임베딩 값이 차이가 생김

 

suffling batch norm이란 

배치 0과 배치 1을 통틀어서 섞고 나눠서 다시 들어감

 

# simclr(a simple framework for contrastive learning of visual representations)

링크: https://www.youtube.com/watch?v=uDLJiG39Pto

- 비슷한 이미지끼리는 이미지를 더 가까운 벡터로, 다른 이미지와는 더 먼 벡터로 만들어주는 모델

- 다양한 데이터 증강 조합

- cnn을 통한 representation과 contrastive loss사이에 learnable nonlinear transformation을 넣음으로써 정확도 향상

-  loss function: NT-Xent

- batch size가 크고 training이 길수록 정확도 향상

- 모델이 더 깊을수록 정확도 향상

- no negative samples

 

# SimCLR Version 2

- semi supervised learning 쪽 알고리즘의 장점까지 도입하여 3 단계로 학습해보자

1. Unsupervised/self supervised pretraining: task agostic CNN model 학습

- General representation 학습 v1과는 달리 projection head의 갯수가 바뀜

2. supervisd Fine tuning: pretraining 이후에 fine-tuning을 한다

- task specific linear layer를 head에 포함한다.

3. Distillation using unlabeled data :  teacher model에서 얻은 수도라벨로 student model tuning

 

# MaskFeat

- 모티베이션:  pretext task로 masked input으로 HOG를 prediction 해보자

 

# DINO: Vision Transformer + SSL

- self-distillation with no labels

- 모티베이션: self supv Vit로 학습한 모델은 이미 object의 segmentation을 어느정도 잡고있다.


# MixMatch 

- 여러 semi supervised learning 기법을 합쳐 높은 성능을 냄

- consistency regularization

- entropy minimization

- mixup