연구 목표
AI를 활용하여 전동킥보드 헬멧 미착용 감시 시스템을 개발한다.
아이디어 스케치
차량 전동킥보드의 차이점은 차량은 번호판이 있지만, 전동킥보드는 그렇지 않다는 점이다. 따라서 헬멧 미착용자를 object detection으로 잡아낸다고 해도, 그것이 누구인지를 아는 방법이 필요했다.
대표적인 전동킥보드 업체인 ‘킥고잉’ 측에 장소/일자별로 킥보드를 조회할 수 있는지를 메일로 문의한 결과, 이동 경로 및 장소/시간에 따른 대여 건 조회가 가능하다는 답변을 받았다. 즉 킥보드에 번호판이 없더라도 카메라에 찍힌 시각과 카메라가 위치한 장소의 정보만 있으면 어떤 킥보드가 빌려졌고 누가 탔는지를 역으로 조회할 수 있게 된다. 이를 도식화한 그림은 아래와 같다.
도로에서 카메라를 통해 킥보드를 촬영하고, object detection을 통해 헬멧 미착용 사실이 감지되면, 해당 장소와 시간을 토대로 킥보드 업체 DB에서 조회하고 경찰이 범칙금을 통보하는 식이다. 아직은 이런 메커니즘이 존재하지 않지만, 법이 시행되고 자동화가 공식적으로 추진되면 충분히 가능한 사항이다.
배경 이론
1. Object detection
본 연구에서는 헬멧 미착용을 구분하는 문제를 Object detection을 통해 해결하기로 했다. Computer Vision 분야에서 Object detection은 주어진 이미지 내에서 물체가 있는 영역의 위치 정보를 Bounding Box로 찾고 라벨링을 하는 작업을 의미한다. 위치를 box 형태로만 잡아내는지, 해당 물체와 배경을 구분하는지에 따라 detection/classification으로 구분할 수 있다.
Object detection 분야의 전통적인 dataset이라고 할 수 있는 PASCAL VOC를 기준으로 했을 때 2012년에 AlexNet의 등장으로 Deep Learning이 본격적으로 활용되면서, Object detection 분야에도 효과적으로 활용되기 시작했다.
이후 Localization과 Classification을 동시에 하는 One-stage detector 계열 (YOLO, SSD, Retina-Net 등)과 Localization 후에 Classification이 진행되는 Two-stage detector 계열(RCNN, SPPNET, Pyramid Networks 등)으로 나뉘어 발전하고 있다.
2. Object detection with YOLO
2.1 YOLO v1(2016)
2.1.1 Unified Detection
YOLO는 ‘You Only Look Once’ 의 줄임말로, Object detection 문제를 regression 방식으로 풀어내었다. 기존의 RCNN계열과 다르게, 단일 네트워크로 구성되어 있어서 end-to-end로 최적화될 수 있고, 실시간 탐색이 가능한 정도로 빠르게 Bounding box와 클래스를 예측하는 것이 가장 큰 차이점이다.
YOLO는 모든 Bounding Box와 모든 Class를 한 번에 고려한다. 우선 원본 이미지를 S X S Grid cell로 나눈 후 Grid cell마다 B개의 Bounding Box를 만든다. Bounding Box의 중심이 grid cell 안에 들어가 있다고 보면 된다. 여기서 Bounding Box와 함께 Confidence score를 매칭시킨다. Confidence score는 Object가 있을 확률과 IOU (ground truth)의 곱으로 계산한다. 이 때 IOU란 Intersection of Unit 의 줄임말로, 실제 박스와 추정한 박스의 교집합 면적을 추정 박스와 실제 박스의 합집합으로 나눈 값을 의미한다. 결과적으로 각각의 Bounding Box는 5가지 값을 가지게 된다. x,y,w,h, confidence인데 x와 y는 center position을 의미하고 w,h는 width와 height으로 전체 이미지 길이에 대한 상대적인 값이다. Bounding box 뿐만 아니라 class에 대한 prediction도 진행이 되어야 하는데, class는 bounding box별이 아닌 grid cell 별로 predict한다. 원 논문에서는 7 X 7 로 Grid cell을 나누고, 셀 당 Bounding Box 가 2개, Bounding Box에서의 값 5개와 PACSCAL VOC의 클래스 수인 20개가 고려되어 7 X 7 X 30의 텐서 형태로 결과가 나온다.
2.1.2 Network Design
Network는 CNN 기반으로 구성되어 있다.
네트워크는 Google LeNet의 영향을 받아 구성되었다. 24개의 Convolution layer와 2개의 fully connected layer가 있고, 마지막에 앞서 언급했듯이 7X7X30 의 tensor가 반환된다.
2.1.2 Loss function
LOSS function은 아래와 같이 기술된다.
첫 두 항은 center의 위치와 width, height에 대해 예측값과 참값의 sum of squared error를 한다. width와 height에는 scale에 관한 문제(큰 object에서 에러가 크게 나는 것)를 해결하기 위해 루트를 씌웠다. prediction은 여러 개의 bounding box를 하지만 training 과정에서는 object가 실제로 있는 grid cell 별로 가장 신뢰할 수 있는 하나의 bounding box만 사용한다. 정답과 가장 높은 IOU를 갖는 bounding box만 선택한다. 그리고 가중치를 조정하여 bounding box의 비중은 강화하고, object가 없는 grid cell의 비중은 줄인다.
2.2 YOLO V3
2.2.1 YOLO v3의 성능 비교
YOLO v3은 그전까지 나왔던 여러 모델의 단점을 개선하고 향상한 모델이다. detection model을 평가하는데 보통 두 가지 지표가 쓰인다. 하나는 mAP이고 다른 하나는 시간이다. mAP란 moving Average Precision의 약자로, Precision과 Recall의 면적 값을 이용하여 만든 지표이다. 아래 그림을 통해 YOLO v3의 상대적인 성능을 알 수 있다.
위 그림을 보면 알 수 있듯이 SSD와 비슷한 정확도를 가지면서도 3배 정도 빠른 탁월한 성능을 보이는 것을 알 수 있다.
2.2.2 Bounding Box Prediction
YOLO v3에서는 초기 버전과 달리 미리 크기가 정해진 anchor box를 사용한다. anchor box의 크기는 K-means clustering을 통해서 최적화된 값으로 미리 정해져 있다. 그리고 학습을 통해서 이 Anchor box 값을 얼마나 수정해줘야 하는지를 찾는다. YOLO v1의 단점 중 하나는 한 개의 grid cell 내에서 한 개의 이미지만 찾을 수 있다는 점인데, YOLO v2부터 Anchor box를 도입하면서 이 단점이 해결되었다. YOLO v3는 각 셀마다 크기가 다른 3개의 Anchor box를 이용한다.
위 그림과 같이 각 셀의 좌측 상단 중심 좌표(c)를 보정 값 t로 수정하는 방식으로 bounding box의 중심값을 예측한다. 즉 ground truth와 bounding box영역을 가지고 t를 학습시키는 것이다. 이때, t에 시그모이드 처리를 해줘서 그 셀 밖으로 중심이 나가서 불필요한 학습이 진행되는 일이 없도록 한다. 마찬가지의 과정으로 bounding box의 높이와 너비도 예측된다.
2.2.3 Network Architecture
YOLO V3의 네트워크 구조는 위와 같다. 전체적인 과정이 FPN(Feature Pyriamid Network)와 상당히 유사하다. 단순히 CNN처럼 feature map이 작아지는 것이 아니라 downscale과 upscale 과정이 모두 포함되어 있다. 그리고 skip connection을 통해서 희석된 정보를 보충해준다. 그리고 82, 94, 106번 레이어에서 한 번씩 결과를 뽑아낸다. 각각 다른 scale로 downsampling이 된다. 원본 사이즈가 416X416인데 82번 레이어에서는 stride 32로 13X13, 94번 레이어에서는 stride 16으로 26X26, 106번에서는 stride 8로 52X52로 downampling이 된다. 갈수록 더 촘촘해져서 작은 이미지에 대한 검출도 가능해진다. YOLO v1의 또 다른 약점이었던 작은 이미지에 대한 검출도 이로써 보안이 되었다.
2.2.4 Class Prediction
YOLO v3는 최종 detection 단계에서 softmax를 쓰지 않는다. softmax는 배타적이기 때문에 단일 클레스만 예측이 가능하지만, 여기서는 각 Class에 대해 여러 개의 독립적인 Logistic Classifier를 사용하기 때문에 Multi-label class에 대한 예측이 가능하다. 예를 들어 Person과 Women 같은 hierarchical class에 대해 detection이 가능하다.
상기한 장점들로 이번 프로젝트에서 YOLO v3를 사용하기로 하였다.
다음편에 계속
'Deep Learning' 카테고리의 다른 글
YOLO YOLOv3를 활용한 전동킥보드 헬멧 미착용 감시 시스템 만들기 5 (완) (3) | 2021.06.06 |
---|---|
YOLOv3를 활용한 전동킥보드 헬멧 미착용 감시 시스템 만들기 4 (0) | 2021.05.17 |
YOLOv3를 활용한 전동킥보드 헬멧 미착용 감시 시스템 만들기 3 (0) | 2021.05.13 |
YOLOv3를 활용한 전동킥보드 헬멧 미착용 감시 시스템 만들기 1 (0) | 2021.05.08 |
Batch Normalization, Transfer Learning (0) | 2020.09.19 |
Hyper parameter Tuning (0) | 2020.09.13 |
Pandas 기초 2: Indexing & Slicing (3) | 2020.09.01 |
Pandas 기초 1: Series와 DataFrame 다루기 (2) | 2020.09.01 |