[머신러닝 프로젝트] 머신러닝 기능은 무엇이며 어떻게 개발하나

  • 2018-12-04
  • 글 | 정 재 준 대표, 커널연구회, rgbi3307@nate.com, www.kernel.bz



머신러닝 프로젝트, 똑똑한 왕자(SmartPrince) 만들기 8


프로젝트 과정 목차
1. 인공지능(AI)이란 무엇인가?
2. 전원 배터리모듈 개발과정 및 기능
3. 센서제어 모듈 개발과정 및 기능
4. 모터제어 모듈 개발과정 및 기능
5. 카메라 Pan/Tilt 모듈 개발과정 및 기능
6. 음성처리 모듈 개발과정 및 기능
7. 병렬처리 모듈 개발과정 및 기능
8. 머신러닝 기능 개발과정 및 기능
 
똑똑한 왕자(SmartPrince) 소개
커널연구회에서 지능형로봇 만들기로 진행하는 SmartPrince(똑똑한 왕자) 시리즈는 커널연구회에서 제작한 9개의 모듈들에 머신러닝 알고리즘을 탑재하는 오픈플랫폼, 오픈소스 프로젝트이다. 각각의 모듈들은 독립된 형태로 동작할 수도 있고, 라즈베리파이 및 아두이노 호환 핀맵에 모듈들을 적층으로 쌓아서 한꺼번에 병렬로 동작시킬 수도 있다. 모듈에 있는 USB에 시리얼통신 명령어(AT Command)를 전송하여 모듈들을 제어한다.

SmartPrince 머신러닝 키트 소개

머신러닝은 많은 데이터(빅데이터)를 학습하기 위한 대용량의 메모리와 이러한 데이터를 빠르게 처리하기 위한 고성능의 CPU가 필요하다. 그것도 아주 많은 조(테라) 단위의 메모리와 CPU가 있어야 한다. 머신러닝을 제대로 구현하기 위해서는 현재의 컴퓨터 성능인 수GHz 단위 CPU 처리속도와 수GB 단위의 메모리보다 일천 배 더 높은 사양의 컴퓨터가 필요하다.

즉, 수십 테라Hz, 수십 테라B 메모리급의 슈퍼 컴퓨터가 필요하다. 현재 이런 환경을 구축하기 위해서는 천문학적인 비용과 설비투자가 들어가야 한다. 세계적인 기업인 Google과 IBM에서 이러한 설비투자를 주도하고 있지만 아직도 기술이 보편화되고 비용을 줄이려면 적어도 10년에서 20년은 더 걸릴 것이다.

컴퓨터 역사를 되짚어 보면, 컴퓨터 하드웨어가 만들어지기 전에 연산 알고리즘이 먼저 연구되었고 이것을 실현하기 위한 하드웨어는 뒤이어서 개발되었다. 소프트웨어 알고리즘이 하드웨어보다 앞서는 것이다. 머신러닝도 마찬가지이다. 머신러닝 알고리즘은 이미 완성되어 가고 있다. 하지만 머신러닝 알고리즘 특성상 많은 데이터를 학습해야 하는 것이기에 조(테라) 단위의 메모리와 CPU 속도가 요구된다. 하드웨어가 이렇게 되려면 아직도 가야할 길이 멀다. 현재는 천문학적인 비용을 들여서 슈퍼 컴퓨터급에서 이런 일들을 하고 있다.

현재의 컴퓨팅 환경에서 개인이 머신러닝을 구현하기에는 멀고도 요원한 환경이다. 천문학적인 비용과 설비투자를 개인이 어떻게 감당할 수 있는가? 하지만 커널연구회는 개인이 임베디드 환경에서 머신러닝을 구현하여 테스트할 수 있는 키트를 개발했다. 다만, 많은 량의 빅데이터를 학습하는 것이 아니라, 주어진 샘플 데이터를 통해서 머신러닝 알고리즘을 C언어로 직접 구현하고 테스트할 수 있는 환경을 제공한다.

알고리즘은 몇 가지 샘플 데이터를 통해서 검증하고 개선하는 방향으로 연구 개발되고 있으므로, 커널연구회의 머신러닝 키트도 머신러닝 알고리즘을 C언어로 구현 및 테스트할 수 있는 환경을 저렴한 비용으로 제공한다.

커널연구회의 똑똑한 왕자(SmartPrince) 머신러닝 키트는 임베디드 환경에서 개인용으로 머신러닝 기능을 구현하고 실습할 수 있도록 했다. 임베디드 보드는 라즈베리파이3 병렬처리 모듈과 이동형 2륜 구동 로봇를 사용한다. 그림 1은 이것의 외형을 보여 주는 것이다.



SmartPrince 머신러닝 키트 하드웨어 사양

