フレクトのクラウドblog re:newal

http://blog.flect.co.jp/cloud/からさらに引っ越しています

Amazon Chime SDK for JavaScriptの新機能背景ぼかしの性能を評価する

こんにちは。研究開発室の岡田です。

先日Amazon Chime SDK for JavaScript に待望の背景ぼかし機能が追加されました[参考]。これまでも以前ご紹介したようにVideo Processing API を用いて仮想背景を実装することはできました。しかし、この場合 bodypix など人物と背景を分離するための機能を開発者が用意しなければならず、比較的実装のハードルが高くなっていました。今回の新機能により、人物と背景を分離したうえで背景をぼかすところまでを Amazon Chime SDK for JavaScript が全部やってくれるようになり、簡単に実装できるようなりました。

この機能の利用方法やデモについては、AWS 様の Guest Blog という形で 紹介させていただくことができましたので、こちらのブログをご参照ください。

https://aws.amazon.com/jp/blogs/business-productivity/blur-your-background-and-suppress-noise-in-an-online-meeting-application-built-with-the-amazon-chime-sdk-for-javascript/

このブログでは、上記の Guest Blog の執筆と合わせて実施した簡易版の性能評価の結果についてご紹介したいと思います。

Amazon Chime SDK for JavaScript Background Blur の性能評価について

今回の新機能も含めてビデオ会議システムの背景ぼかし機能は、セマンティックセグメンテーションと呼ばれるAIの技術を用いて実現することが一般的になっています。このセマンティックセグメンテーションは、ざっくりと(1)精度と(2)応答速度(計算量)の両面から評価されることが多いです。今回はこの中の応答速度について、二つの環境を用意して簡単に評価したいと思います。なお、精度については環境による影響は少ないので1、一度皆様の環境で上記のGuest Blogのデモを実際に使ってみてもらうほうが良いかなと思います。また、上記のブログの中にもサンプル画像がありますので、そちらをご確認ください。

評価項目

今回は応答速度(計算量)の評価として次の3点を見てみたいと思います。

  • 処理時間
  • FPS/処理周期の変化
  • CPU 使用率の変化

「処理時間」は背景ぼかし処理を行うのにかかる時間です。「FPS/処理周期の変化」は、背景ぼかし処理を行うことで FPS が劣化することがないかを確認します。ビデオ会議システムにおける背景ぼかし機能は、映像の FPS 以上に処理を行うメリットはないので処理の周期が必要以上に短くならないようにコントロールされています。この周期以内に背景ぼかし処理が完了すれば、FPS が劣化することはないはずです。「CPU 使用率の変化」は、背景ぼかし処理を行うことで CPU 使用率がどれくらい上がるかを確認します。なお、今回の背景ぼかしは、ぼかしの強度を変更できるので、弱いほうから Low, Mid, High と 3 段階で評価します。

なお、後述しますが 通信内容を確認すると、Amazon Chime SDK for JavaScript の背景ぼかし機能は、WebAssembly と Tensorflow Lite のモデルを使って実現されているようです。おそらく、Google Meet の背景ぼかしと同様に CPU で動かしているのではないかと思われますので GPU の使用率は評価対象から外しました2

環境

今回は、次の二つの環境を用いて性能を見てみました。ブラウザはどちらも chorme を用いて実験を行います。

  • ASUS UX390U (Win10, Core i5 7200U(Kaby Lake) 2.5GHz/2core, RAM 8G)

    5年くらい前の CPU を搭載したノート PC。低スペック PC の部類。参考

    ⇒ 以下 ASUS と表記します。

  • M1 MBA (M1-chip 8core, 16GB)

    M1 チップを搭載した 去年の MacBook Air です。かなり高速な PC。参考

    ⇒ 以下 MBA と表記します。

評価方法

