Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

잡동사니 블로그

[논문 읽기] CutMix(2019) 본문

공부용

[논문 읽기] CutMix(2019)

코딩부대찌개 2023. 7. 18. 21:50

CNN에서 성능을 향상시키기 위해 Regional dropout이 제안되었다. 그러나 Regional dropout는 훈련 이미지에서 픽셀을 제거하기 때문에  훈련 중 정보 손실과 비효율로 이어지게 됨. 그렇기에 훈련 이미지에서 일부를 다른 이미로부터 채워넣는 CutMix 기법이 제안 되었으며, 이는 모델이 물체의 변별력이 떨어지는 부분까지 집중하도록 유도함.

 

https://arxiv.org/pdf/1905.04899.pdf (arxiv.org) 

 

Cutout


https://arxiv.org/pdf/1708.04552v2.pd

컷아웃(Cutout)은 훈련 중에 입력의 정사각형 영역을 무작위로 마스킹하는 이미지 증강 및 정규화 기술.

 

Mixup


import numpy as np
import cv2
import matplotlib.pyplot as plt
def mixup(image1, label1, image2, label2, alpha):
    mixed_image = alpha * image1 + (1 - alpha) * image2
    mixed_label = alpha * label1 + (1 - alpha) * label2

    return mixed_image, mixed_label
image1 = cv2.imread('/content/test.jpg')
label1 = 0
image2 = cv2.imread('/content/cat.jpg')
label2 = 1
alpha = 0.3
IMAGE_SIZE = (256, 256)
image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2RGB)
image1 = cv2.resize(image1, IMAGE_SIZE, interpolation=cv2.INTER_AREA)
image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2RGB)
image2 = cv2.resize(image2, IMAGE_SIZE, interpolation=cv2.INTER_AREA)
mixed_image, mixed_label = mixup(image1, label1, image2, label2, alpha)
mixed_image1 = mixed_image.astype(np.float32) / 255.0
plt.imshow(mixed_image1)
plt.title(f'dog : {1-mixed_label:.2f}, cat : {mixed_label:.2f}')
plt.show()

httpsL//arxiv.org/pdf/1710.09412.pdf

Mixup은 훈련 데이터에서 두개의 이미지와 그에 해당하는 label을 선택하여 결합한다, Mixup은 간단해서 직접구현 해봤는데, 예시로 위를 살펴보면 개=[1,0] , 고양이 = [0.1] 이며 [0.3,0.7] 형태로 label이 변함.

 

다시 CutMix로 돌아와서 CutMix의 수식은 이렇다.

1을 기준으로 섞인 비율 만큼 label이 결정된다. 즉 0.3 만큼 섞이게 된다면 [0.7,0.3]이 될 것.

우선 CAM(CAM - Class Activation Map)은 CNN에서 사용되는 시각화 기법 중 하나로 주로 이미지 분류 문제에서 딥러닝 모델이 특정 클래스를 인식하는 데 어떤 부분을 주로 활성화하는지 시각적으로 이해하기 위해 사용됨.

CAM으로 시각화를 하였을 때 Mixup의 경우 픽셀을 최대한 활용하지만 약간 부자연스러운 데이터 또한 활용되기에 모델에 혼란을 줄 수 있으며 Cutout은 변별력이 상대적으로 떨어지는 (ex:다리, 배) 등의 데이터도 활용하지만 사용하지 않는 픽셀로 인해 비효율적입니다. 즉 CutMix는 두가지 증강 기법의 장점을 활용한 기법이라고 볼 수 있음.

CutMix 기법을 사용했을 때와 안 했을 때를 CIFAR100, ImageNet 비교한 그래프에서 일반적으로 과적합이 일어난 것에 비해 CutMix를 사용한 모델은 꾸준히 학습되는 것을 알 수 있음. 뿐만 아니라 이미지넷 분류에서 ResNet101과 같은 깊은 모델에서도 CutMix를 사용한 모델의 성능이 가장 좋은것으로 나타났음.

 

결론 : CNN에서 CutMix는 구현이 쉬우며 놀라울 정도로 효과적이였으며,  ResNet-50 및 ResNet101 모델, CIFAR-10 데이터셋과 같이 다양한 곳에서도 성능 증가를 이끌어 낼 수 있었음. 실제로 최근 캐글 같은 곳에서 많이 쓰이는 기법이라고 함.

 

느낀점 : 처음으로 논문을 읽으면서 정리했는데 어렵다. 예전부터 관심 있었던 논문이라 이것저것 찾아보면서 직접 구현도 해보았고, 생각보다 재밌음. 앞으로 종종 정리할 예정.

 

 

'공부용' 카테고리의 다른 글

Yolov5 커스텀 데이터 학습 Object detection  (0) 2023.08.20
K-nearest neighbor(KNN)  (0) 2023.08.12
MediaPipe Pose 사용  (0) 2023.08.09
.gitignore 자동생성  (0) 2023.06.12
[CS231n] 2장 Image Classification  (0) 2023.02.10