bellFace가 채택한 초경량 가상 배경 정보

이 글은 「bellFace Advent Calendar 2021」 17일째 되는 글이다.

bellFace의 가상 배경


2021년 8월 발표된 벨페이스의 가상 배경에 적용된 기술을 소개한다.
https://bp.bell-face.com/update/20210816-2257

Tensorflow.정보


브라우저에 설치된 가상 배경은 대부분 Tensorflow입니다.js[1]를 사용하고 싶은데 실현되는 경우가 많습니다.
Tensorflow.js는 일반적으로 WebGL 백엔드[2]를 사용하여 연산합니다.
이 웹GL 백엔드는 CPU 백엔드에 비해 최대 속도가 100배나 빨라 당연히 모니터가 없는 PC에서는 성능을 향상시키기 어렵다.

Wasm 백엔드 정보


Wasm은 WebAssembly,TensorFlow를 말합니다.js의 Wasm 백엔드는 신경 네트워크 연산으로 최적화되어 도형판이 없어도 CPU만으로 고속 연산을 할 수 있다.
그러나 Wasm 백엔드도 만능이 아니다정부 지침서에는 다음과 같은 내용이 기재돼 있다.
일반적으로 Wasm은 모델이 작거나 WebGL(OES texture flat 확장 기능)을 지원하지 않거나 저성능 GPU를 탑재한 로우엔드 장치에 적용됩니다.
또한 다음 표는 TensorFolow입니다.js1.5.2 시점의 추론 시간이지만 이 표를 보면 소형 모델 중Wasm이 더 빠르고 모델 사이즈가 클수록 WebGL이 우세하다.

소형 모형


모델
WebGL
Wasm
CPU
메모리
BlazeFace
22.5 ms
15.6 ms
315.2 ms
.4 MB
FaceMesh
19.3 ms
19.2 ms
335 ms
2.8 MB

대규모 모형


모델
WebGL
Wasm
CPU
메모리
PoseNet
42.5 ms
173.9 ms
1514.7 ms
4.5 MB
BodyPix
77 ms
188.4 ms
2683 ms
4.6 MB
MobileNet v2
37 ms
94 ms
923.6 ms
13 MB
또한, TensorFolow.js의 버전 2.3.0에서부터 Wasm 백엔드는 상기 표보다 더욱 고속화[3]되었다.
동작 환경에 따라 Wasm+SIMD+다중 스레드를 지원하면 PoseNet의 Wasm 백엔드도 더욱 높은 성능을 낼 수 있습니다.
사용 방법도 간단합니다. 아래 코드를 통해 간단하게 전환할 수 있습니다.
// どこかで↓を定義しておく
// tfjsWasm.setWasmPaths('wasmのある場所を指定');
// バックエンドを指定する
await tf.setBackend('wasm');
await tf.ready();

벨페이스의 수법에 대해서.


Tensorflow.js+Wasm 백엔드+Blaze Face를 기반으로 합니다.
고객의 동작 환경은 다음과 같은 측면에서 시도되었는데 가상 배경이 ON이더라도 CPU 부하가 8%가량 상승하는 데 그쳐 일반적인 가상 배경의 부하보다 훨씬 낮았다.
CPU 부하가 높으면 팬이 신음하고 동작이 불안정해지기도 하지만 벨페이스라면 가상 배경을 오래 사용해도 문제가 되지 않으니 기회가 된다면 꼭 시도해보세요.
모델
CPU
메모리
MacBook Pro (13-inch, 2019)
2.8GHz 코어 Intel Core i7
16 GB 2133 MHz LPDDR3

동작 검증 페이지


내장형 카메라는 CORS 제한으로 인해 실행할 수 없습니다. 다음 링크에서 확인을 엽니다.
https://codepen.io/eda-bellface/full/KKXKBEp
페이지 오른쪽 상단의 Controls 패널에서 백엔드 및 모델을 전환할 수 있습니다.
Macbook에서 열린 상태에서 캡처한 사진을 게재했는데 Wasm+Blazeface가 가장 빠른 조합입니다.
또 사용 중인 PC에 고속 비디오 패널을 설치한 경우도 웹GL이 더 빠른 경우도 있다.

Wasm + BlazeFace


wasmblazeface
60fps 정도

WebGL + BlazeFace


webglblazeface
35fps 정도

Wasm + BodyPix


wasmbodypix
18fps 정도

WebGL + BodyPix


webglbodypix
20fps 정도

총결산


현재 Wasm 백엔드 + Blaze Face는 가장 강력한 성능의 조합으로 BellFace의 가상 배경을 구현했습니다.
Wasm 백엔드의 성능 개선은 계속될 것으로 보이며 버전 업그레이드와 브라우저 설치 상황에 따라 앞으로도 달라질 것으로 보인다.
또 웹GL보다 빠른 웹GPU도 기대된다.
10월에 Tensor Folow.js의 웹GPU 백엔드알파 버전도 나와요.이기 때문에 앞으로 로컬 응용 프로그램과 같은 성능을 발휘할 수 있습니다.

We are hiring!!!


베어페이스는 계속해서 제품과 시스템의 구성원을 적극적으로 채용했다.
엔지니어는 아래에서 응모할 수 있다.
https://hrmos.co/pages/bellface/jobs/014
이외의 위치는 다음과 같이 확인할 수 있다.
https://hrmos.co/pages/bellface/jobs?category=1441373246841167872
메티도 있다고 해서 캐주얼한 면담으로 들어보고 싶은 분들은 아래부터 들어보세요.
https://meety.net/articles/t2--7_60ljhphb

Who's Next ??


내일「bellFace Advent Calendar 2021」은 제품 매니저 야원 씨입니다.내일도 기대해주세요!
각주
https://www.tensorflow.org/js?hl=ja ↩︎
https://www.tensorflow.org/js/guide/platform_environment?hl=ja#webgl_백엔드 ↩︎
https://developers-jp.googleblog.com/2020/09/simd-tensorflowjs-webassembly.html ↩︎

좋은 웹페이지 즐겨찾기