컴퓨터비전에서 사용하는 기본적인 data augmentation

1. motivation

 

train data와 real data사이에는 분명한 gap이 있다

 

이 gap을 채우기 위해 더 많은 데이터를 획득하거나 bias가 안된 데이터를 획득하거나

 

그런데 이제 데이터 획득 비용에는 한계가 있다

 

그래서 손쉽게 학습데이터의 데이터들에 기본적인 operation으로 데이터를 여러장 늘리자는 것이 data augmentation이다.

 

기본적인 방법은 이미지의 기하학 변환이나 색깔 변환 등으로 real을 반영하지 못한 부분을 조금이라도 채워나가는것

 

 

2. brightness

 

data들의 밝기를 조절하여 여러장 만들어내는 방법

 

 

호랑이 이미지는 어두워졌고 개 이미지는 밝아진게 느껴지나

 

image의 R,G,B 채널 pixel에 일정 숫자 pixel을 더하거나

 

random sampling된 pixel을 더하거나

 

적당한 숫자를 곱해도 된다

 

pixel은 255를 넘지 않으니 255가 넘으면 적절하게 clipping 해야함

 

 

 

3. rotate & flip

 

데이터를 회전하거나 반전시켜 여러가지 만들어내는 방법

 

 

 

openCV에서 이미 구현해놓았다

 

 

4. crop

 

특정 이미지를 잘라서 여러장 만들어내는 방법

 

중요한 part에 더욱 집중하여 학습할 수 있도록 도와준다고 볼 수 있다

 

 

위치의 indexing을 이용하여 구현할 수 있다

 

 

5. affine transform(shear transform)

 

선은 선대로 유지하고 선간 비율은 유지하고 각 선의 평행관계를 유지하는 변환

 

 

선은 선대로 그대로 만들고

 

a:b=c:d를 유지하고

 

각 선분간 평행관계는 유지하는 변환

 

변환하기 전 이미지 내의 3개의 점과 원하는 변환을 시킨 이미지 내의 3개의 점을 선택

 

openCV의 getAffineTransform으로 변환행렬을 구하고 warpaffine으로 이미지를 변환시킨다

 

 

변환하기 전 x표시로 된 3개의 점을 선택하여

 

어느 위치로 이 점들을 이동시키겠다는 3개의 o표시로 된 점을 선택

 

x에서 o로 바꾸는 변환행렬을 getAffineTransform이라는 함수가 구해준다

 

기하학적으로 이미지를 바꾸는 방법을 통칭하여 warp이라고 하나봄

 

 

6. CutMix

 

이미지의 일부를 잘라 다른 이미지에 합성하는 방법

 

이미지 합성 결과를 보면 이 세상에 없는 이상한 동물이 나옴

 

그래서 label도 합성한 비율에 따라 새롭게 만들어줘야 한다는 것이 포인트임

 

 

이상한 동물이 나와서 저걸 무슨 개라고 봐야할지 label 정하기가 힘들어

 

그래서 label도 비율에 따라 배분해야한다는 것이 포인트

 

쉬운데 의미있는 수준의 성능향상을 보이면서

 

label도 배분하니까 70%가 어디인지, 30%가 어디인지 물체의 위치도 정교하게 캐치하여 학습한다는 것이 특징

 

---------------------------------------------------------------------------------------------------------------------------------

 

7. perspective transform

 

투영변환으로 직접 찍은 사진에서 원하는 부분만 평면으로 가져오는 변환

 

 

초록색 네모 부분만 보고싶을때 A,B,C,D를 구해서 평면으로 대응시키면 된다

 

근데 이렇게 보니까 affine transform이랑 무슨 차이인지 모르겠는데

 

찾아보니까 perspective transform이 더 큰 개념이다.. 근데 구분하는 것은 큰 의미는 없다고 한다

 

 

transform의 일종.. 이것들을 모두 통틀어 perspective transform으로 보면 될 것 같다

 

 

TAGS.

Comments