제가 머신 비전 회사에서 학습을 하면서 가장 큰 고민 중 하나는 데이터 양이 많지 않다는 점이었습니다.
ok이미지에 비해 ng이미지가 현격히 적은 현상이 있었고 그때마다 opencv나 keras를 이용하여 데이터 증강을 했습니다.
이런 불편함을 해결하고자 이번 프로젝트는 PyQt5로 UI를 이용한 데이터 증강 툴을 만들어 보려고 합니다.
이번에는 UI 제작 - 기능 구현 - 실행 파일 배포 과정으로 구현했습니다.
GOAL
- PyQt5를 사용한 UI 제작 및 기능 구현
- keras ImageGenerator와 UI를 연결하고 데이터 증강 구현
- 완성된 프로그램을 exe 파일로 만들어 배포
PyQt5
- PyQt5는 Qt를 파이썬 버전의 프레임워크입니다. Python에는 기본으로 내장되어 있는 tkinter라는 GUI가 있지만 하드 코딩으로 UI를 제작해야 하기 때문에 드래그 앤 드롭으로 UI를 제작할 수 있는 PyQt5를 선택했습니다.
- PyQt5의 공식 Document를 참고하였으며 Qt Designer를 사용하여 제작했습니다.
| UI 구성
- 전체적인 UI 구성입니다. 최대한 직관적으로 만드려고 노력했으며 데이터 증강에 필요한 파라미터 중 제가 사용했을 때 효과적인 파라미터들로 구성했습니다.
| Image Load
- Image Load 버튼 클릭 시 다이얼로그 창이 떠 이미지를 선택할 수 있게 구현했습니다.
| Image Load 결과
- 이미지 사이즈에 상관없이 크기가 맞춰지도록 구현했습니다. 내부적으로 load 된 이미지의 주소를 가지고 있으며 추후 데이터 증강에 사용하게 됩니다.
| Parameter Control
- 데이터 증강에 필요한 파라미터들을 QSilder를 통해 구현했으며 동적으로 값을 확인할 수 있게 했습니다.
- Horizontal Flip은 True와 False로 값을 받기 때문에 QComboBox를 이용해 On/Off 할 수 있게 구현했으며 Count는 데이터 증강으로 만들 이미지의 개수를 의미합니다.
- Save Path는 저장 경로로 결과 이미지가 저장될 위치를 설정하며 기본 값을 C:/로 만들게 하였습니다.
| 구현
- Parameter 조정
- Save Path 설정
| Config Load & Save, Parameter Change
- Config 파일을 저장하고 불러오기 기능을 넣었는데 이 기능을 넣은 이유는 사용 중 데이터 증강에 가장 알맞다고 생각하는 parameter들을 매번 설정하는 것이 아닌 저장하고 불러온다면 조금 더 쉽게 사용할 수 있을 것이라 생각했기 때문입니다. txt 파일로 저장되며 각각의 값들을 저장하고 불러옵니다.
- Change 버튼은 config창의 값을 앞서 설정한 parameter 값으로 바꾸는 기능으로 구현했습니다.
| 구현
- Change 버튼 클릭 시 설정한 값들이 위쪽 property gird에서 변경됩니다.
- Save 버튼 클릭 시 설정한 경로에 txt 파일로 저장됩니다.
- Load 버튼 클릭 시 txt 파일을 불러와 해당 txt 파일 설정에 맞게 property gird에 표시합니다.
- 이렇게 데이터 증강 UI를 만들고 기능들을 구현했습니다.
시간이 가장 오래 걸린 것은 아무래도 예외처리에 대한 부분이었습니다. Image Load를 하는데 이미지를 선택하지 않았을 때나 Config Save & Load를 할 때 필요한 예외처리 쪽에 시간이 많이 걸렸고 힘들었습니다.
- Generator Start 버튼을 눌렀을 때 데이터 증강이 되도록 만든 것을 다음 포스팅에서 볼 수 있습니다 :)
질문이 있으시면 댓글로 남겨주세요~~!
감사합니다 :)
'Project' 카테고리의 다른 글
PyQt5를 이용한 Data Augmentation Tool 구현 - 2 (증강 기능 구현) (0) | 2022.07.10 |
---|---|
남녀 얼굴을 분류하는 딥러닝 모델 구현 - 4 (개선) (2) | 2021.08.25 |
남녀 얼굴을 분류하는 딥러닝 모델 구현 - 3 (개선) (0) | 2021.08.24 |
남녀 얼굴을 분류하는 딥러닝 모델 구현 - 2 (전처리 및 모델링) (9) | 2021.08.23 |
남녀 얼굴을 분류하는 딥러닝 모델 구현 - 1 (데이터 셋 만들기) (2) | 2021.08.20 |