[번역] 100 달러와 TensorFlow로 "보는"로봇을 만드는 법

by Philbert | 2016-12-09 18:10
tensorflow 라즈베리파이

사물인식은 현재 기계학습에서 가장 흥미로운 영역 중 하나입니다. 컴퓨터는 얼굴이나 고양이 같은 물건을 꽤 오랫동안 믿을만하게 인식할 수 있었지만, 대형 이미지 안에 있는 어떤 물건을 인식하는 것은 인공지능의 성배였습니다. 아마 놀라운 사실은 인간의 두뇌가 사물을 잘 인식한다는 것입니다. 약간 다른 주파수의 물체에서 반사되는 광자를 자연스럽게 풍부한 세계로 안내합니다. 기계학습은 여전히 ​​간단한 작업으로 어려움을 겪고 있지만 지난 몇 년 동안 훨씬 나아졌습니다.

딥러닝과 ImageNet이라고하는 대규모 공용 트레이닝 데이터셋은 사물 인식에 대한 인상적인 발전을 이루었습니다. TensorFlow는 다양한 아키텍처에서 딥러닝 알고리즘을 구현하는 데 매우 용이한 잘 알려진 프레임 워크입니다. TensorFlow는 GPU를 활용할 때 특히 뛰어나며, 이는 또한 딥러닝 알고리즘을 실행하는 데에도 뛰어납니다. 

로봇 제작

저는 객체를 인식할 수 있는 로봇을 만들고 싶었습니다. 수년간의 컴퓨터 프로그램 개발 경험과 테스트 주도 개발은 나를 물리적인 프로젝트에서 작업할 수 있는 위협적인 존재로 만들었습니다. 현실 세계에서 버그가 있는 장치를 테스트하면 집을 태우거나 적어도 모터를 튀기고 교체 부품이 도착하기까지 며칠 정도 기다려야 합니다.

그림 1. 객체 인식 로봇의 아키텍처. 이미지 제공 : Lukas Biewald.

새로운 3세대 라즈베리 파이는 이러한 종류의 프로젝트에 완벽합니다. 라즈베리 파이는 Amazon.com에서 36달러이고 와이파이, 쿼드 코어 CPU, 그리고 기가바이트의 RAM을 가지고 있습니다. 6달러짜리 microSD 카드는 기본적으로 데비안인 Raspberian을 올릴 수 있습니다. 모든 부품이 어떻게 작동하는지에 대한 개요는 그림 1을, Pi 사진은 그림 2를 참조하시길 바랍니다.

그림 2. 내 차고에서 실행 중인 라스베리 파이. 이미지 제공 : Lukas Biewald.

저는 Sain Smart가 약 11달러에 만든 로봇 차대를 좋아합니다. 차대는 휠을 여러 가지 속도로 회전시킴으로써 놀라울 정도로 잘 동작합니다(그림 3 참조).

그림 3. 로봇 차대. 이미지 제공 : Lukas Biewald.

저렴한 옵션을 이용할 수 있는 경우 더 많은 돈을 쓴 곳은 Adafruit 모터 HAT입니다(그림 4 참조). DC 모터는 Raspberry Pi가 제공할 수 있는 것보다 높은 전류로 작동하므로 별도의 컨트롤러가 필요하며 Adafruit 모터 HAT이 매우 편리합니다. 모터 HAT 사용에 약간의 납땜이 필요했지만 하드웨어는 절 매우 너그럽게 대해 주었으며, Adafruit는 i2C를 통해 모터를 제어하는 멋진 라이브러리와 튜토리얼을 제공했습니다. 처음에는 더 싼 모터 컨트롤러를 사용했었지만, 우연히 Pi를 튀기는 바람에 더 나은 품질의 교체품을 주문하기로 했습니다.


그림 4. 모터 HAT과 카메라가 있는 라즈베리 파이. 이미지 제공 : Lukas Biewald.

15달러짜리 카메라가 Raspberry Pi에 바로 연결되어 있으며 사물을 인식하는 데 사용할 수 있는 실시간 비디오 피드를 제공합니다. 사용할 수 있는 멋진 카메라가 수없이 많습니다. 저는 야간 시력을 제공하는 적외선 카메라를 좋아합니다.

Raspberry Pi는 약 2의 전류가 필요하지만 3는 우리가 연결하려는 스피커에 더 안전합니다. iPhone 배터리 충전기는 이 작업을 위해 굉장히 효과적입니다. 소형 충전기는 실제로 충분한 앰프를 출력하지 못하고 문제를 일으킬 수 있지만 Lumsing 전력 뱅크는 훌륭하게 작동하며 18달러의 비용이 듭니다.

2대의 HC-SR04 소나 센서는 로봇이 물건 충돌을 피하도록 도와줍니다. 11달러에 5개를 살 수 있습니다. 

