[졸업프로젝트 개요, 1탄 RNN] 딥러닝을 이용한 자율주행카트
Projects/Graduation Project

[졸업프로젝트 개요, 1탄 RNN] 딥러닝을 이용한 자율주행카트

딥러닝을 이용한 자율주행카트 구현하기

이 글은 작성자가 현재 진행중인 졸업프로젝트 "딥러닝을 이용한 자율주행카트" 만들기의 SW 알고리즘 중 RNN 부분의 중간 점검차 정리한 글입니다.

문제 정의

  1. 오프라인 매장의 매출 감소
    오프라인 매장의 매출 감소에는 여러가지 이유가 있지만, 저희 팀은 그중 “오프라인 매장 사용은 힘이 들고 불편하다”는 문제점을 개선하고자 합니다. 저희 팀은 자율주행 카트 미미를 통해 오프라인 매장에서의 쇼핑 경험을 손쉬운, 편리한 경험이 되게 하고자합니다.
  2. 기술적인 면에서 한계점에 봉착한 현 자율주행카트
    자율주행 스마트 카트를 오프라인 대형 마트에 도입하는데에는 비용적인 측면은 필수적으로 고려하기 마련입니다. 해당 대형마트에서만 사용 가능한 모델으로 맞춤제작되어 제작되므로, 카트의 가격이 나날이 치솟고 있습니다. 기술의 부족으로 나타나는 가격 상승은 곧 대형마트의 경영에 큰 타격을 입게 됩니다.

이에, 본 팀 불사조는

반려동물처럼 해당 고객을 담당하는, 맞춤형 자율주행 스마트카트 MEME를 제안한다.

불사조팀의 미미는 마트 고객의 편의를 최우선으로하는 완벽한 쇼핑메이트입니다. 고객이 대형마트에서 쇼핑을 하는 동안, 미미는 반려동물처럼 해당 고객을 졸졸 따라다닙니다. 고객을 잃어버리는 경우에, 자동으로 찾아가서 쇼핑을 도와줍니다.

MEME는 이러한 차별점을 가집니다.

  1. 뛰어난 기술의 SW 알고리즘
    저희 팀의 알고리즘은 신기술로 이루어질 뿐만 아니라, 정확한 탐지 기술만을 가지는 것을 목표로 알고리즘을 구성하였습니다. 저렴한 비용으로 최대한의 성능을 구현하기 위해 타 경쟁사보다 최적화된 알고리즘을 사용하여 GPU와 CPU의 원가 절감을 할 수 있습니다.

  2. 확장가능성이 무한한 HW 응용
    미미는 LiDAR 센싱 기술을 통해 어떤 매장에서도 사용이 가능합니다. 이는 같은 모델을 , 대량생산 제작할 수 있게 합니다. 미미는 다른 카트와 가격 면에서 엄청난 우위를 선점합니다.
    더불어 자율주행카트 시장 외에도 자율주행 기술을 사용하는 모든 제품에 응용될 수 있습니다.

  3. 감성적인 컨셉으로 소비자 감성 자극
    저희 카트 MEME는 소비자의 감성적인 면을 자극합니다. 반려동물 컨셉의 MEME는 고객을 졸졸 따라오는 등 매장을 이용하는 소비자들에게 큰 호감을 살 것입니다. 이러한 정서적 친밀감형성은 단 한번만의 사용으로도 고객의 오프라인 매장 재방문율을 높힐것이 분명합니다.

왜 지금일까?

  1. 새로운 오프라인 매장 마케팅 전략
  2. 한계점에 봉착된 자율주행 시장에 새로운 활기

현재 진행 단계는?

현재 본 팀 불사조는 기술 구현 단계 중에 있습니다.

  1. SW 알고리즘 | Object Tracking (본 프로젝트의 SW 알고리즘 중 CNN 구현)
    카메라 정보를 통해 화면에 해당 client를 찾아, 이를 tracking 하는 역할을 수행합니다. Object Detection 기술과 Tracking 기술을 합쳐 구현됩니다. Tracking 알고리즘은 위에서 나온 앞뒤 탐지 프레임 분석을 통해 자율 주행 카트를 사용하는 client를 정확히 탐지하게 됩니다. 이를 구현하기 위해 이미지 처리에 사용되는 Filter(칼만 필터과 헝가리안 필터 등)로 간단한 딥러닝 모델을 통해 구현하려 합니다.

  2. SW 알고리즘 | Wake up Word Detection (본 글, SW 알고리즘 중 RNN 구현)
    Wake up word를 통해 해당 client의 위치를 감지하는 기술을 의미합니다. 이번 글을 통해 밑에서 간단 구현하려 합니다.

  3. HW LiDAR 센서 | SLAM, Navigation (본 프로젝트의 HW 구현)
    하드웨어 부문은 크게 센서 부문과 이동 부문으로 나뉩니다.
    카메라를 사용한다고 해서 모든 장애물을 감지하고, 돌발상황을 예방할 수 없습니다 따라서 본 팀은 LiDAR Navigation client 센서의 기술을 통해 를 둘러싼 주변 환경을 완벽하게 인지하려 합니다. 장애물을 감지하고 client와의 적정거리를 유지하게 됩니다 이를 통해 고객을 졸졸 따라다닐 수 있는 자율주행 카트의 목적을 달성하게 됩니다.
    이러한 기본적인 기능뿐만 아닌 센서의 LiDAR SLAM 기술을 통해 자율 주행 카트는 다양한 분야에서 의 확장 가능성을 가집니다 기술의 . SLAM Mapping 을 통해 매장 장소의 map을 형성하여 해당 카트의 위치까지 완벽히 파악/ 매장 장소를 완벽히 이해하여 다른 환경에서도 간단히 Mapping만 돌리면 바로 적용이 가능해지는 우위에 있습니다.

