본문 바로가기

프로젝트

무이메이커스_딥러닝을 활용한 객체 인식 프로젝트 (Object Detection) (1/2)

프로젝트 진행 순서 (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

총 4242 장으로 구성된 5개 종류의 Flower Dataset

 

1. Object Detection 개요 (Overview)

이번주 저희의 목표는 Computer Vision 분야에 속하는 Image 와 관련된 문제입니다.

CS231n 에 소개된 Computer Vision Task

사진 속에 고양이가 존재하는지 (Classification), 그렇다면 해당 객체는 어디에 존재하는지 (Detection),

어떤 형상으로 존재하는지 (Segmentation) 에 관한 문제들이 존재합니다.

 

저번주 Classification 에 이어 이번주는 Detection 문제를 풀어볼 것입니다.

CS231n 에 소개된 Object 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 을 생성해 나가는 Selective Search 과정

처음에는 수많은 작은 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) 등이 탄생하며 발전하기 시작했습니다.

딥러닝이 도입된 Object Detection 의 시초라 볼 수 있는 R-CNN 과정

마지막으로 객체에 대한 정확한 위치를 구하기 위해 Bounding Box 정보를 이용합니다.

 

Bounding Box 는 다양한 Annotation Tool 을 이용해 만드는 위치 정보를 지닌 Label 이며,

Training Dataset 에 존재하는 Ground Truth 를 통해 위에서 구한 Region 정보를 Mapping 시키도록

Regression 을 통해 학습시켜 보다 정확한 Intersection Over Union (IoU) 성능을 구하도록 도와줍니다.

Bouding Box Mapping (좌) 및 IoU 성능 평가 방법 (우)
IoU 수치에 따른 Bounding Box 성능 결과

 

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 을 생성하는 과정부터 진행하였습니다.

Labelimg Tool - Image 가 담긴 폴더 불러오기

많은 Annotation Tool 이 존재하나 저희는 직관적이고 사용하기 쉬운 Labelimg Tool 을 사용하였고,

사진이 담긴 폴더를 Open Dir 를 통해 지정하여 정렬시킨 뒤 Annotation 을 시작합니다.

 

Labelimg Tool - Bounding Box 를 그려 Label 지정하기 (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 하시면 됩니다.

원본 Daisy Image (좌) 와 Preprocessing 을 거친 Image (우)

Augmentation 결과 Image 와 Bounding Box 가 함께 Preprocessing 됐음을 확인할 수 있습니다.

 

이번주에는 Object Detection 을 위한 Image 데이터 처리를 진행하였습니다.

다음주는 실제 Detection 을 하기 위한 딥러닝 모델들에 적용하여 성능 평가를 진행하겠습니다.

 

........

시제품 제작 문의