Data Augmentation

차보경·2022년 7월 11일
1

TIL

목록 보기
4/37
post-thumbnail
post-custom-banner

Computer Vision(앞으로 CV로 통칭)에서는 데이터의 부족이 많이 발생한다. 머신러닝의 모든 분야에서 그런 것은 아니지만 CV에선 빈번하다. 그래서 Data augmentation은 큰 도움이 됩니다.

데이터가 많아진다는 것은 overfitting을 줄일 수 있다는 것을 의미합니다. 또한 우리가 가지고 있는 데이터셋이 실제 상황에서의 입력값과 다를 경우, augmentation을 통해서 실제 입력값과 비슷한 데이터 분포를 만들어 낼 수 있습니다. 예를 들어, 우리가 학습한 데이터는 노이즈가 많이 없는 사진이지만 테스트 이미지는 다양한 노이즈가 있는 경우 테스트에서 좋은 성능을 내기 위해서는 이러한 노이즈의 분포를 예측하고 학습 데이터에 노이즈를 삽입해 모델이 이런 노이즈에 잘 대응할 수 있도록 해야 합니다. 이렇게 data augmentation은 데이터를 늘릴 뿐만 아니라 모델이 실제 테스트 환경에서 잘 동작할 수 있도록 도와주기도 합니다.

Albumentations is a Python library for image augmentation. Image augmentation is used in deep learning and computer vision tasks to increase the quality of trained models. The purpose of image augmentation is to create new training samples from the existing data.

Here is an example of how you can apply some augmentations from Albumentations to create new images from the original one:

  1. common augmentation method
  • mirroring. 대칭역시도 고양이임. 좋은 데이터 확대기술이 됨.
  • Random Cropping -> 하지만 너무 작은 부분을 하게되면 고양이같아 보이지 않지만 학습을 해버림. 무작위로 잘라낸 이미지가 꽤 큰 부분을 차지하기 때문
  • 이론적으론 rotation, shearing, localwarping 등을 사용하지만, 실제로 많이 사용되진 않음. 복잡하기 때문?
  1. Color shifting
  • RGB체널에 서로 다른 수를 더해주는 것.
    ex) +20,-20,+20하면 빨강과 파랑을 더해줌으로 보라색 느낌이 강하게 남. 실제로는 작은 변화만 줌.
  • 조명의 색에 의해서 보이이는게 다를 순 있지만 본질이 바뀌진 않기 때문. 학습 알고리즘이 색의 변화에 더 잘 반응할 수 있도록 도와줌

2-1. Advanced

  • RGB 표본을 만드는 방법은 많음. 색변형을 하는 방법 중 하나가 PCA라는 알고리즘을 사용하는 것. 주성분 분석이라고 ML때 언급함.
  • ML-class.org
  • 세부적인 내용은 Alex Net 논문에 기재되어 있음
  • 종종 PCA color augmentaion이라고도함
  • 대략적인 내ㅇ용으론, 만약 그림의 주된 색이 보라색이라고 한다면 빨강과 파랑이 주이고 초록색은 조금만 있다면 PCA color augmentaion은 빨강과 파랑에 큰 값을 더해주고 초록색에는 상대적으로 적게줌으로 전체적인 색조를 유지함.
  • Alex Net이나 PCA color augmentaion 오픈 소스를 찾아봐도 좋음
  1. Implementing distortions during training
  • 하드디스크에 있는 데이터를 CPU thread를 쓰면 계속 이미지를 불러오면서 하드디스크로부터 오는 이미지의 stream이 생긴다. cPU 스레드를 이용해 변형을 구현한다. (distortion) 무작위 크로핑, 색변환, 미러링 등. 그래서 각각의 이미지는 변형된 형태로 남는다. 그래서 CPU Tread는 데이터를 로드하면서 변형이 필요할 때 구현함으로 mini batch를 구현하게 됨. 데이터는 또 계속해서 다른 프로세스에 전달되어 CPU나 GPU에서 training을 진행함.
  • 이런 CPU thread를 하나로 하거나 multi로 하면서 데이터를 불러오고 변형을 해주면서 다음 프로세스로 넘겨학습을 진행시키고, 학습과 데이터 로딩을 동시에 실행될수도있음.

데이터 증식은 flip, shear, translation, rotation 등의 방법을 제공하여 train set을 부풀리게 해주고, 우리가 구성한 모델을 더욱 견고하게 만들어주는 역할을 합니다. (모델이 한번도 보지 않은 이미지를 계속해서 보게함으로써 최종적으로 general한 모델로 만들어지니까요)

https://inhovation97.tistory.com/32

PIL 사용 ex

  • tf.keras.preprocessing.image.img_to_array(img) : image를 array로 바꿔줌
  • tf.keras.preprocessing.image.array_to_img(img_data) : image dater를 img로 바꿔줌


profile
차보의 Data Engineer 도전기♥ (근데 기록을 곁들인)
post-custom-banner

0개의 댓글