AWS DeepLens 시작하기

최근 딥러닝는 어렵고 멀기만한 용어가 아니라 마치 하나의 어플리케이션이나 서비스를 만들수 있는 프레임워크와 툴의 형태로 제공되어 많은 개발자들에게 큰 인기를 얻고 있다. Amazon은 AWS에 이미지분석과 딥러닝 프레임워크를 소개한 이후 DeepLens를 제작해서 영상처리 분야에서도 다양한 서비스를 공개했다. DeepLens에 대한 소개는 인터넷에서 쉽게 찾을 수 있기 때문에 소개를 생략하고 DeepLens를 가지고 어떻게 시작할 수 있는지 소개를 하려고 한다.

연구소에서 딥러닝기반 이미지 처리에 관련된 연구를 위해 DeepLens를 구매했다.

AWS의 문서는 꽤 자세히 설명을하고 있지만 몇가지 버전 정보가 맞지 않거나 텍스트 위주의 설명으로 진행하고 있어 가끔은 따라하는데 어려움이 있어 DeepLens를 구입해서 어떻게 설정하는지 설명이 필요할것 같아 블로그에 포스팅을 한다.

DeepLens 구성

DeepLens는 렌즈가 달린 본체와 110v 전원코드를 가진 전원어뎁터 그리고 micro SD 카드가 내용품이 전부이다. 국내에서는 220V를 사용하기 때문에 추가적으로 110V 에서 220V 변환할 수 있는 변환 코드가 필요하다. 전원 어뎁터가 240V까지 자유전압으로 지원된다.

DeepLens는 본체에 Ubuntu 운영체제가 설치되어 있다. 나중에 ssh로 접속할 수있고 apt-get 명령어로 업데이트하거나 필요한 소프트웨어를 설치할 수 있다.

DeepLens 뒤에 micro HDMI 포트가 있어 모니터에 연결하면 Ubuntu 화면을 바로 볼 수도 있고, USB에 키보드를 연결해서 리눅스 터미널을 바로 사용할 수 있다. 처음에 output stream을 설정하는데 Certificates 파일을 등록하고 비밀번호를 입력하라는 메뉴얼 보고 따라했는데 내가 지정한 비밀번호를 아무리 넣어도 틀린 비미번호라고 해서 급하게 micro HDMI를 구입했지만 결국 사용할 일은 별로 없었다. DeepLens Dashboard에서 실제 촬영하는 영상을 stream 으로 미러링해서 Chrome 이나 Firefox로 볼 수 있으니 어렵게 micro HDMI를 구입할 필요는 없어 보인다. 본체 뒤에 있는 reset 버튼은 새롭게 설정할 때 필요한데 꽤 구멍이 작아서 작은 핀셋 같은것이 필요하다.

DeepLens 리전

AWS DeepLens는 아직 Seoul Region에서 서비스가 제공되지 않고 있다. AWS Management Console에서 지역을 N.Virginia 로 지역을 변환한다. 그리고 AWS DeepLens를 선택한다.

DeepLens를 사용하여 프로젝트를 진행하기 전에 가장 먼저 해야할 것은 구입한 DeepLens 디바이스를 등록하는 것이다.

Device 등록

Register device를 선택한다.

디바이스 등록에서 가장 처음에 할일은 AWS 계정으로 DeepLens를 사용하기 위해서 디바이스 이름을 지정하고 IAM 권한을 얻는 것이다. 이름을 입력하고 권한을 만들게 되면 Certificate 파일을 다운로드하는 버튼이 활성화 되는데 .zip 파일로 다운로드가 되고 이 파일은 나중에 DeepLens 설정에 upload 하게 된다. Certificate 파일을 컴퓨터에 다운로드한다.

Certificate 파일을 다운로드하고 난 뒤에 Next 버튼이 활성화가 된다.

DeepLens 설정

