지난 몇 년간 딥러닝을 필두로 인공지능 기술이 비약적으로 발전해 IT 업계 전반에 영향을 미치고 있다. 하지만 딥러닝은 여전히 접근하기 힘든 영역으로 인식되고 있다.

강력한 컴퓨팅 자원이 필요한 딥러닝은 클라우드나 워크스테이션 등의 인프라를 갖춘 백엔드 환경에서 발전해왔지만, 서버 없이 기기 자체에서 딥러닝 모델을 수행하는 온디바이스(On-Device) AI 기술의 수요가 점차 늘어난 덕분에 딥러닝과 인공지능 기술을 모바일 환경으로 끌어들일 수 있게 됐다.

사실 모바일 딥러닝은 아직 성숙하지 않은 기술이다. 하드웨어의 한계, 알고리즘의 한계 등 개선해야 할 사항이 많고, 정보를 공유할 커뮤니티는 턱없이 부족하다. 그나마 제공되는 샘플 코드나 레퍼런스도 입문자가 이해하기 어려운 수준이다.

저자는 이 책을 안드로이드 앱에서 딥러닝 모델을 활용하는 방법을 배우고자 하는 입문자의 눈높이에 맞춰 설명한다. 앱 개발 경험이 있는 안드로이드 개발자라면 이 책을 통해 직접 만든 앱에 딥러닝 모델을 배포해 활용하는 방법을 익힐 수 있을 것으로 기대한다.

텐서플로 라이트를 활용한 안드로이드 딥러닝
임태규 지음 | 한빛미디어 | 368쪽 | 2만7000원

#10줄서평 #4장 텐서플로 라이트 모델 개발

1. 텐서플로를 이용해 개발한 모델을 안드로이드에서 활용하려면 텐서플로 라이트 모델로 변환해 배포해야 한다. 모델 전체를 직접 개발할 필요는 없으며, 사전 학습된 다양한 모델을 이용하면 생산성을 높일 수 있다.

2. 텐서플로 라이트 모델 개발은 모델 선택 → 모델 변환 → 기기 배포 → 모델 최적화 순으로 진행된다. 모델 선택은 안드로이드 앱에서 이용할 딥러닝 모델을 선택하는 프로세스다. 주어진 문제를 해결하는 데 적합한 모델을 선택해야 하는데, 여기서 문제는 개발하고자 하는 솔루션이나 서비스에 의해 결정된다. 손글씨 분류 앱을 만들기 위해서는 이미지 분류 문제를 해결해야 하고, 영화 리뷰를 분석하기 위해서는 감성 분석이 필요하다.

3. 모델 변환은 개발한 모델을 텐서플로 라이트 모델로 변환하는 프로세스다. 텐서플로 라이트는 스마트폰, IoT 기기 등 컴퓨팅 자원이 충분치 못한 환경에서 사용하기 위해 설계됐다. 이러한 환경은 많은 컴퓨팅 자원을 필요로 하는 딥러닝 모델의 수행에 적합하지 않기 때문에 이를 극복하기 위해 특히 효율성을 높이는 데 중점을 두고 있다.

4. 기기 배포는 tflite 파일을 안드로이드 스튜디오의 프로젝트에 배포하고, 이를 이용해 안드로이드 앱을 만들어 기기에 배포하는 프로세스다. 앱에서 모델을 활용하기 위한 배포 방법은 간단하다. 앱 개발 단계에서 안드로이드 스튜디오에 모델을 포함하기만 하면 된다. 그런 다음 이 모델을 활용하는 앱을 만들어 기기에 설치하면 모델도 앱에 포함되어 기기에서 이용할 수 있다.

5. 모델 최적화는 모델이 안드로이드 기기에서 최적의 성능을 발휘하도록 튜닝하는 프로세스다. 최적화를 거치면 모델의 정확도 손실을 최소화하면서 모델의 크기가 줄어든다. 모델 변환 단계에서 텐서플로 라이트가 자동으로 최적화를 수행하지만, 실행 속도나 정확도를 더욱 개선하기 위해 직접 최적화를 할 수 있다.

6. 텐서플로 라이트 모델 개발 워크플로에서는 모델 개발을 모델 선택 프로세스에 포함된 것으로 보고 별도의 프로세스로 구분하지 않았다. 모델 선택 프로세스에서 이미 만들어진 모델을 사용하기로 했다면 모델을 직접 개발할 필요가 없기 때문이다. 하지만 모델을 직접 개발하기로 결정했다면 선택한 모델을 먼저 개발해야 한다.

7. 다층 퍼셉트론 모델의 평가 결과는 97.7%로 매우 높은 수준이지만, 합성곱 신경망을 이용하면 이미지 분류 모델의 정확도를 더욱 향상할 수 있다. 합성곱 신경망은 합성곱 연산을 적용해 지역성에 기반한 특징을 학습한다. 또한 필터 반복 적용으로 가중치가 공유돼 완전 연결 네트워크에 비해 파라미터가 훨씬 적다. 이러한 특징 때문에 합성곱 신경망은 이미지 데이터에 매우 적합한 모델이다.

8. 다층 퍼셉트론과 합성곱 신경망은 비교적 간단한 모델이므로 구현이 어렵지 않았지만 ResNet, MobileNet, EfficientNet 등 최근 많이 사용되고 있는 모델은 훨씬 깊고 복잡한 구조를 가지고 있다. 텐서플로는 이러한 모델을 직접 구현하지 않아도 편리하게 이용할 수 있도록 케라스 애플리케이션 모듈에서 몇 가지 모델을 제공한다.

9. 사전 학습 모델, 전이 학습 모델, 직접 개발한 모델 등 텐서플로에서 개발한 모델을 안드로이드에서 사용하려면 텐서플로 라이트 모델로 변환해야 한다. 텐서플로 라이트는 케라스 모델, SavedModel, Concrete 함수를 각각 TFLite 모델로 변환하고, 각 포맷의 변환 함수가 tf.lite.TFLiteConverter에 작성되어 있다.

10. 텐서플로 모델을 저장하는 방법으로는 학습된 파라미터만 저장하는 방법과 모델 전체를 저장하는 방법이 있다. 파라미터만 저장하려면 체크포인트를 사용하는데, 모델이 사용한 모든 파라미터 값을 저장하고 모델의 아키텍처는 저장하지 않는다. 모델 전체를 저장하려면 모델 아키텍처, 가중치, 컴파일 관련 설정값, 옵티마이저를 모두 저장해야 하므로 SavedModel이나 HDF5 방식을 권장한다.

하순명 기자 kidsfocal@chosunbiz.com


관련기사