2019/05/13 - [Study/인공지능학습] - [인공지능] coral usb accelerator + Raspberry pi zero w

2019/05/16 - [Study/인공지능학습] - [인공지능] Coral USB Accelerator와 Edge TPU




지난 포스팅에서 구글의 Coral USB Accelerator를 구입하고 간단한 모델을 돌려본 것을 정리해보았다.

이번 포스팅에서는 Coral USB Accelerator(이하 coral)의 공식 홈페이지를 참조하여 요구 사항 및

엣지 컴퓨팅에 사용되는 Tesorflow Lite에 대해 간단하게 살펴보고자 한다.


각각의 공식 홈페이지는 다음과 같다.


Coral
Tensorflow Lite


Coral USB Accelerator


Coral 시리즈는 지금 소개하고자 하는 USB Accelerator 외에 완전한 보드 형태인 Coral Dev Board가

있으나 이번 포스팅에서는 USB Accelerator에 대해서만 다루도록 하겠다. 다른 부분에 대해서는 공식홈페이지를

참고하기 바란다.


우선 데이터시트를 보면 coral은 구글에서 자체적으로 만든 프로세서를 사용하며 USB 3.0 Type C 소켓을

지원하고 데비안 기반의 리눅스에서 작동을 한다. 하지만 데비안에서 파생된 우분투 리눅스도 사용 가능하며

x86-64 또는 ARMv8 명령어 집합을 포함하는 ARM32/64 기반의 프로세서에서 사용이 가능하다.


이 기준에 따르면 라즈베리파이 zero 시리즈는 ARMv6 명령어 셋 기반이라 지원이 안되지만 홈페이지에도

나와 있듯이 비공식적으로는 사용 가능하다. 또한 coral은 USB 3.0을 지원하지만 라즈베리파이는 아직 2.0만을

지원하기 때문에 속도면에서 손실이 있다.


coral을 사용하기 위해서는 Edge TPU runtime과 Python 라이브러리를 설치해야 하는데 기본적으로

Python 3.5 버전을 지원하며 만일 3.6 버전 이상인 경우 install.sh 스크립트 파일의 맨 마지막 줄에서

python3.5 대신 python3으로 수정한 후 설치하면 된다. 라이브러리가 설치되는 동안 coral이 연결된

상태였다면 설치 후 다시 연결을 해주어야 coral이 작동한다.


또한 이 과정에서 클록 주파수를 최대로 사용할 것인지를 묻는데 만일 최대로 사용하게 되면 추론 속도가

2배가 되지만 대신에 전력 소모량이 많아지며 발열이 증가한다. 심지어는 최대로 할 경우에는 손닿지 않는

곳에 장치를 두거나 부상을 막기 위해서는 기본 속도를 사용하라고 경고하고 있을 정도니 발열이 꽤나 심한
것 같다. 클록 주파수 설정은 단순히 라이브러리 설치를 다시 진행하여 변경할 수 있지만 2019년 4월 이전에

설치한 경우별도의 업데이트 과정을 거쳐야 한다.


coral에는 흰색 LED가 하나 장착이 되어있는데 신호는 매우 단순하다. 그냥 불이 들어와 있으면 초기 상태인

것이고 연산을 수행하면 LED가 점멸한다. 이게 끝이다…


coral을 작동시키기 위해서는 USB를 통해 적어도 5V 전압에 500mA의 전류를 공급해주어야 한다. 내가 

라즈베리파이 zero w를 사용하면서 usb 허브에 coral을 물릴 수밖에 없었는데 이 때 전원 공급이 가장 

우려되었지만 별도의 외부 전원 없이 coral이 정상 동작 하였다. 혹시 전원 공급이 약해서 속도가 느린가 하고 

usb 허브에 외부 전원을 넣어 봤으나 느린 건 매한가지였다…-.-


이번 포스팅에서는 여기까지만 다루기로 한다. 기타 상세한 내용에 대해해서는 공식 홈페이지를 참고하기바란다.


TensorFlow models on the Edge TPU - 개요

엣지 컴퓨팅에 사용되는 TensorFlow Lite는 TensorFlow 공식 홈페이지에 소개가 되어있지만 Coral

홈페이지에도 TensorFlow 관련 내용이 있어 먼저 Coral 홈페이지의 내용부터 정리를 해보겠다.

Edge TPU의 경우 낮은 전력을 소모하면서 빠른 신경망 연산을 처리해야 한다는 제약이 있기 때문에

조금 특별한 신경망 연산 기능과 구조를 가져야 한다. 때문에 Edge TPU에서도 CNN과 같은 심층 신경망을

실행할 수 있지만 TensorFlow Lite라는 특별한 버전만 지원되며 Edge TPU에 맞게 컴파일 되어야 한다.


TensorFlow Lite는 TensorFlow의 경량 버전으로 TensorFlow Lite의 모델과 인터프리터 커널의
바이너리 사이즈를 줄임으로써 모바일 기기나 임베디드 시스템에서 추론의 속도를 높였다. 다만 모델을 바로
훈련 시키지는 못하며 TensorFlow에서 훈련시킨 모델을 TensorFlow Lite converter라는 툴을 이용하여

변환해야 한다.


Edge TPU에 대한 최적화 과정에서 Quantizing이라는 용어가 나오는데 이는 사이즈를 줄이기 위해

가중치나 활성함수의 출력에 사용되는 32비트 부동 소수점 타입을 8비트 고정 소수점 타입으로 변환하는

과정이라고 한다. 이 과정을 통해 모델이 더 작고 빨라지게 되며, 비록 정밀도가 떨어지긴 하지만 추론의

정확도에는 큰 영향을 미치지 않는다고 한다.


이러한 이유로 새로 모델을 만들고 훈련시키는 과정이 조금 복잡한데 구글에서 새로운 데이터 셋으로 재학습을

하면 Edge TPU에서 사용 가능한 TensorFlow 모델들을 다수 제공하고 있으므로 필요한 경우 이를 활용하면

시간을 절약할 수 있을 것이다.


Edge TPU work process출처 : https://coral.withgoogle.com/docs/edgetpu/models-intro/



하지만 직접 모델을 만들어 Edge TPU에서 사용하려고 한다면 다음의 요구 조건을 충족시켜야 한다.


  • 텐서 파라미터는 8비트 고정 소수점 타입이어야 한다.
  • 텐서의 크기는 컴파일 시에 그 크기가 고정되어있어야 한다.
  • bias 텐서 같은 모델 파라미터 역시 컴파일 시에 크기가 고정되어있어야 한다.
  • 텐서들은 3차원 이하여야 한다. 만일 3차원 이상의 크기를 가지는 텐서를 사용할 경우 가장 안쪽의
    3개 차원만이 1보다 큰 크기를 갖게 된다.
  • 모델은 Edge TPU를 지원하는 연산만 사용 가능하다.


이 조건이 충족되지 않아도 컴파일은 되지만 Edge TPU 상에서는 일부만 실행될 것이다. 이렇게 조건을 충족하지
않는 연산이 있는 경우에는 모델의 그래프가 Edge TPU에서 실행 가능한 부분과 그렇지 않은 부분으로 나뉘게

되는데 이 중 Edge TPU에서 지원하지 않는 부분은 CPU에서 실행된다.


여기서 주의할 점은 현재의 Edge TPU 컴파일러는 이러한 분할을 한 번만 할 수 있기 때문에 만일 첫 번째

연산이 Edge TPU에서 실행 가능한 연산이고 두 번째 연산이 실행 불가능한 연산이라면 두 번째 이후의

모든 연산은 비록 Edge TPU에서 실행 가능하다 하더라도 모두 CPU에서 실행되어 버린다.


출처 : https://coral.withgoogle.com/docs/edgetpu/models-intro/



이렇게 CPU에서 실행되는 연산이 포함되면 당연히 100% Edge TPU에서 실행될 때보다 추론이 늦어지므로

Edge TPU에서 실행 가능한 연산만 포함되도록 노력해야 한다(참고로 Edge TPU 컴파일러는 컴파일이 종료되면 

Edge TPU에서 실행된 연산과 CPU에서 실행된 연산의 수를 알려준다고 한다).


앞서도 언급했지만 밑바닥부터 모델을 만드는 시간과 노력을 절약하기 위해서는 구글에서 이미 Edge TPU와

호환되도록 만들어놓은 모델을 재학습하여 사용하면 되는데 이 때 사용되는 기술이 Transfer Learning(이전 학습
또는 전이 학습) 혹은 fine tuning(세부 조정)이라는 기술이다. 또 다른 방법으로 Edge TPU 장비에서 직접
재학습을 수행하는 Python API를 이용한 weight imprinting이라는 방법이 있다.

Transfer Learning은 소개의 범위를 벗어나므로 더 상세한 내용은 Coral 홈페이지를 참조하기 바란다.

이렇게 만들어진 모델을 Edge TPU에서 실행하기 위해서는 Edge TPU runtime과 API 라이브러리가 호스트
시스템(라즈베리파이 등)에 설치가 되어있어야 한다. 하지만 Coral 제품 중 Coral Dev Board나 SoM 등은 
이미 이러한 것들이 설치되어 있어 설치 과정을 생략하고 바로 사용 가능하다.

현재 Coral 제품에서는 C++과 Python 기반의 API가 사용 가능하다.


정리

이렇게 간단하게나마 Coral Accelerator의 하드웨어적인 측면과 소프트웨어적인 측면의 개요를 정리해 보았다.
중요하게 알아야 할 것은 모바일 기기 또는 임베디드 시스템을 위해 만들어진 것이라 원하는 모든 것을 할 수는
없다는 점이다. 물론 이러한 기기들의 컴퓨팅 파워가 더 올라갈 수는 있겠지만 저전력이라는 매리트를 포기하지
않는 한은 한계가 있을 것이다.