이제 DeepLens에 접속할 차례이다. 먼저 DeepLens 본체 앞에 있는 전원 버턴을 누르면 파워온에 전원이 들어오게 된다. DeepLens는 3개의 LED가 있는데 첫번째 LED는 영상을 촬영하고 있을 경우 들어오는 것이고 두번째는 WiFi가 연결되면 들어온다. 세번째는 전원이 들어올경우 켜지게 된다. 디바이스가 아직 WiFi 설정이 되어 있지 않을 경우는 WiFi 빛이 깜빡거리고 있는데 설정이 마치게 되면 꺼져 있다가 인터넷을 사용할 경우 빛이 들어오게 된다.

DeepLens는 USB-ethernet 젠더를 사용하여 인터넷을 바로 연결할 수 있고 WiFi 로 접속해서 설정할 수 있다. DeepLens의 밑에 보면 DeepLens의 SSID 가 있고 SSID에 접속할 때 패스워드가 있는데 내 컴퓨터에서 WiFi로 DeepLens의 SSID 로 접속하면 된다.

DeepLens 본체 밑에 SSID 와 Password가 있다.
내 컴퓨터에서 WiFi 를 DeepLens AP 로 접속한다.

DeepLens는 AMDC-0000 로 시작하는 SSID를 가지고 있다. 맥에서 설정했지만 윈도우도 WiFi 설정에 들어가서 DeepLens를 AP 로 접속하면 된다. 이 때, AP 의 패스워드를 물어보는데 DeepLens 밑에 적혀있는 Password 를 입력하면 접속이 된다.

컴퓨터에서 DeepLens로 접속이 되면 Next 버튼을 눌러 DeepLens의 Console 로 접속을 한다.

여기서부터 AWS 문서와 조금 다르게 진행된다. 버튼을 클릭하면 http://deeplens.amazon.net 으로 URL 변경되는데 다음과 같이 찾을 수 없는 도메인이라고 페이지 오류가 발생한다.

http://deeplens.amazon.net 의 도메인 문제

이 문제는 공식 문서에서 DeepLens 버전에 따라서 다르게 접속을 해야하는데 최신 버전임에도 불구하고 위와 같은 페이지 오류가 발생한다. 이 때 IP 로 접속을 진행한다. http://10.105.168.127 로 접속을 진행한다. 그러면 DeepLens 설정 페이지가 나타나게 된다.

블로그를 포스팅하기 전에 이미 WiFi 에 설정을 진행한적이 있어서 network 설정과 Certificate 파일 그리고 device password 가 모두 설정되어 있지만, 처음 접속하게 되면 WiFi 설정부터 초기화 되어 있다. AP가 된 DeepLens가 사용할 WiFi를 찾아서 설정하면되고 앞에서 Device를 등록할 때 발급받은 Certificate 파일 (.zip) 을 업로드하면 된다. 그리고 Device password를 지정하는데 이 패스워드는 나중에 DeepLens에 ssh로 접속할 때 사용된다.

DeepLens streaming 설정

다음은 Enable video streaming 을 설정한다. DeepLens 설정 페이지 오른쪽 상단에 Enable video streaming 버튼을 클릭한다. 그러면 앞서 Device Certificate 파일과 달리 Streaming을 위한 Certificate 파일을 다운로드 받을 수 있다. 이것은 중요하다. 앞서 받은 Device Certificate 와 달리 Chrome 이나 FireFox에서 DeepLens에서 촬영하고 있는 영상을 실시간으로 미러링으로 보기 위해서 브라우저와 DeepLens 사이에 보안으로 필요한 파일이다. 이 파일이 없으면 streaming 으로 영상을 확인할 수 없기 때문에 반드시 다운받아 둔다. 파일 이름은 download.p12 파일로 다운로드가 된다.

DeepLens Streaming Certificate 와 Chrome 브라우저 설정

Chrome 브라우저로 streaming 을 보기 위해서는 streaming certificate를 맥 운영체제의 KeyChain 에 등록을 해야한다. 맥 운영체제에서 KeyChain 어플리케이션을 연다. 그리고 System 을 선택하고 Category는 My Certificates 를 선택하여 아래와 같이 나오도록 한다.

