Doby's Lab

Image Augmentation이란? 본문

AI/Concepts

Image Augmentation이란?

도비(Doby) 2022. 12. 29. 23:40

Image Augmentation

Image Augmentation(이미지 증강)이란 Overfitting을 막는 방법 중 하나입니다.

 

더 디테일하게 말하자면 데이터셋의 크기가 작으면 train_set에 대해 모델이 학습할 수 있는 게 적습니다. 그렇기에 모델이 작은 train_set에 대해 최적화되게 학습을 하면서 Overfitting이 나는 현상에 대한 해결책입니다.

 

즉, Overfitting이 나는 이유가 '데이터셋의 크기가 작아서 그렇구나'라는 의심을 가지고서 Image Augmentation을 사용해야겠다는 판단을 할 수 있는 게 중요하다고 시작하기 전에 앞서 말하고 싶습니다. Overfitting이 일어나는 이유와 이를 대처하는 방법은 항상 여러 가지가 있으니까요. (Regularization, Dropout, Batch Normalization 등)

 

이미지를 증강시키는 법은 '기존의 이미지에 대해 변형을 주는 것'이 전부입니다.

Cropping, Reverse, Rotation 등 이미지에 여러 변형을 주어 모델이 받아들이기에 새로운 이미지처럼 만드는 것입니다.

이미지에 변형을 줌으로써 모델이 이미지를 처리할 때, Conv Layers에 의해 여러 Convolution을 거치면서 나오는 결괏값이 다를 것입니다. 그러한 결괏값들을 특정 Label임을 학습하여 더 다양한 이미지에 대응할 수 있는 모델을 만드는 것입니다.

 

보편적으로 ImageDataGenerator를 사용하지만 현재 진행 중인 프로젝트에서는 Numpy와 cv2에서 제공하는 함수를 활용하여 기본적인 Augmentation(좌우반전, +45도 기울이기, -45도 기울이기)만 해주었습니다.

 

Image Augmentation

 

(나중에 프로젝트가 끝난 후에 ImageDataGenerator에 대해 공부한 후, 블로그에 정리하여 이 글에 링크를 걸겠습니다.)

 

Image Augmentation Code

# Image Augmentation
cX, cY = 112, 112
IMG_SIZE = 224
for i, img in enumerate(train_set):
    img_crop = crop_center(img)

    # Gray Scaling -> 메모리 줄이기 위한 목적을 사용
    img_gray = cv2.cvtColor(img_crop, cv2.COLOR_BGR2GRAY)

    train_scaled.append(img_gray)
    # reverse left and right
    img_crop_rot90 = np.rot90(img_gray, k=2)
    img_crop_flip = np.flipud(img_crop_rot90)

    train_scaled.append(img_crop_flip)
    # right 45 Degree
    rot_r_45= cv2.getRotationMatrix2D((cX, cY), 45, 1.0)
    img_r_45 = cv2.warpAffine(img_gray, rot_r_45, (IMG_SIZE, IMG_SIZE))

    train_scaled.append(img_r_45)
    # left 45 Degree
    rot_l_45= cv2.getRotationMatrix2D((cX, cY), -45, 1.0)
    img_l_45 = cv2.warpAffine(img_gray, rot_l_45, (IMG_SIZE, IMG_SIZE))
    
    train_scaled.append(img_l_45)

 

즉, Image Augmentation은 Overfitting이 일어나는 이유가 데이터셋의 사이즈가 작아서 그렇다는 판단과 어느 정도까지만 늘려주는 게 적당하겠다는 2가지 판단에 의해 잘 다루어야 하는 기술입니다.

 

또한, 증강 기법에 대해 극히 일부만 다루었습니다. 이번 글에서는 간략하게 증강이 무엇인지, 어떤 역할을 하는지만 다루려 했기에 ImageDataGenerator를 정리하면서 기회가 된다면 여러 증강에 대해서도 소개해보겠습니다.


Reference

https://blog.naver.com/PostView.naver?blogId=beyondlegend&logNo=222339973845&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=true&from=search 

 

Image Data Augmentation (이미지 데이터 증대)

  오늘은 이미지 데이터를 증대시켜서 CNN 성능을 높이는 Image Data Augmentation에 대해...

blog.naver.com

https://ysyblog.tistory.com/152

 

[Deep Learning][딥러닝] CNN Image Augmentation(이미지 증식)

적은 datasets에 CNN 학습하는 경우 Data의 수가 많지 않을 때 CNN을 통한 모형 학습이 어려울 수 있음 딥러닝은 많은 수의 데이터를 통해 feature engineering 과정 없이 feature를 찾을 수 있는데 있음 하지

ysyblog.tistory.com

https://lcyking.tistory.com/m/77

 

[딥러닝] 데이터 증강(Data Augmentation)

데이터 증강(Data Augmentation)이해 CNN 모델의 성능을 높이고 오버피팅을 극복할 수 있는 가장 좋은 방법은 다양한 유형의 학습 이미지 데이터 양을 늘리는 것입니다. 하지만 이미지 데이터의 경우

lcyking.tistory.com

Augmentation using Numpy, cv2 Reference

https://www.kaggle.com/code/ichigoku/image-augmentation-using-numpy

 

Image Augmentation using Numpy

Explore and run machine learning code with Kaggle Notebooks | Using data from [Private Datasource]

www.kaggle.com

https://yunwoong.tistory.com/125

 

[ OpenCV ] Basic 4 - 이미지 회전 (Rotate)

Image Rotate 이미지를 특정 각도로 회전하는 방법에 대해 알아보겠습니다. 이미지를 회전할 때에는 회전할 지점을 지정해야 합니다. 대부분의 경우는 이미지의 중심을 기준으로 회전을 하지만 임

yunwoong.tistory.com

 

728x90