반응형

인공지능1 기말과제로 제출한 개인 프로젝트이다. 기말고사를 열심히 공부하느라(?) 과제에는 많은 힘을 쏟진 못하였다... 그래도 언젠가는 도움이될 것 같아서 제출한 과제 그대로 복붙을 해본다.

요약

Object detection을 주제로 인공지능1 이미지분석 개인프로젝트를 진행하였다. 이미지 분석에는 Classification, Object detection 등이 존재하나 Object detection이 결국 Classification이 포함되며, 더 심화되는 개념으로 Object Detection에 대해 금번 프로젝트로 정리해보았다. 해당 분석을 진행하기 위해 제2장에서 CNN, R-CNN, Fast R-CNN, Faster R-CNN 그리고 SSD(Sigle Shot Multi-box Detector)에 대한 이론을 정리하였으며, 제 3장에서는, Google에서 제공하는 Tensorflow Hub를 통해 Faster R-CNN과 SSD+mobilenet v2 모듈을 다운받아 구현함으로써 해당 방법론들에 대한 결과값과 소요시간을 계산하고 Output 이미지를 확인해보았다.

제 1 장 서론

현재 인공지능은 인간과 기계사이의 능력 격차를 해소하는 획기적인 성장을 기록해오고 있다. 연구원들은 기계(Machine)가 놀라운 성과를 거둘 수 있도록 수많은 필드의 방면을 연구하는데, 그런 많은 분야 중 하나가 Computer Vision이다. 이 분야는 기계가 인간처럼 세상을 보고, 비슷한 방식으로 인지하고, 심지어 이미지&비디오 인식(Image & Video recognition), 이미지분석&분류(Image Analysis & Classification), 미디어 재생산(Media Recreation), 추천시스템(Recommendation Systems), 자연어처리(Natural Language Processing) 같은 다수 작업에 지식을 사용할 수 있도록 한다. 딥러닝(Deep Learning)과 함께하는 Computer Vision의 발전은 주로 특정한 알고리즘인 CNN을 통해 구성되며 시간에 따라 완벽해지고 있다.

금번 과제의 구성은 제2장에서 CNN의 발전과정(CNN, R-CNN, Fast R-CNN, Faster R-CNN)에 대해 이론적으로 알아본 뒤, 제 3장에서 R-CNN 코드 구현을 통해 이미지를 예측 및 결과에 대해 기술하였다. 제4장 결론에서는 금번 프로젝트 내용을 정리하고 한계점에 대해 기술하였다.

제 2 장 CNN의 발전과정 및 SSD

2.1. CNN (Convolutional Neural Networks)

CNN(Convolutional Neural Network)은 딥러닝 알고리즘(Deep Learning Algorithm)으로, 이미지를 입력하여 이미지 내 다양한 측면/객체의 가중치(learnable weights, biases)를 할당하여 각각을 서로 다른 것으로 구별할 수 있게 할 수 있다. 전처리과정은 다른 분류 알고리즘과 비교했을 때 훨씬 적어 계산에 편리하며, 이전 방법에서 필터는 직접 손으로 동작하도록(hand-engineered) 설계되어 충분한 training을 진행해야 했지만, CNN은 이러한 필터/특성을 스스로 학습할 수 있는 능력을 가지고 있다. CNN의 구조는 인간 뇌에 있는 뉴런의 연결 패턴과 유사하며, 개별 뉴런은 Receptive Field로 알려져 있는 visual field의 제한된 영역에서만 자극에 반응한다. 인공지능1 수업에서 배웠듯, 해당 필드의 집합이 이미지 전체를 다루기 위해 아래 ‘[그림-1] CNN sequence to classify handwritten digits’ 과 같이 손으로 쓴 숫자를 CNN에서 분류하기위해CONV, RELU, POOL, FC layer가 사용되며, Convolution layer에서는 tensor를 입력 받아 영역별로 weights를 곱해 각 뉴런의 아웃풋을 계산한다. 여기서 filter라는 개념이 추가되는데, filter가 많아질수록 결과 값이 복잡해지기 때문에, 이후 Pooling layer를 통해 이미지를 downsizing 하여 계산결과가 작아지게 된다. 최종적으로는 FC(Fully Connected) Layer를 사용하여 class의 점수를 계산하게 된다. 각 layer내에서는 계산을 위해 Padding, Filter, Stride등 여러 Hyperparameters가 사용된다.