이제 앞에서 Streaming Certificate 파일을 드래그해서 넣어준다. 처음은 KeyChain 이 변경되어 맥 운영체제의 어드민 패스워드를 물어본다. 이 때는 맥 운영체제의 비밀번호를 입력한다.

Modify Keychain을 선택하면 다음에는 Streaming Certificate 파일의 패스워드를 물어보는데 이 때 비밀번호는 DeepLens 이다. 이 패스워드는 고정값이다. 앞서 우리가 설정한 Device 의 패스워드가 아니라 DeepLens 라는 것을 주의할 필요가 있다. 이것을 몰라서 몇번이나 이 작업을 반복하는 실수를 했었다.

Streaming Certificate 패스워드는 DeepLens 이다.

이렇게 운영체제의 패스워드와 streaming certificate 패스워드를 입력하면 Keychain 에 Video Server Certificate Authority 인증서가 등록이 된다.

Video Server Certificate Authority 인증서 등록 완료

여기까지 진행하면 DeepLens의 등록과 설정이 모두 끝나게 된다. 다음은 등록한 DeepLens를 사용하여 얼굴인식 프로젝트를 만들어보겠다.

DeepLens 프로젝트 생성

AWS DeepLens 콘솔로 돌아가서 Project를 새로 생성한다. Create new project 버튼을 클릭한다.

DeepLens 프로젝트를 새롭게 생성하면 몇가지 템플릿이 제공되는데 Face detection 템플릿을 가지고 프로젝트를 생성해보겠다.

Face detection 템플릿으로 프로젝트를 생성하면 DeepLens와 Inference Lambda 와 함께 Face detection model 이 함께 생성이되고 DeepLens에서 영상을 촬영해서 만들어진 모델로 추론을 시작해서 영상으로 출력을 한다.

프로젝트를 생성하면 다음과 같이 프로젝트에 사용하는 Function과 Model 을 확인할 수 있다. Function과 Model은 DeepLens 디바이스에 deploy를 하는데 Device 가 등록되는데 시간이 필요하기 때문에 DeepLens 디바이스가 등록이 완료되면 deploy를 진행하면 된다.

현재 DeepLens 디바이스를 등록하고 있는 중이다. 얼마의 시간이 지나야 디바이스가 등록된다.

모델은 다음과 같이 MXNet 프레임워크로 만들어져 S3에 올라가져 있다.

MXNet 프레이워크로 만들어진 모델

Function과 Model응 DeepLens 로 deploy

디바이스 등록이 완료되면 Function 과 Model을 DeepLens 로 deploy 시킨다.

DeepLens 디바이스에 deploy 가 완료

이제 DeepLens가 Face detection 을 할 준비를 모두 마쳤다.

DeepLens 출력 설정

앞서 우리는 Chrome Browser가 Streaming out을 하기 위해서 certificate 설정을 했다. DeepLens에 deploy가 마치면 IP address가 할당이 되는데 http://deeplensIPaddress:4000 으로 접속하면 streaming out을 볼 수 있다.

DeepLens 를 사용하여 Face detection streaming out 장면

나는 무엇을 위해 달리고 있는가?

올해가 시작되면서 블로그를 다시 시작하기로 마음을 잡았는데 프로젝트가 1차로 마무리되고 블로그를 열어보니 새마음으로 시작하려고 했던 흔적들을 찾을 수 없었다. 3개월동안 유지하는 인증서가 만료되어 블로그의 그 어떤 글도 볼 수 없었던 것이다.

주위를 보지않고 달리는 경주마처럼 미친듯 앞만보고 달렸던 시간들을 느낄 수 있었다. 주섬주섬 다시 인증서를 갱신하고 마음을 심호흡을 했다. 숨가쁘게 달리지 말자. 겨울이 지나 봄은 어느새 사라져가고 있다.

