バイナリ型DCNNによる識別計算の高速化とモデル圧縮
Deep Convolutional Neural Network(DCNN) は,画像認識やセマンティックセグメンテーション等の様々なタスクにおいて高い性能を達成しています.DCNNは,VGGNetやDeep Residual Net(ResNet) などの深い層のネットワークが高い性能を得られることから,一般的に用いられています.しかしながら,DCNNには畳み込み層や全結合層に内積計算が多用されるため,ネットワークが多層化されるにつれてパラメータ数が増加し,多くの計算リソースが必要となります.そのため,組み込み機器やモバイル端末等の限られたリソースでDCNNを扱う場合,DCNNの識別計算の高速化とパラメータ削減のためにモデルの圧縮が必要です.我々の研究では,既存のネットワークモデルに対して識別計算の高速化とモデルサイズの圧縮が可能なバイナリ型DCNNを用いることで識別精度の低下を抑制しつつ,識別計算の高速化とモデル圧縮を同時に実現する研究に取り組んでいます.
Binary-decomposed DCNNによる識別計算の高速化とモデル圧縮
これまでに提案されている手法は,高速化のみ,モデル圧縮のみ,あるいは高速化とモデル圧縮を同時に実現できるが大きく識別精度が低下するなどといった問題がありました.我々の研究では,再学習なしに識別精度を保持しつつ,識別精度の高速化とモデル圧縮を同時に実現することを目的とし,特徴マップと各層の重みを二値に変換し,内積計算を近似する手法を提案します.特徴マップの二値化にQuantization sub-layerを導入し,重みの二値化にベクトル分解を用いることにより,各層における内積計算の誤差を抑制して大規模なネットワークに対応します.評価実験では,既存のネットワークモデルに本手法を適用し,エラー増加率を約2.0%程度に抑え,約2.0倍の高速化と約80%のモデル圧縮を達成しました.
ベクトル分解による重みの分解
二値同士の内積計算を行うためには,実数パラメータを二値に変換する必要があります.本手法では,ベクトル分解を用いることで重みベクトルを二値基底行列とスケール係数ベクトルに分解します.これにより,各層の重みの大半を二値に変換するため,モデルサイズの圧縮を同時に行うことができます.
Quantization sub-layerによる特徴マップの量子化
分解した重みを用いて近似内積計算を行うためには,負値を含んだ実数値で構成されている特徴マップを二値の特徴マップに変換する必要があります.本手法では,実数値を高速に二値へ変換するQuantization sub-layerを導入し,量子化幅を可変にすることで負値を含んだ実数値の量子化を可能にします.
Inference処理
通常の畳み込み計算では,実数値である特徴マップの局所領域と重みフィルタの積和を計算することで,次の特徴マップの出力を得ています.本手法では,実数値による積和計算を二値に置き換えて出力を計算します.これにより,二値同士の内積計算を論理演算とビットカウントに置き換えることができ,識別計算が高速化されます.
評価実験
ImageNet (AlexNet, VGGNet, ResNet)とcityscapes (SegNet)の学習済みモデルを使用して,本手法を適用し,それぞれ評価を行いました.エラー増加率を約2.0%程度に抑え,約2.0倍の高速化と約80%のモデル圧縮を達成しています.
ソースコード
実験に使用したソースコードを公開しています.推論プログラム,パラメータファイル,平均ファイル等が以下のリンクよりダウンロードできます.
開発環境
・Visual Studio 2017 community
・OpenCV 2.4.9
推論プログラム
推論プログラムは通常のDCNNと本手法を適用したDCNNの2つを分けて公開しています.環境に合わせるため,各自で以下の操作を行ってください.
DLBB.slnを開き,所定のファイルを編集する.
・netowork.cpp: 各層のパラメータファイルを指定
・network.hpp: 各層の基底数,量子化ビット数を指定
編集後にビルドを行い,DLBB.slnを閉じる.
evaluation.batに評価対象ファイルパス等を設定し,評価を実行する.(詳細はソースコード内のmemo.txtを参照)
AlexNet
・AlexNet: AlexNet (GitHub)
・Binary-decomposed AlexNet: FastAlexNet (GitHub)
VGGNet (16 layers)
・VGGNet: VGGNet (GitHub)
・Binary-decomposed VGGNet: FastVGGNet (GitHub)
ResNet (152 layers)
・ResNet: ResNet (GitHub)
・Binary-decomposed ResNet: FastResNet (GitHub)
SegNet
・SegNet: SegNet (GitHub)
・Binary-decomposed SegNet: FastSegNet (GitHub)
パラメータファイル
パラメータファイルは通常のDCNNと本手法を適用したDCNNの2つを同梱しています.ダウンロード後,ファイルを解凍して所定のフォルダに移動してください.
AlexNet
・params: AlexNet (zip, 0.36GiB)
VGGNet (16 layers)
・params: VGGNet (zip, 0.81GiB)
ResNet (152 layers)
・params: ResNet (zip, 0.36GiB)
SegNet
・params: SegNet (zip, 0.28GiB)
平均ファイル等
AlexNetとResNetは,前処理で平均画像を必要とします.また,評価画像は各自でダウンロードして所定のフォルダに移動してください.その際に登録が必要な場合があります.
ImageNet
・平均画像: ilsvrc2012_mean (npy, 1.50MiB)
・評価画像: ilsvrc2012_valid (tar, 6.20GiB)
Cityscapes
・評価画像: cityscapes_val (zip, 1.13GiB)
重み分解コード
重み分解コードは非公開としています.詳細につきましては,下記の連絡先にご連絡ください.
免責事項
公開しているプログラムやデータに関する情報には充分に注意を払っていますが,その内容について全てを保証するものではありません.プログラム,資料,ウェブサイトの著作者であるMachine Perception and Robotics Groupは,これらの使用ならびに閲覧によって生じたいかなる損害にも責任を負いかねます.プログラムの改良・再頒布によって生じた損害に関しても責任を負いかねます.公開しているプログラムは,上記の免責事項に同意の上,使用者の責任のもとで研究用途に限り,使用して構いません.商用利用される場合については,下記の連絡先にご連絡下さい.