그림 1. A CNN sequence to classify handwritten digits

 

2.2. R-CNN (Regions with Convolutional Neural Networks)

RCNN은 CNN을 본격 이용하여 딥러닝 기반 이미지 분류기를 feature extractor로 사용하여 object detection, segmentation에서 높은 보였다는 점에서 주목을 끌었다. 최초의 R-CNN 논문에서의 문제 정의는 1) Localizing objects with DNN, 2) Training a high-capacity model with small quantity of annotated detection data로 완전히 새로운 방식이 아닌, Neural Network 기반의 detection feature extractor를 만들어내려고 시도했던 것으로 판단한다. R-CNN은 크게 아래 4가지 방법으로 나뉜다.

그림 2. R-CNN 학습 구조

1) Input image: 이미지를 입력한다.

2) Region proposal algorithm

대상의 class를 구분하지 않고 이미지로부터 region을 추출해낸다. 알고리즘은 상관없으며 비슷한 질감이나 색, 강도를 가진 인접한 픽셀들을 연결하여 bounding box를 구성하는 Selective search 방법 등을 이용한다. 이 방법으로 생성된 bounding box의 output을 다시 CNN 레이어의 input으로 활용하고, input으로 변환하는 과정에서 압축(warp)을 한다.

3) CNN: Feature vector extract

앞 단계에서 생성한 region을 압축한 input으로, 미리 training된 CNN 모듈에 통과시켜 새로운 Feature를 생성한다. AlexNet, VGGNet을 기반으로 튜닝 과정을 거친 CNN 모델을 사용한다. 기존의 CNN Classifier에서 최종 softmax 분류기 부분을 제외한 output을 결과물 feature로 사용하는데, 예를 들면 Kaggle이나 다른 분석 대회용 dataset을 보면 불분명한 image feature들이 존재하는 경우가 있는데, 이 feature를 나타낸 다는 것이 그 예이고, 이 결과물을 fixed-length feature vector라고 부른다.

4) Classify Algorithm

마지막으로 Fixed-length feature vector를 input으로 하는 분류기를 추가한다. Region proposal 단계에서 생성된 object를 CNN 레이어에 통과시켜 fixed-length feature vector로 변환한다. 그리고 이 input값을 바탕으로 객체여부를 분류한다. 이 단계를 나눈 이유는, 도메인 목적에 맞는 분류기를 설정 및 유효한 영역 판별을 판단하기 위함이다.

 

2.3. Fast R-CNN

Fast R-CNN은 R-CNN으로부터 속도를 개선시키기 위해 Rol pooling을 중간 과정에 삽입, 연산을 급격하게 줄여 속도를 개선시킨 모델이다. 기존 R-CNN은 RP(Region Proposal)마다 CNN을 적용했기 때문에 Selective search * CNN의 연산을 수행했지만, Fast R-CNN은 (Selective search +Rol Pooling) *1의 연산으로 급격하게 연산이 줄었다.

그림 3. Fast-CNN 구조

 

2.4. Faster R-CNN

Fast R-CNN을 통해 많은 시간과 비용이 절약되었지만, RP(Region Proposal) 생성 자체에 많은 시간이 소요되었다. Fast R-CNN에서는 selective search를 수행하는 region proposal이 외부에 존재하여 inference에서 병목(Bottleneck)을 일으켰기 때문에, Faster R-CNN에서는 RPN(Region Proposal Network) 자체를 학습함으로써 selective search 없이 RPN을 학습하는 구조로 모델이 만들어졌다. RPN은 Feature map을 input으로, RP를 output으로 하는 네트워크이며, selective search의 역할을 온전히 대체한다. 또한, Fast R-CNN의 경우 Selective search가 주는 bounding box 좌표를 이용하여 학습했지만, Faster R-CNN은 미리 정의한 reference bounding box인 anchor라는 개념을 도입하여 다양한 크기와 비율로 n개의 anchor를 미리 정의하여 sliding window시 sliding 마다 n개의 bounding box 후보를 생성하여 이미지를 학습하게 된다.

그림 4. Faster R-CNN RPN

 

