텐서플로 라이트를 활용한 안드로이드 딥러닝 - 더 작고, 더 가벼운, 모바일, 에지 기기용 머신러닝

한빛미디어에서 제공받는 책으로 해당 리뷰를 작성하였습니다.

책표지!

0. 머신러닝, 그 공허함

머신러닝 혹은 딥러닝을 공부하고 나면 언제나 아쉬움이 가득하다. 예를 들어, 2018년에 박해선님이 번역하신 <<핸즈온 머신러닝>>을 친구들과 스터디를 하고 나서 느꼈던 감정은 “이제 뭘 해야 하나?”였다. 구글에서 몇가지 글을 찾아서 Flask와 연계해서 간단한 이미지 추론 예제를 진행했지만 내가 생각했던 것(물체 인식, 자율 주행?)을 진행하려고 하니 생각만큼 쉽지 않았다. 특히, 몇 백메가에 달하는 모델을 어떻게 처리해야 할지 몰라서 난감했던 생각이 주마등처럼 스친다.

머신러닝을 아무리 열심히 배워도 ‘모델’ 정도 만들고, 그걸 활용할 수 있는 방법이 적당하지 않았다. 뭔가 해보고 싶어서 ML KitCore ML 등을 찾아서 공부해보려고 했지만 쉽지 않았다. 왜냐하면 대부분 모델을 생성하는 부분을 다루고 있지 않아서 제공하는 모델을 사용하는 것은 문제가 없지만 막상 내가 모델을 만들어서 진행하면 실행 결과가 형편없었다. 2021년이 되어서야 Tensorflow Lite를 활용해서 다양한 예제를 접할 수 있었다.

“2~3권을 책을 참고해서 머신러닝 서비스를 학습할 수 있다면, 무슨 걱정이 있을까?”

Python을 사용해서 모델을 만들고, 그 모델을 사용해서 웹이나 앱을 서비스 하기 위해선 Android, iOS, Flask, Django 등과 같은 책을 참고해야 한다. 최소한 2~3권 정도 책을 참고해서 학습을 진행하게 되는데, 사실 그렇게 학습을 진행할 수 있는 정도면 무슨 걱정이 있겠는가?

1. 한 권으로 시작하자!

<<텐서플로 라이트를 활용한 안드로이드 딥러닝>>은 한 권으로 모델과 Android 앱을 개발하는 모든 과정을 실습 해 볼 수 있다. Python으로 모델을 생성하고, 생성된 모델을 TFLite로 변경해서 Android 앱에 저장하고 저장된 모델을 사용해서 앱을 개발한다. 이 모든 과정을 한권으로 해결할 수 있다. 2~3권을 상호참조하면서 진행하는 것에 비해서 한 권으로 진행하기 떄문에 학습을 일관된 흐름으로 진행할 수 있다.

파이썬 예제

책의 흐름은 단순한 예제인 MNIST로 시작한다. MNIST 예제는 Tensorflow에 포함된 예제라서 누구든 쉽게 접근할 수 있다. 그래서 Python 개발 환경과 코드를 가볍게 연습할 수 있다. 본인이 직접 만든 MNIST 모델을 사용해서 숫자를 인식하는 예제를 만들어보는 것이 첫번째 예제다. 이후 객체 인식 연구에 사용되는 ImageNet을 사용해서 만들어 놓은 예제를 개선하고, 카메라를 사용해서 실시간으로 객체를 추론하는 기능을 추가한다. 마지막으로 성능을 개선하고 끝난다. 단 한권으로 작동하는 Android 앱을 만들어볼 수 있다는 점은 머신러닝을 활용해서 서비스를 만들거나 앱을 만드는 분들에게 엄청나게 큰 장점이라 할 수 있다.

단 한권으로 이 모든 과정을 일관되게 진행할 수 있다!

이 책의 장점은 크게 두 가지로 꼽을 수 있다. 첫째는 자신이 모델을 만들어서 사용하는 것 뿐만 아니라 기존의 공개된 모델을 사용하는 방법을 소개한다는 점이다. 단순하게 MNIST를 가지고 성능 개선까지 진행해도 무리가 없을텐데, 공개된 머신러닝 모델을 활용하는 방법을 소개하고 있어서 머신러닝을 사용해서 서비스를 구성하는 분들에게 많은 도움이 된다. 둘째는 군더더기 없는 설명이다. Tensorflow와 Android 모두를 설명하기 때문에 자칫하면 분량이 늘어날 수 있음에도 불구하고 책을 쓴 저자분이 꼭 필요한 부분만 선별해서 설명하고 있고, 중요한 부분은 2~3번 정도 반복해서 설명하기 때문에 책을 진행하면서 겪게되는 어려움은 없다. 무엇보다 해당 교재에 있는 예제는 별다른 수정 없이 잘 작동(2021.08.19년 기준)하기 때문에 이론을 포기하고 실습만 진행한다 하더라도 많은 것을 배울 수 있다.

2. 아쉬움은?

이 책을 읽으면서 가장 아쉬웠던 부분은 다른 점은 Kotiln이 아니라 Java로 Android 코드가 구성되어 있다는 점이다.

책을 읽는 동안 Java로 구성되어 있어도 별다른 문제 없이 잘 작동하기 때문에 큰 아쉬움이 없었다. 하지만 Google이 Kotlin을 Android의 기본 언어로 지원하고 있기 때문에 이왕이면 Kotlin으로 진행하면 향후에도 책을 읽으면서 작성한 코드를 활용할 수 있으면 좋았을텐데 싶었다.

아쉽게도 Java

그래서 책을 다 읽고, 1~5장까지 진행한 내용은 Kotlin으로 변경해서 GitHub 저장소에 올려두었다. 6장 이후는 현재 코드를 작성하고 있다. 다음에 기회가 된다면 Kotlin으로 진행되는 교재로 개정되길 희망한다. 그리고 (수요가 많이 없을 수 있지만) ML Core 기반의 iOS도 자매품으로 함께 출간되길 기원해본다.

3. 스터디에 좋다!

즐거움이 많았던 책이다. 실습 코드 걱정 없이 즐겁게 읽고, 재미있게 코딩할 수 있는 기회였다. 머신러닝을 가지고 앱이나 서비스를 기획하고 있다면 친구들과 이 책으로 시작해보자. 주변에 머신러닝을 공부하는 분들이 있다면, 이 교재를 가지고 객체 인식, 세그먼테이션 등과 같은 것으로 개선할 수 있으니 스터디에 도전해보면 좋겠다. 책의 분량 때문에 생략된 부분은 다른 교재를 참고해서 진행해보면 좋다. 그래서 머신러닝을 활용해서 서비스를 구성하려는 초급자나 팀에게 추천한다.

Written on August 20, 2021