커널연구회는 라즈베리파이3 컴퓨팅 모듈을 4개 장착하여 병렬 처리할 수 있는 보드를 개발했다. 라즈베리파이3 컴퓨팅 모듈 1개를 장착할 수 있는 보드는 라즈베리파이 재단에서 배포하고 있지만, 이것으로는 컴퓨팅 모듈을 병렬화하기 힘들다. 컴퓨팅 모듈의 장점을 극대화하기 위해서는 여러 개를 장착하여 병렬 처리할 수 있는 보드가 필요하다. 커널연구회에서 개발한 똑똑한왕자(SmartPrince) 병렬처리 모듈은 라즈베리파이3 컴퓨팅 모듈을 4개 장착하여 다음과 같은 하드웨어 사양을 확보한다.

• CPU는 ARM Cortex-A53 1.2GHz (quad core 4개)가 4개로 병렬처리
• CPU Core는 16개
• 메모리는 1GB가 4개 확보되어 4GB로 동작.

아래 사진은 똑똑한 왕자(SmartPrince) 병렬처리 모듈의 외형이다.



똑똑한왕자(SmartPrince) 병렬처리 모듈은 데이터를 학습하고 응답하는 두뇌 역할을 한다. TCP/IP 네트워크 프로그래밍에서 Server로 동작된다. 이러한 Server에 데이터를 실시간으로 입력하기 위한 Client도 있어야 한다. 이 역할을 다음과 같은 이동형 로봇으로 구현했다.
똑똑한왕자(SmartPrince) 이륜구동 로봇은 다음과 같은 하드웨어 사양으로 동작한다.

• 장애물을 회피 주행하면서 카메라 영상을 인지하고 학습.
• 전방에 있는 초음파센서를 좌우로 스캐닝하여 근거리에 있는 장애물을 판단.
• 장애물이 감지되면 카메라로 영상을 수집하여 병렬처리 모듈에 전송.
• 병렬처리 모듈은 머신러닝 알고리즘(CNN)을 사용하여 수집한 영상을 학습하고 인지.



똑똑한왕자(SmartPrince) 이륜구동 로봇에는 다음과 같이 카메라 팬틸트 모듈이 장착되어 있다.



• SmartPrince 머신러닝 이륜구동 로봇의 상단에 장착됨.
• 모듈 크기: 가로 65mm, 세로 70mm, 높이 105mm
• Cortex-M0(STM32F0) MCU 내장.
• 라즈베리파이 호환 카메라 사용.
• 카메라 상하좌우 Pan/Tilt 제어(회전 속도 및 각도 제어 가능).
• 라즈베리파이 40핀 I/O 호환, 아두이노 확장핀 호환.
• 시리얼 명령으로 모듈 단독 동작 가능.

또한 라즈베리파이3과 40핀 I/O에 연결하여 모터를 제어하는 보드도 다음과 같이 장착되어 있다.

• 라즈베리파이3와 SmartPrince 머신러닝 보드들을 연결시켜 주는 보드.
• 라즈베리파이 I/O 40핀 연결 호환.
• Serial, I2C, SPI, PWM 인터페이스 연결 호환.
• DC모터 4개를 PWM 신호로 제어.
• 내부에 있는 Cortex-M0에서 Clock을 제어하여 Stepping 모터 제어.
• Stepping 모터는 초음파센서를 좌우로 스캐닝하는 용도로 사용.