それぞれの評価項目の評価方法は次の通りにしました。下記の内容は、Amazon Chime SDK for JavaScript についてある程度の知識があることを前提としているので、不要ならば本節はスキップしても構いません。

  • 処理時間

    SDK の構成上、生の処理時間を計測することは難しいです。今回は、背景ぼかしでも使用されている Video Processing API のパイプラインで、背景ぼかし処理の前後にタイムスタンプを取得するフィルタを追加し、時刻の差を算出することで疑似的に計測します。パイプラインでのフレームの受け渡しでオーバーヘッドがかかりますが、計測した時間以下で処理がなされたことは確認できます。計測プログラムのイメージは次のようなものになります。 image

  • FPS/処理間隔の変化

    これも同じように、パイプラインの中に各周期のタイムスタンプを記録するフィルタを追加して計測します。計測プログラムのイメージは次のようなものになります。 image

  • CPU 使用率の変化

    ASUS では、Windows の System Monitor を目視で確認します。MBA では Activity Monitor を目視で確認します。どちらも厳密には計測できませんが、大体の感じはわかると思います。

「処理時間」と「FPS/処理間隔の変化」の評価方法ついては、上記の AWS 様のブログで紹介したデモに簡易的に組み込んでありますので、実際に動かしてご確認いただけます。本評価もこのデモ+ α で計測しました。

評価結果

ASUSMBA のそれぞれで各評価項目を確認していきます。

ASUS

下の図は ASUS でまだ背景ぼかしを適用していな時の状況です。 14FPS で動いています。CPU 使用率は大体2目盛りあたりを推移しています。大体20%位といったところでしょうか。

image

背景ぼかしを適用すると下の図のようになります。なお、ぼかしの強度は Low です。 FPS は 14 のままです。処理時間は 36msec なので、単純計算で 27FPS くらいはさばけることになるので、FPS が変わらないのは妥当かなと思います。 CPU 使用率は少し上がって2~3目盛りの間を行ったり来たりといった感じです。CPU の負荷が 10%弱上がったというところでしょうか。

image

ぼかしの強度を Mid に変更しました ほぼほぼ Low の時と同じです。 image

ぼかしの強度を High に変更しました。 こちらもほぼほぼ Low の時と同じです。背景ぼかしの強度はあまり支配的な要素ではないようです。

image

MBA

下の図は MBA でまだ背景ぼかしを適用していな時の状況です。 16FPS で動いています。CPU 使用率はシステムとユーザ合わせて大体20%位といったところでしょうか。 image

背景ぼかしを適用すると下の図のようになります。なお、ぼかしの強度は Low です。 FPS は 16 のままです。処理時間は 8msec という驚異的に高速に動いています。単純計算で 100FPS 以上さばけることになるので、FPS が変わらないのは妥当かなと思います。 CPU 使用率もほぼ変化なしです。数%上がったかな?くらい。 image

ぼかしの強度を Mid に変更しました。 ほぼほぼ Low の時と同じです。 image

ぼかしの強度を High に変更しました。 こちらもほぼほぼ Low の時と同じです。背景ぼかしの強度はあまり支配的な要素ではないようです。ASUS の時と同じ傾向でした。 image

評価サマリと考察

結果を下表に纏めました。 ASUS 程度の古めの PC だと CPU 使用率が少し上がってしまいますが、それでも 10%程度でした。ビデオ会議を行っている間に別の作業しても大丈夫そうなレベル(ビデオ会議に集中しましょう)と考えてもよさそうです。さらに MBA などの最新の PC だと本当に影響ないといっても過言ではなさそうです。 ASUS での評価を見ると、ある程度古い PC まで問題なく使用できそうなので、幅広いユーザに対応できる機能なのではないかと思われます。 image

少しだけ深堀り

上記の通り、今回追加された背景ぼかしの機能はかなり軽量高速な機械学習モデルで作成されているようです。以前ご紹介したGoogle Meet の仮想背景のモデルと匹敵すると思います。少し中身に興味があったので通信内容を確認してみました。すると、やはり Google Meet と同じように TFLite のモデルを WebAssembly で動かしているようです。(同じモデルを使用しているのかまでは、わかりませんでした。) image

まとめ

Amazon Chime SDK for JavaScript の新機能 背景ぼかしについて、処理時間などの性能を評価しました。かなり軽量高速なものが実現されていますので、ある程度古い PC まで幅広いユーザ環境に導入可能かと思います。 今回は背景をぼかす機能となっていますが、今後は任意の画像に置き換えられるように機能が拡張されれば良いなと思いました。


  1. カメラの解像度など映像のクオリティの影響は受けるとは思いますが、そうなるともう簡単には評価できないので。

  2. GPU 使っていないという仮説を検証するためにも GPU 使用率を見ても良かったのですが、正直に言うと評価時点ではそこまで頭が回ってませんでした。