はじめに
ディープラーニング技術の進展は目覚ましく、トップ・カンファレンスでは各学会で数千件の論文が採択されています。採択される論文の多くはコードやデータセットが公開され、アカデミックだけでなく産業界での利活用も進んでいます。とりわけ、産業界では実世界の社会課題に対して迅速に最新の技術を適用することで、人々の生活の豊かさを向上させることに貢献できます。
今回、著者らは国際会議で発表したディープラーニング技術をインテルの OpenVINO™ ツールキットで高速化させるとともに、エッジからクラウドまでシームレスにディープラーニングを活用する開発に道筋をつけることができました。OpenVINO™ ツールキットはインテルが開発するツールスイートで、インテルの CPU や内蔵 GPU で最新のディープラーニング技術を高速動作させるためのコード類が無償で GitHub で公開されています。技術進展の速いディープラーニング分野で、すぐに最新技術を試せることは、大きなメリットとなります。次章で、よく用いられる技術について紹介します。
また、実際の開発ではクラウドやサーバーで学習したモデルをエッジに移植するたびに再開発が必要となり、エッジ機器の演算性能によって大幅に動作速度や精度が下がってしまいます。ところが、OpenVINO™ ツールキットを採用するとクラウド側で学習したモデルがそのままエッジ機器に移植することができ精度劣化もほとんどありません。
これらのメリットを活かし、産業界で集めた各社のデータに対して適切なアルゴリズムを選択し OpenVINO™ ツールキットで実装することで、複雑な社会課題に対して最先端の技術でスピーディーに解決を図ることができます。
最新技術動向について
OpenVINO™ ツールキットで公開されている学習済みの AI モデルは 200 以上あり、トップ・カンファレンスで採択された著名な研究内容もサポートされているため、解きたい課題に対して最適なアルゴリズムを選択してスピーディーに適用したり、自社開発のアルゴリズムで開発期間を抑えながら高速動作させることができます。
参照リンク: https://github.com/openvinotoolkit/open_model_zoo
例えば、産業界で利活用の多いディープラーニング技術として、外観検査、データ生成、人物/物体検出、などが挙げられます。
まず、外観検査はカメラからの入力画像について正常・異常を判別する画像認識ベースのアプローチと、ピクセル単位でどこに異常があるかを予測するセグメンテーション・ベースのアプローチがあります。画像認識ベースの手法では、GANomaly / DFM などが利用可能です。GANomaly は GAN と Auto-Encoder を組み合わせたアーキテクチャーで、論文中では X 線画像を用いた手荷物検査における危険物の検知に利用されています。DFM はディープラーニングの深い層から抽出される Deep Features に GMM (Gaussian Mixture Model) を適用することで、学習時に教師していないデータ (OOD: Out-of-Distribution) に対しても汎化性を持たせて高精度に認識させた技術です。
セグメンテーション・ベースの手法では、Patch Core / PaDiM などが利用できます。近年の主流技術は ImageNet などの大規模データで学習させた ResNet などのディープな AI モデルを特徴量抽出器として用いて、正常画像を 1 枚入力したときの特徴量を正常の分布として捉え、検査フェーズでは入力画像を特徴量抽出器に入れて参照元との高次元の Deep Features 同士を比較することで異常個所を判別します。求められた高次元での異常な特徴個所を二次元空間に変換することで、Patch Core / PaDiM などではピクセル単位で正常と異なる部分を検知可能となります。
参照リンク: https://github.com/openvinotoolkit/anomalib
次に、データ生成では、昨今で利活用が進む Diffusion Model も OpenVINO™ ツールキットで利用することができ CPU での動作が可能です。CNN (Convolutional Neural Network) を使ったモデルではドメインやモダリティーの違いに弱く、トレーニング環境での学習と本番環境の推論に乖離があると精度が出ませんでした。ところが、Transformer の登場によりドメインやモダリティーの違いに依存せずに“汎化性 (Generalization) ”を得ることができるようになりました。例えば、言語と画像など異なる入力のモダリティーに対しても、同じように特徴量が記述できるようになったことで言語と画像の境界がなくなり、言語入力から画像生成をしたり画像入力から言語説明などを行うことが可能になりました。特に言語と画像のペアを同じ特徴量空間で事前学習した手法を CLIP (Contrastive Language-Image Pretraining) と呼び、OpenVINO™ ツールキットで利用できる Stable Diffusion にも採用されています。
従来、生成系は GAN を使用したものが多かったのですが、Generator と Discriminator の min-max 理論を使った Loss の設定による学習の難しさが指摘されていました。Stable Diffusion ではアーキテクチャーが時系列を考慮した UNet になっており、サンプルノイズを段階的に取り除いて学習させることで安定して多様なバリエーションを生成し、GAN の生成結果よりも高精度であることから注目を集めました。産業界における生成系 AI の事例としては、外観検査における集めにくい不良品データの自動生成や、自動運転など極めて多くのバリエーションが必要な状況におけるデータ生成などで活用されています。
参照リンク: https://github.com/bes-dev/stable_diffusion.openvino
最後に、人物 / 物体検出においては EfficientDet / YOLO / SSD などの CNN 系検出器が、すぐに使える形で提供されています。特に EfficientDet は NAS (Neural Architecture Search) を用いており、特徴量抽出部分となる EfficientNet だけでなくマルチスケールでの特徴量統合部分を AI に探索させることで受容野、層の深さ、スケールのそれぞれを最適化させて高精度な検出を実現しました。一方、CNN を用いたアプローチでは層が深くなるほど空間解像度が小さくなるため、EfficientDet の特徴統合部分 (Bi-FPN) で深い層の高次元特徴を浅い層の高解像度のフィーチャー・マップにマッピングしても、小さい物体の認識は依然として困難でした。
そこで著者らは、入力画像に対しあらかじめ物体らしい個所を予測し、EfficientDet のフィーチャー・マップの中から類似するものほど高い報酬を与える自己教師あり学習 (self-supervised learning) を導入して解決を図りました。この手法を SGFM (Saliency Guided Feature Module) と呼び、インテルの OpenVINO™ ツールキットでの高速化の取り組みを次章で紹介します。
研究開発の紹介
開発に使用した機材は、インテル® NUC (CPU: インテル® Core™ i7-10710U プロセッサー、メモリー: 64GB、OS: Ubuntu 20.04 LTS、OpenVINO™ ツールキット: 2022.1) を推論用機材として使用し、学習には NVIDIA 製 GPU A100x8 と Tesla V100x4 を使用しました。学習・検証データには、CMS-DD (Camera Monitoring System Driving Dataset) を使用しています。また、フレームワークは TensorFlow 2.8 (Keras) を使用して、オリジナルの SGFM は TensorFlow1 系 (Keras) で実装しています。
今回の開発ステップは以下のフェーズに分けられます。
- SGFM の学習済みモデルを作成
- OpenVINO™ integration with TensorFlow (OVTF) モデルによる精度評価
- SGFM の学習モデルを IR 変換して精度評価
- 推論器へ学習モデルと推論コードを実機移植し精度評価
SGFM の学習について学習データは 65,392 枚、アノテーション済み矩形数は 161,674 矩形、8 クラスで、推論データは 7,792 枚、18,313 矩形、8 クラスとなっています。学習に使用したバッチサイズは 16 で、学習エポックは 100 としました。
OVTF は、IR 変換を事前に行うことなく TensorFlow (Keras) の実装のまま IR 対応しているレイヤーは OpenVINO™ ツールキットのバックエンドで動作させ、非対応のレイヤーは TensorFlow のバックエンドで自動的に動作させる仕組みとなっており、”openvino_tensorflow” をインポートして呼び出すだけのローコードで実装できます。しかし、SGFM のアーキテクチャーでは OpenVINO™ ツールキットのバックエンドのノード割合が 14% と低く、また推論速度が TensorFlow をバックエンドにしたときより約半分に低下したため、採用を見送りました。なお、EfficientDet をインテル® NUC 上で動作させた場合、TensorFlow バックエンドでは平均 13.7fps であったのに対して、OVTF バックエンドでは平均 25.3fps となり約 1.8 倍高速化しました。
OpenVINO™ ツールキットで推論させるためには、以下のプロセスで IR モデルへ変換します。
まず、TensorFlow (Keras) の出力モデルとなる HDF5 形式の学習モデルを、”tf.keras.models.load_model () ” で読み込み、”tf.saved_model.save () ” で SavedModel として保存します。ここで、カスタムレイヤーなどのカスタム・オブジェクトの計算グラフは保存されたファイルには含まれないため、モデルを読み込む際に ”custom_objects” のオプションとして SGFM で拡張されているカスタム・レイヤー・クラスを取り込みます。次に、インテル® NUC に OpenVINO™ ツールキットをインストールして ”model optimizer” コマンドで SavedModel をIR モデルに変換します。
モデル別の推論精度結果は表 1 を参照ください。
ここで、SGFM のオリジナルコードで学習済みのモデルが TensorFlow 1. (Keras) となり表 1 の左列で表示しています。そのコードを TensorFlow 2.8 (Keras) に変換しスクラッチで再学習させたものを表 1 の中央の列に、さらにその学習済みモデルを IR 化したものを表 1 の右側の列に表示しています。
この結果、IR モデルへの変換を行っても変換前と全く同等の精度が達成できていることが分かります。精度に関しては、オリジナルコードの TensorFlow 1 系から 2 系へ変換して、スクラッチで学習する過程で SGFM ありの精度が大幅に低くなりました。これは、TensorFlow そのもののバージョンが異なることによる挙動の違いが影響した可能性が指摘できます。平均をみると mAP が大幅に低下しているように見えますが、検出対象ごとの結果を見ると、学習数が多いクラス (例えば、car_same) では 10 万件ほどの学習対象があり、若干の精度劣化が見られるものの高水準で移植できていると言えます。一方で、学習枚数が極めて少ないクラス (例えば、opposite_motorbike) は 100 件ほどしかなく、極端に精度が下がっており、これが全体の精度低下を招いています。つまり、実応用ではデータ数が各クラスとも十分に集まっていれば、今回の実装で高精度に推論が可能だと予測できます。
次に、インテル® NUC 上で推論を行ったときのモデルごとの速度比較を実施しました。
比較結果 (表 2) を見ると、IR 変換により推論時間が 80.9msec から 29.9msec に短縮できていることが分かります。SGFM のカスタムレイヤーの一部は IR 化に対応していなかったため高速化できておらず、その部分で前処理に 79.4msec、後処理に 22.7msec かかっており、この点に関しては今後インテル版の TensorFlow を利用することで高速化を図ることが可能です。
おわりに
本稿では、インテルの OpenVINO™ ツールキットを活用した独自のディープラーニング技術の高速化の取り組みについて紹介しました。カスタムレイヤーを含む場合、前処理・後処理が含まれると全体高速化は難しいですが、AI モデル自体の推論時間は IR 化によって約 2.7 倍高速化しており、IR モデルへの変換前後で精度劣化は見られませんでした。今後、エッジやクラウドなど AI の適用先が柔軟に選択できるようになり、一度作成した IR モデルはインテルの CPU や内蔵 GPU および外付け GPU に渡されて自動的に高速化されるため、AI 開発の裾野を大幅に広げてくれると感じています。