
스마트폰 브라우저만으로 이미지 인식 AI를 구동할 수 있을까? (ONNX Runtime Web × NanoDet-Plus)
요약
ONNX Runtime Web과 가벼운 NanoDet-Plus 모델을 활용하여 스마트폰 브라우저 환경에서 실시간 객체 탐지를 구현하는 방법을 소개합니다. 서버 비용 절감, 지연 시간 감소, 프라이버시 보호라는 세 가지 이점을 중심으로 온디바이스 AI의 장점을 설명합니다.
핵심 포인트
- ONNX Runtime Web을 통한 브라우저 기반 AI 구동
- NanoDet-Plus 모델 사용으로 경량화 및 실시간성 확보
- 서버 비용 절감 및 데이터 프라이버시 강화 가능
- 상업적 이용이 용이한 라이선스 모델 활용
스마트폰에서 이미지 인식 AI를 구동하고 싶다!
스마트폰 카메라로 실시간으로 사물을 인식하고 싶다.
게다가 앱이 아니라 브라우저에서 구동하고 싶다.
그래서 실제로 만들어 보았다.
공개도 해두었으니 실제로 테스트해 볼 수 있다.
스마트폰으로 접속하기만 하면 OK.
객체 탐지(Object Detection)란?
이번에 하고 있는 것은 **실시간 객체 탐지 (Real-time Object Detection)**다.
객체 탐지란 AI가 "무엇이 찍혀 있는지"와 "어디에 있는지"를 인식하는 기술이다.
예를 들어 카메라를 비추면,
"이것은 책"
"이것은 노트북"
라는 식으로 무엇이 찍혀 있는지 인식해 준다.
게다가 화면 어디에 있는지도 알려준다.
공장의 제품 분류나 자율 주행, 방범 카메라 등 다양한 곳에서 사용되는 기술이다.
이번 포인트는 이것을 스마트폰에서 구동하고 있다는 것.
보통 AI 모델은 스마트폰에서 구동하지 않는다.
성능이 부족하기 때문이다.
그래서 보통은 서버에서 구동한다.
요컨대, 강력한 PC에 처리를 맡기는 것이다.
하지만 거기에는 3가지 문제가 있다.
서버에서 구동하고 싶지 않은 이유
지연 (Latency)
실시간 객체 탐지에서는 속도가 중요하다.
서버에서 처리하는 경우에는 카메라 이미지를 서버로 보내야 한다. 그리고 처리를 한 뒤 결과를 돌려받는다.
즉, 통신의 왕복이 필요하다.
당연히 그만큼 시간이 걸린다.
실시간성을 추구한다면 이것은 치명적이다.
예를 들어 자율 주행.
브레이크가 0.5초 늦어지면 곤란하다.
실시간 처리에서는 약간의 지연도 무시할 수 없다.
비용 (Money)
서버는 공짜가 아니다.
AI를 구동할 수 있는 서버를 빌린다면 돈이 든다.
하지만 스마트폰에서 AI를 구동할 수 있다면?
서버가 필요 없다.
그러니 무료!
개인 개발자에게도 기쁜 일이다.
개인 개발은 가능한 한 돈을 쓰고 싶지 않다.
이 장점은 상당히 크다.
프라이버시 (Privacy)
단순하게, 스마트폰의 영상을 외부로 보내고 싶지 않다.
"프라이버시를 제대로 지켜줄 거지?"라며 개발자를 신뢰해야만 한다.
그 점에 있어서, 스마트폰에서 구동하면 영상을 외부로 보내지 않아도 된다.
프라이버시 측면에서도 안심할 수 있다.
개인적으로 가장 큰 것은 비용이다.
서버에서 AI 모델을 구동하지 않으면, 완전 무료로 서비스를 공개하는 것도 가능하다.
첫 데모 페이지도 무료다.
얼마나 접속이 되더라도 내 지갑은 전혀 아프지 않다.
이것으로 서버에서 구동하고 싶지 않은 이유는 알았다.
그럼 본론으로.
어떻게 스마트폰에서 AI 모델을 구동하는가?
스마트폰에서 AI 모델을 구동하기
답은 의외로 심플하다.
가벼운 모델을 사용하면 된다.
보통 AI 모델을 서버에서 구동하는 이유는 처리가 무겁기 때문이다.
그렇다면 가벼운 모델을 사용하면 된다.
이번에 사용한 것은 NanoDet-Plus라는 객체 탐지 모델.
정확하게는 NanoDet-Plus-m-320을 ONNX 형식으로 변환한 것이다.
ONNX에 대해서는 나중에 설명하겠다.
NanoDet-Plus의 특징은 어쨌든 가볍다는 것.
모델 사이즈는 단 6MB[1]뿐이다.
큼직한 이미지 몇 장 정도의 용량밖에 되지 않는다.
게다가 빠르다.
실시간 객체 탐지용으로 만들어진 모델이기에 이번 용도에 딱 맞다.
특히 반가운 점은 라이선스의 관대함이다.
객체 탐지라고 하면 YOLO가 유명하다. 특히 Ultralytics의 YOLO.
다만 라이선스가 조금 까다롭다.
듣기로는 Ultralytics YOLO를 사용한 앱을 공개할 경우, 소스 코드를 공개해야 한다고 한다.
참고:
예를 들어 기업 입장에서는 이것이 엄격할 것이다.
반면 NanoDet-Plus는 그런 걱정이 없다. 상업적 이용도 OK.
개인 개발에서도, 기업에서도 안심하고 사용할 수 있다.
더 나아가 브라우저에서 구동하고 싶다.
브라우저라면 iPhone에서도 Android에서도 동작한다.
사용자 측도 편하다.
앱을 다운로드할 필요가 없다.
사이트에 접속하기만 하면 된다.
하지만 정말로 브라우저에서 AI 모델 같은 것을 구동할 수 있을까?
답은 ONNX라면 가능하다.
ONNX는 AI 모델의 형식이다.
이 형식으로 만들어 두면 다양한 환경에서 구동할 수 있게 된다.
Python에서도 동작하고, C++에서도 동작한다.
그리고 무엇보다 브라우저에서도 동작한다.
그래서 이번에도 브라우저 상에서 AI 모델을 구동할 수 있었다.
더 정확히 말하면, ONNX 파일만으로는 동작하지 않는다.
실행 환경이 필요하다. 그 실행 환경이 ONNX Runtime이다.
게임에 비유해 보자.
게임 소프트웨어만 산다고 해서 플레이할 수 있는 게 아니다.
게임기가 필요하다. Switch나 PS5 같은 것 말이다.
ONNX도 마찬가지다.
ONNX 파일만으로는 실행할 수 없다.
ONNX Runtime이라는 "게임기"가 있어야 비로소 동작한다.
그리고 웹(Web)을 위한 ONNX Runtime이 바로 ONNX Runtime Web이다.
즉, 브라우저에서 AI 모델을 구동하고 싶다면,
- AI 모델을 ONNX 형식으로 변환
- ONNX Runtime Web으로 실행
이렇게 하면 된다.
하지만, 느리지 않을까?
실시간 객체 탐지 (Object Detection)이므로, 가장 신경 쓰이는 부분은 속도다.
예를 들어 1FPS밖에 나오지 않는다면, 실시간이라고 말할 수 없다.
브라우저와 스마트폰의 조합이므로 상당히 느려질 것이라고 생각했다.
하지만 실제로 구동해 보니 의외로 빠르다.
이번에 사용한 스마트폰은 Google Pixel 9a이다.
이 환경에서 측정해 본 결과, 10FPS 정도가 나왔다.
모델의 추론 시간 (Inference Time)은 100ms 정도.
"엄청나게 빠르다!"라고 할 정도는 아니다.
하지만 평범하게 실시간으로 사용할 수 있는 수준이다.
예전에 저사양 PC로 게임을 10FPS 정도로 플레이했던 기억이 난다.
그것에 비하면 충분히 실용적이다.
다만, 속도의 편차가 심하다.
상태가 좋을 때는 16FPS 정도 나온다.
반대로 상태가 나쁠 때는 8FPS 정도까지 떨어진다.
왜 이렇게 편차가 심한지는 알 수 없다.
어쨌든 "쓸모가 없다"는 느낌은 아니다.
용도에 따라서는 충분히 실용적이라고 생각한다.
요약
이번의 핵심은 단순히 "스마트폰에서 AI를 구동했다"는 것만이 아니다.
본질은 에지 디바이스 (Edge Device)에서도 AI가 동작한다는 것을 확인한 것이다.
에지 디바이스란 거칠게 말하면 성능이 낮은 컴퓨터를 의미한다.
스마트폰도 그중 하나다.
따라서 이번 이야기는 스마트폰에만 국한되지 않는다.
웹(Web)일 필요도 없다.
ONNX는 Python에서도, C++에서도 동작한다.
즉, 라즈베리 파이(Raspberry Pi)와 같은 에지 디바이스에서도 똑같은 일을 할 수 있다.
"AI는 서버에서 구동하는 것."
전에는 그렇게 생각했다.
실제로 해보니 스마트폰에서도 평범하게 동작한다.
역시, 직접 시도해 보는 것이 중요하다.
코드
이번에 사용한 NanoDet-Plus-m-320의 ONNX 모델(양자화 없음) 크기. 모델 형식이나 양자화 여부에 따라 크기가 달라진다. 공식 GitHub에 따르면, int8이라면 1MB까지 줄일 수 있다고 한다. ↩︎
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기