제가 머신 비전 회사에서 학습을 하면서 가장 큰 고민 중 하나는 데이터 양이 많지 않다는 점이었습니다.
ok이미지에 비해 ng이미지가 현격히 적은 현상이 있었고 그때마다 opencv나 keras를 이용하여 데이터 증강을 했습니다.
이런 불편함을 해결하고자 이번 프로젝트는 PyQt5로 UI를 이용한 데이터 증강 툴을 만들어 보려고 합니다.
이번에는 UI 제작 - 기능 구현 - 실행 파일 배포 과정으로 구현했습니다.
GOAL
- PyQt5를 사용한 UI 제작 및 기능 구현
- keras ImageGenerator와 UI를 연결하고 데이터 증강 구현
- 완성된 프로그램을 exe 파일로 만들어 배포
Data Augmentation
- 학습을 하고 모델의 결과를 좋게 나오게 하는데 어떤 것이 중요한가?라고 물으면 저는 데이터셋이 제일 중요하다고 말할 것 같습니다. 데이터의 양과 질이 모델의 성능을 올리고 오버피팅을 막는 중요한 요소 중 하나라고 답할 것입니다.
학습 데이터를 늘리는 게 물론 가장 좋겠지만 실제 현업에서는 ng이미지의 개수를 늘리기는 쉽지가 않습니다. 새로운 학습 데이터를 구하는 것이 아니라 있던 데이터에서 다양성을 추가한 방법이 Data Augmentation 즉, 데이터 증강입니다.
다시 말해 데이터 증강은 가지고 있는 데이터의 다양한 버전으로 만든 것입니다.
| 데이터 증강 기법
- 사진에 적힌 증강 기법 외에도 다양한 기법들이 있지만 저는 Ui로 만든 파라미터들의 기법들만 사용하기로 했습니다.
ImageDataGenerator 구현
- 위에서 본 데이터 증강을 시켜주는 것이 keras의 ImageDataGenerator라는 메서드입니다. 이 메서드를 사용하여 어떻게 구현했는지에 대한 간단한 자료를 만들었습니다.
| 구현
1. 원본 이미지를 불러오고 이미지에 대한 전처리를 실행합니다. load_img, img_to_array는 keras에서 제공하는 메서드이며 np.expand_dims로 맨 앞 차원에 1을 추가하여 4차원의 이미지 shape를 만들게 됩니다. 4차원의 이미지를 만드는 이유는 뒤에 나오는 flow에서 input 이미지의 차원을 4차원으로 받기 때문입니다.
2. ImageDataGenerator 메서드에서 데이터 증강에서 사용할 증강 기법들을 설정하고 ImageDataGenerator 객체를 생성합니다.
3. ImageDatagenerator의 flow 메서드로 전처리된 image를 input으로 하며 저장 경로, 저장될 파일 이름과 저장되는 파일의 포맷을 결정하고 배치 사이즈를 1로 설정하는데 이는 1장의 사진을 데이터 증강하기 때문입니다. flow 메서드는 NumpyArrayIterator를 반환하는 것을 이용하여 count 변수를 두어 반복 후 빠져나올 수 있도록 구현했습니다.
PyQt5 Ui와 연결한 ImageDataGenerator 결과
- ImageDataGenerator의 동작 과정을 정리해봤습니다. 이제는 앞서 만든 Ui와 ImageDataGenerator를 연결하여 결과를 확인하겠습니다.
| 파라미터 설정
| Generator Start 버튼 클릭 시 결과
- Ui와 잘 연결되어 구현되는 것을 확인할 수 있고 Ui의 파라미터 값이 ImageDataGenerator의 인자로 전달이 잘 되는 것을 확인했습니다. 이렇게 증강된 이미지로 모델 데이터에 사용한다면 정확도가 올라가며 오버피팅을 억제하는데 도움이 될 것이라 생각합니다.
- 다음 글은 결과물을 exe 파일로 배포하는 과정을 정리하여 포스팅하겠습니다.
질문이 있으시면 댓글로 남겨주세요~
감사합니다 :)
'Project' 카테고리의 다른 글
PyQt5를 이용한 Data Augmentation Tool 구현 - 1 (UI 구현) (0) | 2022.07.05 |
---|---|
남녀 얼굴을 분류하는 딥러닝 모델 구현 - 4 (개선) (2) | 2021.08.25 |
남녀 얼굴을 분류하는 딥러닝 모델 구현 - 3 (개선) (0) | 2021.08.24 |
남녀 얼굴을 분류하는 딥러닝 모델 구현 - 2 (전처리 및 모델링) (9) | 2021.08.23 |
남녀 얼굴을 분류하는 딥러닝 모델 구현 - 1 (데이터 셋 만들기) (2) | 2021.08.20 |