KISTI 과학기술 빅데이터 분석가 양성과정 중 진행한 프로젝트를 바탕으로 작성되었습니다. 1편은 주제 선정부터 이미지 크롤링까지의 내용을 담았습니다.
1. 주제 선정 & 초기 진행
주제 선정을 할 때, 가장 크게 고려했던 점은 우리가 구현이 가능한가? 였습니다. 아무리 좋은 주제라고 해도 구현하기 어렵다면 의미가 없다고 생각했습니다. 저희 조원들은 이제 막 코딩을 배우기 시작한 사람들로 구성되어 있었습니다. 그래서 새로운 것을 공부해서 구현하기보다는 교육과정 속에서 배운 것들을 잘 적용해보자는 방향을 잡게 되었습니다. 그렇게 선정하게 된 주제는 "시각장애인을 위한 캔 이미지 분류 모델"로 선정하게 되었습니다. 선정하게 된 이유는 아래와 같습니다.
- 시각장애인들은 오프라인에서 직접 음료를 구매할 때 원하는 음료를 고르기 어렵다. 음료나 과자, 컵라면 등에 시각장애인들을 위한 점자가 세분화되어 있지 않다.
- 이 문제를 우리가 배운 이미지 분류 기술을 이용해서 안내해주면 시각장애인들도 원하는 음료수를 구매할 수 있을 거라고 생각했습니다.
주제 선정 후 프로젝트를 진행하기 위한 큰 그림을 그려봤습니다. 이때까지만 해도 저희 생각대로 잘 흘러갈 것이라고 생각했습니다...
- 이미지 수집
- Q. 클래스는 몇 개로 구성할까? A. 10개로 진행해보고 시간적 여유가 있다면 추가해보자.
- Q. 클래스는 어떻게 선정할까? A. 일단 주변에서 쉽게 찾아볼 수 있는 음료로 진행하자. 색상이 비슷한 것도 구분할 수 있는지 확인해보자.
- Q. 어떤 방법으로 할 것인가? A. Google 확장 프로그램 Fatkun을 활용하자. 이미지 크롤링 프로그램을 만들어보자.
- Q. 이미지 수집의 기준은 어떻게 잡을 것인가? A. 해당 라벨의 캔만 모아보자
- 이미지 전처리
- Q. 중복된 이미지에 대해 어떻게 처리할 것인가? A. 동일한 이미지는 제거하자.
- Q. 이미지 사이즈는? A. 224x224 or 299x299
- Q. 이미지 부족에 대한 대책? A. 최대한 크롤링하고 부족할 때에는 Augmentation을 적용하자.
- 모델링
- Q. 어떤 라이브러리를 활용할까? A. 수업시간에 배운 ImageAI를 활용해보자.
- Q. 어떤 모델을 활용할까? A. 모두 적용시켜보고 적절한 모델을 찾아보자.
- UI 구현
- Q. 모바일로 구성할 때 어떤 프로그램으로 구성할 것인가? A. Android studio
- Q. 다른 방법으로 구성한다면? A. 아두이노 같은 것을 활용해보자.
2. 박사님과의 첫 멘토링
주제 선정을 하고 대략적인 틀을 짠 상태로 박사님과 첫 멘토링을 진행하게 되었습니다. 불행하게도 조원 중 1명이 취업이 되어 프로젝트 진행이 어렵게 되었습니다. 4명이서 프로젝트를 진행해야 하기에 꽤 어렵겠다는 생각을 하게 되었습니다. 그렇게 박사님과 멘토링이 시작되었고, 박사님께서 주제를 들으시고 뱉으신 첫마디는 "이거 금방 하겠다! 한 2주면 할 수 있겠는데?"였습니다. 분명 저희들끼리 생각했을 때에는 6주라는 시간이 적당할 것이라고 생각했지만 박사님의 눈에서는 금방 구현이 가능한 프로젝트라고 생각하셨나 봅니다. 그러신 뒤 저희에게 여러 가지 숙제를 주셨습니다.
- 6주 간 loadmap을 작성해보기
- 이 주제를 기반으로 한 비슷한 논문, 어플 등을 확인해보기. 만약에 있다면 어떻게 발전시킬 것인가?
- 주제를 어떻게 구현할 것인지에 대한 설계
그리고 구현에 대해 토의 중 박사님께서 가지고 있는 라즈베리파이 4를 줄 테니 그것으로 구현을 해보라고 하셨습니다. 그렇게 라즈베리파이 4는 처음 만져보는 4명은 떠나가는 조원(전자공학 전공)에게 라즈베리파이에 대한 정보를 최대한 얻어내려고 했습니다. 그렇게 얻은 것은 라즈베리파이 4를 서버로 활용하기 위한 방안에 내용이었습니다.
그렇게 멘토링이 마치게 되었습니다. 일단 라즈베리파이4에 대한 생각은 잠시 접어두고, 어제 그렸던 큰 그림을 수정하였고, 6주 간의 대략적인 로드맵을 작성하였습니다.
3. 이미지 크롤링 (1차 데이터 셋 구성하기)
처음에는 아래에 보이는 클래스 중 데미소다 사과맛 대신 환타 포도맛이 있었습니다. 이미지 수집 과정에서 구하기가 어려운 이미지였습니다. 그래서 데미소다 사과맛으로 대체하기로 했습니다. 저희가 구성한 클래스와 선정 기준은 아래와 같습니다.
- 흔히 접할 수 있는 다양한 음료들을 대상으로 선정
- 색상이 비슷해도 구별할 수 있는지 확인을 위해 파워에이드, 펩시, 포카리스웨트 선정
그렇게 Google 크롬 확장 프로그램으로 얻어낸 이미지는 총 1200장이었지만, 데이터 불균형이 있었습니다.
인기 있는 음료의 경우 300-400장 이상 존재했고, 인기가 없는 2프로나 토레타의 경우 100장도 못 미치게 되었습니다. 하지만, 주어진 데이터들을 가지고 중복을 제거한 뒤 학습을 진행해봤습니다. 예상과 달리 Val_acc가 95%까지 올라가는 것을 확인할 수 있었습니다. 하지만, 데이터가 부족했던 음료들은 인식하지 못하는 현상을 발견하게 되었습니다.
여기서부터 좋은 데이터셋을 만들기 위한 고민들이 시작되었습니다. 좋은 데이터셋을 만들기 위한 이야기는 2편에서 작성하도록 하겠습니다. 다음 편에서 만나요~