서비스 로봇용 신규 Vision AI 응용 기술 개발 - 연구과정(2)

seb5428 21.09.01
254 3 0

안녕하세요 SKT AI Fellowship에서 "서비스 로봇용 신규 Vision AI 응용 기술 개발" 과제를 진행 중인 신관준, 서은빈입니다! 연구가 본격적으로 시작한지 2개월이 지나서 지금까지 저희가 과제에 대한 전반적인 진행내용를 공유 리려고 합니다. 글이 사진을 보조해주는 격이니 사진만 보셔도 다 보신겁니다!

 

1. 지난 게시 글에서 소개한 연구 과제 계획 요약

  • Non GPU 저사양 (NUC i3~ i5, 4GB) 보드에서도 실시간으로 동작하는 다중 딥러닝 모델을 돌리는 시스템 개발
  • Robot N : 1 시스템에서 MEC 방식의 추론 시스템 구성과 실증
  • N개 CNN 모델의 추론단계 경량화를 통한 실시간 동작 보장 ( N>=3 )
  • Depth image를 이용한 응용 기능 구축

 

2. 연구 진행 경과

  • AI in Robots (딥러닝 런타임 가속화/최적화)

딥러닝 모델을 플랫폼에 탑재할려면 여러 노력들이 필요합니다. 단순히 Train-test 사용하는 추론용 코드에다가 덧붙여 만드는 것은 모델 자체이 갖고 있는 성능을 전부 이용하지 못한다고 있습니다. 그리고 딥러닝 모델들은 높은 연산 요구량을 지니고 있어서 이를 가속화, 최적화할 있는 다양한 방법들이 있는데요. 중에는 C/C++ 처럼 CPU 아키텍처에 따라 컴파일되는 처럼 딥러닝 모델도 탑재되는 플랫폼의 CPU 혹은 GPU 따라 미리 전처리 코드 IR(Intermediate Representation) 방식을 사용합니다.

일반적인 고용량의 시리얼 데이터인 딥러닝 모델에서 다양한 레이어들을 병합하거나, 특정 레이어의 Float Point 조정하면서 성능을 높이고 Conv layer - Pool - batchNorm 같은 많은 연상량을 요하는 작업의 경우 동작하는 플랫폼에서 유리한 방향으로 미리 메모리를 인접한 영역으로 배치하거나, 공유하는 방식으로 최적화 합니다.

저희 시스템의 경우에는 인텔기반의 시스템에서 동작하는 것이 목표로 여기에는 인텔이 제공하는 런타임 프레임워크인 OpenVino 있습니다.

 

  • Face Mesh 이용한 실시간 AR 얼굴 합성 기능

로봇과 사람간의 인터랙션 기능 중 하나로 AR 얼굴 합성 기능을 만들었습니다. Face landmarks를 vertex로 한 삼각형들이 모여 만들어진 face mesh 를 활용했습니다. AR 얼굴 합성 기능은 간단하게 다음과 같은 flow를 따릅니다. 우선 face detection이 선행되어 얼굴 영역을 crop하고 face landmarks detection을 통해 mesh를 생성합니다. 각 삼각형의 좌표와 2d texture image의 좌표를 이용해 합성해 최종 결과로 나오게 됩니다. 실시간성을 보장하기 위해 파라미터 수가 적은 가벼운 네트워크를 선정했고 가속화를 위해 OpenVino를 사용할 예정입니다.

 

 

  • Depth data 활용한 Action recognition

로봇 인터랙션을 위해 사람의 unexpected action을 감지할 수 있도록 action recognition을 활용하고자 했습니다. 사람이 로봇에게 손짓으로 “이리 와라”, “가라”, “안녕”, “돌아라” 하는 4개의 class 분류를 목표로 잡았습니다. 타임시퀀스가 존재하는 16 frame씩 자른 1d depth iamge 동영상을 인풋으로 제공하여 사람의 행동을 4개의 class로 분류하여 제공하는 모델을 만들었습니다. 워낙 데이터가 크다 보니 무거운 모델일 수 밖에 없어서 저사양 보드에서의 딥러닝 모델 추론을 위해 MEC 환경에서 테스트했고 경량화도 진행했습니다.


우선 가벼운 네트워크를 만들기 위해 rgb image가 아닌 depth image를 활용해 데이터 양을 줄였습니다. 그런데 데이터의 양도 줄었고 네트워크의 필터도 많은 파라미터에 대응하여 만들어져 있기 때문에 언더피팅이 일어날 수밖에 없었습니다. 그래서 필터의 크기를 조정해 파라미터의 양을 4분의 1로 조정했고, 사이드뷰 트랜스폼 모듈을 추가해 이미지를 옆에서 보는 제트 축의 움직임에 어텐션을 주어 해결하고자 했습니다.

 


 

위의 방법을 적용하게 되면 비슷한 위치에서 손을 좌우 흔들거나 앞뒤로 흔드는 액션에 대한 분별력이 높아지게 됩니다. 즉 아래 Confusion matrix로 보면 적용 전에 “come here”, “hi” 간의 인식 분별력이 떨어졌다면 적용 후에는 향상되었음을 알 수 있습니다.

 


 

이렇게 구성된 네트워크는 OpenVINO를 이용하여 CPU 상에서 80hz 이상을 확보하였는데요, 이후에 로봇에 실탑재를 위하여 최적화 및 안정적인 인식 결과를 위한 여러 방법들을 적용하면 최종적으로 30hz 이상의 결과를 낼 것으로 기대됩니다.

 

3. Future works

다중 모델 추론을 위한 스케줄링 알고리즘이 필요합니다. Action recognition 뿐만 아니라 mask detection, pedestrian detection 등 다양한 모델을 돌리기 위해서 멀티 모델을 비동기식으로 처리할 수 있는 파이프라인을 구성하고 스케줄링 알고리즘을 포함하여 실시간으로 처리할 수 있도록 하고자 합니다.

seb5428 님의 최신 블로그

더보기

관련 블로그