추후 추가로 정리하겠지만 TensorFlow Lite에서 제공하고 있는 모델은 총 5가지가 있는데 다음의 모델들이다.

  • Image classification
  • Object detection
  • Smart reply
  • Pose estimation
  • Segmentation

  • 아직은 처음 두가지만 재학습 없이 테스트해보았지만 나머지 모델들도 확인을 해보고 싶다. 특히 Pose estimation은
    활용도가 꽤 있을 것 같다.

    처음에는 그저 호기심으로 인한 지름으로 시작했는데 하나하나 정리하다보니 나같이 머신러닝이나 딥러닝을 
    앝은 수준에서 시작해보려는 사람들에게는 좋은 학습 대상이 될 수 있을 것 같다. 특히나 ‘인공지능? 어따 써먹지?
    하는 사람들은 몸소 느끼면서 배울 수 있을 것 같다.

    일단 무작정 머리에 들어오지도 않는 책만 읽는 것 보다는 라즈베리파이와 Coral 그리고 TF Lite에서 주어진
    모델들을 이용하여 뭔가 하나 만들어보는 쪽으로 올해의 목표를 수정해야겠다.


    블로그 이미지

    마즈다

    이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^



    2019/05/13 - [Study/인공지능학습] - [인공지능] coral usb accelerator + Raspberry pi zero w

    2019/05/16 - [Study/인공지능학습] - [인공지능] Coral USB Accelerator와 Edge TPU




    뭔가 하나를 진득하니 끝내야 하는데…이놈에 호들갑스러운 호기심은 눈밭에 강아지 뛰놀듯한다…
    얼른 미니 드론 만들고 다음에 싱글콥터 그 다음에 4족 보행 로봇 최종판을 만들어야 하는데…
    도대체 어느세월에...ㅠ.ㅠ


    이번 호기심의 대상은 바로 구글에서 엣지 컴퓨팅 보드로 출시한 coral 시리즈 중에 usb 가속기인

    coral usb accelerator이다. 페이스북에서 어떤 분이 올려놓으신 엣지 컴퓨팅을 위한 보드들의
    성능을 비교한 해외 블로그를 보고 나니 궁금해서 견딜 수가 없었다.


    Benchmarking Edge Computing


    아직은 책만 줄창 읽어대고 있는 정도의 수준이라 내가 이걸 사서 제대로 써먹을 수나 있을지 의문이었지만
    지름의 기본 자세인 '그래도 언젠가는 써먹겠지’라는 마음가짐으로 하나 질렀다.

    그리고 다행히도 간단한 테스트 정도는 해볼 수 있었다…^^;



    Edge Computing이란?


    우선 본론에 들어가기 전에 엣지 컴퓨팅이란 것이 무엇인지 부터 알고 넘어가자.


    예전에 메인프레임을 쓸 때는 당연한 일이었고 웹 기반의 시스템이 자리를 잡은 후에도 대부분의 중요한

    연산은 서버에서 처리를 하고 클라이언트 기기(PC)에서는 자료를 입력하는 정도의 기능만 수행을 했다.

    그만큼 서버는 강력한 기능을 갖고 있었고 클라이언트로부터 전송되는 데이터들은 서버가 감당하기에

    충분한양이었다.


    하지만 스마트폰이 지배하는 세상이 되면서 클라이언트의 종류와 그로부터 전송되는 데이터는 점점 증가를

    하게 되었고 급기야 IoT라는, 모든 것을 인터넷에 연결시키겠다는 야심찬 시도가 진행되면서 이제 클라이언트는

    그 종류를 한정할 수 없게 되었고 그 수많은 클라이언트들로부터 올라오는 데이터의 양은 서버가 감당하기 어려운

    상황이 되어버렸다.


    한편, 스마트폰을 시작으로 한 클라이언트 기기들은 소형화와 고성능화로 인해 웬만한 작업은 그 기기 내에서 처리를

    할 수 있게 되었다. 예전같으면 워크스테이션에서나 가능했을 동영상 편집을 스마트폰에서도 할 수 있게 된 것이다.

    상황이 이렇다보니 클라이언트 기기를 단순히 서버로 데이터를 전송하는 용도로만 사용하는 것이 엄청난 자원의 낭비가

    된 것이다.


    결국 가능한 한 클라이언트에서 처리할 수 있는 부분은 처리를 하고 서버에서는 연산에 높은 성능이 필요한 부분을

    처리하려는 시도를 하게 되었고 이 과정에서 클라이언트 측에서 처리되는 부분을 Edge Computing이라고 부르게

    되었다.


    하지만 아무리 클라이언트 기기들의 성능이 좋아졌다고 해도 머신러닝이나 딥러닝을 처리하기에는 한계가 있다보니

    이러한 고성능의 연산을 보조해주기 위한 많은 장치들이 개발되었다. 그 자체로 보드형태를 가지고 나온 제품과

    기존의 소형 컴퓨터 보드인 라즈베리파이 등에 연결해서 사용 가능한 USB 기기 형태로 나온 제품들이 있는데

    처음 소개한 블로그에서는 바로 이러한 기기들의 성능을 벤치마킹하고 있는 것이다.



    무엇을 선택할 것인가?


    이 블로그를 보면 몇가지 대상에 대해 상당히 많은 항목을 벤치마킹 하고 있다. 하지만 영어 울렁증의 도움으로

    아주 가볍게 한 가지를 선택할 수 있었다. 바로 제일 처음 나오는 추론 속도에 대한 벤치마킹을 기준으로 가장

    가성비가 높은 제품을 고르기로 한 것이다.


    일단 추론 속도에 대한 벤치마킹 그래프를 보면 구글의 coral 시리즈가 매우 성능이 좋다. 그래서 1차로 coral 
    시리즈를 구입하기로 결정을 했다(사실 인텔의 NCS2를 더 먼저 알게 되었고 디자인도 NCS2의 사이버틱한

    디자인이 더 마음에 들었지만 벤치마킹 결과와 가성비에서 탈락했다).


    라즈베리파이가 없었다면 완전체인 coral dev board를 구입했겠지만 이미 예전에 빅데이터 클러스터 공부한다고

    깝죽대면서 사다놓은 라즈베리파이가 수두룩 빽빽하게 있어 비용면에서 더 저렴한 coral usb accelerator로

    선택을 했다.





    구매는 MOUSER에서 했으며 가격은 $74이다. 배송은 DHL로 약 2일만에 도착을 했고 배송비는 무료다!

    생각보다 빨리, 안전하게 도착해서 참 다행이었다(가장 최근의 해외 직구는 banggood에서 주문한 모터를

    2달 만에 받은 것이었다…-.-).



    장비 연결


    현재 집에 있는 라즈베리파이는 3B 모델이 5대, zero w 모델이 2대 있다. 그런데 생각해보니 3B 5대는

    클러스터 만들면서 스택 케이스에 다 연결하고 배선까지 꽁꽁 묶어놓아서 도무지 풀어서 사용할 엄두가

    나질 않았다.


    결국 zero w를 사용하기로 결정을 했는데 이게 또 만만치 않다.라즈베리파이 zero w의 경우 USB포트가

    마이크로 USB타입으로 꼴랑 2개 있다. 그나마 하나는 전원공급용이므로 실제 사용 가능한 것은 1개 뿐이다.

    게다가 w가 무색하게 빌트인 된 Wi-Fi 모듈은 잘 붙는공유기 찾기가 하늘의 별따기라 어쩔 수 없이 USB 형태의

    무선 랜카드를 별도로 사용해야 한다.


    이렇게 해서 일단 필요한 USB장비는 벌써 2개가 되었다. USB 랜카드와 coral…여기서 또 한가지 생각지 못한

    문제가 생겼다. 라즈베리파이 사 모을 때 파이 카메라 V2 버전을 같이 산 것이 있어 그 걸 사용하려고 했는데…

    아뿔싸! 라즈베리파이 3B와 zero w의 카메라용 필름 케이블 소켓 크기가 다르다…OTL 변환 케이블이 있긴 있는데…
    돈도 돈이고, 배송도 배송이고…ㅠ.ㅠ


    다행히 아이들이 학습용으로 사용하던 USB CAM이 있어서 그걸 사용하기로 했다.
    이렇게해서 총 3개의 USB장치를 붙여야 하는 상황이 되었다. 결국 USB 허브까지 하나 구매해서 어찌어찌

    연결은 성공하였다~^^ (사진은 카메라 연결 전이다.)


    사실 최대한 부피를 줄인 장치를 만들어보고 싶어서 보드로 zero w를 선택한 것인데 결과적으로는 배보다 배꼽이 

    더 큰 상황이 되어버렸다. 나중에 기회가 된다면 하우징들은 다 벗겨버리고 연결을 해서 작은 통합 기기를 만들어
    보고 싶다(하지만 성능 때문에 zero w는 못쓸 듯…-.-).






    라이브러리 설치 및 테스트


    공식적으로 coral usb accelerator가 지원하는 기기는 라즈베리파이 2와 3의 모델 B와 B+ 뿐이다.

    즉, zero w는 공식적으로는 지원하지 않는 보드이다. 하지만 비공식적으로 설치 가능한 라이브러리가 존재하고

    공식 사이트에서도 소개하고 있다. zero w에 대한 라이브러리 설치 방법은 아래 링크에서 확인 가능하다.


    support for Raspberry Pi Zero


    설치 방법은 매우 간단하며, 압축된 라이브러리 패키지를 다운로드 받고 압축을 해제한 후 install.sh를 실행하면

    끝이다. 그리고나서 공식 사이트에 있는 설명대로 데모 프로그램을 돌려보면 된다.우선 설치 후 2개의 데모 프로그램을 

    실행해보았다. 이미지 분류와 얼굴 인식을 하는 데모였는데 정상적으로결과가 나오는 것을 확인하였다. 


    특히 얼굴 인식의 경우 구글에서 받은 이미지로도 테스트를 해보았는데 대체로잘 인식이 되었으나 특정 사진 한장은 전혀 

    인식을 못하였다. 다양한 요인이 있을 것 같은데 정확한 이유는 모르겠다. 맨 처음 사진은 Mobilenet SSD v2에서 제공

    되는 사진이고 다음 3장은 구글에서 가져온 사진인데 맨 마지막 사진은 인식에 실패했다.









    성능의 문제

    사실 지금까지 라즈베리파이를 사용해오면서 딱히 성능을 확인해야 할만큼 부하가 걸리는 작업을 해본 적이
    없기에 굳이 따져보지 않았는데 막상 coral usb accelerator를 연결하여 이미지 분류나 인식 작업을 해보니
    라즈베리파이 3 모델 B와 zero w 사이에는 엄청난 성능의 차이가 있었다.

    라즈베리파이 3 모델 B에서 데모 프로그램 실행 시 얼마나 시간이 걸리는지 측정한 자료가 거의 없어 확인이
    쉽지 않았는데 유튜브에서 발견한 동영상 하나에서 대략 5초 정도 걸리는 것을 확인했다.

    그런데 zero w 모델에서는 15초 정도의 시간이 걸렸다. 처음에는 coral usb accelerator가 연결되지 않았는지
    의심도 해보았으나 연결되지 않은 경우에는 실행 시 오류가 발생을 하였고 또 연결되었을 때 연산 시 LED가 
    점멸하는 것도 확인을 하였으니 분명 coral usb accelerator가 작동을 하고 있는 것이었다.






    이러한 성능의 문제는 다음에 테스트한 동영상에서의 사물 인식의 경우에 더 심각하게 나타났다.


    카메라 테스트


    일단 앞서 말한대로 파이 카메라를 사용할 수가 없어 USB Cam을 사용하게 되었다. 
    그리고…이미 사물 인식을 하기도 전에 영상은 너무 끊겨서 적당한 수양의 과정을 거치지 않고서는 참고 
    보아줄 수 없는수준이었다.

    그래도 나름 참는데는 일각연이 있는 터라 테스트를 진행해보았다. 2개의 다른 소스로 진행을 해보았다.
    처음 테스트는 아래의 블로그를 참고하였다.

    Hands-on with the Google Coral USB Accelerator


    사용한 모델 및 실행 코드 정보가 모두 위의 블로그에 정리되어 있다. 그저 다운로드 받고 실행하기만 하면
    되는 생각보다 간단한 과정으로 진행할 수 있다. 아래 동영상을 보면 알겠지만 일단 상당히 느리다…ㅠ.ㅠ
    인식률 또한 상상했던 것보다 좋지 않은데 두 번째 테스트와 종합적으로 봤을 때 사람과 차에 대한 인식룰은
    기가 막히다. 특히 사람은 팔뚝만 슬쩍 보여도 사람으로 인식한다.

    하지만 드라이버와 커터는 인식을 못했고 귤은 사과로 인식하거나 햄스터를 새, 개 등으로 인식하고 있었다.
    두 번째 동영상은 유튜브에서 영상을 하나 틀어놓고 그 영상을 찍으면서 인식을 시킨 것인데 버스나 차를 대체로
    잘 인식하는 것 같았다.






    두 번째 테스트는 다음의 2개 사이트를 참고했다.

    프미케의 낙서장
    https://qiita.com/PINTO/items/dd6ba67643bdd3a0e595


    사용한 모델은 첫 번째 테스트와 동일하지만 실행코드가 조금 다르다. 두 번째 테스트용 실행코드에는 초당 프레임

    정보가 나오는데 위 링크한 블로그들의 프레임 수와 비교하면 형편없는 수준이다. 그리고 특이한 것이 처음 테스트에서는 
    커터를 인식하지 못했는데 두 번째 테스트에서는 커터를 인식하였다.





    정리


    대체로 뭔가 하나에 관심을 갖게 되어 실행을 해볼 때까지 구입, 준비, 실행의 과정이 꽤나 길었는데 이번에는
    관심을 갖게된 후 이 블로그 포스팅을 작성하기까지 정확히 5일 걸렸다. 거의 일사천리로 진행이 된 것이다.
    그거 하나로도 위안이 된다…^^;;

    하지만 앞에서도 강조했듯이 라즈베리파이 zero w는 작다는 것 외에는 그닥 쓸모가 없다는 것이 판명났다.
    적어도 엣지 컴퓨팅에서는…최소한 라즈베리파이 3 모델 B 이상은 되어야 암에 걸릴 확률을 낮출 수 있을것이다.
    아직은 내 수준이 남들 발바닥 언저리에서 노는 수준이다보니 근거는 없지만 뭔가 모델들이 사람이나 차량에
    특화된 것 같은 느낌이다. 자율주행 RC카 같은 것 만들어보면 재밌을 것 같다.

    물론 조금 더 실력이 된다면 수화 번역기 같은 것을 한 번 만들어보고 싶다.

    어쨌든 이렇게 또 하나의 가능성을 맛본 것으로 만족하면서 포스팅을 마친다.


    블로그 이미지

    마즈다

    이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^


    2019/04/21 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #1 - Atom + PlatformIO

    2019/04/23 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #2 - Eclipse

    2019/04/28 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #3 - Visual Studio

    2019/05/06 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #4 - Xcode + embedXcode





    아두이노 공식 개발툴을 대체할 수 있는 5가지 방법 중 마지막으로 embedXcode를 소개한다.

    사실 마지막 5번째로 CLI(Command Line Interface: 명령 줄 실행 환경)이 있으나 고수들이 아니면 사용이

    쉽지 않은 관계로 이번 정리에서는 제외를 하였다.


    지난 번 이클립스 관련 포스팅에서 이클립스가 사용하기 무겁다고 하였지만 사실 Xcode에 비하면 이클립스는

    양반이라고 할 수 있다. 만일 PC(Mac) 환경이 메모리 8Gb에 HDD를 사용 중이라면 개발은 포기하는 것이

    좋을 것이다. 적어도 메모리 16Gb에 디스크는 퓨전 드라이브 정도는 써야 쓸만할 것이다.

    어쨌든 Mac을 사용한다면 선택 가능한 툴이니 소개를 해본다.

    Xcode + embedXcode

    Xcode는 Mac의 App Store를 통해 다운로드 받을 수 있다. 그리고 embedXcode는 다음의 주소에서
    다운로드 받으면 된다.

    embedXcode 다운로드


    embedXcode의 경우에도 세가지 버전이 있는데 +에디션 버전과 일반 버전이 있다. 일반 버전은 무료이고
    +에디션 버전은 유료이며 +에디션의 경우 다시 2가지로 나뉘어 개인용은 29유로, 상용 라이센스는 99유로이다.



    우선은 당연히 무료 버전으로 받아 설치를 하면 된다. 다운로드 받을 때 Xcode 10 버전용과 9 이하 버전용이

    별도로 링크되어 있으므로 자신의 Xcode 버전에 맞는 embedXdoce를 다운로드 받으면 된다. 


    설치가 모두 끝났으면 프로젝트를 만들어보자. Xcode를 실행 후 Create a new Xcode project를 선택하여
    새 프로젝트를 만든다.





    템플릿 선택 창이 뜨면 상단의 플랫폼 선택 메뉴에서 macOS를 선택한 후 화면 가장 하단에 있는 embedXcode를
    선택한다.






    프로젝트 정보 입력 창에서 가장 위에 있는 프로젝트 이름과 가장 아래의 2개, 프로젝트 scope와 board를 적절하게
    선택한다.






    생성된 프로젝트 구조는 다음과 같다. 상당히 많은 파일과 디렉토리들이 보이는데 메인 소스는 '프로젝트명.ino’이다.
    프로젝트가 처음 생성된 상태에서는 모든 텍스트가 그냥 흰색으로만 보이는데 이 것은 상단 메뉴에서 선택을 해주면된다. 
    메뉴는 Editor > Syntax Coloring > C++을 선택해주면 된다.







    생성된 파일 중 중요한 파일이 하나 있는데 바로 ‘Makefile’이다. 이 것은 embedXcode의 가장 불편한 점 중

    하나이기도 한다. Serial Port나 Baud Rate같은 중요 사항을 바로 이 파일에 직접 타이핑하여 설정해야 한다.





    이렇게 모든 설정이 끝나고 나서 빌드를 하면 된다. 빌드를 할 때에는 target을 잘 지정해주어야 하는데

    target에 대한 상세한 내용은 아래 링크에서 확인할 수 있다.


    Select a target


    빌드 및 업로드 로그는 Xcode의 좌측에 있는 Navigator창의 상단 가장 오른쪽에 있는 Report Navigator에서
    확인할 수 있다.




    정리

    이렇게 해서 아두이노 공식 개발 IDE를 대체할 수 있는 4가지 방법에 대한 정리가 끝이났다.개개인마다 취향이 다르겠기에 
    무엇이 가장 낫다고 단언할 수는 없지만 대체로 아두이노 스케치 프로그램의크기가 작다는 점을 생각한다면 역시나 처음 소개한
    Atom을 이용하는 것이 가장 부담 없고 편하지 않을까하는 것이 개인적인 생각이다.

    아무쪼록 아두이노를 활용하시는 많은 메이커분들의 선택에 도움이 되었으면 한다.


    블로그 이미지

    마즈다

    이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^



    2019/04/21 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #1 - Atom + PlatformIO

    2019/04/23 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #2 - Eclipse

    2019/04/28 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #3 - Visual Studio

    2019/05/06 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #4 - Xcode + embedXcode





    앞서 소개한 2가지 툴의 경우 대부분의 OS에서 제약 없이 사용 가능한 툴이었다. 하지만 남은 2가지 툴의 경우
    사용 OS에 제약이 있는 툴이다. 이번 포스팅에 소개할 Visual Studio(이하 VS)의 경우 Mac용도 있지만
    Mac용 VS에서는 C/C++ 개발이 지원되지 않는다. 따라서 일반적으로 C/C++ 기반으로 개발을 하게 되는
    아두이노 개발 역시 Mac에서는 할 수가 없다. 따라서 VS로 아두이노를 개발하기 위해서는 반드시 Windows
    환경이 필요하다(애초에 Add-On 설치 프로그램의 확장자가 vsix로 Windows환경에서만 실행된다). 


    또한가지 특이한 점이라면 공식 Arduino IDE가 설치되어있어야 하고 VS 설정에서 이 경로를 지정해주어야
    한다는 점이다.


    Visual Studio + Arduino Add-On


    Add-On은 VS 환경에 설치 가능한 플러그인이라 생각하면 된다. 당연히 먼저 VS가 설치 되어 있어야 한다.

    VS의 community 버전은 무료 라이센스이기 때문에 이 community 버전을 다운로드 받아 설치하면 된다.


    Visual Studio 다운로드


    VS가 설치된 상태에서 Add-On을 다운로드 받는다.


    Arduino IDE for Visual Studio


    다만 VS Add-On의 경우 완전한 무료가 아니며 무료로 사용할 수 있는 조건은 학생이 비상업적 용도로 사용할 경우

    하루에 한 번(with once per day nag이라고 되어있는데 정확한 의미를 모르겠음…-.-) 무료라고 되어있어

    실질적으로는 유료 라이센스라고 보면 될 것 같다.

    설치가 모두 끝났으면 새로운 프로젝트를 만들어보자.






    새 프로젝트 만들기를 선택하여 진행하면 최초 VS 설치시 선택한 옵션 여부에 따라 매우 다양한 언어 및 플랫폼 관련

    프로젝트 템플릿을 선택할 수 있다. 찾기가 쉽지 않을 수 있으니 검색 창에 Arduino를 입력하여 검색하면 아래와 같이
    아두이노 관련 프로젝트 목록만을 볼 수 있다.






    Arduino Project를 선택하고 진행하면 기본 정보 입력 화면이 나온다.




    기본 사항 입력 후 만들기 버튼을 누르면 프로젝트가 생성되고 메인 IDE 환경으로 넘어간다.




    주요 설정 버튼들은 상단 툴바에 모여 있다. 먼저 공식 Arduino IDE 경로를 설정해준다.





    툴바의 가장 아랫줄 오른쪽 선택 상자에서 보드 종류를 선택해준다.




    Add Library 선택박스를 클릭하면 필요한 라이브러리를 추가하거나 라이브러리 관리를 할 수 있다.




    툴바의 가장 아랫줄 중앙쪽에 있는 두 개의 버튼은 각각 Build와 Build and Upload 버튼이다. 아래 이미지의 좌측이

    Build, 우측이 Build and Upload




    지금까지으 설정들을 포함하여 모든 아두이노 프로젝트 관련 기능들은 툴바의 가장 아랫줄 맨 앞에 있는 vMicro 버튼을

    클릭하여 설정할 수 있다. Serial monitor는 메뉴 중 View Port Monitor를 선택하면 볼 수 있다.





    VS를 실행한 후 처음 빌드를 시도하면 아래와 같이 라이센스 확인 창이 뜬다. 일단 그냥 Close하면 빌드 및 업로드는

    진행이 된다.




    여기까지 기본적인 설치와 설정 그리고 빌드와 업로드가 모두 끝난 것이다 그런데 빌드를 했더니 오류가 발생을

    하는데 아직 원인을 찾지 못했다. 뭔가 null 참조와 관련된 오류인 것 같은데 아무래도 개발 환경이 익숙하지 않다보니

    원인을 잘 모르겠다…ㅠ.ㅠ





    정리


    이렇게 대체 가능한 아두이노 개발 환경 3번째 도구로 VS를 알아보았다. 하지만 VS는 여러모로 제약이 많은 도구였다.
    우선 Mac을 쓰고 있는 입장에서는 아두이노 Add-On 자체가 사용 불가능이고, Windows 환경에서 사용한다 하더라도
    라이센스 문제라든지 또는 본문 말미에 발생한 오류 등의 문제로 사용하기에는 가장 껄끄러운 툴이었다(물론 윈도우 기반의
    개발환경에 익숙한 개발자라면 얘기가 다를 수 있다).


    이제 다음 포스팅에서는 마지막으로 Mac 기반의 개발 툴인 Xcode에 대해 살펴보고 전체 시리즈를 마무리 하도록 하겠다.

    블로그 이미지

    마즈다

    이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^



    2019/04/21 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #1 - Atom + PlatformIO

    2019/04/23 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #2 - Eclipse

    2019/04/28 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #3 - Visual Studio

    2019/05/06 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #4 - Xcode + embedXcode




    지난 포스팅에 이어 공식 Arduino를 대체할 수 있는 개발 툴의 두 번째로 Eclipse의 플러그인을 소개한다.

    Eclipse의 경우 극명한 장단점이 있는 IDE인데 장점은 거의 무궁무진한 확장성과 범용성이고 단점은 바로

    (과장 조금 보태서)무궁무진하게 메모리를 잡아먹는다는 점… 상당히 무겁다...ㅠ.ㅠ

    아무튼 이번 포스팅에서는 Eclipse 기반의 아두이노 개발 환경에 대해 알아보도록 하자.


    Eclipse + Eclipse C++ IDE for Arduino 3.0


    Eclipse의 경우 처음부터 지금까지 가장 유용한 장점을 꼽으라면 바로 플러그인을 통한 확장이라고 할 수

    있을 것이다. Eclipse 기반의 아두이노 개발환경도 바로 이 플러그인을 이용하여 설치하게 된다. 몰론 그 
    전에 당연히 Eclipse를 설치해야 한다.


    Eclipse 다운로드


    최근의 Eclipse는 installer 형식으로 배포되어 installer를 실행하면 용도에 맞는 Eclipse를 설치할 수 있다.

    어차피 다른 용도의 Eclipse도 플러그인 설치로 다 사용 가능하므로 무난하게 Java 개발용으로 설치하면 된다.

    Eclipse 설치가 끝났으면 Help > Eclipse Marketplace…로 이동하여 Arduino로 검색을 하자. 여러개의
    목록이 나올텐데 'Eclipse C++ IDE for Arduino 3.0’을 선택하여 설치해주면 된다.





    설치가 모두 끝나면 이클립스를 재시작하고, 재시작한 이클립스의 툴바에 보면 새로운 컨트롤들이 생겨난 것을 볼 수
    있다.






    이제 설치가 모두 끝났으니 프로젝트를 생성해보도록 하자. New Project에서 C/C++을 선택하면 하위 항목에Arduino 
    Project가 있는 것을 확인할 수 있다. 이후 프로젝트 생성 Wizard를 따라 쭉 진행하자.









    이렇게 프로젝트를 생성하고 나면 소스 파일 1개로 이루어진 아주 썰렁한 프로젝트가 생성이 된다. 그런데 함수 호출 
    코드들이 모두 에러 표시가 되어있다. 이 것은 지난 Atom 포스팅에서도 언급한 바와 같이 Eclipse도 확장자가ino가 
    아닌 cpp로 되어있기 때문이고 “#include <Arduino.h>”를 소스 상단에 추가해주어야 한다.


    또한 플러그인 설치 후 생긴 툴바의 도구들에도 뭔가 따로 선택할 수 있는 것들이 없다. 아두이노와 관련된 설정을

    아무 것도 찾을 수가 없어 조금 당황할 수도 있을 것이다. 당황하지 말고 메뉴 표시줄의 Help 메뉴로 다시 가보자

    Arduino Download Manager라는 못보던 메뉴가 추가되어 있을 것이다.






    이 메뉴를 실행하면 팝업이 하나 열리는데 여기서 Platforn과 라이브러리들을 다운로드 받을 수 있다.










    이제 필요한 내용들이 설치가 되었으면 새로 생긴 툴바의 on: 옆에 있는 셀렉트 박스를 열고 New Launch Target을
    선택해주자. 그러면 새로이 팝업 창이 열리면서 공식 아두이노 IDE의 툴 메뉴에 있는 내용들을 설정할 수 있게 된다.






    여기까지 기본적인 설치와 설정은 모두 끝이났다. 이제 툴바에서 Run 버튼을 클릭하면 빌드와 업로드가 연속해서 진행되고
    콘솔 창으로 Arduino 공식 IDE와 동일한 내용의 로그가 보여진다.






    정리


    이렇게 해서 두번째 Arduino IDE 대안으로 Eclipse에 대해 알아보았다. 사실 Eclipse가 무겁다고는 했지만 뒤에 언급할
    Xcode에 비한다면 양반이라고 할 수 있다…-.- 어쨌든 무겁다 하더라도 상당히 많은 개발자들이 아직도 Eclipse의 품을
    벗어나지 못(안)하고 있고 그 폭넓은 범용성은 단점을 충분히 커버하고도 남기 때문에 훌륭한 대안이 될 수 있으리라 본다.


    나머지 2개의 포스팅은 IT 공룡들인 애플과 마이크로소프트의 제품들을 이용하는 방법인데 두 제품 모두 제대로 활용을하려면 
    비용을 지불해야 한다. 자세한 내용은 해당 제품 포스팅에서 알아보도록 하자.

    블로그 이미지

    마즈다

    이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^



    2019/04/21 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #1 - Atom + PlatformIO

    2019/04/23 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #2 - Eclipse

    2019/04/28 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #3 - Visual Studio

    2019/05/06 - [Study/아두이노] - [아두이노] 선택 가능한 개발환경 알아보기 #4 - Xcode + embedXcode





    오늘은 다양한 아두이노 개발 환경에 대해 정리를 해보겠다.


    사실 그동안 아두이노 개발 시에는 공식 배포되는 Arduino IDE만을 사용해왔다. 뭐 공식 IDE에 특별히 불만은 없지만

    다른 프로그램 개발 시 사용하는 IDE(Ecilpse, Xcode, Visual Studio 등)나 고급 편집기(Atom, Sublime Text 등)에

    비하면 많이 아쉬운 것은 사실이다.


    그러던 중 공식 IDE를 대체할 수 있는 5가지 개발 툴에 대한 기사가 있어 한 번 직접 설치해보고 실행을 해보았다.

    그리고 그 결과에 대해 정리를 해보려고 한다.


    Forget the Arduino IDE: 5 Awesome Alternatives


    기사에서는 총 5가지 대체 개발 툴에 대해 언급을 하고 있으나 마지막 Arduino CLI의 경우 아무래도 고수들이나 해볼 법한

    방법이고 범용성이 떨어지기에 링크로 대체하고 Atom, Xcode, Eclipse, Visul Studio의 플러그인들만을 대상으로

    정리를 해보고자 한다.


    Atom + Platformio

    나도 사실은 무거운 IDE를 위주로 사용하는 터라 가벼운 텍스트 편집기 기반의 개발 툴은 별로 사용해본 적이 없다.

    Atom의 경우도 마찬가지로 설치는 해보았으나 거의 사용은 안했었고 현재 주로 사용하는 편집기는 Sublime Text

    이다. 그런데 이번에 새로 설치하고 찬찬히 살펴보니 기본 설치 상태의 가독성은 확실히 Atom쪽이 더 좋았다. 아마도

    앞으로는 Atom을 즐겨 쓰지 않을까 한다.


    우선 당연히 Atom을 먼저 설치해야 한다.


    atom.io


    설치는 매우 단순하다. Atom의 설치가 끝나면 바로 실행 시킨 후 설정 화면으로 가서 Platformio를 설치해주어야 한다.

    Platformio는 IoT 개발을 위한 Atom기반의 플러그인다. 즉, 아두이노만 개발할 수 있는 것이 아니란 이야기다.

    설치 방법은 아래 스크린샷과 같다.


    1. 먼저 Atom의 Settings 화면으로 이동한다. 그리고 메뉴 중 가장 하단의 Install을 선택한 후 우측 메인 화면에서

    platformio-ide로 검색한다. 목록에서 platformio-ide를 찾아 설치한다(스크린샷은 이미 설치한 상태에서 찍은

    것이라 설치는 없고 설정/제거/비활성화만 있다).




    2. platformio-ide가 설치되고 나면 Atom의 좌측에 새로운 아이콘 그룹이 생긴다. 이 아이콘들이 platformio를 사용하기

    위한 것들이다.





    3. 아이콘 중 가장 위에있는 집 모양의 버튼을 클릭하면 platformio의 홈 화면으로 이동한다. 이 화면에서 아두이노 관련

    대부분의 설정을 할 수 있다.





    . New Project 버튼을 클릭하면 새로운 프로젝트를 생성 할 수 있다.




    . PlatformIO Home 화면의 좌측 메뉴 중 Libraries를 클릭하면 라이브러리 관리를 할 수 있다.




    . PlatformIO Home 화면의 좌측 메뉴 중 Boards를 클릭하면 보드 관리를 할 수 있다.




    . PlatformIO Home 화면의 좌측 메뉴 중 Platforms를 클릭하면 플랫폼 관리를 할 수 있다.





    . PlatformIO Home 화면의 좌측 메뉴 중 Devices를 클릭하면 포트 관리를 할 수 있다.






    프로젝트가 생성되면 다음과 같은 화면이 보여진다. Atom의 경우 기본 확장자로 ino가 아닌 cpp를 사용한다. 이렇게 확장자로

    cpp를 사용하게 될 경우에는 소스코드에 "#include <Arduino.h>”문을 반드시 적어주어야 한다.





    그밖에 빌드, 업로드, 시리얼모니터 등은 프로젝트 메인 화면의 좌측에 있는 platformio의 아이콘 그룹에서 찾아볼 수 있다.
    그런데 빌드와 업로드를 동시에 진행하는 버튼을 찾지를 못했다. 원래 그런 기능이 없는 것인지, 내가 찾지 못한 것인지…

    이 부분이 단점이라면 단점이다.


    빌드나 업로드를 하게 되면 하단에 로그 창이 떴다가 작업이 완료되면 바로 사라지는데 좌측의 Toggle Build Panel 버튼을

    클릭하면 로그 창이 계속 남아있게 할 수 있다.






    정리


    포스팅 한번으로 4가지 IDE를 모두 다뤄보려고 했는데 별 내용이 없음에도 불구하고 스크린샷이 많아서 그런지 상당한

    분량이 되어버렸다. 그래서 하나의 IDE에 대해 한 개의 포스팅으로 소개하는 것이 좀 더 보기 편할 듯싶다.


    처음 소개한 Atom의 경우 일단 개발 툴 자체가 무겁지 않고 전체적으로 폰트가 큼직하여 가독성 면에서 높은 점수를

    줄 수 있을 것 같다. 앞으로 소개할 3개의 IDE는 그 자체로 무거운 툴들이다보니 과연 아두이노와 같은 작은 볼륨의

    개발을 하는데 그렇게나 큰 IDE를 사용할 필요가 있을까 싶은 생각도 든다.

    그래도 개개인의 취향이라는 것이 있으니 나머지 3개도 차근차근 알아보도록 하겠다.

    블로그 이미지

    마즈다

    이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

    더크 젠틀리의 전체론적 탐정 사무소

    자영이는 전거를 타면서 본  야기입니다.
    말 그대로 실내 자전거로 운동하면서 지루함을 달래기 위해 아이패드로 본 영화에 대해 극히 
    주관적으로 아무런 논리적 분석 없이 의식의 흐름에 따라 적어 내려간 초 간단 감상문임을
    참고해주세요.

     

    원제 : Dirk Gently's Holistic Detective Agency
    상영 : 시즌1 2016년, 시즌2 2017년
    장르 : 시리즈, SF, 코믹스릴러
    원작 : 더글라스 애덤스
    출연 : 새뮤얼 버넷, 일라이저 우드
    시청 : 넷플릭스
    개인평점 : ★★★★★

     

    미드고 영화고 간에 내가 중요시 하는 기준은 하나다.


    첫째, 시작이 화려할 것!
    둘째, 긴장이 끊기지 않을 것

     

    두 가지 모두를 충족 시킨다면 금상첨화 이지만 둘 중 하나만이라도 만족을 준다면 끝까지 보는데 충분하다.
    당연히 둘 다 없으면 끝까지 보지 못한다.

     

    한 예로 최근 배두나가 출연한 미드 ‘센스8’을 보려고 시도했다가 도입부가 너무 루즈해서 1화 보고는 더이상
    보지 않고 있다. 조금 오래된 미드이지만 한 때 인기를 끌었던 로스트도 중간 중간 너무 루즈해지는 에피소드
    들이 자꾸 맥을 끊어서 5화인가? 이후에는 보지 않고 있다.

     

    물론 화려하다는 것과 긴장의 정도에 어떤 기준을 두느냐는 무척 모호하지만…

     

    그런데 이 미드는 조금 독특했던 것이 2가지 조건을 모두 만족했는데도 쉽게 몰입이 안되었다. 
    초반부터 어딘가 정상적이지 않은 캐릭터들이 빠른 템포로 움직이면서 알수 없는 사건들을 엮어 나가는데
    영드 셜록을 본지 얼마 안되어서 그런지 뭔가 그 아류작이 아닐까 싶은 선입견이 몰입을 방해했다.

     

    사실 정보가 많이 부족했다. 그래도 딱히 볼만한 것이 떠오르지 않아 2화까지 넘어간 후에야 이 드라마가
    대놓고 판타지 SF 병맛 드라마라는 것이 표면에 드러나자 마자 순식간에 드라마에 빠져들고 말았다.
    게다가 다 보고 나서 정보를 확인해보니 이 드라마의 원작자가 ‘은하수를 여행하는 히치하이커를 위한 안내
    서’를 쓴 더글라스 애덤스라는 사람이었다. 아쉽게도 이 작품은 책도, 영화도 제대로 본 적이 없지만 그
    유명세는 익히 알고 있었다. 다만 더크 젠틀리의 전체론적 탐정 사무소의 경우 넥플릭스 버전은 원작과
    많이 벗어난 오리지널 드라마라는 점에서 원작자의 영향력이 크게 중요하진 않은 것 같다.

     

    이 드라마는 내용도 내용이지만 캐릭터를 잘 만들어낸 것 같다.

     

    전체적으로 중심이 되는 인물들은 더크 젠틀리를 비롯하여 병맛 초능력을 가진 인간들을 관리하는 국가 비밀
    프로젝트인 블랙 윙의 실험 대상자들이다. 어떤 이유에선지 (프로젝트 관리자인 리긴스 대령의 인간애의 
    발로로 자유를 얻은 것이 아닐지…) 세상을 활보하면서 다니게 되었는데 또 뭔 이유인지 이들이 특정한 사건에
    지속적으로 연결이 되는 것이다.

     

    서로 다른 그룹의 인간들이 미묘한 연관을 가지면서 엎치락 뒤치락 쫓고 쫓기는 상황이 어찌보면 예전에 보았던
    영화 ‘록 스탁 앤 투 스모킹 배럴즈’를 연상시키기도 한다.

     

    현재까지 방영된 시즌1과 시즌2의 중요 내용을 초간단 요약하면 이렇다.

     

    시즌1 : 블랙 윙 초능력자들과 타임머신으로 인해 힘을 얻게 된 히피들과의 박터지는 실랑이
    시즌2 : 블랙 윙 초능력자들과 현실화된 상상속의 마법사와의 피터지는 한판 승부 (시즌 2에서는 블랙 윙의
    에이전트들의 비중이 커진다)

     

    캐릭터가 매력적이라고 했으니 간단하게 캐릭터들을 한 번 살펴보면 이렇다~

     

    사실 주인공인 더크가 가장 찌질한 캐릭터로 개인적으로는 제일 매력이 떨어지는 캐릭터이다. 게다가 파트너로
    출연한 우리의 프로도 배긴스, 일라이저 우드의 토드라는 캐릭터 역시 찌질하기로는 더크 버금간다. 아마도
    금세기 최고의 찌질이 브로맨스가 아닐지…

     

    토드와 더크

     

    반대로 가장 매력적인 캐릭터는 바로바로~바트이다. 말하자면 이 드라마의 먼치킨 캐릭터라고 할 수 있다.
    반 백치인 것만 빼면 천하 무적이다. 총알은 다 피해가고 칼은 튕겨 나가고 유치장의 잠금장치는 있으나 마나다.
    시즌1에서 납치 당하다시피 해서 따라 다니던 켄이라는 캐릭터도 나름 귀염성이 있었는데 이 캐릭터는 시즌2

    에서 라인을 갈아타면서 눈밖에 나버렸다.

     

    켄과 바트

     

    다음으로 매력적인 캐릭터들은 ‘Rowdy3’라는 이름의 4인조 ADHD 환자들이다. 4인조인데 Rowdy ‘3’란다.
    은하수를 여행하는 히치하이커를 위한 안내서가 4권짜리 3부작이라는 설명을 달고 있는 것과 관련이 있다고
    한다. 암튼 나중에 여기에 토드의 여동생 아만다가 합류하게 된다. 이들이 날뛰는 장면은 그야먈로 유쾌, 통쾌,
    상쾌 그 자체이다. 관련해서 개인적으로 가장 빵터졌던 장면은 시즌2에서 모두 잡혀가고 아만다와 보글 둘만
    남았을 때 어떤 사유지 경비원에게 ‘우린 폭도 3인조다’라고 말하는 장면이었다^^ 사진은 시즌2가 끝나면서
    Rowdy5로 완전체가 된 모습.

     

    Rowdy 5

     

    그밖의 주변인물로는 능력은 뛰어나나 소심해서 법 집행관(경찰류의 직업)이 못되는 파라, 리긴스에게 불만을
    품고 블랙 윙의 감독관이 되는 공부와는 담쌓은 휴고 프레디킨(사실 얘는 좀 기대되는 인물이다. 시즌2 끝에서
    분위기가 심상치 않아…), 

     

    파라 그리고 휴고

     

    시즌2가 끝나면서 요상한 떡밥들을 뿌려놓은 관계로 얼른 시즌3가 나와주기를 기대하게 만드는 올해 본 작품
    중에는 최고로 재밌는 작품이었다~

    블로그 이미지

    마즈다

    이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

     

    2018/11/25 - [Study/인공지능학습] - [머신러닝 reboot] 개념 잡기 : 경사 하강법 1 - 특성의 scale

    2018/12/10 - [Study/인공지능학습] - [머신러닝 reboot] 개념 잡기 : 경사 하강법 2 - step 공식 이해하기

    2019/01/28 - [Study/인공지능학습] - [머신러닝 Reboot] 개념잡기 : 경사 하강법 3 - 경사 하강법의 종류

    2019/04/07 - [Study/인공지능학습] - [머신러닝 Reboot] 개념 잡기 : 경사 하강법 4 - 규제가 있는 선형 모델

    2019/04/14 - [Study/인공지능학습] - [머신러닝 Reboot] 개념 잡기 : 경사하강법5 - 로지스틱 회귀

    TISTORY 에디터의 문제로 이미지 크기가 화면 폭에 꽉 차게 나오는
    문제 양해 부탁드립니다...ㅠ.ㅠ

     

    머신러닝 Reboot - 개념 잡기 : 경사하강법5 - 로지스틱 회귀

    이제 거의 회귀의 끝자락이다. 사실 로지스틱 회귀의 경우 인공지능에 대한 공부를 처음 시작할 무렵 꽤나 공을
    들여 열심히 정리한 바가 있다(물론 맞는 말을 써 놓은 것인지는 여전히 의문이다…ㅠ.ㅠ). 따라서 이번 포스팅
    에서는 간략하게 개념적인 요소만 정리하고 보다 세세한 부분은 이전 포스팅의 링크로 대체하고자 한다.

     

    확률 그리고 분류

    앞서 언급했던 회귀 모델들은 모두 새로운 샘플이 나타났을 때 그에 대한 결과를 예측하는 것이 주 목적이었다.
    하지만 로지스틱 회귀의 경우 예측을 하기는 하지만 그 예측이 확률값을 갖도록 하는 것이다. 

     

    예를들어 동물의 특성(다리 갯수, 몸의 크기, 날개의 유무 등)을 데이터로 하여 로지스틱 회귀는 이 동물이 개일 
    확률이 92%, 닭일 확률이 8%이라는 예측 결과를 리턴한다. 하지만 결국 이 결과는 어떤 동물의 데이터를 
    가지고 이 동물을 닭이나 개로 분류하는 기능을 하게 되는 것이다.

     

     

    이렇듯 확률 값을 리턴해야 하기 때문에 선형 회귀의 가설 함수와는 달리 로지스틱 회귀의 가설 함수는 0~1
    사이의 값을 리턴해야 하며 이를 위해 선형 회귀 가설 함수에 대한 새로운 함수를 정의하게 되는데 이 함수를 
    시그모이드 함수라고 한다.

     

    한편 위 예에서와 같이 분류할 대상(클래스)가 2개 밖에 없는 경우를 이진 분류라고 하며 기본적인 로지스틱
    회귀는 이진 분류기라고 할 수 있다.

     

    시그모이드 함수

    시그모이드 함수는 앞서 살펴본 바와 같이 0과 1사이의 값을 출력하는 S자형 그래프를 그리는 함수로 다음과 
    같은 형태의 함수이다.

     

     

    이 식에서 t는 선형 회귀의 가설 함수인데 t가 0보다 작은 경우에는 시그모이드 함수의 결과 값이 0에 가까워
    지고 t가 0보다 크거나 같은 경우에는 시그모이드 함수의 결과 값은 1에 가까워진다.

     

    보다 상세한 내용은 링크로 대신한다.

     

    로지스틱(Logistic) 회귀 함수 살펴보기 

     

    로지스틱 회귀의 비용함수

    로지스틱 회귀에서 기존의 선형 회귀 비용 함수를 그대로 사용하게 되면 비용 함수의 그래프가 다수의 지역
    최솟값이 발생하는 형태가 되어 전역 최솟값을 찾는데 실패하는 경우가 많이 발생한다. 이러한 문제를 해결
    하고자 로지스틱 회귀의 비용함수에서는 log를 사용하게 된다. 

     

     

    이진 분류의 경우 y 값이 어떤 클래스에 포함되느냐(1), 포함되지 않느냐(0)의 2가지 값만을 갖기 때문에
    y가 어떤 값이냐에 따라 앞의 로그식 또는 뒤의 로그식 하나만 사용되는 형태이다. 그리고 이 함수는 지역
    최솟값이 존재하지 않는 convex 함수로 최솟값을 찾아낼 수 있다.

     

    역시 상세한 내용은 링크로 대신한다.

     

    로지스틱회귀의 비용함수 이해

     

    결정경계

    이진 분류기에서 두 개의 클래스를 구분짓는 선을 결정경계라고 하며 이는 보통 모델이 50% 확률을 추정하는
    지점이 된다.

     

    소프트맥스 회귀

    3개 이상의 클래스를 분류하는 것은 2진 분류기를 여러개 훈련시켜 할 수 있다. 소프트맥스 회귀는 여러개의
    이진분류기를 사용하는 방법을 일반화 시켜 한 번에 3개 이상의 클래스를 분류할 수 있도록 만든 모델이다.
    소프트맥스 함수도 다양한 표현이 가능한데 ⎡핸즈온 머신러닝⎦에 사용된 식을 기준으로 보면 다음과 같다.

     

     

    이 때 각각의 기호는 다음을 의미한다.

     

    1. K는 클래스 수
    2. s(x)는 샘플 x에 대한 각 클래스의 점수를 담고 있는 벡터
    3. σ 함수는 샘플 x에 대한 각 클래스의 점수가 주어졌을 때 이 샘플이 클래스 𝑘에 속할 추정 확률

     

    소프트맥스 회귀는 서로 배타적인 클래스에 대한 분류에만 사용 가능하다는 특징이 있다.

    소프트맥스 회귀는 비용함수로 크로스 엔트로피 함수를 사용하는데 역시 핸즈온 머신러닝에 사용한 식을
    기준으로 보면 다음과 같다.

     

     

    앞서 말했듯이 소프트맥스 회귀는 로지스틱 회귀의 일반화 된 형식으로 크로스 엔트로피 함수를 클래스가 딱
    2개인(즉, K=2 인) 경우에 적용하면 로지스틱 회귀의 비용함수와 동일해진다.

    역시 상세한 설명은 이전 포스팅을 링크한다.

     

    다항로지스틱회귀 살펴보기

    로지스틱 회귀 비용함수로부터 Cross-entropy 도출하기

     

    정리

    예전에 처음 공부를 시작했을 때도 여기서부터가 어려워졌던 것 같다. 기존 선형 회귀도 잘 이해가 안가는
    상황에서 확률까지 등장을 하니…그래도 두 번째 정리라 조금 나아지긴 했지만 조금 더 깔끔하게 다듬어야
    할 필요는 있을 것 같다. 다듬는 것은 숙제로 남겨두고 서포트 벡터 머신으로 넘어가자…-.-

     

    숙제

    1. 핸즈온 머신러닝 로지스틱 회귀 챕터에 나오는 예제 소스들을 분석하고 실행시켜보자
    블로그 이미지

    마즈다

    이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

     

    2018/11/25 - [Study/인공지능학습] - [머신러닝 reboot] 개념 잡기 : 경사 하강법 1 - 특성의 scale

    2018/12/10 - [Study/인공지능학습] - [머신러닝 reboot] 개념 잡기 : 경사 하강법 2 - step 공식 이해하기

    2019/01/28 - [Study/인공지능학습] - [머신러닝 Reboot] 개념잡기 : 경사 하강법 3 - 경사 하강법의 종류

    2019/04/07 - [Study/인공지능학습] - [머신러닝 Reboot] 개념 잡기 : 경사 하강법 4 - 규제가 있는 선형 모델

    2019/04/14 - [Study/인공지능학습] - [머신러닝 Reboot] 개념 잡기 : 경사하강법5 - 로지스틱 회귀

     

     

    머신러닝 Reboot - 개념 잡기 : 경사 하강법 4 - 규제가 있는 선형 모델

     

    지난 시간까지 일반적인 선형 회귀에 대해 알아보았다. 하지만 당연하게도 세상의 문제는 너무도 다양하고 따라서
    그 문제를 해결할 수 있는 방법도 다양할 수 밖에 없다. 오늘은 그 중에서도 훈련 데이터에만 너무 최적화된 결과를
    만들어내는 과대 적합의 문제를 해결할 수 있는 선형 회귀에 대해 정리해보자.

     

    과대적합

     

    지난 포스팅의 후반부에 다항 회귀에 대해서 알아보았다. 다항 회귀는 데이터의 분포가 2차 이상의 함수
    그래프 형태를 띠고 있는 경우 사용하는 기법으로 보통 적절한 차수의 특성을 훈련 데이터에 추가하여 학습을
    진행한다. 이 때 지나치게 차수를 높이면 아래 그래프의 초록색 실선과 같이 상당히 난해한 결과가 나온다.
    이렇듯 모든 훈련 데이터 하나하나에 맞는 결과를 만들어내는 것을 과대적합이라고 한다. 

     

     

    비유를 하자면 기성복과 맞춤복의 차이라고 할 수 있겠다. 
    A라는 회사에서 직원들의 유니폼을 맞춤복으로 하기로 결정했다면 새로운 직원이 들어올 때마다 유니폼을 그 
    직원에 맞춰서 새로 만들어야 할 것이다. 하지만 유니폼을 기성복으로 결정한 경우에는 직원에 따라 조금 크기도
    하고 조금 작기도 하겠지만 하나의 사이즈로 보다 많은 직원들에게 지급을 할 수 있게 된다.

     

    다시 말해 기존 직원들(훈련 데이터) 각자에게 꼭 맞는 유니폼을 만들게 되면 새로운 직원이 들어왔을 때 다시 치수를
    조정한 유니폼을 만들어야 한다. 하지만 기성복으로 몇개의 사이즈를 준비해 놓는다면 새로운 직원이 들어와도
    미리 준비한 유니폼을 지급만 하면 될 것이다.

     

    이렇듯 보다 일반적인 상황에 적용을 하기 위해서는 과대적합을 피하는 것이 좋다. 다만 과대적합을 피하기 위한
    노력이 과하게 되면 오히려 과소적합에 빠질 수 있으니 주의해야 한다.

    일반적으로 모델이 너무 복잡한 경우 과대적합에 빠지기 쉽고 모델이 너무 단순한 경우 과소적합에 빠지기 쉬운데
    이를 편향/분산 트레이드 오프라고 한다 (핸즈온 머신러닝 179쪽 참조). 

     

    규제란?

     

    규제란 말 그대로 어떤 한도를 정하고 그 한도를 넘지 못하도록 제한하는 것을 말한다. 우리가 이제까지 보아 온 선형
    회귀 모델은 기울기(가중치)와 절편(bias)을 가지고 있었다. 이 모델은 기울기와 절편을 적절히 조절하고 조합해서
    최적의 결과를 찾게 되는데 이 때 기울기를 0으로 만들게 되면 조절할 수 있는 대상이 절편 하나로 줄어 제약이 발생한다.
    이렇게 조절할 수 있는 대상을 줄여가는 것을 규제라고 한다. 다만 대상을 완전히 없애는 것은 너무 극단적이므로 규제의
    대상이 적절한 범위 내의 값만을 갖도록 하는 것이 일반적이다.

     

    여기서 규제의 대상이 되는 것은 일반적인 선형 회귀에서는 기울기(가중치)이며 다항회귀의 경우에는 특성의 차수이다
    (하지만 특성의 차수를 제한 하는 것도 결국은 높은 차수의 특성에 붙어 있는 가중치를 0으로 만듦으로써 가능하니 
    결국은 규제라 함은 가중치를 제약 하는 것으로 보면 되겠다). 

     

    이러한 규제를 가하는 경우는 대체로 2가지 정도의 경우가 있는데 한가지는 확보한 데이터가 충분하지 않을 경우이고
    다른 한가지는 일부 특성들 간에 밀접한 상관 관계가 있을 경우이다. 이를 다중공선성이라 한다. 

     

    이렇듯 규제를 가하는 것은 특성을 조절하고자 할 때 사용하는 방법이다 따라서 편향에 대해서는 규제를 가하지 않고
    특성의 가중치에 대해서만 규제를 가하게 된다. 

     

    다음과 같이 생각해보자.
    선형 회귀의 비용 함수를 떠올려보면 훈련 데이터에서 특성 𝑥와 실제 결과 𝒚는 이미 주어진 값이며 가중치 𝜭를 변경해
    가면서 최솟값을 찾는데 비용함수가 최솟값이 되었을 때 가중치 𝜭는 최적값이 된다. 이렇게 모든 특성에 대해 가중치가
    최적값일 경우를 바로 과대적합이라고 볼 수 있는 것이다. 결국 가중치에 규제를 가하여 과대적합을 바로잡을 수 있는 
    것이다.

     

    일반적으로 가중치에 규제를 가하기 위해서는 비용 함수 뒤에 가중치 벡터의 크기(norm)을 더하게 되는데 바로 다음과 
    같은 형태가 된다.

     

     

    최솟값 = 비용함수 + 가중치 벡터의 크기

     

     

    비용함수에 대해서는 이미 알고 있고…뒤에 따라붙는 가중치 벡터의 크기는 무엇을 의미하는가?
    그냥 단순히 식을 분석해도 알 수 있지만 위의 식은 비용함수가 최솟값이 되어야 한다는 조건에 추가적으로 가중치의
    크기도 최소가 되어야 한다는 제약이 붙게 되는 것이다. 당연한 이야기지만 덧셈식이니 두 항이 모두 최소가 될 때
    식의 결과도 최소가 되는 것이 아니겠는가?

     

    그럼 구체적인 방법들을 살펴보면서 조금 더 자세하게 알아보도록 하자.

     

    릿지 회귀

     

    릿지 회귀는 비용함수 뒤에 규제항을 더하여 과대적합을 막는 방법으로 이 때 사용되는 규제항은 다음과 같다.

     

    릿지 회귀 규제항

     

    릿지 회귀 비용 함수

     

    이 규제항은 벡터의 길이나 크기를 나타내는 norm 중 L2 norm의 제곱을 2로 나눈 것에 해당한다(여기서 2로 나눈 것은
    비용함수에서와 마찬가지로 미분 결과를 간단히 만들기 위해서이다). 또한 앞에 붙은 𝜶는 그 값에 따라 규제의 정도가 
    정해지는 하이퍼파라미터로 예를들어 이 값이 0이라면 규제항 전체가 0이 되어 기존 선형 회귀의 비용함수만 남게되어 
    규제를 적용하지 않는다는 의미가 되는 것이다.

     

    직관적으로 확인하기 위해 직접 식을 만들고 값을 대입하여 정리를 해보자(아래 정리한 내용은 말 그대로 감을 익히자는
    의도일 뿐 실제로 이런 식으로 계산이 진행되지는 않는다. 또한 여기서는 미분까지 진행하지 않으므로 1/2는 뺐다). 

    아래와 같은 가설 함수가 있다.

     

    가설 함수

     

    이 가설함수에 대한 릿지 회귀 비용함수는 다음과 같다(w = 𝜭 이다).

     

    릿지 회귀 비용 함수

     

    여기서 임의로 𝑥1 = 3, 𝑥2 = 2, 𝑦 = 14라는 값을 정하고 𝜭 1과 𝜭 2를 구해보자. 다양한 𝜭 1과 𝜭 2의 조합을 만들어
    낼 수 있다. 아래는 그 중 몇가지 𝜭 1과 𝜭 2의 조합을 표로 만들어 본 것이다. 만일 일반적인 선형 회귀였다면 선형 회귀의
    비용함수가 0이되는 조합이 선택이 되었을 것이다(주황색 셀). 하지만 규제항이 더해짐으로 해서 최종적인 최솟값을
    만들어내는 조합은 이전 조합과 달라진다(초록색).

     

     

    또한 우연인지 필연인지…이 표에서 보면 가중치 𝜭 1과 𝜭 2가 전체적으로 균등한 크기로 작어지는 효과를 보이고 있다.
    이렇게 릿지 회귀의 경우 규제항이 제곱 함수로 가중치의 크기가 커질수록 비용함수의 결과값에 영향을 많이 미치게 된다.
    따라서 값이 큰 가중치를 제한하는 효과가 있다.

     

    라쏘 회귀

     

    라쏘 회귀 역시 비용함수 뒤에 규제항을 더하는 것은 릿지 회귀와 동일하다 다만 규제항의 식은 다음과 같다.

     

    라쏘 회귀 규제항

     

    라쏘 회귀 비용 함수

     

    이 규제항은 벡터의 길이나 크기를 나타내는 norm 중 L1 norm에 해당한다. L1 norm은 벡터를 구성하는 요소의
    절대값의 합으로 여기서도 가중치 𝜭1와 𝜭2의 절대값의 합으로 계산하면 된다. 또한 라쏘 회귀의 규제항 같은 경우
    1차 함수로 미분 불가능한 형태이기 때문에 2로 나누는 부분이 없다.

     

    위의 릿지 회귀에서와 동일한 조건으로 계산식을 구성해보면 다음과 같다.

     

     

    릿지 회귀에서와 마찬가지로 라쏘 회귀의 경우에도 규제항이 더해짐으로 해서 단순 선형 회귀와는 다른 조합의 가중치
    벡터가 선택이 된다. 릿지 회귀와 다른 점이라면 앞서 언급했듯이 규제항이 가중치 벡터 요소들의 절대값의 합이라는
    점이다. 이러한 이유로 규제항을 최소화 시키는 방향이 크기가 작은 가중치는 0으로 만들어버리는 경향이 있어 특성의
    일부만을 선별하는 효과를 갖게 된다. 

     

    엘라스틱넷

     

    앞서 보았듯이 릿지 회귀와 라쏘 회귀는 가중치를 다루는 방법이 조금 다르다. 다시 말해 각각의 용도가 다르다고 할 수
    있는 것이다. 이렇게 서로 다른 상황에 사용될 수 있는 두 제약을 하나의 식으로 묶어 어떤 상황에서든 유연하게 사용할 수
    있도록 만든 것이 바로 엘라스틱넷이다. 엘라스틱넷의 비용함수는 다음과 같다.

    엘라스틱넷 비용함수

     

    여기서 중요한 역할을 하는 것이 바로 r이라는 하이퍼파라미터로 릿지 회귀와 라쏘 회귀의 비중을 결정하는 파라미터이다.
    극단적으로 r이 1이라면 라쏘 회귀로 작동하며 r이 0이라면 릿지 회귀로 작동하게 되는 것이다.

     

    이렇게 3가지 형태의 규제가 있는 회귀 모델을 살펴보았는데 ‘핸즈온 머신러닝’을 인용하여 정리하면 다음과 같다.

     

    1. 일반 선형 회귀는 가급적 사용하지 않는 것이 좋다.
    2. 일반적으로는 릿지 회귀가 좋다.
    3. 실제로 영향을 미치는 특성이 몇 개 정도라면 라쏘 회귀나 엘라스틱넷이 좋다.
    4. 특성 수가 훈련 샘플 수보다 많거나 특성 몇 개가 강하게 연관되어 있다면 엘라스틱넷이 좋다. 

     

     

    조기 종료

     

    위에 언급한 규제 모델 외에 반복적인 학습 알고리즘에서 사용할 수 있는 방법으로 조기 종료가 있다. 이 방법은 검증
    에러가 최소에 도달하는 즉시 훈련을 멈추는 것을 말한다. 조기 종료는 매우 효과적이지만 간단하게 구현할 수 있다.
    (핸즈온 머신러닝 P186 참조)

     

    정리

     

    개념적으로는 이해가 가는 내용이지만 이 것을 어떻게 증명해야 하는지가 막연했던 내용들이다. 마치 공부 잘하는 녀석
    들이 훌륭하게 공식을 이용하여 문제를 풀어낼 때 나같은 수포자들은 숫자를 하나 하나 대입해가면서 답을 찾아가듯이
    말이다…그러다보니 몇쪽 안되는 이 부분을 정리하는데 거의 한 달이 걸렸다(그러고서도 충분하지 않다…ㅠ.ㅠ).

    일단 진도는 뽑아야겠기에 이정도 선에서 마무리를 하고 다음 내용으로 넘어가야겠다.

     

    숙제

     

    1. 릿지 회귀와 라쏘 회귀의 특징을 시각적으로 볼 수 있도록 python으로 구현해보자! 

    2. 책(핸즈온 머신러닝)에 나온 관련 그래프들을 정확하게 이해해보자!

    블로그 이미지

    마즈다

    이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

    [자영이] 서치

    문화 2019.04.01 00:51

    서치

    자영이는 전거를 타면서 본 화 야기입니다.
    말 그대로 실내 자전거로 운동하면서 지루함을 달래기 위해 아이패드로 본 영화에 대해 극히 
    주관적으로 아무런 논리적 분석 없이 의식의 흐름에 따라 적어 내려간 초 간단 감상문임을
    참고해주세요.

     

     

    원제 : Searching
    상영 : 2017년
    장르 : 드라마, 스릴러
    감독 : 아나쉬 차간티
    출연 : 존 조, 데브라 메싱
    시청 : 넷플릭스
    개인평점 : ★★★★☆

     

    버드박스와는 달리 이 영화는 한 번 봐야지 하고 벼르고 있던 영화였다. 공중파 TV의 영화 소개 프로그램을 통해
    봤을 때 모든 scene이 컴퓨터 화면을 통해 보여진다는 점이 매우 흥미로웠다. 아마도 내가 늘 컴퓨터를 맞대고 사는 
    IT업계 종사자이기에 더 그랬는지도 모르겠다.

     

    또한 주연배우 존 조의 경우 내가 그를 처음 알게 된 것이 2009년 방영된 미드 플래시포워드를 통해서였는데 그 때
    한국계 배우라서 그랬는지 조금 친근하게 다가왔던 기억이 있다(여담이지만 플래시포워드 참 재밌게 봤는데 나만
    재밌었는지 시즌1에서 막을 내렸다…ㅠ.ㅠ 뒷얘기가 무척 궁금하다…). 

     

    극중에서 심각한 표정으로 모니터를, 카메라를 들여다 보고 있는 그의 연기는 작품에 몰입할 수 있게 해주는 충분한 
    계기가 되었다. 큰 액션 없이 이렇게 표정만을 가지고 연기를 하는 것도 쉽지는 않을 것이다.

     

    사실 영화 내내 배우들의 얼굴이 PC내의 각종 영상 프로그램을 통해 보여지는 것이 신선하기도 한 반면에 정말 저렇게
    까지 우리가 SNS나 디지털 기기에 매몰되어 살고있는가 하는 의문이 들기도 하고 또 아무리 여섯 다리만 건너면 모든 
    지구인을 다 알 수 있다지만 클릭 몇번에 저렇게 신상이 탈탈 털리는 것이 조금은 과장되지 않았나 싶기도 하지만 충분히 
    납득이 되는 설정임은 분명하다.

     

    이 영화는 디지털의 홍수 속에서 살아가는 현대인의 삶을 긴장 넘치는 스릴러로 만들어낸 영화이지만 한편으로는 삶의
    전통적인 면, 바로 가족, 부모와 자식의 이야기이기도 하다. 이 이야기의 두 축은 두 가족이자 두 부모이다. 심각하지는
    않지만 문제가 없다고 할수는 없는 정도로 거리가 있어보이는 가족과 파국에 이를 정도로 지나치게 밀착된 가족…

     

    자식이 가해자가 되었든 피해자가 되었든 그 부모의 심정과 행동은 법과 도덕의 테두리에서는 용서를 받지 못할 것이라
    할지라도 최소한 연민은 느낄 수 있다. 세상은 무섭게 변하여 디지털 도구로 수많은 일들, 심지어 사람 사이의 관계를
    이어가는 일들조차 가능하다지만 디지털 세상 속에 보여지는 부모라 할지라도 손편지를 쓰던 시절의 부모와 크게
    달라지지 않았음은 아이러니라면 아이러니일까…(어쨌든 자식 관리 잘 하려면 디지털에 적응해야 한다는 교훈이…-.-)

     

    결론적으로 실험적인 영상과 그 제한적인 장면들 속에서 긴장의 끊을 놓치지 않게 하는 연출력은 분명 칭찬을 받을만한
    좋은 영화라고 생각한다.

    블로그 이미지

    마즈다

    이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^