2.5. SSD(Single Shot Multi-Box Detector)

Faster R-CNN이 등장한 후 더 빠르고 강력한 Detector인 SSD가 등장했다. Faster R-CNN은 기존 R-CNN의 속도와 비용을 개선했지만 7FPS with mAP 73.2% 의 느린 속도에 실시간 영상분석에 사용할 수 없었다. YOLO는 속도는 빨랐으나 45FPS with mAP 63.4%로 성능을 포기해야 했다. 하지만 SSD는 기존 R-CNN에서 사용했던 RP 추출 및 Resampling 과정을 제거하여 59FPS with mAP 74.3%으로 높은 정확성과 빠른 속도를 모두 얻어냈다. SSD는 말 그대로 사진의 변형 없이 그 한장으로 훈련, 검출을 하는 Detector이다. 기존 CNN에서는 이미지에서 객체 유무를 판단하기 위해 그림을 자르거나 변형해야 하여 오랜 시간이 소요되었지만, SSD는 기존 구조 뒤 보조 구조를 붙여 얻은 Multi-scale feature maps을 이용하여 이 문제를 해결하였다. 아래 사진에서 개의 크기는 사진의 1/3이지만, 고양이는 1/6정도로 둘 간 크기 차이가 크다. 이를 한 가지 feature map에서 구하려면 bounding box의 크기 차이로 인해 box의 크기 추정, 위치추정까지 많은 과정이 필요하다. SSD는 feature map을 여러 개의 크기로 만들어서 큰 map에서는 작은 물체의 검출을, 작은 map에서는 큰 물체의 검출을 하도록 만들어 이 방식은 resampling을 없애면서도 정확도 높은 결과를 도출하게 되었다.

그림 5. SSD feature map

 

제 3 장 Faster R-CNN & SSD+mobilenetV2 Object Detection 실습

Faster R-CNN패키지와 SSD+mobilenetV2 Object Detection 패키지를 활용하여 Object Detection을 진행하였다. 페이지 용량 문제로 코드는 주석처리를 포함하여 GitHub에 업로드 하였으며, 해당 페이지에서는 Input image에 따른 각 Detection별 Output만 기술한다.

2.1. Input Image 및 Object detection 결과

Input 이미지는 우리학교 NEW H 에서 찍은 사진으로 faster R-CNN과 SSD를 적용하였다.

좌측 결과가 faster R-CNN 적용, 우측 결과가 SSD 적용 결과이다. 이론대로 SSD가 더 빠른 Detection time(Inference time)을 가지고 더 많은 object를 탐지함을 알 수 있었다.

* 코드는 다른 포스팅으로 이어서 업로드하겠다.

 

 

제 4 장 결론 및 한계점

인공지능1 수업에서 간략히 다룬 R-CNN에 대해 이론적으로 더 알아보고, 실제 코드 적용을 통해 Object Detection을 확인하였다는 데에 의의가 있다. 하지만 R-CNN, Fast R-CNN, Faster R-CNN에 대해 Google의 TensorFlow Hub에서 Faster R-CNN을 제외한 패키지를 찾지 못하여 직접 Inference Time과 Accuracy 측정값을 비교해보지 못하였다. 아쉬움을 극복하기 위해 Object detection 분야에서 small하고 fast한 장점을 가진 SSD-based object detection model을 함께 학습해보았고, 실제로 SSD 모듈이 Faster R-CNN보다 2배이상 빠르고 많은 예측을 가짐을 확인할 수 있었다. 해당 코드와 결과는 Github에 주석을 포함하여 업로드 하였다.

 

참고 문헌

Sumit Saha(2018), A Comprehensive Guide to Convolutional Neural Networks — the ELI5 way

Ross Girshick, Jeff Donahue, Trevor Darrell, Jitendra Malik(2014), Rich feature hierarchies for accurate object detection and semantic segmentation Tech report (v5)

Shaoquing Ren, Kaiming He, Ross Girshick, and Jian Sun(2016), Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

Matthijs hollemans(2018), MobileNetV2 + SSDLite with Core ML

Wei Liu 외(2016), SSD: Single Shot MultiBox Detector

전지원(2017), Single Shot MultiBox Detector 리뷰

반응형

+ Recent posts