Wake up word Detection 구현하기

그 중, 간단하게 구현된 Wake up Word Detection을 소개드리려 합니다.
본 팀은 "미미야" 라는 Wake up word를 정의하여, 해당 client가 이를 부르면 다가오게 하는 기능을 구현하기 위해 설계된 모델입니다.
이에 대한 음성 데이터가 부족하여 해외에 널리 사용되는 activate 단어를 바탕으로 간단한 RNN 모델을 구현하게 되었습니다.
직접 구현한 ipynb는 여기서 보실 수 있습니다.

Wake up Word Detection를 위한 데이터 전처리는 다음과 같은 방향으로 이루어집니다

1. 음성 데이터를 Spectogram으로 나타내기

음성 데이터를 스펙토그램으로 나타내는 작업이 필요합니다. 이 ipynb는 activate 라는 단어를 하나의 이미지로 변환하는 방법이 필요합니다. numpy 라이브러리를 통해서 이는 가능합니다. ipython의 라이브러리를 통해 음성을 받아들이는데요, 밑 이미지에 해당하는 음성은 다음 링크에 있습니다.
다음과 같은 코드로 spectogram으로 나타내집니다.

이를 통해 다음과 같은 이미지가 형성됩니다.

2. 이미지를 통해 특징벡터 추출하기

이미지를 바탕으로 특징벡터를 추출하게 됩니다. ms를 이용하여 추출하는데 특징벡터를 추출하여 하나의 0,1 이미지를 나타나게 됩니다. 다음 함수와 같이 segment를 받으면, 처리되어 0과 1로 이루어지게 됩니다.

위의 예시로 이루어진 특징벡터 이미지는 다음과 같습니다.

이렇게 0,1로 이루어진 이미지가 형성됩니다. 이제 드디어 RNN 레이어에 들어갈 준비가 완료되었습니다.

이를 넣을 해당 딥러닝 모델은 다음과 같습니다.

본 모델을 CNN layer 1개와 GRU Layer 2개, Time Distributed Layer 1개로 이루어진 모델입니다.

Input 데이터를 통해 CNN layer에서는 특징벡터를 추출하게 되고, GRU layer를 통해 wake up word의 특성을 파악하게 됩니다. 더 높은 효율을 위해 Dropout과 BatchNormalization 기법이 사용되었습니다. 이를 통해 나온 결과는 다음과 같습니다.

모델 이용해보기

모델을 이용해야지 완벽하게 적용이 될 수 있습니다. 이를 구현하기 위해 activate라는 단어를 제대로 인식하였을 시, beep 과 같은 효과음을 나타나게 구현하였습니다. 코드 진 행 논리는 다음과 같습니다.

  1. test set 음성 전처리
    나타난 음성을 바탕으로 전처리를 수행하는 과정이 필요하겠지요, 위와 동일하게 graph_spectogram함수를 이용해 CNN으로 변환하고, 특징벡터를 추출하는 과정을 거쳐 전처리를 수행합니다.

  2. 모델에 넣기
    위에서 저장한 모델을 바탕으로 test dataset을 적용해봅니다.

  3. threshold 기준으로 해당하는지 아닌지 확인합니다.
    이 때, Non-maximum suppression 방식을 사용합니다. 즉,

  • threshold 보다 높다면, activate 로 인정하며, threshold 보다 낮으면, 아님으로 판정합니다.

짜여진 코드는 다음과 같습니다.

모델 직접 사용해보기

이를 바탕으로 직접 진행해보겠습니다. 하나의 test set을 넣고 돌린 결과 다음과 같이 진행됩니다.(위의 ipynb 링크로 볼 수 있습니다!)

beep 하는 소리와 함께 결과가 맞음을 증명하였습니다.

뭐가 문제였을까?

혼자 고민해본 결과, 문제점은 다음과 같습니다.

  1. CNN이나 RNN layer들을 더 쌓아 깊게 만들어도 성능이 더이상 올라가지 않는다.
  2. Train set accuracy와 dev set (validation set) accuracy 차이가 매우 극명하다.

꼼꼼한 조사를 통해 여기서 dummy data의 유입으로 정확도가 현저히 떨어짐을 감지하고, 이쯤에서 RNN모델 개발을 두고, 프로젝트에 해당하는 음성 데이터 셋을 모으기로 하였습니다.