프로젝트 진행 순서 (1/2)
- 1. Object Detection 개요 (Overview)
- 2. Custom Image Dataset 만들기 (Annotation)
- 3. Image 데이터 전처리 (Preprocessing)
- 4. Detection 딥러닝 모델 선정 (Modeling)
- 5. 다양한 모델 별 성능 평가 및 시각화 (Evaluation and Visualization)
- 6. 실생활 적용 (Application)
안녕하세요 헬스케어 제품 개발회사 허니컴의 무이메이커스페이스 입니다.
저희는 딥러닝을 접목시킨 제품 개발을 위해 다양한 프로젝트를 수행하고,
이를 활용하여 인공지능을 지닌 다양한 헬스케어 제품을 생산하는데 그 목적이 있습니다.
이번 시간에는 딥러닝을 활용한 객체 인식 프로젝트를 소개하고자 합니다.
목표는 5가지 종류의 Flower Image 를 구분하는 동시에 해당 위치까지 추정해내는 것이고,
Dataset 으로는 Kaggle 에서 제공되는 Flower Recognition Dataset 을 사용하였습니다.
https://www.kaggle.com/alxmamaev/flowers-recognition
Flowers Recognition
This dataset contains labeled 4242 images of flowers.
www.kaggle.com
1. Object Detection 개요 (Overview)
이번주 저희의 목표는 Computer Vision 분야에 속하는 Image 와 관련된 문제입니다.
사진 속에 고양이가 존재하는지 (Classification), 그렇다면 해당 객체는 어디에 존재하는지 (Detection),
어떤 형상으로 존재하는지 (Segmentation) 에 관한 문제들이 존재합니다.
저번주 Classification 에 이어 이번주는 Detection 문제를 풀어볼 것입니다.
Object Detection 을 통해 컴퓨터는 주어진 Image 속에 존재하는 객체의 위치를 파악할 수 있습니다.
동시에 Classification 으로는 해결할 수 없는 Image 속 다양한 객체들을 분류할 수 있는
Multi Label Classification 을 할 수 있는 방법이기도 합니다.
기본적인 Detection 은 Selective Search 와 같은 Region Proposal 알고리즘을 통해
주어진 Image 안에서 4가지 요소들의 가중치로 계산된 유사 Pixel 들을 모아 Region 을 만듭니다.
(http://www.huppelen.nl/publications/selectiveSearchDraft.pdf)
처음에는 수많은 작은 Region 들을 생성하였으나, Greedy 알고리즘을 통해 점차 유사도에 따라 합쳐져
최종적으로 오른쪽과 같이 하나의 객체에 하나의 Region 이 형성되는 Bottom-up 방식으로 진행됩니다.
이후 생성된 Region 들을 분류기를 통해 Classification 을 진행하여 해당 객체가 무엇인지 판별합니다.
이 과정에서 딥러닝을 도입하며 Region-based CNN (R-CNN, https://arxiv.org/abs/1311.2524), OverFeat(https://arxiv.org/abs/1312.6229) 등이 탄생하며 발전하기 시작했습니다.
마지막으로 객체에 대한 정확한 위치를 구하기 위해 Bounding Box 정보를 이용합니다.
Bounding Box 는 다양한 Annotation Tool 을 이용해 만드는 위치 정보를 지닌 Label 이며,
Training Dataset 에 존재하는 Ground Truth 를 통해 위에서 구한 Region 정보를 Mapping 시키도록
Regression 을 통해 학습시켜 보다 정확한 Intersection Over Union (IoU) 성능을 구하도록 도와줍니다.
Object Detection 은 이렇게 Region 을 선별해내는 Region Proposal,
선별된 Region 으로부터 객체를 인식하는 Classification,
Bounding Box 의 위치정보를 통한 Regression 으로 구성되며,
이를 동시에 수행할 것인지 단계별로 수행할 것인지에 따른 Trade-off 가 존재합니다.
주로 정확도를 우선시 해야 하는 경우, 단계별로 수행하는 R-CNN 계열 알고리즘들이 사용되고
속도를 우선시 해야 하는 경우, 동시에 수행하는 Yolo, SSD 와 같은 알고리즘들이 사용됩니다.
그렇기에 실무에서는 주어진 데이터와 목적에 맞는 모델을 선정하여 사용하는 것이 중요하고,
저희는 두 가지 방법 모두 접근하여 프로젝트를 진행해보았습니다.
2. Custom Dataset 만들기 (Annotation)
객체의 위치를 정밀하게 파악하기 위해 Bounding Box 의 위치정보가 필요하지만,
대부분의 Image 데이터는 그러한 정보가 표시되어있지 않습니다.
따라서 상황에 맞게 Bounding Box 를 표시해주는 Annotation 과정을 수행하게 되는데,
저희 Dataset 역시 해당 정보가 존재하지 않으므로 Dataset 을 생성하는 과정부터 진행하였습니다.
많은 Annotation Tool 이 존재하나 저희는 직관적이고 사용하기 쉬운 Labelimg Tool 을 사용하였고,
사진이 담긴 폴더를 Open Dir 를 통해 지정하여 정렬시킨 뒤 Annotation 을 시작합니다.
불러온 Image 들은 간단한 단축키를 통해 작업할 수 있습니다.
W : Bounding Box 지정
D : 다음 Image 로 이동
A : 이전 Image 로 이동
Ctrl+s : 지정된 Bounding Box 정보 저장
그러나 4242 장의 Image 를 모두 Annotation 하는것은 많은 시간이 소요되므로,
각 Class 별로 20 장의 Image 만을 선별하여 총 100장의 사진만을 Annotation 하였고,
이는 감사하게도 위치 정보를 제공하고 있는 Coco Dataset 과 같은 무료 Dataset 을 이용하면
반드시 Custom Dataset 을 만들지 않더라도 실험해 볼 수 있습니다.
그러나 저희는 제공되지 않은 Dataset 에 관해서도 적용해볼 수 있도록
Annotation 과정까지 진행하여 Dataset을 구축하였습니다.
3. 데이터 전처리 (Preprocessing)
딥러닝 모델이 잘 학습하기 위해선 준비된 데이터들을 정제하는 과정이 필요합니다.
이를 데이터 전처리 과정 (Preprocessing) 이라 부르며, Image 의 경우 Scaling, Normalizing, Augmentation 등의 과정을 거칩니다.
Detection 의 경우 Image 뿐 아니라 해당 Image 의 Bounding Box 까지 함께 처리가 되야하므로
해당 작업을 수행해줄 코드를 추가해야 합니다.
저희는 Python 라이브러리인 imgaug (https://github.com/aleju/imgaug) 를 사용하여
Image 뿐 아니라 해당 Bounding Box 정보까지 함께 변환시켜 전처리를 진행하였습니다.
pip install imgaug
※ 설치 과정에서 문제가 Shapley 관련 문제가 발생할 수 있습니다.
해당 문제는 https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely 링크의 Shapely 부분에서
자신의 운영체제에 맞는 버전을 선택하여 다운받고 설치하신 후 다시 imgaug 를 Install 하시면 됩니다.
Augmentation 결과 Image 와 Bounding Box 가 함께 Preprocessing 됐음을 확인할 수 있습니다.
이번주에는 Object Detection 을 위한 Image 데이터 처리를 진행하였습니다.
다음주는 실제 Detection 을 하기 위한 딥러닝 모델들에 적용하여 성능 평가를 진행하겠습니다.
........
시제품 제작 문의
'프로젝트' 카테고리의 다른 글
무이메이커스_딥러닝을 활용한 자연어 처리 프로젝트 (NLP Classification) (1/2) (0) | 2019.07.12 |
---|---|
무이메이커스_딥러닝을 활용한 Image Segmentation 프로젝트 (0) | 2019.07.05 |
무이메이커스_데이터를 활용한 이강인 플레이 분석 (1) | 2019.07.04 |
무이메이커스_딥러닝을 활용한 객체 인식 프로젝트 (Object Detection) (2/2) (0) | 2019.06.28 |
무이메이커스_딥러닝을 활용한 인공지능 (AI) 이미지 분류 (Image Classification) 프로젝트 (0) | 2019.06.17 |