나는 찾을 수 있는 가장 저렴한 USB 스피커를 추가했고, 이 모든 부품를 함께 붙들기 위해 여러 개의 지퍼 타이, 뜨거운 접착체 및 폼보드를 사용했습니다. 추가 보너스로, 전자 제품과 함께 제공된 포장재를 잘라 내고 로봇에게 개성을 부여했습니다. 여기서는 차대, 카메라, 음향 장치 배치, 소프트웨어 등을 여러 가지로 실험했기 때문에 실제로 두 개의 로봇을 만들었으며 (그림 5 참조) 두 버전의 부품을 넉넉히 구입했음을 알 수 있습니다.


그림 5. 내 4WD 로봇 (오른쪽)과 2WD 누나. 이미지 제공 : Lukas Biewald.

로봇을 조립한 후에는 똑똑하게 만들어야 합니다. 온라인에 Raspberry Pi를 시작하는 튜토리얼은 100만 개가 넘습니다. 여러분이 Linux를 사용했다면, 대부분 익숙할 것입니다.

카메라 스트리밍을 위해 RPi Cam 웹 인터페이스는 훌륭하게 작동합니다. 매우 잘 설정할 수 있으며 기본적으로 카메라의 최신 이미지를 /dev/shm/mjpeg/cam.jpg의 RAM 디스크에 저장합니다.

카메라 데이터를 웹 페이지로 스트리밍하려는 경우 (디버깅에 매우 유용함), 매우 빠른 오픈 소스 웹 서버/프록시인 Nginx를 설치하면 됩니다. Nginx를 구성해서 카메라 이미지에 대한 요청을 파일 위치에 직접 전달하고다른 모든 요청은 웹 서버에 전달합니다.

http {
   server {
      location / {
            proxy_pass http://unix:/home/pi/drive.sock;
         }
            location /cam.jpg {
                root /dev/shm/mjpeg;
         }
   }
}

그런 다음 Python 웹서버를 구축하여 원격제어 차량을 위한 키보드 명령으로 로봇 바퀴를 회전시켰습니다.

여담이지만, 장애물을 피하며 달리는 자동차를 만들기 위해 음파탐지기 및 주행시스템을 가지고 노는 것이 재미있습니다.

로봇 프로그래밍

마지막으로, TensorFlow를 설치할 차례입니다. 설치 방법은 몇 가지가 있지만 TensorFlow에는 시스템에서 바로 빌드할 수있는 makefile이 제공됩니다. 이 단계는 몇 시간이 걸리고 많은 의존성 라이브러리가 필요하지만, 큰 도움이 되었습니다.

실행
카메라의 이미지에 있는 tensorflow/contrib/pi_examples/label_image/gen/bin/label_image는 상위 5개 이미지의 인식 결과를 내놓습니다. 이 모델은 다양한 입력에 대해 놀라울 정도로 잘 작동하지만 앞서 있는 이미지에 대한 인식이나 보고 있을 가능성이 있는 물건들에 대한 감각에 대한 정확도는 분명히 놓치고 있고, 트레이닝 데이터에 많은 오브젝트들이 빠져 있습니다. 예를 들어, 재미있는 각도에서도 내 노트북을 일관되게 인식하지만, 느슨한 전선 바구니에서 가리키는 경우 지속적으로 토스터를 보고 있다고 판단합니다. 카메라가 막히고 어두워지거나 흐릿한 이미지를 얻으면 대개 선충류(nematodes)를 보고 있다고 판단합니다. 이것은 분명히 훈련된 데이터의 인위적인 결과입니다.

그림 6. 키보드와 모니터에 연결된 로봇. 이미지 제공 : Lukas Biewald.

마지막으로 나는 텍스트를 음성으로 변환하는 Flite오픈소스 소프트웨어 패키지에 출력을 연결했으므로 로봇은 모든 사람에게 보고 있는 내용을 알릴 수 있습니다(그림 6 참조).

로봇 테스트

다음은 제2의 손으로 직접 만든 로봇입니다.


2003년에서 2005년까지 저는 스탠퍼드 로보틱스 랩에서 근무했습니다. 이 연구소에서는 수십만 달러의 비용이 들며 로봇과 거의 비슷한 물체 인식을 수행할 수 없었습니다. 이 소프트웨어를 제 드론에 넣은 후로는 두 번 다시 열쇠를 찾을 필요가 없습니다. (역자: 드론이 날라다니면서 열쇠를 찾아주는 모양이군요ㅎㅎ )

이 재미있는 프로젝트를 도와준 모든 사람을 인용하고 싶습니다. 이웃인 Chris Van Dyke와 Shruti Gandhi는 로봇에게 친절한 성격을 부여했습니다. 내 친구 Ed McCullough는 하드웨어 디자인을 대폭 향상했고 뜨거운 접착제와 폼 보드의 가치를 가르쳐주었습니다. Google에서 일하는 Pete Warden은 TensorFlow를 Raspberry Pi에서 올바르게 컴파일하고 멋진 고객 지원을 제공하는 데 도움을 주었습니다.

댓글 0

머신러닝을 활용한 IoT 사례

[번역] 100 달러와 TensorFlow로 "보는"로봇을 만드는 법

by Philbert

MADE BY

Philbert

プログラミング
[번역] 일본의 오이 농가가 딥러닝과 TensorFlow를 사용하는 방법 다음글 [번역] 100 달러와 TensorFlow로 "보는"로봇을 만드는 법현재글