はじめに
インテルでは Open Model Zoo という形で学習済みのモデルを公開しており大きく分けてインテル提供のモデルとパブリックモデルの2つがあります。
インテル提供のモデルではいくつか量子化されているモデルも提供されていますがパブリックモデルでは残念ながら用意がありません。本コンテンツでは OpenVINO™ DL Workbench を使用して量子化モデルを生成する手順について紹介します。
本コンテンツの内容は Ubuntu 18.04 で OpenVINO™ DL Workbench の Docker Image Tag 2021.4 をターゲットとして記載しております。
- 参考URL:
主な手順としては以下の通りです。
- Docker ベースの OpenVINO™ DL Workbench の起動
- パブリックモデル ssd_mobilenet_v2_coco を FP32 の IR へ変換
- パブリックモデル ssd_mobilenet_v2_coco の FP32 の IR から INT8 の IR の生成
1. OpenVINO™ DL Workbench 向けの COCO データセットの用意
OpenVINO™ DL Workbench を使用する際にはデータセットの保存方法について指定があります。データセットを選択する際に表示される Validation Dataset Tip にならって、DL Workbench 向けにデータセットを事前に加工しておく必要があります。以下でその方法をご紹介します。
1.1 今回 COCO2017 のデータセット を使用しますので、イメージとアノテーションデータをダウンロードします。
1.2 COCO2017 というディレクトを作成し、さらにその中に annotations と val というディレクトリを作成します。
1.3 ダウンロードしたイメージのデータを解凍して、valディレクトリ内にコピーします。
1.4 ダウンロードしたアノテーションのデータを解凍し、その中の instances_val2017.json を annotations ディレクトリ内へコピーします。
1.5 coco2017ディレクトリを圧縮して、coco2017.zip を作成します。
2. Docker の OpenVINO™ DL Workbench の起動
DL Workbench の Docker Image の pull と DL Workbench の起動する手順を紹介します。
2.1 Docker のインストール
Docker をインストールしていない場合は、下記 URL を参考にしてインストールしておきます。
2.2 OpenVINO™ DL Workbench イメージの選択
Docker Hub 上ではいくつもの Tag が見つけられます。今回 2021.4 を使用します。
2.3 Docker Image の pull
まず最初に Docker Image を pull しますので、2021.4 のコマンドをコピーします。
ターミナルで sudo 権限を付与してコマンドをコピーして実行します。
$ sudo docker image pull openvino/workbench:2021.4
2.4 DL Workbench の起動
DL Workbench を起動するコマンドについては、下記 URL でオプションを選択後の Excecute / Results を使用します。
今回、 "My OS" は "Linux"、"Accelerators on my machine" は "CPU"、"Start DL Workbench" は "Docker command"、"Proxy" は "No" を選択しました。
2.5 DL Workbench の起動コマンドの実行
ターミナルから下記コマンドを実行します。
$ sudo docker run -p 0.0.0.0:5665:5665 --name workbench -it openvino/workbench:2021.4
DL Workbench のセットアップを数分間待ちます。下記 のようなメッセージが生成されればセットアップ完了です。
2.6 DL Workbench へのアクセス
コンソールログにあるリンク(この例では http://127.0.0.1:5665) をウェブブラウザで開きます。下記画面が表示されれば DL Workbench の起動は無事完了です。
3. パブリックモデル ssd_mobilenet_v2_coco から FP32 の IR の生成
プロジェクトを生成する際にモデルを指定しますが今回 Public モデルの ssd_mobilenet_v2_coco を使用しています。その後、データセットも指定することになりますが冒頭で準備していたデータセットを使用します。
3.1 DL Workbench プロジェクトの生成
3.1.1 DL Workbench 画面の "Create ボタン" をクリックしてプロジェクトを作成し、Create Project 画面へ移行します。
移行すると下記のような画面が表示されます。
3.1.2 Model のインポート
Model の横の "Import ボタン" をクリックします。
ssd_mobilenet_v2_coco" をクリックしてハイライトし、"Download and import ボタン" をクリックします。
3.1.3 IR ファイル生成のテスト
インポートしたモデルを使用して IR 形式のファイルが生成可能か確認します。
"1. Import" と "2. Prepare Environment" が完了したら、"3. Convert Model to IR" の "Precision" で FP32 を選択して "Convert ボタン" を押します。
Create Project 画面に戻り、FP32 の IR が無事生成されていることを確認します。
3.1.4 データセットのインポート
Create Project 画面を下にスクロールして "Validation Dataset" の "Import ボタン" をクリックします。
Import Dataset 画面に移行したら、"Upload Dataset タブ" をクリックします。
"Select File" の "Select ボタン" を押して用意したデータセットの coco2017.zip を選択して、"Import ボタン" をクリックします。
無事アップロードが完了しました。
3.1.5 DL Workbench プロジェクトの生成(続き)
Create Project 画面にて、"Model" で "ssd_mobilenet_v2_coco" を選択してハイライトします。
"Environment" で "CPU" を選択してハイライトします。
"Validation Dataset" で "coco2017" を選択してハイライトします。
画面下の "Create ボタン" がアクティブになるのでクリックしてプロジェクトを作成します。
プロジェクトの作成中は下記のような画面になります。
無事プロジェクトを作成できました。FP32 の IR では Throughput 147.3 FPS、Latency 6.39 ms という結果となっています。
3.2 Accuracy の確認
生成されたプロジェクトで Accuracy の確認を行います。
3.2.1 Accuracy が N/A となっていますので、ネットワークモデルの mAP を計算するため横の "ネジのアイコン" をクリックします。
3.2.2 Run Accuracy Check ボタン" をクリックします。
Accuracy (mAP) の計算が完了しました。結果は 24.95 となりました。
この FP32 の IR をもとに INT8 の量子化モデルを生成します。
4. パブリックモデル ssd_mobilenet_v2_coco の FP32 の IR から INT8 の IR の生成
4.1 画面を下にスクロールし、"Perform タブ" をクリックします。
4.2 "Optimize Performance タブ" の中は "Optimize Performance タブ" のままで
"Optimization Method" で "INT8" を選択し、"Optimize ボタン" をクリックします。
Optimize INT8 画面に移行しました。
4.3 Subset Size で選択したデータセットで使用する比率を設定できます。今回はデフォルトの 100% のままにしています。
4.4 ”Optimize Methods” と ”Calibration Schemes" は、まずはそれぞれデフォルトの
"Default Method" と "Performance Preset" のままで "Optimize ボタン" をクリックします。
(生成した INT8 の mAP が悪かった場合は、デフォルト以外の設定を試します。)
INT8 の IR が生成されました。Throughput 310.53 FPS、Latency 2.76 ms という結果となり、性能がかなり向上していることが確認できます。(FP32 の IR は Throughput 147.3 FPS、Latency 6.39 ms )
4.5 Accuracy が N/A となっていますので、ネットワークモデルの mAP を計算するため "横のネジのアイコン" をクリックします。
4.6 "Run Accuracy Check ボタン" をクリックします。
Accuracy (mAP) の計算が完了しました。結果は 24.7 となり、Accuracy はほとんど低下していないことが確認できます。(FP32の Accyracy の結果は 24.95)
4.7 生成した INT8 の IR をエクスポートするための手順です。
"Perform タブ" の中の "Export Project タブ" をクリックします。
4.8 "Include Model" を "Yes" にして "Export ボタン" をクリックします。
ダウンロードディレクトリにエクスポートされました。
yolo 系のネットワークモデルも量子化出来ますのでぜひお試し下さい。
5. まとめ
このように OpenVINO™ DL Workbench を使うことで、簡単にパブリックモデルから量子化の IR 形式を生成することができます。
第 11世代インテル® Core™ プロセッサーの Tiger Lake などでは、CPU 以外に 内蔵 GPU でも量子化の IR に対応し外付けのアクセラレーターがなくともパフォーマンスの向上が見込めます。長期供給も可能な CPU となりますので量産にも最適です。ぜひお試し下さい。
参考リンク
- Tiger Lake での量子化の IR 形式での性能評価 (近日公開予定)
- OpenVINO™ ツールキットをビデオでご紹介(リニューアル)
- YOLOv4 を OpenVINO™ ツールキットで使用する IR 形式へ変換してみよう
- OpenVINO™ に付属しているデモまとめ (2020.3 ベース)