이상과 같은 임베디드 보드들은 라즈베리파이3 호환용으로 모두 커널연구회에서 개발했으며 기술적으로 좀더 궁금한 사항이나 지원이 필요하면 아래의 커널연구회 웹페이지를 참조하기 바란다. (https://www.kernel.bz/smartprince)

머신러닝 기능 및 소프트웨어 사용법

똑똑한왕자(SmartPrince) 머신러닝 키트를 아래 웹페이지에서 구매하면 소프트웨어는 커널연구회에서 소스까지 모두 제공한다. (https://www.kernel.bz/product/SmartPrince)

소프트웨어는 모두 C언어로 코딩되었다. 머신러닝 알고리즘은 이동형 로봇의 카메라에서 수집한 영상을 학습하기 위해서 CNN 알고리즘으로 코딩했다. 데이터 교환은 리눅스에서 내부 네트워크를 설정하여 TCP/IP 네트워크 프로그래밍 했다. 데이터 파일 공유는 리눅스의 NFS(Network File Server)를 활용한다.

똑똑한왕자(SmartPrince) 병렬처리 모듈은 TCP/IP 네트워크 프로그래밍에서 Server가 되고, 이동형 로봇은 Client가 된다. 병렬처리 모듈에는 컴퓨팅 모듈이 모두 4개 장착되어 있으므로 다음과 같이 내부 Server IP가 설정된다.

• 첫번째 모듈(CM01): 10.10.0.1
• 두번째 모듈(CM02): 10.10.0.2
• 세번째 모듈(CM03): 10.10.0.3
• 네번째 모듈(CM04): 10.10.0.4

이동형 로봇(Client)은 위의 서버 IP에 WiFi로 무선 연결한다. 이동형 로봇(Client)에서 무선연결은 다음과 같이 확인한다.

이동형 로봇(Client)에서 무선연결 확인



위에서 무선장치 wlan0에 설정되어 있는 10.20.0.10 IP는 컴퓨팅 모듈의 CM01에서 받아온 내부 IP이다. 컴퓨팅 모듈과의 무선연결 테스트는 다음과 같이 테스트 패킷을 보내서 확인한다.



위와 같이 ping 테스트에 이상이 없으면 다음과 같이 이동형 로봇(Client)에서 컴퓨팅 모듈들을 NFS 서버로 마운트 한다.



위와 같이 하면 이동형 로봇(Client)과 컴퓨팅 모듈들간에 데이터 파일 교환(복사, 삭데, 이동)을 마음대로 할 수 있게 된다.

다음으로 컴퓨팅 모듈마다 머신러닝 서버 프로그램을 실행하여 TCP/IP 네트워크 서버로 동작하도록 한다. 머신러닝 서버 프로그램(sp_server)는 제품을 구매하면 커널연구회에서 소스를 제공한다.

컴퓨팅 모듈마다 머신러닝 서버 프로그램(sp_server) 실행



ssh pi@10.10.01 로 컴퓨팅 모듈 서버 CM01에 접속한 후(암호는 kernel.bz), cd /home/pi/projects/sp_server/ 경로로 이동하여 다음과 같이 sp_server 프로그램에 명령라인 파리미터를 입력하여 실행한다.

./sp_server run cm01 10.10.0.1

위와 같이 실행하면 컴퓨팅 모듈 서버 CM01에서 머신러닝 서버가 실행되고 TCP/IP 네트워크 서버 대기(Listening) 상태로 들어간다.

같은 요령으로 컴퓨팅 모듈 서버 CM02에 다음과 같이 접속하여 sp_server를 실행한다.



또 같은 요령으로 컴퓨팅 모듈 서버 CM03에 다음과 같이 접속하여 sp_server를 실행한다.



위와 같은 요령으로 컴퓨팅 모듈 서버 CM04에 다음과 같이 접속하여 sp_server를 실행한다.



위와 같이 실행하면 컴퓨팅 모듈 서버 4개(CM01, CM02, CM03, CM04) 모두 머신러닝 서버 대기 상태가 된다. 이제 이동형 로봇(Client)에서 머신러닝 Client 프로그램(sp_eyes)을 다음과 같이 실행한다.

이동형 로봇(Client)에서 머신러닝 Client 프로그램(sp_eyes) 실행



sp_eyes 프로그램은 반드시 루트 권한에서 실행한다. 이 프로그램 또한 제품을 구매하면 커널연구회에서 소스를 제공한다.

이 프로그램이 실행되면 다음과 같이 실행 로그가 표시되고 이동형 로봇(Client)의 모터가 구동된다. 전방에 있는 초음파 센서에 물체가 20센티미터 가까이 접근하면 카메라에서 영상을 수집하여 컴퓨팅 모듈 서버로 영상데이터를 보내서 머신러닝 서버 프로그램을 구동한다.



4개의 컴퓨팅 모듈 서버에서는 이동형 로봇(Client)에서 보낸 카메라 영상을 학습한 내용을 바탕으로 그 영상이 무엇인지 100분률로 대답한다. 80% 이상으로 대답하면 이동형 로봇(Client)은 그것을 정답으로 하여 그 정답에 맞는 행동을 하게 된다.

머신러닝 서버 프로그램 응답



위의 결과를 보면, 컴퓨팅 모듈 CM01에서 이동형 로봇(Client)에서 보낸 카메라 영상을 99.86%로 _mushroom (버섯)이라고 대답했다. 이동형 로봇(Client)에서 카메라에 버섯 사진을 보여줬으므로 이러한 응답이 오면 머신러닝 서버가 정확히 동작하고 있다는 것을 검증할 수 있게 된다.

이상으로 커널연구회의 똑똑한왕자(SmartPrince) 머신러닝 키트의 하드웨어 사양과 소프트웨어 사용에 대한 설명을 마무리하고자 한다. 지면상으로 부족한 점들은 아래 커널연구회 웹사이트에서 제품을 구매하면 위에서 언급한 프로그램들의 모두 소스와 더불어 교육까지 제공한다. (https://www.kernel.bz/product/SmartPrince)

※ 기타 문의 사항은 이메일(rgbi3307@nate.com)을 보내 주시기 바랍니다

<저작권자(c)스마트앤컴퍼니. 무단전재-재배포금지>

본 기사의 전문은 PDF문서로 제공합니다. (로그인필요)
다운로드한 PDF문서를 웹사이트, 카페, 블로그등을 통해 재배포하는 것을 금합니다. (비상업적 용도 포함)
 PDF 원문보기


  • 100자평 쓰기
  • 로그인

태그 검색
본문 검색
TOP