나는 공학을 전공하지 철학자는 아니다. 하지만 쏟아지는 코드와 무한하게 반복되는 테스트로 조금은 지쳐갈때 스스로 질문을 한다. 나의 내면과 나의 인생을 바라보면서 질문을 해본다.

나는 무엇을 위해 달리고 있는가?

나는 분명 블로그를 시작하면서 나의 기술을 기록하고 싶기도 했지만 눈에 넣어도 아프지 않을 나의 소중한 아들과의 추억도 남기고 싶었다. 스마트폰 사진첩에 쌓여있는 아이는 어느듯 스스로 달릴만큼 커버렸다. 다시 나는 글을 적으면서 스스로 다짐을 한다. 지난 몇년간 쉬지 않고 달려서 놓쳐버린 기억을 잡으려고 하지말고 다시 하나씩 기록하고 싶어졌다.

또한 서비스를 오픈하기 위해서, 어쩌면 위에서 정해놓은 기한에 맞춰서 밤낮없이 달려왔는지 모르겠다. 시간이 지나서 돌아보면 새롭게 알게된 지식도 고민도 정리되지 않은채 사라져 버린것들이 많다. 사실 그렇게 사라져버린 지식이야말고 정말로 값진 경험이라는 것을 잘 아는데도 하루의 잠시를 양보하지 않고 달리다보니 결국은 잃어버린 것들이 되어 버렸다.

나는 하드케이스 몰스킨을 다시 집어들었다. 노트북과 태블릿이 담긴 두껍고 무거운 가방에 무리하게 노트를 집어 넣게된 이유는 메모하는 습관을 가져야 겠다고 생각했기 때문이다. 온라인과 오프라인 그 어떤 방법도 상관없다. 점점 나는 나를 기록하고 무엇인가를 남기려고 노력하고 있다. 시간이 지나서 나를 증명할 수 있는 유일한 방법이 메모라고 믿고 있다.

나는 무엇을 위해 달리고 있는가? 라는 질문의 대답은 아직 찾지 못했다. 막연히 나의 미래, 가족 그리고 지식이라고 말하지만 정확한 나의 정체성 없이 그 어떤것도 존재할 수 없다는 것을 느낀다. 어렵게 말하고 싶지 않은데 말을 두서없이 적다보니 참 복잡하고 거창하게 보인다. 좀 더 가볍고 단순하게 생각하자.

그래, 일단 매일매일 한문장이라도 하나의 사진이라도 남겨가자.

새로운 연구주제 선정

살다보면 중요한 선택을 해야할 경우가 있다. 그 때는 깊은 생각을 해야한다. 그 선택으로 인해서 인생이 달라질 수 있기 때문이다.

우리는 살다보면 내가 생각하지 못한 길을 걸어가야할 때가 있다. 어쩌면 사회라는 구조속에 내가 상상하던 길을 너무 쉽게 벗어나고 있는 것이 당연하다고 받아들이고 살고 있는지도 모른다.

하지만 생각하지도 못한 그 다른 선택 때문에 내 삶이 송두리째 바뀌어 버릴수 있다. 그래서 우리는 선택의 시간을 갖게 되면 신중하게 선택해야하고 그 선택에 대해 책임을 가져야 한다.

이쪽 분야에서 유니콘이라는 용어가 있다. 특정 한 분야에 정통하는 것 뿐만 아니라 어떤 전 영역에서 특출한 능력을 발휘할 수 있는 신화같은 존재를 말한다.

이미지 출처 : https://gtmhub.com/blog/the-secret-ingredient-in-the-unicorn-recipe/

