안녕하세요 오늘은 Albumentations 라이브러리를 이용한 Data Augmentation 실험을 해보겠습니다
저는 아래와 같은 설정으로 실험을 진행하였습니다.
- Object Detection
- Model : EfficientDet-D2
- Epochs : 100
해당 모델은 github.com/rwightman/efficientdet-pytorch 깃허브를 참조해 fine-tuning을 적용시켰습니다.
먼저 데이터로 전투기 1000장을 크롤링하여,
1) 100장 / 900장
2) 10 / 990 장
으로 두개의 폴더를 준비하였습니다.
(이미지 크기는 제각각이지만, 블로그 포스팅을 위하여 사이즈를 변경하였습니다)
그리고 데이터를 증강시켜봐야겠죠??
github.com/albumentations-team/albumentations 깃허브 홈페이지에 들어가서 설치 및 사용법에 대해 숙지합니다.
저는 labelImg 툴을 이용해서 결과가 xml 파일로 나오기 때문에 xml 파일에서 박스 정보를 추출하였습니다.
아래의 코드를 통해 transform변환시킬 때, bboxes_params옵션을 주면 박스에 대해서도 동일하게 변환이 됩니다.
def transform_data(img, bboxes):
transform = A.Compose([
A.HorizontalFlip(p=0.5),
A.VerticalFlip(p=0.5),
A.RandomBrightnessContrast(p=0.2),
A.ShiftScaleRotate(p=0.5),
A.RGBShift(r_shift_limit=30, g_shift_limit=30, b_shift_limit=30, p=0.3),
A.GaussianBlur(p=0.3),
A.CLAHE(p=0.3),
A.GaussNoise(p=0.3),
A.Downscale(p=0.3),
# A.Sharpen(p=0.3),
A.RandomGamma(p=0.2)
],
bbox_params=A.BboxParams(format='pascal_voc', min_visibility=0.5)
)
transformed = transform(image=img, bboxes=bboxes)
transformed_image = transformed['image']
transformed_bboxes = transformed['bboxes']
return transformed_image, transformed_bboxes
이미지를 변환하여 생긴 결과를 확인해봤습니다.
대표적으로 2개 이미지에 대해서 확인해봤는데, 잘 진행된 것을 볼 수 있습니다.
Augmentation이 잘 되는 것은 확인해봤으니
학습을 진행시켜봤습니다.
100장에 대해서는 100(x1), 1000(x10), 3000(x30)으로 테스트해본 결과는 다음과 같습니다.
- x1 (100장) : 92.35 %
- x10(1000장) :95.16 %
- x30(3000장) : 95.64 %
10장에 대해서 실험은 10(x1), 100(x10), 1000(x100)으로 진행했을 때, 실험 결과는 다음과 같습니다.
- x1 (10장) : 15.85 %
- x10(100장) :12.26 %
- x100(1000장) : 21.12 %
먼저 성능을 보면 10%, 90% 차이는 매우 커보이는데 성능차이가 확 나는 이유는
1000장의 이미지 중에는 비디오를 프레임으로 분할해서 라벨링한 데이터가 존재하는데
랜덤한 100개를 고르는 과정에 비디오 데이터가 포함되서 그런것 같습니다.
실험하던 중에 느낀 점은
1. 데이터 수가 매우 적다보니 많을 때에 비해 정확도가 올라가는 속도가 느렸고,
2. Augmentation 전/후로 성능이 "확" 늘어나진 않았습니다.
결론은 충분하게 다양한 데이터를 가지고 학습을 시키는 것이 중요하다는 생각입니다.
읽어주셔서 감사합니다.
참고
[1] : github.com/albumentations-team/albumentations
[2] : github.com/rwightman/efficientdet-pytorch
'Programming Language > Python' 카테고리의 다른 글
[python] joblib.load() 에러 (0) | 2021.05.12 |
---|---|
[Python] 사전(dict)형 정렬하기 (0) | 2021.03.21 |
[Python] GIL 관련 OS, 컴퓨터구조가 중요한 이유 (0) | 2021.02.18 |
[Python] Multiprocessing으로 속도 개선해보기 (0) | 2021.02.01 |
역세권 청년주택 자동 이메일 알람 설정 (0) | 2021.01.10 |