Notice
Recent Posts
Recent Comments
Link
«   2024/06   »
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
관리 메뉴

mignon의 CS학습

YOLOv5 Data Augmentation 본문

캡스톤디자인프로젝트

YOLOv5 Data Augmentation

mignon.e 2021. 11. 6. 17:03

현재 우리 팀은 프로젝트에 YOLOv5를 사용 중이다.

약 6000장 정도의 image를 labeling 후 학습시켰는데, YOLOv5는 overfitting 직전에 자동으로 학습을 멈추는 특성을 가지고 있어서 학습을 더 진행하기 위해서는 추가로 데이터셋이 더 필요한 상황이었다.

따라서, 우리 팀은 정확도를 더 올리고자 추가적인 학습을 진행하기 위해 augmentation을 진행하였다.

 

우선 Data Augmentation에 대하여 알아보자.

 

Data Augmentation이란, 한국어로 데이터 증강으로 YOLO 인식 정확도를 높이는 기술이다.

이미지 회전, 노이즈 추가 등의 무작위 변환을 적용하여 원본 이미지를 살짝씩 변형시킴으로써 훈련 데이터셋의 다양성을 증가시켜 새로운 데이터 수집 없이 데이터의 양을 증가시킬 수 있으며, overfitting을 줄이는데에도 도움이 된다.

Neural network가 사소한 차이만을 가진 이미지들도 서로 다른 이미지로 구분하는 특성을 이용한 것이다.

 

Image Augmentation에도 종류가 다양한데, 나는 그 중 noise, blur, exposure, saturation을 사용했다.

 

  • Noise : Camera artifact에 대한 resilence를 높인다.

원본 이미지 → 이미지에 Noise를 추가한 결과

  • Blur : Camera focus에 대한 resilence를 높인다.

원본 이미지 → 이미지에 Blur 처리한 결과

  • Exposure : Camera setting 및 조명에 대한 resilence를 높인다.

원본 이미지 → 이미지에 Exposure 처리한 결과

  • Saturation : 이미지 내 color vibrancy에 대한 적응도를 높인다.

원본 이미지 → 이미지에 Saturation 처리한 결과

 

이제 code로 augmentation하는 방법을 알아보자.

YOLOv5의 augmentation 방법으로 augment_hsv함수가 있다.

다음 github를 참고하였다.

https://github.com/ultralytics/yolov5/pull/3462

 

Faster HSV augmentation by developer0hye · Pull Request #3462 · ultralytics/yolov5

remove datatype conversion process that can be skipped. import random import numpy as np import cv2 import time def anchor_augment_hsv(img, hgain=0.5, sgain=0.5, vgain=0.5): r = np.random.unif...

github.com

 

def augment_hsv(img, hgain=0.5, sgain=0.5, vgain=0.5): r = np.random.uniform(-1, 1, 3) * [hgain, sgain, vgain] + 1 # random gains hue, sat, val = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV)) dtype = img.dtype # uint8 x = np.arange(0, 256, dtype=np.int16) lut_hue = ((x * r[0]) % 180).astype(dtype) lut_sat = np.clip(x * r[1], 0, 255).astype(dtype) lut_val = np.clip(x * r[2], 0, 255).astype(dtype) img_hsv = cv2.merge((cv2.LUT(hue, lut_hue), cv2.LUT(sat, lut_sat), cv2.LUT(val, lut_val))).astype(dtype) cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR, dst=img) # no return needed

 

위의 함수로, 원하는 수치만큼 data의 컬러와 명도를 조정해 augmentation을 진행할 수 있다.


 + 참고로, Roboflow에서 augmentation 기능을 이용할 수 있다.

Roblflow에서 학습시킬 것은 아니고, data augmentation만 진행할 것이기 때문에, 

원본 이미지들과 라벨들을 train 100%로 업로드 및 augmentation 진행 후 이미지들과 라벨들을 다운로드 받으면 된다. 

 

 

Comments