내가 만약 사람을 모집한다면 이 유니콘과 같은 사람을 원하지 않을 것 같다. 보통 작은 회사나 특수한 집단에서는 한 사람이 많은 일을 해낼 수 있는 유니콘 같은 사람을 원할 수 있다. 일단은 인건비 대비 많은 부분을 할 수 있기 때문이다. 하지만 유니콘은 신화에서 나오지 현실에서는 존재하지 않는다. 대부분 유니콘이라고 생각하는 사람들은 가치가 검증되지 않거나 신뢰할 수 없는 말 뿐인 사람들이 대부분이다. 또한 monolithic 에서 microservice 로 패러다임이 바뀌면서 한사람이 여러가지 일을 하는 구조가 점점 줄어들고 있다. 개인적으로는 모든 것을 다 할 수있는 유니콘 같은 사람이 아니라 한 영역에 깊이 있는 기술을 가지는 장인이 필요하다고 생각한다.

컴퓨터공학과를 나와 석사생활을 하면서 다양한 주제를 찾아보기도 하고 개발도 하면서 몇년을 지냈다. 석사과정에서는 다양한 분야에 다양한 방법으로 접근하고 경험하는 것이 좋다고 생각했지만 박사과정을 하면서 내가 연구하는 주제로 장인 같은 사람이 되고 싶다고 생각한다.

나에게 새로운 연구주제가 생겨 지금까지 한번도 경험하지 않았던 연구를 시작해야한다. 석사 학위는 잘 모르지만 박사 학위는 인생에서 가장 중요한 체크포인트가 될 것이라고 생각한다. 다시 말해서 박사 논문을 쓰는 순간 다른 연구주제로 앞으로 연구가 되기 어렵다고 생각한다. 박사라 함은 A의 전문가이지 A, B, C 전문가입니다 라고 이야기하지는 않기 때문이다.

깊은 새벽 나는 나침반을 꺼내어 다음 한 발을 내딛는 것 처럼 서툰 여행을 걱정하며 책을 꺼내었다. 새로운 연구주제의 접근으로 내가 어떻게 바뀌게 될지 나도 사실은 잘 모르겠다. 하지만 바꿀 수 없다면 즐겨라는 말이 있듯이 지금까지 내가 생각해왔던 신념처럼 내가 하는 일에 최선을 다하는 것을 목표로 삼고 다짐을 한다.

5년 뒤 나는 어떤 모습으로 변해있을까?

눈 내리는 교정

난 아직 대학교를 다니고 있다. 좀 더 정확하게 말하자면 매일매일 학교를 다니고 있다. 내가 박사과정이기도 하지만 다니는 회사 연구소가 대학교내에 있기 때문이다.

내가 있는 이 곳은 겨울에 쉽게 눈을 볼 수 있는 곳은 아니다. 그래서 조금만 눈이 내려도 모두가 언제 녹을지 모를 눈을 맞아보려고 드넓은 교정에 곧장 나온다. 눈이 많이 내리는 지방에 사람들은 이게 무슨 눈이야? 라고 코웃음을 칠지 모르지만 우리는 단체로 나와 마냥 즐겁게 웃으며 눈을 밟아본다.

연구소 신입 연구원들과 함께 눈내리는 교정에서

언젠가 이 교정을 떠나면 10년이 넘도록 지켜온 이곳에 대한 그리움이 많아질것 같다. 그래서 요즘은 순간마다 간단한 메모라도 남기려고 한다. 오랫동안 기억될 수 있도록 말이다.

느리게 더 깊게

내가 미국 출장을 갈 때였다.

미국행 비행기를 타기 전부터 비행기가 활주로에 완전히 나가서 더이상 인터넷을 할 수 없을 때까지 나는 분주하게 스마트폰을 계속 만지고 있었다. 사실 그렇게 바쁘고 중요한 것이 없었던것 같은데 나는 왜 자꾸만 닫혀있는 스크린의 빛을 밝혔는지 모르겠다.

Photo by Siddharth Bhogra on Unsplash

