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

1. overview

 

기존 데이터에 변화를 가해 추가로 데이터를 확보하는 방법

 

데이터가 적거나 imbalance된 상황에서 효과적으로 활용가능

 

적절한 변환을 하더라도 이미지 데이터의 불변하는 성질을 모델에 전달하여 robust하게 만든다

 

예를 들어 강아지 이미지는 회전을 하더라도 늘리더라도 일부분만 보이더라도 여전히 강아지 이미지임

 

사자 이미지 augmentation한 그림

 

 

어떻게 변환을 하더라도 이미지가 나타내는것은 사자임에는 변함없다

 

그러나 데이터 종류마다 augmentation의 종류나 특성이 달라질 것이다.

 

정형데이터는 정형데이터만의 augmentation이 있고

 

음성데이터는 음성데이터만의 augmentation이 있고

 

이미지 데이터는 이미지 데이터만의 augmenation이 있어

 

2. 경량화 관점에서 augmentation이 필요한가?

 

직접적으로 경량화와 연결되지는 않지만 경험적으로는 모델의 성능 향상을 위해 필수적으로 적용해야함

 

augmentation도 일종의 parameter이므로 AutoML의 search space에 포함하여 최적의 augmentation을 찾을 수 있다

 

 

3. object detection에서 주로 사용하는 augmentation

 

crop, rotation, flip, Hue, saturation 등등

 

mixup, 2개의 이미지를 일정한 비율로 섞어 하나의 이미지로 만든다

 

cutmix, 이미지의 일부 구간을 잘라 다른 이미지를 넣어 새로운 이미지를 만든다

 

mosaic, object detection에서 굉장히 좋은 성능을 발휘한다고 알려짐

 

하나의 점을 선정해 그것을 기준으로 A,B,C,D 4개의 면에 다른 이미지를 넣어 하나로 만드는 기법

 

https://leedakyeong.tistory.com/entry/Python-Object-Detection-Mosaic-Augmentation-YOLO-v5

 

[Python] Object Detection Mosaic Augmentation :: YOLO v5

Mosaic 이란? Mosaic 기법은 Image Augmentation 기법 중 하나로, 4장의 이미지를 한 장으로 만드는 기법이다. 예를 들면, 다음 4장의 이미지를 다음과 같이 한 장으로 만든다. 각 이미지의 사이즈는 random하

leedakyeong.tistory.com

 

 

다음 4장 이미지

 

 

 

 

 

 

 

 

 

다음과 같이 1장으로 합체

 

각 이미지 사이즈는 랜덤하게 주어서 어떤 이미지가 아예 포함되지 않을 수도 있음

 

1장의 이미지로 4장의 이미지를 학습하는 효과

 

작은 물체가 많아져서 작은 물체를 detect하는 역량을 향상시킴

 

 

 

 

blur는 이미지를 흐릿하게 만드는 방법

 

object detection에 주로 쓰이는 augmentation 기법 적용한 예시

 

 

 

YoLoV4에서 적용한 augmentation에 따라 1%정도 성능 향상을 보였다고 함

 

 

 

현실적으로는 benchmark 데이터셋같이 정제되어 있지는 않아서 경험적으로는 훨씬 큰 효과를 보여준다고함

 

4. image classification의 대표적인 augmentation

 

강아지 하나는 augmentation을 적절하게 적용해도 강아지라는 것을 사람들은 다 안다

 

model도 이렇게 augmentation을 해서 변환된 이미지를 보더라도 강아지라고 인식할 수 있게 불변성을 전달하고 싶은거

 

 

 

1) Shear

 

x축이나 y축으로 이미지를 늘리는 변환

 

[-1,1]에서 random으로 뽑아 factor가 -1 음수면 음의 방향으로 1 양수면 양의 방향으로

 

행렬이 좀 틀린것 같아… 1 0.5 0 0 1 0같은데 1 0.5 0 0 1 1이렇게 되어있는데?

 

 

2) translate

 

x축이나 y축 방향으로 평행이동하는 변환

 

행렬 원소에서 이동하는 원소를 [-1,1]에서 random하게 뽑아 -1이면 음의 방향으로 1이면 양의 방향으로 이동하는거겠죠?

 

강아지 이미지에서 translateX를 적용한 예시

 

 

3) rotate

 

회전하는 각도에 해당하는 rot이라는 parameter 주면 이미지를 회전시킴

 

rotate를 적용한 예시

 

 

4) contrast

 

밝은 픽셀과 어두운 픽셀의 차이값을 조절하여 변환?

 

factor=0이면 grey image를 주고 factor=1이면 original image를 주고 1보다 크면 color image로 더욱 대비되는 이미지를 주는

 

contrast를 적용한 예시

 

 

5) invert

 

256개의 RGB color pixel을 가지는 이미지라면 255에서 원래 pixel을 뺀 값으로 변환시킨다

 

결과적으로 색이 뒤집어진 이미지가 나옴

 

invert한 이미지 예시

 

 

6) equalize

 

이미지에서 0~255까지 pixel의 빈도수를 histogram으로 나타내고

 

특정 pixel에서 빈도수가 매우 높은 형태의 분포는 색의 대비가 잘 안되는 이미지임

 

누적확률분포함수를 equalize시키면 histogram이 퍼지고 이것을 이미지로 복원하면 색 대비가 분명해짐

 

색이 분명해진것 같은

 

 

7) autocontrast

 

contrast인데 histogram에서 equalize를 써서 자동으로 픽셀 대비를 커지게 해주는

 

parameter없이 자동으로 해준다해서 auto contrast

 

cutoff라는게 있긴한데 여기서 쓰진 않는다

 

autocontrast 예시… 바뀐게 없는데???

 

 

8) solarize

 

특정 threshold를 넘으면 invert를 시키는 변환

 

동그라미 부분같이 변환이 안된 것도 있음

 

 

9) posterize

 

quantization의 일종

 

원래 color channel의 비트수보다 적은 비트수로 이미지를 표현함

 

 

 

비슷한 범위의 색들을 같은 색으로 만들어버리는 quantization의 일종임

 

좁은 범위의 8bit를 넓은 범위의 4bit에 다 채워넣을려면 8bit에서 비슷한 범위의 값들을 4bit쪽에 다른곳에 다 채워넣어야 가능함

 

비슷하게 미세하게 구분된 색깔들을 같게 만들어진 변환된 이미지를 볼 수 있다

 

 

10) Color

 

image의 color balance를 조절해준다고함.. contrast랑 비슷한것 같은디

 

factor=0이면 black and white 이미지를 주고 factor=1이면 original 이미지를 주고 1보다 크면 더 진한 색의 이미지를 주는?

 

Color의 예시

 

 

11) brightness

 

이미지의 밝기를 조절함

 

 

 

 

12) cutout

 

이미지의 일정 영역을 없애버림

 

없애더라도 사람은 label이 변하지 않는다는 것을 알기 때문에 학습을 잘한 network도 이것을 구분하리라 기대함

 

 

 

13) mix of things

 

한 이미지에 한가지 기법만 적용하는 것이 아니라 여러가지 augmentation을 같이 적용해도 상관없다

 

그렇게하면 하나의 이미지에서 무수히 많은 변환된 이미지를 만들어낼 수 있다

 

하나의 데이터에 여러 augmentation을 적용하여 데이터를 늘림

 

 

network 입장에서 전부 다른 이미지로 보이지만 사람은 이게 같은 label이라는 것을 알고 있다

 

학습을 잘 한 network라면 전부 같은 label이라는 것을 알기를 기대함

 

 

TAGS.

Comments