WebDNN は深層学習モデル(DNN)をウェブブラウザ上で高速実行するためのオープンソースフレームワークです。
WebDNNでは、以下のフレームワークで学習されたDNNモデルをウェブブラウザ上で実行することができます
- TensorFlow (
v1.2.0
-v1.4.0
) - Keras (
v2.0.0
-v2.1.1
) - PyTorch (
v0.3.0
) - Chainer (
v1.23.0
-v4.0.0
) - Caffe
DNNは様々なタスクについて顕著な成果をおさめていますが、アプリケーションへの実応用の上では、その計算コストが大きな問題となっています。 ハードウェアアクセラレーションによる解決方法では、煩雑な計算環境セットアップ手順やハードウェアの価格等が問題となり、ユーザーエンド端末に同様の環境を構築することは非常に困難です。
WebDNNはこの問題を解決するために作られた、ウェブブラウザを利用したインストールフリーなDNN実行環境です。 WebDNNにより、ウェブブラウザ上での実行を前提とした積極的な最適化が学習済みモデルに行われるため、 パラメータデータの配信サイズを小さく抑え、高速な実行が可能となります。
- 比較対象: Keras.js
- 実行環境:
- Mac Book Pro early 2015
- macOS 10.12.4 Sierra
- Intel Core i5 2.7 GHz CPU
- 16 GB Memory - Intel Iris Graphics 6100 GPU
- Safari Technology Preview 30
- 測定内容: 画像識別モデルの一種, Vgg16[2], Inception-v3[4], ResNet50[1]を使用。224x224(Inception-v3のみ299x299)の画像1枚の推論に要する時間を測定。
縦軸は画像1枚あたりの処理時間(対数スケール)を表しています。
WebDNNの実行バックエンドとしてWebGPUを使用した場合、Keras.jsよりも大幅な速度向上が達成されました。 また、WebAssembly実装によるCPU上での実行でも、Keras.jsのGPUモードと同等以上の速度が出ていることが分かります。 さらに、WebDNNに実装された最適化機構を用いる事でより一層の速度向上効果が得られています。
ResNet50の学習済みKerasモデル[3]を変換し、ブラウザ上で実行してみましょう。 まず、Kerasに付属しているResNet50の学習済みモデルを保存します。
from keras.applications import resnet50
model = resnet50.ResNet50(include_top=True, weights='imagenet')
model.save("resnet50.h5")
次に、保存したモデルをCLIを用いて変換します。 モデルは GraphDescriptor という、WebDNNがモデルを実行するために必要な情報へと変換されます。 その際、モデルの最適化が同時に行われます。
python ./bin/convert_keras.py resnet50.h5 --input_shape '(1,224,224,3)' --out output
生成したDescriptorは、以下のJavaScriptコードで読み込み・実行ができます。
let runner, image, probabilities;
async function init() {
// Initialize descriptor runner
runner = await WebDNN.load('./output');
image = runner.inputs[0];
probabilities = runner.outputs[0];
}
async function run() {
// Set the value into input variable.
image.set(await WebDNN.Image.getImageArray('./input_image.png'));
// Run
await runner.run();
// Show the result
console.log('Output', WebDNN.Math.argmax(probabilities));
}
他にもCaffemodel, Chainerモデルの変換にも対応しています。 詳しい使用例はドキュメントを参照してください。
ドキュメントを参照してください。
- http://make.girls.moe/#/ - MakeGirls.moe - Create Anime Characters with A.I.!
- https://new3rs.github.io/AZ.js/index.ja.html (英語版) - 囲碁AI (PyaqのJavaScript移植)
- https://milhidaka.github.io/chainer-image-caption/ - 画像説明文生成デモ
- https://github.com/milhidaka/webdnn-exercise - WebDNNの基本的な使い方の演習
- [1] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. 2015. Deep Residual Learning for Image Recognition. In Proceedings of the Conference on Computer Vision and Pattern Recognition (CVPR). https://github.com/KaimingHe/deep-residual-networks
- [2] Karen Simonyan and Andrew Zisserman. 2014. Very Deep Convolutional Networks for Large-Scale Image Recognition. In Proceedings of the International Conference on Learning Representations (ICLR).
- [3] Applications - Keras Documentation
- [4] Christian Szegedy, Vincent Vanhoucke, Sergey Ioffe, Jon Shlens, and Zbigniew Wojna. 2016. Rethinking the Inception Architecture for Computer Vision. In Proceedings of the Conference on Computer Vision and Pattern Recognition (CVPR).