내가 탄 좌석 앞 조금 옆으로 외국계 여성 한명이 앉아 있었다. 두툼한 백팩을 다리 밑에 놓고 있었는데, 가방에서 iPod 을 꺼내었다. ‘아직도 iPod을 들고 다니는 사람이 있구나’ 라고 생각했다. 기내는 어두워졌다. 그리고 그 여성은 은은한 독서등을 켜더니 이래저래 만지작거려 부드럽거나 약간은 낡은 몰스킨을 꺼내어 펼쳤다. 몇가지 색 펜을 꺼내어 들고 몰스킨 페이지에 빼곡히 글을 적어가고 있었다. 그리고 10시간이 넘게 비행하는 동안 잠깐씩 눈을 붙이는 시간을 제외하고 책을 꺼내 읽거나 다시 노트에 글을 적었다.

스마트 폰은 편리하고 빠르게 정보를 얻을 수 있지만, 생각하는 시간을 전혀 가질 수 없게 만드는 바보 같은 기계라는 것을 알게 되었다.

책을 읽으면 상상을 할 수 있고, 글을 적으면 생각을 할 수 있다. 노래를 듣거나(화면이 없는 미디어기계로) 눈을 감으면 사색을 할 수 있다.

Photo by Erik Lucatero on Unsplash

생각해보자. 우리는 스마트 폰을 사용하면서 빠르게 정보를 얻는다. 여러가지 정보를 손가락 몇번만 움직이면 빠르게 해답을 얻을 수 있다. 여행을 할 때, 여행지에 대한 상상과 계획을 생각하기 보다 우리는 빠르게 길을 알기를 원하고 무엇을 먹을지 생각과 동시에 검색을 해서 사람의 반응을 보고 판단한다. 이미 여행을 다녀온 사람의 블로그를 보고 가기도 전에 모든 것을 다 알아낸다.

예전에는 사랑하는 연인들이 다투면 슬픈 노래를 들으며 눈물도 흘리고 내가 왜 그랬을까? 친구의 마음은 괜찮을까? 생각하고 또 생각했지만, 요즘은 각자 돌아서서 스마트 폰을 켜고 언짢은 기분을 달래기 위해서 Youtube 나 Netflix 에서 영상을 보며 다툼의 이유도 잊고 아무런 생각을 하지 않는다. 그렇게 시간이 지나 기분이 풀리면 마치 아무일도 없었던 것처럼 그 시간을, 사건을 망각해버린다.

나는 이번 미국 출장에서 가장 뜻 깊게 느끼고 온 것은 바로 더 느리게, 더 깊게 생각하는 것이 필요하다는 것이다. 무슨 일이 생기면 검색부터 하는 습관을 버리고 싶어졌다. 스마트 폰에 의존하게 된 이 무능한 뇌에게 다시 생각을 하고 차가워진 가슴에 온기를 불어주고 싶었다.

Photo by Ben White on Unsplash

책을 읽자. 사색을 하고 노래를 듣자. (서랍속에서 낡은 iPod을 다시 꺼내어서) 신문을 읽고 산책을 하며 생각을 정리하는 시간을 갖자. 너무 빠르게 하려고만 하지 말고 천천히 원인과 결과를 상상해보자.

느리게 더 깊게 말이다.

다시 블로그 시작

Photo by Nick Morrison on Unsplash

새롭게 블로그를 시작할거라고 나는 블로그 플랫폼에 대해서 고민을 많이 했다. 하지만 나는 이 고민이 부질 없는 것이라는 것을 한참 뒤에서야 깨닫게 되었다.

많은 시간이 동안 내 블로그에 그 어떤 글도 올라가지 못하고 있다는 것을 보았다. 바보 같은 고민을 하는 동안 내 지식과 이야기가 허무하게 지나치고 있다는 것을 느꼈다.

그래서 나는 더 이상 플랫폼에 대한 고민을 하지 않고 블로그를 바로 시작하기로 결심했다. 내 도메인을 사용할 수 있고 URI로 내 글을 표현할 수만 있다면 그것으로 만족하기로 했다. 이 세상 그 어떤 블로그 플랫폼도 내 요구를 만족할 수 없었기 때문이다. 차라리 그 시간에 글이라도 하나 더 남기고 싶어졌다.

다시 블로그 시작!