aul020***
2020-09-27

제한된 메모리와 저성능 장치에서도 딥러닝을 작동시키기 위한 텐서플로 팀의 고민이 잘 녹아 있는 책입니다.
한빛미디어에서 나는 리뷰어다 활동을 통해 제공받은 책을 읽고작성하였습니다.
글에 나온 아두이노는 책을 이해하는데 필요해서 메카솔루션의 베타리워즈를 통해 필자가 직접 신청 후 제공받았습니다.
려고 보니까GTX1080TI는 가성비 GPU라는데 오케이 구글 하는 음성인식은 왜 라즈베리파이에서도잘돌아가나요?
솔직히 머신러닝도 연구나 업무를 위해 사용되는게 아니라 단순히공부목적이라면 고성능의 GPU까지는 필요가 없긴 하다.
그래도 논문이나 이번PYCON2020같은 곳에서 발표된 것을 보면 GPX 1080혹은 RTX2080, Titan 같은거를 사용했다는 것을 자주 볼 수 있다.
그러면 클로바나 구글 홈 미니 같은 것들은?
음성이 인식되면 인터넷을 통해 멀리 연결된 서버에서 인식을 한후, 결과에 따라 사용자의 요구를 처리한다.
이때, 우리가 구글어시스턴트를 부르기 위해 사용하는 'OK Google'이라는 트리거 워드는 사용자의 음성을 인식하기위해 고성능의 GPU처럼 엄청난 전력을 소비해서도 안되고 용량또한 작아야 하며 인식 속도 또한 중요하다.
이 책의 저자 중 1명피트 워든 또한 서론에서 밝혔듯이 구글에 입사했을때 14KB짜리 신경망이 전력도 mW단위로 먹고 '오케 구글'도잘 인식하는 것을 보며 놀랐다고 한다.
이 책은 이런거 만드는 것에 관한 책이다.
저자:
피트워든
맨날 내가 설치하고 재설치하고 이책 저책 찾아보고, 검색도 많이하고, 공부도 많이 하게 하는 Tensorflow의 창립 맴버라고 한다.
대니얼 시투나야케
텐서플로 라이트의 개발자 홍보를 이끌고 있고, 미국 최초 자동화를 사용한 대규모 곤충 단백질 생산기업 타이니 팜의 공동설립자라고 한다.
예전에 학교 대회 때문에 밀웜 블루베리 쉐이크랑 곤충 쿠키같은거먹으러 간적이 있는데 꽤 맛있었다!!!
재미있는 내용이 많다.
아두이노! 하면 전까진간단한 회로 작동 키거나 더 해봐야 node mcu같은거로 IOT를만들거나 레오나르도 계열 보드로 HID장치, 로봇 등등등뿐이고,
얼굴인식! 머신러닝! 딥러닝! 이런거는 최소 라즈베리파이는 되야 간단하게 만들수 있다고생각했고 작년쯤 ble sense나왔을때도 그냥 조금 비싼 아두이노가 나왔나보다 했다.
그런데 이번에 책을 읽어보니 아두이노가 조금더 지능적이게 됐구나하는 느낌이 들었다.
이번 서평도서목록에는 신간이 많았는데 다른 재밌는 책들말고 이책을 고른 이유는 '14KB만으로 작동되는 구글어시스턴트 같은거에 관한책!' 이라는 문구 때문이었다.
아이언맨을 보고 대부분의 사람들이 느끼는 것처럼 나도 자비스가갖고싶어졌고, '그래서 어떻게 하면 만들까?' 해서 '라즈베리파이에 음성인식 기능을 넣어서 내말을 알아듣게 만든 후, 다양한 API를 연동시켜서 처리한뒤, 음성합성을 하면 되겠다!. 그리고 API를 불러올 인터넷은 휴대폰 핫스팟으로 하면 어디서든돌아가겠네!' 라는 생각을 했다.
차라리 휴대폰에 구글어시스턴트나 빅스비 대신 내가 앱을 만들어도되긴 했지만 자바나 코틀린을 따로 배우긴 귀찮기도 했고, python의 경우 텐서플로나 파이토치로 이러쿵저러쿵 하면 되겠지만 한번도 안써본 자바는 어떻게 해야할지 몰랐었기도 하다.(요즘엔 자바에서도 아마돌아가는 듯 하다.)
그래서 이때부터 음성인식이나 음성합성 분야에 대해 항상 찾아보다발견한게 tacotron이라던지 그런건데 아시는 분들은 아시다시피 라즈베리파이에서 돌아갈 수준은 아닌것같다.
어쨌든 이책에 나온TinyML이면 비슷하게 뭐라도 되지 않을까 하는 생각에 읽게 되었다.
그래서 TinyML이뭐냐 하면
에너지 비용이 1mW 미만인하드웨어 플랫폼
이라고 한다.
책에선 이정도면 동전모양 베터리로 1년은 버틸 수 있다고도 하고, 실제로 책에서도 모델 용량을 아두이노의작은 머리속에 들어갈 크기로 줄이기 위해 양자화라던지 많은 내용을 다루고 있다.
책에서 다루는 보드는 내가 사용한 아두이노 나노 33 ble sense 말고도 sparkfun edge나 stm32의 보드를 사용한다.
예전에 Node MCU보다느리다는 말을 들어서 별로 쓰고 싶지 않은 보드라는 생각이 들어 쓸일이 없을 줄 알았고, ble sense에달린 센서를 통한 간단한 예제를 돌려볼때도 이정도는 아니라 나쁘지 않다는 생각이 들었는데
아니었다.
업로드 과정도 길고, 컴파일과정은 더 길다. 그리고 버그인지 업로드가 끝나면 포트연결이 바뀌는등의 문제로 다시 포트를 선택해줘야한다.
그리고 이건 책읽다가 아두이노ble sense를 구해야겠다!는 생각을 들게한 예제를 돌려본 결과다.
tensorflow lite로 학습된 모델을 바탕으로'yes'가 인식되면 초록색, 'no'가 인식되면 '빨간색', 뭔소리는 들렸는데 무슨말인지 모르겠으면 파란불을 켜는 예제인데 한마디로 아두이노에서 간단한 음성인식을 돌려보는예제다.
아무래도 아두이노에 작고 다양한 센서들을 내장해야하기 때문에센서의 성능이 respeaker모듈에 달린것 많큼 좋은것 같지 않아서인지
닥터후 보고 배운 내 발음이별로라 그런지
너무 가깝거나 너무 먼거리에선 인식되지 않기도 하고 ( 아마 말할 때 나오는 바람이센서에 노이즈로 작용할 수도 있겠다.) 하지만 아두이노 치곤 꽤 빠릿빠릿 한 편이다!
책을 읽기 전에
'tensorflow가 c++에서 돌아가는건아는데 파일 시스템이 없는 아두이노 같은 마이크로 컨트롤러에 python에서 작성한 코드를 어떻게 아두이노에집어넣지?',
'학습은 아두이노에서 이루어 지는가?'
라는 의문이 있었는데 해답은 이렇다.
colab 혹은 자신의 컴에서python으로 코드 작성 및 학습을 한다.
양자화를 통해 정확도손실을 최대한 줄여가며 모델의 크기를 줄인다.
tensorflow lite형식으로 변환한다.
모델을 저장한다.
xxd로 저장된 모델을 c 소스파일로저장한다.(모델은 바이트 배열로 정의된다고 한다.)
아두이노에 넣어준다!
책에서 이 과정을 통해 저장된c 소스파일을 보여주는데 별로 잘생기진 않았다..
이건 Sin함수 근사예제에서 학습된 모델이다.
사실 이건 일부고,
여기 커다란 직사각형 덩어리가 변환된 모델이다..
그렇다면 yes no 음성인식의경우엔?
이만큼 있다. +로스크롤바 크기를 보면 알 수 있듯이 내리면 더있다!!!
저거를 바탕으로 음성인식을 하는걸 보면 참 신기하다.
혹시 이 책에 나온 코드를 돌려보고 싶다면
Tensorflow micro 공식 튜토리얼이나
역자분께서 번역하신 깃헙을 참고해보면 좋을 것 같다.
tensorflow lite로 ios나 app watch에서 만든 앱이나 라즈베리파이에서 coral을 사용한프로젝트 소개도 있다!
업로드용량때문에 세부 사진은 삭제했습니다..