TensorFlow フレームワークを使用した NNCF による量子化対応トレーニング

この Jupyter ノートブックはオンラインで起動でき、ブラウザーのウィンドウで対話型環境を開きます。ローカルにインストールすることもできます。次のオプションのいずれかを選択します。

Google Colab GitHub

のノートブックの目的は、ニューラル・ネットワーク圧縮フレームワーク NNCF 8 ビット量子化を使用して、OpenVINO™ ツールキットによる推論用に TensorFlow モデルを最適化する方法を示すことです。最適化プロセスには次の手順が含まれます。

  • オリジナルの FP32 モデルを INT8 に変換します。

  • 微調整を使用して精度を復元します。

  • 最適化されたオリジナルのモデルを Frozen Graph にエクスポートし、次に OpenVINO にエクスポートします。

  • モデルのパフォーマンスを測定および比較します。

さらに高度な使用法については、これらのを参照してください。

このチュートリアルでは、Imagenette データセットを持つ ResNet-18 モデルを使用します。Imagenette は、ImageNet データセットから簡単に分類された 10 個のクラスのサブセットです。より小さいモデルとデータセットを使用すると、トレーニングとダウンロード時間が短縮されます。

目次

インポートと設定

NNCF とすべての補助パッケージを Python コードからインポートします。モデルの名前、入力画像サイズ、使用するバッチサイズ、学習率を設定します。また、モデルの Frozen Graph および OpenVINO IR バージョンが保存されるパスを定義します。

注: チュートリアルを簡略化するために、エラーレベル未満のすべての NNCF ログメッセージ (情報および警告) が無効になっています。運用環境で使用する場合は、set_log_level(logging.ERROR) を削除してログを有効にすることを推奨します。

import sys
import importlib.util

%pip install -q "openvino>=2023.1.0" "nncf>=2.5.0"
if sys.platform == "win32":
    if importlib.util.find_spec("tensorflow_datasets"):
        %pip uninstall -q tensorflow-datasets
    %pip install -q --upgrade "tfds-nightly"
else:
    %pip install -q "tensorflow-datasets>=4.8.0"
DEPRECATION: pytorch-lightning 1.6.5 has a non-standard dependency specifier torch>=1.8.*. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of pytorch-lightning or contact the author to suggest that they release a version with a conforming dependency specifiers. Discussion can be found at https://github.com/pypa/pip/issues/12063
Note: you may need to restart the kernel to use updated packages.
DEPRECATION: pytorch-lightning 1.6.5 has a non-standard dependency specifier torch>=1.8.*. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of pytorch-lightning or contact the author to suggest that they release a version with a conforming dependency specifiers. Discussion can be found at https://github.com/pypa/pip/issues/12063
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
pytorch-lightning 1.6.5 requires protobuf<=3.20.1, but you have protobuf 3.20.3 which is incompatible.
Note: you may need to restart the kernel to use updated packages.
from pathlib import Path
import logging

import tensorflow as tf
import tensorflow_datasets as tfds
from tensorflow.keras import layers
from tensorflow.keras import models

from nncf import NNCFConfig
from nncf.tensorflow.helpers.model_creation import create_compressed_model
from nncf.tensorflow.initialization import register_default_init_args
from nncf.common.logging.logger import set_log_level
import openvino as ov

set_log_level(logging.ERROR)

MODEL_DIR = Path("model")
OUTPUT_DIR = Path("output")
MODEL_DIR.mkdir(exist_ok=True)
OUTPUT_DIR.mkdir(exist_ok=True)

BASE_MODEL_NAME = "ResNet-18"

fp32_h5_path = Path(MODEL_DIR / (BASE_MODEL_NAME + "_fp32")).with_suffix(".h5")
fp32_ir_path = Path(OUTPUT_DIR / "saved_model").with_suffix(".xml")
int8_pb_path = Path(OUTPUT_DIR / (BASE_MODEL_NAME + "_int8")).with_suffix(".pb")
int8_ir_path = int8_pb_path.with_suffix(".xml")

BATCH_SIZE = 128
IMG_SIZE = (64, 64)  # Default Imagenet image size
NUM_CLASSES = 10  # For Imagenette dataset

LR = 1e-5

MEAN_RGB = (0.485 * 255, 0.456 * 255, 0.406 * 255)  # From Imagenet dataset
STDDEV_RGB = (0.229 * 255, 0.224 * 255, 0.225 * 255)  # From Imagenet dataset

fp32_pth_url = "https://storage.openvinotoolkit.org/repositories/nncf/openvino_notebook_ckpts/305_resnet18_imagenette_fp32_v1.h5"
_ = tf.keras.utils.get_file(fp32_h5_path.resolve(), fp32_pth_url)
print(f'Absolute path where the model weights are saved:\n {fp32_h5_path.resolve()}')
2024-02-10 01:20:39.681060: I tensorflow/core/util/port.cc:110] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable TF_ENABLE_ONEDNN_OPTS=0.
2024-02-10 01:20:39.715569: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 AVX512F AVX512_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
2024-02-10 01:20:40.314657: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
INFO:nncf:NNCF initialized successfully. Supported frameworks detected: torch, tensorflow, onnx, openvino
Downloading data from https://storage.openvinotoolkit.org/repositories/nncf/openvino_notebook_ckpts/305_resnet18_imagenette_fp32_v1.h5
8192/134604992 [..............................] - ETA: 0s
 
114688/134604992 [..............................] - ETA: 1:25
 
311296/134604992 [..............................] - ETA: 57s
 
507904/134604992 [..............................] - ETA: 48s
 
704512/134604992 [..............................] - ETA: 46s
 
901120/134604992 [..............................] - ETA: 43s
  
1089536/134604992 [..............................] - ETA: 43s
  
1294336/134604992 [..............................] - ETA: 41s
  
1490944/134604992 [..............................] - ETA: 42s
  
1744896/134604992 [..............................] - ETA: 40s
  
1933312/134604992 [..............................] - ETA: 40s
  
2138112/134604992 [..............................] - ETA: 40s
  
2342912/134604992 [..............................] - ETA: 39s
  
2531328/134604992 [..............................] - ETA: 39s
  
2785280/134604992 [..............................] - ETA: 39s
  
2932736/134604992 [..............................] - ETA: 39s
  
3178496/134604992 [..............................] - ETA: 38s
  
3325952/134604992 [..............................] - ETA: 39s
  
3571712/134604992 [..............................] - ETA: 38s
  
3727360/134604992 [..............................] - ETA: 38s
  
3956736/134604992 [..............................] - ETA: 38s
  
4112384/134604992 [..............................] - ETA: 38s
  
4358144/134604992 [..............................] - ETA: 38s
  
4603904/134604992 [>.............................] - ETA: 37s
  
4759552/134604992 [>.............................] - ETA: 37s
  
4997120/134604992 [>.............................] - ETA: 37s
  
5160960/134604992 [>.............................] - ETA: 37s
  
5390336/134604992 [>.............................] - ETA: 37s
  
5554176/134604992 [>.............................] - ETA: 37s
  
5783552/134604992 [>.............................] - ETA: 37s
  
5939200/134604992 [>.............................] - ETA: 37s
  
6176768/134604992 [>.............................] - ETA: 36s
  
6332416/134604992 [>.............................] - ETA: 37s
  
6569984/134604992 [>.............................] - ETA: 36s
  
6725632/134604992 [>.............................] - ETA: 36s
  
6955008/134604992 [>.............................] - ETA: 36s
  
7110656/134604992 [>.............................] - ETA: 36s
  
7356416/134604992 [>.............................] - ETA: 36s
  
7512064/134604992 [>.............................] - ETA: 36s
  
7749632/134604992 [>.............................] - ETA: 36s
  
7913472/134604992 [>.............................] - ETA: 36s
  
8142848/134604992 [>.............................] - ETA: 36s
  
8298496/134604992 [>.............................] - ETA: 36s
  
8527872/134604992 [>.............................] - ETA: 36s
  
8683520/134604992 [>.............................] - ETA: 36s
  
8912896/134604992 [>.............................] - ETA: 35s
  
9076736/134604992 [=>............................] - ETA: 35s
  
9306112/134604992 [=>............................] - ETA: 35s
  
9469952/134604992 [=>............................] - ETA: 35s
  
9699328/134604992 [=>............................] - ETA: 35s
  
9879552/134604992 [=>............................] - ETA: 35s
   
10100736/134604992 [=>............................] - ETA: 35s
   
10272768/134604992 [=>............................] - ETA: 35s
   
10485760/134604992 [=>............................] - ETA: 35s
   
10657792/134604992 [=>............................] - ETA: 35s
   
10870784/134604992 [=>............................] - ETA: 35s
   
11042816/134604992 [=>............................] - ETA: 35s
   
11272192/134604992 [=>............................] - ETA: 35s
   
11493376/134604992 [=>............................] - ETA: 35s
   
11657216/134604992 [=>............................] - ETA: 35s
   
11886592/134604992 [=>............................] - ETA: 34s
   
12050432/134604992 [=>............................] - ETA: 34s
   
12263424/134604992 [=>............................] - ETA: 34s
   
12443648/134604992 [=>............................] - ETA: 34s
   
12656640/134604992 [=>............................] - ETA: 34s
   
12828672/134604992 [=>............................] - ETA: 34s
   
13049856/134604992 [=>............................] - ETA: 34s
   
13230080/134604992 [=>............................] - ETA: 34s
   
13443072/134604992 [=>............................] - ETA: 34s
   
13623296/134604992 [==>...........................] - ETA: 34s
   
13828096/134604992 [==>...........................] - ETA: 34s
   
14016512/134604992 [==>...........................] - ETA: 34s
   
14229504/134604992 [==>...........................] - ETA: 34s
   
14409728/134604992 [==>...........................] - ETA: 34s
   
14614528/134604992 [==>...........................] - ETA: 34s
   
14802944/134604992 [==>...........................] - ETA: 34s
   
15007744/134604992 [==>...........................] - ETA: 33s
   
15187968/134604992 [==>...........................] - ETA: 33s
   
15400960/134604992 [==>...........................] - ETA: 33s
   
15589376/134604992 [==>...........................] - ETA: 33s
   
15785984/134604992 [==>...........................] - ETA: 33s
   
15982592/134604992 [==>...........................] - ETA: 33s
   
16171008/134604992 [==>...........................] - ETA: 33s
   
16351232/134604992 [==>...........................] - ETA: 33s
   
16572416/134604992 [==>...........................] - ETA: 33s
   
16752640/134604992 [==>...........................] - ETA: 33s
   
16965632/134604992 [==>...........................] - ETA: 33s
   
17154048/134604992 [==>...........................] - ETA: 33s
   
17350656/134604992 [==>...........................] - ETA: 33s
   
17530880/134604992 [==>...........................] - ETA: 33s
   
17743872/134604992 [==>...........................] - ETA: 33s
   
17932288/134604992 [==>...........................] - ETA: 33s
   
18128896/134604992 [===>..........................] - ETA: 33s
   
18309120/134604992 [===>..........................] - ETA: 32s
   
18522112/134604992 [===>..........................] - ETA: 32s
   
18718720/134604992 [===>..........................] - ETA: 32s
   
18907136/134604992 [===>..........................] - ETA: 32s
   
19095552/134604992 [===>..........................] - ETA: 32s
   
19300352/134604992 [===>..........................] - ETA: 32s
   
19496960/134604992 [===>..........................] - ETA: 32s
   
19701760/134604992 [===>..........................] - ETA: 32s
   
19898368/134604992 [===>..........................] - ETA: 32s
   
20094976/134604992 [===>..........................] - ETA: 32s
   
20291584/134604992 [===>..........................] - ETA: 32s
   
20488192/134604992 [===>..........................] - ETA: 32s
   
20684800/134604992 [===>..........................] - ETA: 32s
   
20873216/134604992 [===>..........................] - ETA: 32s
   
21069824/134604992 [===>..........................] - ETA: 32s
   
21266432/134604992 [===>..........................] - ETA: 32s
   
21454848/134604992 [===>..........................] - ETA: 32s
   
21659648/134604992 [===>..........................] - ETA: 31s
   
21848064/134604992 [===>..........................] - ETA: 31s
   
22052864/134604992 [===>..........................] - ETA: 31s
   
22249472/134604992 [===>..........................] - ETA: 31s
   
22437888/134604992 [====>.........................] - ETA: 31s
   
22626304/134604992 [====>.........................] - ETA: 31s
   
22822912/134604992 [====>.........................] - ETA: 31s
   
23019520/134604992 [====>.........................] - ETA: 31s
   
23216128/134604992 [====>.........................] - ETA: 31s
   
23412736/134604992 [====>.........................] - ETA: 31s
   
23609344/134604992 [====>.........................] - ETA: 31s
   
23797760/134604992 [====>.........................] - ETA: 31s
   
23994368/134604992 [====>.........................] - ETA: 31s
   
24182784/134604992 [====>.........................] - ETA: 31s
   
24395776/134604992 [====>.........................] - ETA: 31s
   
24592384/134604992 [====>.........................] - ETA: 31s
   
24788992/134604992 [====>.........................] - ETA: 31s
   
24977408/134604992 [====>.........................] - ETA: 30s
   
25165824/134604992 [====>.........................] - ETA: 30s
   
25362432/134604992 [====>.........................] - ETA: 30s
   
25559040/134604992 [====>.........................] - ETA: 30s
   
25755648/134604992 [====>.........................] - ETA: 30s
   
25952256/134604992 [====>.........................] - ETA: 30s
   
26148864/134604992 [====>.........................] - ETA: 30s
   
26345472/134604992 [====>.........................] - ETA: 30s
   
26533888/134604992 [====>.........................] - ETA: 30s
   
26722304/134604992 [====>.........................] - ETA: 30s
   
26918912/134604992 [====>.........................] - ETA: 30s
   
27115520/134604992 [=====>........................] - ETA: 30s
   
27262976/134604992 [=====>........................] - ETA: 30s
   
27451392/134604992 [=====>........................] - ETA: 30s
   
27639808/134604992 [=====>........................] - ETA: 30s
   
27844608/134604992 [=====>........................] - ETA: 30s
   
28033024/134604992 [=====>........................] - ETA: 30s
   
28229632/134604992 [=====>........................] - ETA: 30s
   
28426240/134604992 [=====>........................] - ETA: 30s
   
28622848/134604992 [=====>........................] - ETA: 29s
   
28835840/134604992 [=====>........................] - ETA: 29s
   
29016064/134604992 [=====>........................] - ETA: 29s
   
29220864/134604992 [=====>........................] - ETA: 29s
   
29417472/134604992 [=====>........................] - ETA: 29s
   
29605888/134604992 [=====>........................] - ETA: 29s
   
29786112/134604992 [=====>........................] - ETA: 29s
   
29999104/134604992 [=====>........................] - ETA: 29s
   
30195712/134604992 [=====>........................] - ETA: 29s
   
30384128/134604992 [=====>........................] - ETA: 29s
   
30580736/134604992 [=====>........................] - ETA: 29s
   
30785536/134604992 [=====>........................] - ETA: 29s
   
30973952/134604992 [=====>........................] - ETA: 29s
   
31170560/134604992 [=====>........................] - ETA: 29s
   
31367168/134604992 [=====>........................] - ETA: 29s
   
31563776/134604992 [======>.......................] - ETA: 29s
   
31752192/134604992 [======>.......................] - ETA: 29s
   
31965184/134604992 [======>.......................] - ETA: 28s
   
32153600/134604992 [======>.......................] - ETA: 28s
   
32350208/134604992 [======>.......................] - ETA: 28s
   
32522240/134604992 [======>.......................] - ETA: 28s
   
32735232/134604992 [======>.......................] - ETA: 28s
   
32923648/134604992 [======>.......................] - ETA: 28s
   
33120256/134604992 [======>.......................] - ETA: 28s
   
33308672/134604992 [======>.......................] - ETA: 28s
   
33521664/134604992 [======>.......................] - ETA: 28s
   
33710080/134604992 [======>.......................] - ETA: 28s
   
33906688/134604992 [======>.......................] - ETA: 28s
   
34086912/134604992 [======>.......................] - ETA: 28s
   
34299904/134604992 [======>.......................] - ETA: 28s
   
34480128/134604992 [======>.......................] - ETA: 28s
   
34693120/134604992 [======>.......................] - ETA: 28s
   
34881536/134604992 [======>.......................] - ETA: 28s
   
35078144/134604992 [======>.......................] - ETA: 28s
   
35266560/134604992 [======>.......................] - ETA: 28s
   
35463168/134604992 [======>.......................] - ETA: 27s
   
35659776/134604992 [======>.......................] - ETA: 27s
   
35864576/134604992 [======>.......................] - ETA: 27s
   
36061184/134604992 [=======>......................] - ETA: 27s
   
36249600/134604992 [=======>......................] - ETA: 27s
   
36446208/134604992 [=======>......................] - ETA: 27s
   
36642816/134604992 [=======>......................] - ETA: 27s
   
36839424/134604992 [=======>......................] - ETA: 27s
   
37036032/134604992 [=======>......................] - ETA: 27s
   
37216256/134604992 [=======>......................] - ETA: 27s
   
37412864/134604992 [=======>......................] - ETA: 27s
   
37601280/134604992 [=======>......................] - ETA: 27s
   
37814272/134604992 [=======>......................] - ETA: 27s
   
37994496/134604992 [=======>......................] - ETA: 27s
   
38207488/134604992 [=======>......................] - ETA: 27s
   
38395904/134604992 [=======>......................] - ETA: 27s
   
38600704/134604992 [=======>......................] - ETA: 27s
   
38789120/134604992 [=======>......................] - ETA: 27s
   
38985728/134604992 [=======>......................] - ETA: 26s
   
39174144/134604992 [=======>......................] - ETA: 26s
   
39370752/134604992 [=======>......................] - ETA: 26s
   
39567360/134604992 [=======>......................] - ETA: 26s
   
39763968/134604992 [=======>......................] - ETA: 26s
   
39960576/134604992 [=======>......................] - ETA: 26s
   
40157184/134604992 [=======>......................] - ETA: 26s
   
40345600/134604992 [=======>......................] - ETA: 26s
   
40542208/134604992 [========>.....................] - ETA: 26s
   
40730624/134604992 [========>.....................] - ETA: 26s
   
40943616/134604992 [========>.....................] - ETA: 26s
   
41140224/134604992 [========>.....................] - ETA: 26s
   
41328640/134604992 [========>.....................] - ETA: 26s
   
41517056/134604992 [========>.....................] - ETA: 26s
   
41713664/134604992 [========>.....................] - ETA: 26s
   
41902080/134604992 [========>.....................] - ETA: 26s
   
42098688/134604992 [========>.....................] - ETA: 26s
   
42295296/134604992 [========>.....................] - ETA: 26s
   
42491904/134604992 [========>.....................] - ETA: 25s
   
42688512/134604992 [========>.....................] - ETA: 25s
   
42885120/134604992 [========>.....................] - ETA: 25s
   
43081728/134604992 [========>.....................] - ETA: 25s
   
43270144/134604992 [========>.....................] - ETA: 25s
   
43466752/134604992 [========>.....................] - ETA: 25s
   
43671552/134604992 [========>.....................] - ETA: 25s
   
43859968/134604992 [========>.....................] - ETA: 25s
   
44056576/134604992 [========>.....................] - ETA: 25s
   
44253184/134604992 [========>.....................] - ETA: 25s
   
44449792/134604992 [========>.....................] - ETA: 25s
   
44638208/134604992 [========>.....................] - ETA: 25s
   
44843008/134604992 [========>.....................] - ETA: 25s
   
45039616/134604992 [=========>....................] - ETA: 25s
   
45236224/134604992 [=========>....................] - ETA: 25s
   
45432832/134604992 [=========>....................] - ETA: 25s
   
45629440/134604992 [=========>....................] - ETA: 25s
   
45826048/134604992 [=========>....................] - ETA: 25s
   
46022656/134604992 [=========>....................] - ETA: 24s
   
46211072/134604992 [=========>....................] - ETA: 24s
   
46415872/134604992 [=========>....................] - ETA: 24s
   
46604288/134604992 [=========>....................] - ETA: 24s
   
46792704/134604992 [=========>....................] - ETA: 24s
   
46981120/134604992 [=========>....................] - ETA: 24s
   
47194112/134604992 [=========>....................] - ETA: 24s
   
47390720/134604992 [=========>....................] - ETA: 24s
   
47595520/134604992 [=========>....................] - ETA: 24s
   
47775744/134604992 [=========>....................] - ETA: 24s
   
47988736/134604992 [=========>....................] - ETA: 24s
   
48185344/134604992 [=========>....................] - ETA: 24s
   
48381952/134604992 [=========>....................] - ETA: 24s
   
48562176/134604992 [=========>....................] - ETA: 24s
   
48766976/134604992 [=========>....................] - ETA: 24s
   
48963584/134604992 [=========>....................] - ETA: 24s
   
49168384/134604992 [=========>....................] - ETA: 24s
   
49348608/134604992 [=========>....................] - ETA: 24s
   
49553408/134604992 [==========>...................] - ETA: 23s
   
49733632/134604992 [==========>...................] - ETA: 23s
   
49946624/134604992 [==========>...................] - ETA: 23s
   
50135040/134604992 [==========>...................] - ETA: 23s
   
50339840/134604992 [==========>...................] - ETA: 23s
   
50520064/134604992 [==========>...................] - ETA: 23s
   
50733056/134604992 [==========>...................] - ETA: 23s
   
50913280/134604992 [==========>...................] - ETA: 23s
   
51126272/134604992 [==========>...................] - ETA: 23s
   
51298304/134604992 [==========>...................] - ETA: 23s
   
51511296/134604992 [==========>...................] - ETA: 23s
   
51691520/134604992 [==========>...................] - ETA: 23s
   
51904512/134604992 [==========>...................] - ETA: 23s
   
52076544/134604992 [==========>...................] - ETA: 23s
   
52281344/134604992 [==========>...................] - ETA: 23s
   
52461568/134604992 [==========>...................] - ETA: 23s
   
52682752/134604992 [==========>...................] - ETA: 23s
   
52862976/134604992 [==========>...................] - ETA: 23s
   
53067776/134604992 [==========>...................] - ETA: 22s
   
53248000/134604992 [==========>...................] - ETA: 22s
   
53460992/134604992 [==========>...................] - ETA: 22s
   
53641216/134604992 [==========>...................] - ETA: 22s
   
53862400/134604992 [===========>..................] - ETA: 22s
   
54042624/134604992 [===========>..................] - ETA: 22s
   
54255616/134604992 [===========>..................] - ETA: 22s
   
54435840/134604992 [===========>..................] - ETA: 22s
   
54648832/134604992 [===========>..................] - ETA: 22s
   
54820864/134604992 [===========>..................] - ETA: 22s
   
55025664/134604992 [===========>..................] - ETA: 22s
   
55205888/134604992 [===========>..................] - ETA: 22s
   
55410688/134604992 [===========>..................] - ETA: 22s
   
55574528/134604992 [===========>..................] - ETA: 22s
   
55738368/134604992 [===========>..................] - ETA: 22s
   
55951360/134604992 [===========>..................] - ETA: 22s
   
56123392/134604992 [===========>..................] - ETA: 22s
   
56336384/134604992 [===========>..................] - ETA: 22s
   
56500224/134604992 [===========>..................] - ETA: 22s
   
56721408/134604992 [===========>..................] - ETA: 21s
   
56893440/134604992 [===========>..................] - ETA: 21s
   
57122816/134604992 [===========>..................] - ETA: 21s
   
57286656/134604992 [===========>..................] - ETA: 21s
   
57507840/134604992 [===========>..................] - ETA: 21s
   
57688064/134604992 [===========>..................] - ETA: 21s
   
57909248/134604992 [===========>..................] - ETA: 21s
   
58064896/134604992 [===========>..................] - ETA: 21s
   
58294272/134604992 [===========>..................] - ETA: 21s
   
58474496/134604992 [============>.................] - ETA: 21s
   
58695680/134604992 [============>.................] - ETA: 21s
   
58851328/134604992 [============>.................] - ETA: 21s
   
59064320/134604992 [============>.................] - ETA: 21s
   
59244544/134604992 [============>.................] - ETA: 21s
   
59457536/134604992 [============>.................] - ETA: 21s
   
59637760/134604992 [============>.................] - ETA: 21s
   
59858944/134604992 [============>.................] - ETA: 21s
   
60022784/134604992 [============>.................] - ETA: 21s
   
60252160/134604992 [============>.................] - ETA: 20s
   
60416000/134604992 [============>.................] - ETA: 20s
   
60645376/134604992 [============>.................] - ETA: 20s
   
60792832/134604992 [============>.................] - ETA: 20s
   
60915712/134604992 [============>.................] - ETA: 20s
   
61177856/134604992 [============>.................] - ETA: 20s
   
61440000/134604992 [============>.................] - ETA: 20s
   
61702144/134604992 [============>.................] - ETA: 20s
   
61947904/134604992 [============>.................] - ETA: 20s
   
62210048/134604992 [============>.................] - ETA: 20s
   
62472192/134604992 [============>.................] - ETA: 20s
   
62734336/134604992 [============>.................] - ETA: 20s
   
62996480/134604992 [=============>................] - ETA: 20s
   
63258624/134604992 [=============>................] - ETA: 20s
   
63520768/134604992 [=============>................] - ETA: 20s
   
63782912/134604992 [=============>................] - ETA: 19s
   
64028672/134604992 [=============>................] - ETA: 19s
   
64290816/134604992 [=============>................] - ETA: 19s
   
64561152/134604992 [=============>................] - ETA: 19s
   
64823296/134604992 [=============>................] - ETA: 19s
   
65069056/134604992 [=============>................] - ETA: 19s
   
65331200/134604992 [=============>................] - ETA: 19s
   
65593344/134604992 [=============>................] - ETA: 19s
   
65855488/134604992 [=============>................] - ETA: 19s
   
66117632/134604992 [=============>................] - ETA: 19s
   
66371584/134604992 [=============>................] - ETA: 19s
   
66633728/134604992 [=============>................] - ETA: 19s
   
66904064/134604992 [=============>................] - ETA: 19s
   
67158016/134604992 [=============>................] - ETA: 19s
   
67420160/134604992 [==============>...............] - ETA: 18s
   
67665920/134604992 [==============>...............] - ETA: 18s
   
67928064/134604992 [==============>...............] - ETA: 18s
   
68198400/134604992 [==============>...............] - ETA: 18s
   
68452352/134604992 [==============>...............] - ETA: 18s
   
68722688/134604992 [==============>...............] - ETA: 18s
   
68984832/134604992 [==============>...............] - ETA: 18s
   
69230592/134604992 [==============>...............] - ETA: 18s
   
69500928/134604992 [==============>...............] - ETA: 18s
   
69763072/134604992 [==============>...............] - ETA: 18s
   
70017024/134604992 [==============>...............] - ETA: 18s
   
70279168/134604992 [==============>...............] - ETA: 18s
   
70541312/134604992 [==============>...............] - ETA: 18s
   
70803456/134604992 [==============>...............] - ETA: 18s
   
71065600/134604992 [==============>...............] - ETA: 17s
   
71319552/134604992 [==============>...............] - ETA: 17s
   
71581696/134604992 [==============>...............] - ETA: 17s
   
71843840/134604992 [===============>..............] - ETA: 17s
   
72105984/134604992 [===============>..............] - ETA: 17s
   
72368128/134604992 [===============>..............] - ETA: 17s
   
72622080/134604992 [===============>..............] - ETA: 17s
   
72884224/134604992 [===============>..............] - ETA: 17s
   
73146368/134604992 [===============>..............] - ETA: 17s
   
73408512/134604992 [===============>..............] - ETA: 17s
   
73670656/134604992 [===============>..............] - ETA: 17s
   
73924608/134604992 [===============>..............] - ETA: 17s
   
74072064/134604992 [===============>..............] - ETA: 17s
   
74309632/134604992 [===============>..............] - ETA: 17s
   
74457088/134604992 [===============>..............] - ETA: 16s
   
74702848/134604992 [===============>..............] - ETA: 16s
   
74850304/134604992 [===============>..............] - ETA: 16s
   
75096064/134604992 [===============>..............] - ETA: 16s
   
75350016/134604992 [===============>..............] - ETA: 16s
   
75497472/134604992 [===============>..............] - ETA: 16s
   
75743232/134604992 [===============>..............] - ETA: 16s
   
75890688/134604992 [===============>..............] - ETA: 16s
   
76136448/134604992 [===============>..............] - ETA: 16s
   
76283904/134604992 [================>.............] - ETA: 16s
   
76529664/134604992 [================>.............] - ETA: 16s
   
76668928/134604992 [================>.............] - ETA: 16s
   
76931072/134604992 [================>.............] - ETA: 16s
   
77185024/134604992 [================>.............] - ETA: 16s
   
77438976/134604992 [================>.............] - ETA: 16s
   
77701120/134604992 [================>.............] - ETA: 16s
   
77840384/134604992 [================>.............] - ETA: 16s
   
78086144/134604992 [================>.............] - ETA: 15s
   
78225408/134604992 [================>.............] - ETA: 15s
   
78487552/134604992 [================>.............] - ETA: 15s
   
78733312/134604992 [================>.............] - ETA: 15s
   
78880768/134604992 [================>.............] - ETA: 15s
   
79126528/134604992 [================>.............] - ETA: 15s
   
79282176/134604992 [================>.............] - ETA: 15s
   
79527936/134604992 [================>.............] - ETA: 15s
   
79790080/134604992 [================>.............] - ETA: 15s
   
79929344/134604992 [================>.............] - ETA: 15s
   
80175104/134604992 [================>.............] - ETA: 15s
   
80322560/134604992 [================>.............] - ETA: 15s
   
80576512/134604992 [================>.............] - ETA: 15s
   
80830464/134604992 [=================>............] - ETA: 15s
   
81092608/134604992 [=================>............] - ETA: 15s
   
81354752/134604992 [=================>............] - ETA: 15s
   
81616896/134604992 [=================>............] - ETA: 14s
   
81879040/134604992 [=================>............] - ETA: 14s
   
82132992/134604992 [=================>............] - ETA: 14s
   
82280448/134604992 [=================>............] - ETA: 14s
   
82526208/134604992 [=================>............] - ETA: 14s
   
82780160/134604992 [=================>............] - ETA: 14s
   
82919424/134604992 [=================>............] - ETA: 14s
   
83181568/134604992 [=================>............] - ETA: 14s
   
83435520/134604992 [=================>............] - ETA: 14s
   
83689472/134604992 [=================>............] - ETA: 14s
   
83869696/134604992 [=================>............] - ETA: 14s
   
84082688/134604992 [=================>............] - ETA: 14s
   
84344832/134604992 [=================>............] - ETA: 14s
   
84606976/134604992 [=================>............] - ETA: 14s
   
84860928/134604992 [=================>............] - ETA: 14s
   
85123072/134604992 [=================>............] - ETA: 13s
   
85377024/134604992 [==================>...........] - ETA: 13s
   
85524480/134604992 [==================>...........] - ETA: 13s
   
85778432/134604992 [==================>...........] - ETA: 13s
   
86040576/134604992 [==================>...........] - ETA: 13s
   
86310912/134604992 [==================>...........] - ETA: 13s
   
86564864/134604992 [==================>...........] - ETA: 13s
   
86827008/134604992 [==================>...........] - ETA: 13s
   
87089152/134604992 [==================>...........] - ETA: 13s
   
87343104/134604992 [==================>...........] - ETA: 13s
   
87490560/134604992 [==================>...........] - ETA: 13s
   
87736320/134604992 [==================>...........] - ETA: 13s
   
87998464/134604992 [==================>...........] - ETA: 13s
   
88260608/134604992 [==================>...........] - ETA: 13s
   
88514560/134604992 [==================>...........] - ETA: 12s
   
88653824/134604992 [==================>...........] - ETA: 12s
   
88915968/134604992 [==================>...........] - ETA: 12s
   
89169920/134604992 [==================>...........] - ETA: 12s
   
89432064/134604992 [==================>...........] - ETA: 12s
   
89694208/134604992 [==================>...........] - ETA: 12s
   
89956352/134604992 [===================>..........] - ETA: 12s
   
90218496/134604992 [===================>..........] - ETA: 12s
   
90472448/134604992 [===================>..........] - ETA: 12s
   
90734592/134604992 [===================>..........] - ETA: 12s
   
90996736/134604992 [===================>..........] - ETA: 12s
   
91250688/134604992 [===================>..........] - ETA: 12s
   
91512832/134604992 [===================>..........] - ETA: 12s
   
91774976/134604992 [===================>..........] - ETA: 12s
   
92037120/134604992 [===================>..........] - ETA: 12s
   
92299264/134604992 [===================>..........] - ETA: 11s
   
92561408/134604992 [===================>..........] - ETA: 11s
   
92815360/134604992 [===================>..........] - ETA: 11s
   
93069312/134604992 [===================>..........] - ETA: 11s
   
93331456/134604992 [===================>..........] - ETA: 11s
   
93593600/134604992 [===================>..........] - ETA: 11s
   
93863936/134604992 [===================>..........] - ETA: 11s
   
94117888/134604992 [===================>..........] - ETA: 11s
   
94380032/134604992 [====================>.........] - ETA: 11s
   
94642176/134604992 [====================>.........] - ETA: 11s
   
94887936/134604992 [====================>.........] - ETA: 11s
   
95150080/134604992 [====================>.........] - ETA: 11s
   
95412224/134604992 [====================>.........] - ETA: 11s
   
95674368/134604992 [====================>.........] - ETA: 10s
   
95936512/134604992 [====================>.........] - ETA: 10s
   
96206848/134604992 [====================>.........] - ETA: 10s
   
96460800/134604992 [====================>.........] - ETA: 10s
   
96706560/134604992 [====================>.........] - ETA: 10s
   
96976896/134604992 [====================>.........] - ETA: 10s
   
97239040/134604992 [====================>.........] - ETA: 10s
   
97501184/134604992 [====================>.........] - ETA: 10s
   
97746944/134604992 [====================>.........] - ETA: 10s
   
98009088/134604992 [====================>.........] - ETA: 10s
   
98271232/134604992 [====================>.........] - ETA: 10s
   
98533376/134604992 [====================>.........] - ETA: 10s
   
98787328/134604992 [=====================>........] - ETA: 10s
   
99000320/134604992 [=====================>........] - ETA: 10s
   
99196928/134604992 [=====================>........] - ETA: 9s
   
99459072/134604992 [=====================>........] - ETA: 9s
   
99713024/134604992 [=====================>........] - ETA: 9s
   
99966976/134604992 [=====================>........] - ETA: 9s


100237312/134604992 [=====================>……..] - ETA: 9s



100499456/134604992 [=====================>……..]- ETA: 9s



100761600/134604992 [=====================>……..]- ETA: 9s



101023744/134604992 [=====================>……..]- ETA: 9s



101269504/134604992 [=====================>……..]- ETA: 9s



101433344/134604992 [=====================>……..]- ETA: 9s



101662720/134604992 [=====================>……..]- ETA: 9s



101924864/134604992 [=====================>……..]- ETA: 9s



102187008/134604992 [=====================>……..]- ETA: 9s



102440960/134604992 [=====================>……..]- ETA: 9s



102604800/134604992 [=====================>……..]- ETA: 9s



102842368/134604992 [=====================>……..]- ETA: 8s



103096320/134604992 [=====================>……..]- ETA: 8s



103358464/134604992 [======================>…….] - ETA: 8s



103620608/134604992 [======================>…….]- ETA: 8s



103882752/134604992 [======================>…….]- ETA: 8s



104144896/134604992 [======================>…….]- ETA: 8s



104398848/134604992 [======================>…….]- ETA: 8s



104546304/134604992 [======================>…….]- ETA: 8s



104792064/134604992 [======================>…….]- ETA: 8s



105054208/134604992 [======================>…….]- ETA: 8s



105316352/134604992 [======================>…….]- ETA: 8s



105570304/134604992 [======================>…….]- ETA: 8s



105832448/134604992 [======================>…….]- ETA: 8s



105979904/134604992 [======================>…….]- ETA: 8s



106225664/134604992 [======================>…….]- ETA: 7s



106389504/134604992 [======================>…….]- ETA: 7s



106618880/134604992 [======================>…….]- ETA: 7s



106872832/134604992 [======================>…….]- ETA: 7s



107020288/134604992 [======================>…….]- ETA: 7s



107266048/134604992 [======================>…….]- ETA: 7s



107413504/134604992 [======================>…….]- ETA: 7s



107651072/134604992 [======================>…….]- ETA: 7s



107798528/134604992 [=======================>……] - ETA: 7s



108044288/134604992 [=======================>……] - ETA: 7s



108191744/134604992 [=======================>……] - ETA: 7s



108437504/134604992 [=======================>……] - ETA: 7s



108584960/134604992 [=======================>……] - ETA: 7s



108830720/134604992 [=======================>……] - ETA: 7s



108994560/134604992 [=======================>……] - ETA: 7s



109223936/134604992 [=======================>……] - ETA: 7s



109477888/134604992 [=======================>……] - ETA: 7s



109625344/134604992 [=======================>……] - ETA: 7s



109862912/134604992 [=======================>……] - ETA: 6s



110010368/134604992 [=======================>……] - ETA: 6s



110264320/134604992 [=======================>……] - ETA: 6s



110518272/134604992 [=======================>……] - ETA: 6s



110673920/134604992 [=======================>……] - ETA: 6s



110903296/134604992 [=======================>……] - ETA: 6s



111050752/134604992 [=======================>……] - ETA: 6s



111304704/134604992 [=======================>……] - ETA: 6s



111550464/134604992 [=======================>……] - ETA: 6s



111697920/134604992 [=======================>……] - ETA: 6s



111943680/134604992 [=======================>……] - ETA: 6s



112091136/134604992 [=======================>……] - ETA: 6s



112336896/134604992 [========================>…..] - ETA: 6s



112484352/134604992 [========================>…..]- ETA: 6s



112738304/134604992 [========================>…..]- ETA: 6s



112893952/134604992 [========================>…..]- ETA: 6s



113123328/134604992 [========================>…..]- ETA: 6s



113270784/134604992 [========================>…..]- ETA: 6s



113516544/134604992 [========================>…..]- ETA: 5s



113655808/134604992 [========================>…..]- ETA: 5s



113901568/134604992 [========================>…..]- ETA: 5s



114057216/134604992 [========================>…..]- ETA: 5s



114302976/134604992 [========================>…..]- ETA: 5s



114450432/134604992 [========================>…..]- ETA: 5s



114696192/134604992 [========================>…..]- ETA: 5s



114843648/134604992 [========================>…..]- ETA: 5s



115089408/134604992 [========================>…..]- ETA: 5s



115228672/134604992 [========================>…..]- ETA: 5s



115466240/134604992 [========================>…..]- ETA: 5s



115613696/134604992 [========================>…..]- ETA: 5s



115859456/134604992 [========================>…..]- ETA: 5s



116006912/134604992 [========================>…..]- ETA: 5s



116244480/134604992 [========================>…..]- ETA: 5s



116383744/134604992 [========================>…..]- ETA: 5s



116629504/134604992 [========================>…..]- ETA: 5s



116768768/134604992 [=========================>….] - ETA: 5s



116981760/134604992 [=========================>….]- ETA: 4s



117161984/134604992 [=========================>….]- ETA: 4s



117407744/134604992 [=========================>….]- ETA: 4s



117555200/134604992 [=========================>….]- ETA: 4s



117800960/134604992 [=========================>….]- ETA: 4s



117948416/134604992 [=========================>….]- ETA: 4s



118194176/134604992 [=========================>….]- ETA: 4s



118333440/134604992 [=========================>….]- ETA: 4s



118579200/134604992 [=========================>….]- ETA: 4s



118726656/134604992 [=========================>….]- ETA: 4s



118972416/134604992 [=========================>….]- ETA: 4s



119119872/134604992 [=========================>….]- ETA: 4s



119365632/134604992 [=========================>….]- ETA: 4s



119513088/134604992 [=========================>….]- ETA: 4s



119758848/134604992 [=========================>….]- ETA: 4s



119898112/134604992 [=========================>….]- ETA: 4s



120143872/134604992 [=========================>….]- ETA: 4s



120291328/134604992 [=========================>….]- ETA: 4s



120545280/134604992 [=========================>….]- ETA: 3s



120692736/134604992 [=========================>….]- ETA: 3s



120938496/134604992 [=========================>….]- ETA: 3s



121077760/134604992 [=========================>….]- ETA: 3s



121323520/134604992 [==========================>…] - ETA: 3s



121470976/134604992 [==========================>…] - ETA: 3s



121716736/134604992 [==========================>…] - ETA: 3s



121970688/134604992 [==========================>…] - ETA: 3s



122118144/134604992 [==========================>…] - ETA: 3s



122363904/134604992 [==========================>…] - ETA: 3s



122511360/134604992 [==========================>…] - ETA: 3s



122757120/134604992 [==========================>…] - ETA: 3s



122904576/134604992 [==========================>…] - ETA: 3s



123150336/134604992 [==========================>…] - ETA: 3s



123289600/134604992 [==========================>…] - ETA: 3s



123535360/134604992 [==========================>…] - ETA: 3s



123674624/134604992 [==========================>…] - ETA: 3s



123936768/134604992 [==========================>…] - ETA: 3s



124190720/134604992 [==========================>…] - ETA: 2s



124338176/134604992 [==========================>…] - ETA: 2s



124575744/134604992 [==========================>…] - ETA: 2s



124723200/134604992 [==========================>…] - ETA: 2s



124977152/134604992 [==========================>…] - ETA: 2s



125239296/134604992 [==========================>…] - ETA: 2s



125501440/134604992 [==========================>…] - ETA: 2s



125747200/134604992 [===========================>..] - ETA: 2s



125894656/134604992 [===========================>..]- ETA: 2s



126148608/134604992 [===========================>..]- ETA: 2s



126296064/134604992 [===========================>..]- ETA: 2s



126533632/134604992 [===========================>..]- ETA: 2s



126795776/134604992 [===========================>..]- ETA: 2s



127057920/134604992 [===========================>..]- ETA: 2s



127197184/134604992 [===========================>..]- ETA: 2s



127451136/134604992 [===========================>..]- ETA: 2s



127713280/134604992 [===========================>..]- ETA: 1s



127967232/134604992 [===========================>..]- ETA: 1s



128114688/134604992 [===========================>..]- ETA: 1s



128360448/134604992 [===========================>..]- ETA: 1s



128507904/134604992 [===========================>..]- ETA: 1s



128761856/134604992 [===========================>..]- ETA: 1s



128901120/134604992 [===========================>..]- ETA: 1s



129146880/134604992 [===========================>..]- ETA: 1s



129286144/134604992 [===========================>..]- ETA: 1s



129531904/134604992 [===========================>..]- ETA: 1s



129671168/134604992 [===========================>..]- ETA: 1s



129925120/134604992 [===========================>..]- ETA: 1s



130064384/134604992 [===========================>..]- ETA: 1s



130318336/134604992 [============================>.]- ETA: 1s



130572288/134604992 [============================>.]- ETA: 1s



130703360/134604992 [============================>.]- ETA: 1s



130965504/134604992 [============================>.]- ETA: 1s



131227648/134604992 [============================>.]- ETA: 0s



131481600/134604992 [============================>.]- ETA: 0s



131743744/134604992 [============================>.]- ETA: 0s



132005888/134604992 [============================>.]- ETA: 0s



132268032/134604992 [============================>.]- ETA: 0s



132521984/134604992 [============================>.]- ETA: 0s



132784128/134604992 [============================>.]- ETA: 0s



133046272/134604992 [============================>.]- ETA: 0s



133300224/134604992 [============================>.]- ETA: 0s



133570560/134604992 [============================>.]- ETA: 0s



133832704/134604992 [============================>.]- ETA: 0s



134094848/134604992 [============================>.]- ETA: 0s



134348800/134604992 [============================>.]- ETA: 0s



134604992/134604992 [==============================] - 38s 0us/step

Absolute path where the model weights are saved:
 /opt/home/k8sworker/ci-ai/cibuilds/ov-notebook/OVNotebookOps-609/.workspace/scm/ov-notebook/notebooks/305-tensorflow-quantization-aware-training/model/ResNet-18_fp32.h5

データセットの前処理

Imagenette 160px データセットをダウンロードして準備します。

  • クラスの数: 10
  • ダウンロード・サイズ: 94.18 MiB
| Split        | Examples |
|--------------|----------|
| 'train'      | 12,894   |
| 'validation' | 500      |
datasets, datasets_info = tfds.load('imagenette/160px', shuffle_files=True, as_supervised=True, with_info=True,
                                    read_config=tfds.ReadConfig(shuffle_seed=0))
train_dataset, validation_dataset = datasets['train'], datasets['validation']
fig = tfds.show_examples(train_dataset, datasets_info)
2024-02-10 01:21:23.377534: E tensorflow/compiler/xla/stream_executor/cuda/cuda_driver.cc:266] failed call to cuInit: CUDA_ERROR_COMPAT_NOT_SUPPORTED_ON_DEVICE: forward compatibility was attempted on non supported HW
2024-02-10 01:21:23.377573: I tensorflow/compiler/xla/stream_executor/cuda/cuda_diagnostics.cc:168] retrieving CUDA diagnostic information for host: iotg-dev-workstation-07
2024-02-10 01:21:23.377577: I tensorflow/compiler/xla/stream_executor/cuda/cuda_diagnostics.cc:175] hostname: iotg-dev-workstation-07
2024-02-10 01:21:23.377743: I tensorflow/compiler/xla/stream_executor/cuda/cuda_diagnostics.cc:199] libcuda reported version is: 470.223.2
2024-02-10 01:21:23.377761: I tensorflow/compiler/xla/stream_executor/cuda/cuda_diagnostics.cc:203] kernel reported version is: 470.182.3
2024-02-10 01:21:23.377764: E tensorflow/compiler/xla/stream_executor/cuda/cuda_diagnostics.cc:312] kernel version 470.182.3 does not match DSO version 470.223.2 -- cannot find working devices in this configuration
2024-02-10 01:21:23.497343: I tensorflow/core/common_runtime/executor.cc:1197] [/device:CPU:0] (DEBUG INFO) Executor start aborting (this does not indicate an error and you can ignore this message): INVALID_ARGUMENT: You must feed a value for placeholder tensor 'Placeholder/_1' with dtype string and shape [1]
     [[{{node Placeholder/_1}}]]
2024-02-10 01:21:23.497696: I tensorflow/core/common_runtime/executor.cc:1197] [/device:CPU:0] (DEBUG INFO) Executor start aborting (this does not indicate an error and you can ignore this message): INVALID_ARGUMENT: You must feed a value for placeholder tensor 'Placeholder/_2' with dtype string and shape [1]
     [[{{node Placeholder/_2}}]]
2024-02-10 01:21:23.570158: W tensorflow/core/kernels/data/cache_dataset_ops.cc:856] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to dataset.cache().take(k).repeat(). You should use dataset.take(k).cache().repeat() instead.
../_images/305-tensorflow-quantization-aware-training-with-output_6_1.png
def preprocessing(image, label):
    image = tf.image.resize(image, IMG_SIZE)
    image = image - MEAN_RGB
    image = image / STDDEV_RGB
    label = tf.one_hot(label, NUM_CLASSES)
    return image, label


train_dataset = (train_dataset.map(preprocessing, num_parallel_calls=tf.data.experimental.AUTOTUNE)
                              .batch(BATCH_SIZE)
                              .prefetch(tf.data.experimental.AUTOTUNE))

validation_dataset = (validation_dataset.map(preprocessing, num_parallel_calls=tf.data.experimental.AUTOTUNE)
                                        .batch(BATCH_SIZE)
                                        .prefetch(tf.data.experimental.AUTOTUNE))

浮動小数点モデルを定義

def residual_conv_block(filters, stage, block, strides=(1, 1), cut='pre'):
    def layer(input_tensor):
        x = layers.BatchNormalization(epsilon=2e-5)(input_tensor)
        x = layers.Activation('relu')(x)

        # Defining shortcut connection.
        if cut == 'pre':
            shortcut = input_tensor
        elif cut == 'post':
            shortcut = layers.Conv2D(filters, (1, 1), strides=strides, kernel_initializer='he_uniform',
                                     use_bias=False)(x)

        # Continue with convolution layers.
        x = layers.ZeroPadding2D(padding=(1, 1))(x)
        x = layers.Conv2D(filters, (3, 3), strides=strides, kernel_initializer='he_uniform', use_bias=False)(x)

        x = layers.BatchNormalization(epsilon=2e-5)(x)
        x = layers.Activation('relu')(x)
        x = layers.ZeroPadding2D(padding=(1, 1))(x)
        x = layers.Conv2D(filters, (3, 3), kernel_initializer='he_uniform', use_bias=False)(x)

        # Add residual connection.
        x = layers.Add()([x, shortcut])
        return x

    return layer


def ResNet18(input_shape=None):
    """Instantiates the ResNet18 architecture."""
    img_input = layers.Input(shape=input_shape, name='data')

    # ResNet18 bottom
    x = layers.BatchNormalization(epsilon=2e-5, scale=False)(img_input)
    x = layers.ZeroPadding2D(padding=(3, 3))(x)
    x = layers.Conv2D(64, (7, 7), strides=(2, 2), kernel_initializer='he_uniform', use_bias=False)(x)
    x = layers.BatchNormalization(epsilon=2e-5)(x)
    x = layers.Activation('relu')(x)
    x = layers.ZeroPadding2D(padding=(1, 1))(x)
    x = layers.MaxPooling2D((3, 3), strides=(2, 2), padding='valid')(x)

    # ResNet18 body
    repetitions = (2, 2, 2, 2)
    for stage, rep in enumerate(repetitions):
        for block in range(rep):
            filters = 64 * (2 ** stage)
            if block == 0 and stage == 0:
                x = residual_conv_block(filters, stage, block, strides=(1, 1), cut='post')(x)
            elif block == 0:
                x = residual_conv_block(filters, stage, block, strides=(2, 2), cut='post')(x)
            else:
                x = residual_conv_block(filters, stage, block, strides=(1, 1), cut='pre')(x)
    x = layers.BatchNormalization(epsilon=2e-5)(x)
    x = layers.Activation('relu')(x)

    # ResNet18 top
    x = layers.GlobalAveragePooling2D()(x)
    x = layers.Dense(NUM_CLASSES)(x)
    x = layers.Activation('softmax')(x)

    # Create the model.
    model = models.Model(img_input, x)

    return model
IMG_SHAPE = IMG_SIZE + (3,)
fp32_model = ResNet18(input_shape=IMG_SHAPE)

浮動小数点モデルの事前トレーニング

Using NNCF for model compression assumes that the user has a pre-trained model and a training pipeline.

注: チュートリアルを簡単にするため、FP32 モデルのトレーニングをスキップして、提供されている重みをロードすることをお勧めします。

# Load the floating-point weights.
fp32_model.load_weights(fp32_h5_path)

# Compile the floating-point model.
fp32_model.compile(
    loss=tf.keras.losses.CategoricalCrossentropy(label_smoothing=0.1),
    metrics=[tf.keras.metrics.CategoricalAccuracy(name='acc@1')]
)

# Validate the floating-point model.
test_loss, acc_fp32 = fp32_model.evaluate(
    validation_dataset,
    callbacks=tf.keras.callbacks.ProgbarLogger(stateful_metrics=['acc@1'])
)
print(f"\nAccuracy of FP32 model: {acc_fp32:.3f}")
2024-02-10 01:21:24.470744: I tensorflow/core/common_runtime/executor.cc:1197] [/device:CPU:0] (DEBUG INFO) Executor start aborting (this does not indicate an error and you can ignore this message): INVALID_ARGUMENT: You must feed a value for placeholder tensor 'Placeholder/_3' with dtype int64 and shape [1]
    [[{{node Placeholder/_3}}]]
2024-02-10 01:21:24.471113: I tensorflow/core/common_runtime/executor.cc:1197] [/device:CPU:0] (DEBUG INFO) Executor start aborting (this does not indicate an error and you can ignore this message): INVALID_ARGUMENT: You must feed a value for placeholder tensor 'Placeholder/_4' with dtype int64 and shape [1]
    [[{{node Placeholder/_4}}]]
0/Unknown - 1s 0s/sample - loss: 1.0472 - acc@1: 0.7891

  0/Unknown - 1s 0s/sample - loss: 0.9818 - acc@1: 0.8203

  0/Unknown - 1s 0s/sample - loss: 0.9774 - acc@1: 0.8203

  0/Unknown - 1s 0s/sample - loss: 0.9807 - acc@1: 0.8220


4/4 [==============================] - 1s 292ms/sample - loss: 0.9807 - acc@1: 0.8220

Accuracy of FP32 model: 0.822

量子化の作成と初期化

NNCF は、通常のトレーニング・パイプラインに統合することで、圧縮を意識したトレーニングを可能にします。このフレームワークは、元のトレーニング・コードへの変更が最小限になるように設計されています。量子化は最も単純なシナリオであり、わずか 3 つの変更で済みます。

  1. NNCFパラメーターを設定して圧縮を指定します

nncf_config_dict = {
    "input_info": {"sample_size": [1, 3] + list(IMG_SIZE)},
    "log_dir": str(OUTPUT_DIR),  # The log directory for NNCF-specific logging outputs.
    "compression": {
        "algorithm": "quantization",  # Specify the algorithm here.
    },
}
nncf_config = NNCFConfig.from_dict(nncf_config_dict)
  1. 量子化範囲の値を初期化し、指定された数のサンプルを使用して、収集された統計からどのアクティベーションを署名するか署名しないかを決定するデータローダーを提供します。

nncf_config = register_default_init_args(nncf_config=nncf_config,
                                         data_loader=train_dataset,
                                         batch_size=BATCH_SIZE)
  1. 事前トレーニングされた FP32 モデルと構成オブジェクトから、圧縮の微調整が可能なラップされたモデルを作成します。

compression_ctrl, int8_model = create_compressed_model(fp32_model, nncf_config)
2024-02-10 01:21:27.245500: I tensorflow/core/common_runtime/executor.cc:1197] [/device:CPU:0] (DEBUG INFO) Executor start aborting (this does not indicate an error and you can ignore this message): INVALID_ARGUMENT: You must feed a value for placeholder tensor 'Placeholder/_4' with dtype int64 and shape [1]
    [[{{node Placeholder/_4}}]]
2024-02-10 01:21:27.245887: I tensorflow/core/common_runtime/executor.cc:1197] [/device:CPU:0] (DEBUG INFO) Executor start aborting (this does not indicate an error and you can ignore this message): INVALID_ARGUMENT: You must feed a value for placeholder tensor 'Placeholder/_2' with dtype string and shape [1]
    [[{{node Placeholder/_2}}]]
2024-02-10 01:21:28.182472: W tensorflow/core/kernels/data/cache_dataset_ops.cc:856] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to dataset.cache().take(k).repeat(). You should use dataset.take(k).cache().repeat() instead.
2024-02-10 01:21:28.866589: W tensorflow/core/kernels/data/cache_dataset_ops.cc:856] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to dataset.cache().take(k).repeat(). You should use dataset.take(k).cache().repeat() instead.
2024-02-10 01:21:37.201501: W tensorflow/core/kernels/data/cache_dataset_ops.cc:856] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to dataset.cache().take(k).repeat(). You should use dataset.take(k).cache().repeat() instead.

量子化の初期化後、検証セットで新しいモデルを評価します。ここで実証されているような単純なケースでは、精度は浮動小数点 FP32 モデルの精度とそれほど変わらないはずです。

# Compile the INT8 model.
int8_model.compile(
    optimizer=tf.keras.optimizers.Adam(learning_rate=LR),
    loss=tf.keras.losses.CategoricalCrossentropy(label_smoothing=0.1),
    metrics=[tf.keras.metrics.CategoricalAccuracy(name='acc@1')]
)

# Validate the INT8 model.
test_loss, test_acc = int8_model.evaluate(
    validation_dataset,
    callbacks=tf.keras.callbacks.ProgbarLogger(stateful_metrics=['acc@1'])
)
0/Unknown - 1s 0s/sample - loss: 1.0468 - acc@1: 0.7656

  0/Unknown - 1s 0s/sample - loss: 0.9804 - acc@1: 0.8008

  0/Unknown - 1s 0s/sample - loss: 0.9769 - acc@1: 0.8099

  0/Unknown - 1s 0s/sample - loss: 0.9766 - acc@1: 0.8120


4/4 [==============================] - 1s 296ms/sample - loss: 0.9766 - acc@1: 0.8120

圧縮モデルを微調整

このステップでは、量子化モデルの精度をさらに向上させるため定期的な微調整プロセスが適用されます。通常、元のモデルのトレーニングの最後に使用されるのと同じ学習率を小さくして、数エポックの調整が必要になります。トレーニング・パイプラインにその他の変更は必要ありません。以下に簡単な例を示します。

print(f"\nAccuracy of INT8 model after initialization: {test_acc:.3f}")

# Train the INT8 model.
int8_model.fit(train_dataset, epochs=2)

# Validate the INT8 model.
test_loss, acc_int8 = int8_model.evaluate(
    validation_dataset, callbacks=tf.keras.callbacks.ProgbarLogger(stateful_metrics=['acc@1']))
print(f"\nAccuracy of INT8 model after fine-tuning: {acc_int8:.3f}")
print(
    f"\nAccuracy drop of tuned INT8 model over pre-trained FP32 model: {acc_fp32 - acc_int8:.3f}")
Accuracy of INT8 model after initialization: 0.812
Epoch 1/2
1/101 [..............................] - ETA: 11:46 - loss: 0.6168 - acc@1: 0.9844
  
2/101 [..............................] - ETA: 41s - loss: 0.6303 - acc@1: 0.9766
  
3/101 [..............................] - ETA: 41s - loss: 0.6613 - acc@1: 0.9609
  
4/101 [>.............................] - ETA: 41s - loss: 0.6650 - acc@1: 0.9551
  
5/101 [>.............................] - ETA: 40s - loss: 0.6783 - acc@1: 0.9469
  
6/101 [>.............................] - ETA: 40s - loss: 0.6805 - acc@1: 0.9466
  
7/101 [=>............................] - ETA: 39s - loss: 0.6796 - acc@1: 0.9442
  
8/101 [=>............................] - ETA: 39s - loss: 0.6790 - acc@1: 0.9463
  
9/101 [=>............................] - ETA: 38s - loss: 0.6828 - acc@1: 0.9462
   
10/101 [=>............................] - ETA: 38s - loss: 0.6908 - acc@1: 0.9422
   
11/101 [==>...........................] - ETA: 38s - loss: 0.6899 - acc@1: 0.9425
   
12/101 [==>...........................] - ETA: 37s - loss: 0.6930 - acc@1: 0.9421
   
13/101 [==>...........................] - ETA: 37s - loss: 0.6923 - acc@1: 0.9417
   
14/101 [===>..........................] - ETA: 36s - loss: 0.6960 - acc@1: 0.9386
   
15/101 [===>..........................] - ETA: 36s - loss: 0.6956 - acc@1: 0.9385
   
16/101 [===>..........................] - ETA: 36s - loss: 0.6946 - acc@1: 0.9395
   
17/101 [====>.........................] - ETA: 35s - loss: 0.6948 - acc@1: 0.9393
   
18/101 [====>.........................] - ETA: 35s - loss: 0.6941 - acc@1: 0.9405
   
19/101 [====>.........................] - ETA: 34s - loss: 0.6955 - acc@1: 0.9400
   
20/101 [====>.........................] - ETA: 34s - loss: 0.6931 - acc@1: 0.9402
   
21/101 [=====>........................] - ETA: 33s - loss: 0.6944 - acc@1: 0.9394
   
22/101 [=====>........................] - ETA: 33s - loss: 0.6953 - acc@1: 0.9382
   
23/101 [=====>........................] - ETA: 32s - loss: 0.6966 - acc@1: 0.9375
   
24/101 [======>.......................] - ETA: 32s - loss: 0.6971 - acc@1: 0.9368
   
25/101 [======>.......................] - ETA: 32s - loss: 0.6973 - acc@1: 0.9366
   
26/101 [======>.......................] - ETA: 31s - loss: 0.6975 - acc@1: 0.9369
   
27/101 [=======>......................] - ETA: 31s - loss: 0.6963 - acc@1: 0.9372
   
28/101 [=======>......................] - ETA: 30s - loss: 0.6960 - acc@1: 0.9378
   
29/101 [=======>......................] - ETA: 30s - loss: 0.6967 - acc@1: 0.9375
   
30/101 [=======>......................] - ETA: 29s - loss: 0.6982 - acc@1: 0.9365
   
31/101 [========>.....................] - ETA: 29s - loss: 0.6974 - acc@1: 0.9367
   
32/101 [========>.....................] - ETA: 29s - loss: 0.6966 - acc@1: 0.9373
   
33/101 [========>.....................] - ETA: 28s - loss: 0.6965 - acc@1: 0.9375
   
34/101 [=========>....................] - ETA: 28s - loss: 0.6978 - acc@1: 0.9370
   
35/101 [=========>....................] - ETA: 27s - loss: 0.6981 - acc@1: 0.9375
   
36/101 [=========>....................] - ETA: 27s - loss: 0.6992 - acc@1: 0.9382
   
37/101 [=========>....................] - ETA: 26s - loss: 0.7001 - acc@1: 0.9375
   
38/101 [==========>...................] - ETA: 26s - loss: 0.7023 - acc@1: 0.9369
   
39/101 [==========>...................] - ETA: 26s - loss: 0.7019 - acc@1: 0.9371
   
40/101 [==========>...................] - ETA: 25s - loss: 0.7016 - acc@1: 0.9373
   
41/101 [===========>..................] - ETA: 25s - loss: 0.7021 - acc@1: 0.9371
   
42/101 [===========>..................] - ETA: 24s - loss: 0.7018 - acc@1: 0.9371
   
43/101 [===========>..................] - ETA: 24s - loss: 0.7014 - acc@1: 0.9375
   
44/101 [============>.................] - ETA: 23s - loss: 0.7016 - acc@1: 0.9373
   
45/101 [============>.................] - ETA: 23s - loss: 0.7025 - acc@1: 0.9373
   
46/101 [============>.................] - ETA: 23s - loss: 0.7028 - acc@1: 0.9372
   
47/101 [============>.................] - ETA: 22s - loss: 0.7044 - acc@1: 0.9362
   
48/101 [=============>................] - ETA: 22s - loss: 0.7045 - acc@1: 0.9357
   
49/101 [=============>................] - ETA: 21s - loss: 0.7052 - acc@1: 0.9361
   
50/101 [=============>................] - ETA: 21s - loss: 0.7052 - acc@1: 0.9359
   
51/101 [==============>...............] - ETA: 21s - loss: 0.7061 - acc@1: 0.9357
   
52/101 [==============>...............] - ETA: 20s - loss: 0.7057 - acc@1: 0.9358
   
53/101 [==============>...............] - ETA: 20s - loss: 0.7061 - acc@1: 0.9350
   
54/101 [===============>..............] - ETA: 19s - loss: 0.7055 - acc@1: 0.9355
   
55/101 [===============>..............] - ETA: 19s - loss: 0.7052 - acc@1: 0.9357
   
56/101 [===============>..............] - ETA: 18s - loss: 0.7050 - acc@1: 0.9357
   
57/101 [===============>..............] - ETA: 18s - loss: 0.7053 - acc@1: 0.9352
   
58/101 [================>.............] - ETA: 18s - loss: 0.7057 - acc@1: 0.9351
   
59/101 [================>.............] - ETA: 17s - loss: 0.7062 - acc@1: 0.9345
   
60/101 [================>.............] - ETA: 17s - loss: 0.7064 - acc@1: 0.9345
   
61/101 [=================>............] - ETA: 16s - loss: 0.7064 - acc@1: 0.9343
   
62/101 [=================>............] - ETA: 16s - loss: 0.7056 - acc@1: 0.9347
   
63/101 [=================>............] - ETA: 15s - loss: 0.7060 - acc@1: 0.9345
   
64/101 [==================>...........] - ETA: 15s - loss: 0.7063 - acc@1: 0.9342
   
65/101 [==================>...........] - ETA: 15s - loss: 0.7073 - acc@1: 0.9337
   
66/101 [==================>...........] - ETA: 14s - loss: 0.7077 - acc@1: 0.9332
   
67/101 [==================>...........] - ETA: 14s - loss: 0.7083 - acc@1: 0.9327
   
68/101 [===================>..........] - ETA: 13s - loss: 0.7081 - acc@1: 0.9330
   
69/101 [===================>..........] - ETA: 13s - loss: 0.7087 - acc@1: 0.9330
   
70/101 [===================>..........] - ETA: 13s - loss: 0.7091 - acc@1: 0.9326
   
71/101 [====================>.........] - ETA: 12s - loss: 0.7081 - acc@1: 0.9330
   
72/101 [====================>.........] - ETA: 12s - loss: 0.7083 - acc@1: 0.9329
   
73/101 [====================>.........] - ETA: 11s - loss: 0.7075 - acc@1: 0.9334
   
74/101 [====================>.........] - ETA: 11s - loss: 0.7079 - acc@1: 0.9334
   
75/101 [=====================>........] - ETA: 10s - loss: 0.7085 - acc@1: 0.9329
   
76/101 [=====================>........] - ETA: 10s - loss: 0.7082 - acc@1: 0.9332
   
77/101 [=====================>........] - ETA: 10s - loss: 0.7078 - acc@1: 0.9333
   
78/101 [======================>.......] - ETA: 9s - loss: 0.7080 - acc@1: 0.9334
   
79/101 [======================>.......] - ETA: 9s - loss: 0.7079 - acc@1: 0.9332
   
80/101 [======================>.......] - ETA: 8s - loss: 0.7081 - acc@1: 0.9330
   
81/101 [=======================>......] - ETA: 8s - loss: 0.7078 - acc@1: 0.9333
   
82/101 [=======================>......] - ETA: 7s - loss: 0.7081 - acc@1: 0.9332
   
83/101 [=======================>......] - ETA: 7s - loss: 0.7080 - acc@1: 0.9332
   
84/101 [=======================>......] - ETA: 7s - loss: 0.7075 - acc@1: 0.9332
   
85/101 [========================>.....] - ETA: 6s - loss: 0.7080 - acc@1: 0.9332
   
86/101 [========================>.....] - ETA: 6s - loss: 0.7073 - acc@1: 0.9337
   
87/101 [========================>.....] - ETA: 5s - loss: 0.7079 - acc@1: 0.9330
   
88/101 [=========================>....] - ETA: 5s - loss: 0.7084 - acc@1: 0.9330
   
89/101 [=========================>....] - ETA: 5s - loss: 0.7087 - acc@1: 0.9331
   
90/101 [=========================>....] - ETA: 4s - loss: 0.7091 - acc@1: 0.9330
   
91/101 [==========================>...] - ETA: 4s - loss: 0.7096 - acc@1: 0.9327
   
92/101 [==========================>...] - ETA: 3s - loss: 0.7095 - acc@1: 0.9325
   
93/101 [==========================>...] - ETA: 3s - loss: 0.7099 - acc@1: 0.9320
   
94/101 [==========================>...] - ETA: 2s - loss: 0.7105 - acc@1: 0.9317
   
95/101 [===========================>..] - ETA: 2s - loss: 0.7107 - acc@1: 0.9312
   
96/101 [===========================>..] - ETA: 2s - loss: 0.7107 - acc@1: 0.9313
   
97/101 [===========================>..] - ETA: 1s - loss: 0.7109 - acc@1: 0.9312
   
98/101 [============================>.] - ETA: 1s - loss: 0.7111 - acc@1: 0.9311
   
99/101 [============================>.] - ETA: 0s - loss: 0.7123 - acc@1: 0.9305


100/101 [============================>.] - ETA: 0s - loss: 0.7123 - acc@1: 0.9305



101/101 [==============================] - ETA: 0s - loss: 0.7134 - acc@1: 0.9299



101/101 [==============================] - 49s 418ms/step - loss: 0.7134 - acc@1: 0.9299

Epoch 2/2
1/101 [..............................] - ETA: 41s - loss: 0.5798 - acc@1: 1.0000
  
2/101 [..............................] - ETA: 41s - loss: 0.5917 - acc@1: 1.0000
  
3/101 [..............................] - ETA: 41s - loss: 0.6191 - acc@1: 0.9896
  
4/101 [>.............................] - ETA: 40s - loss: 0.6225 - acc@1: 0.9844
  
5/101 [>.............................] - ETA: 40s - loss: 0.6332 - acc@1: 0.9781
  
6/101 [>.............................] - ETA: 39s - loss: 0.6378 - acc@1: 0.9753
  
7/101 [=>............................] - ETA: 39s - loss: 0.6392 - acc@1: 0.9732
  
8/101 [=>............................] - ETA: 38s - loss: 0.6395 - acc@1: 0.9736
  
9/101 [=>............................] - ETA: 38s - loss: 0.6435 - acc@1: 0.9740
   
10/101 [=>............................] - ETA: 37s - loss: 0.6508 - acc@1: 0.9688
   
11/101 [==>...........................] - ETA: 37s - loss: 0.6517 - acc@1: 0.9695
   
12/101 [==>...........................] - ETA: 37s - loss: 0.6548 - acc@1: 0.9681
   
13/101 [==>...........................] - ETA: 36s - loss: 0.6551 - acc@1: 0.9681
   
14/101 [===>..........................] - ETA: 36s - loss: 0.6592 - acc@1: 0.9660
   
15/101 [===>..........................] - ETA: 35s - loss: 0.6590 - acc@1: 0.9656
   
16/101 [===>..........................] - ETA: 35s - loss: 0.6580 - acc@1: 0.9673
   
17/101 [====>.........................] - ETA: 34s - loss: 0.6583 - acc@1: 0.9665
   
18/101 [====>.........................] - ETA: 34s - loss: 0.6584 - acc@1: 0.9666
   
19/101 [====>.........................] - ETA: 34s - loss: 0.6601 - acc@1: 0.9659
   
20/101 [====>.........................] - ETA: 33s - loss: 0.6586 - acc@1: 0.9656
   
21/101 [=====>........................] - ETA: 33s - loss: 0.6599 - acc@1: 0.9639
   
22/101 [=====>........................] - ETA: 32s - loss: 0.6610 - acc@1: 0.9634
   
23/101 [=====>........................] - ETA: 32s - loss: 0.6623 - acc@1: 0.9620
   
24/101 [======>.......................] - ETA: 31s - loss: 0.6630 - acc@1: 0.9609
   
25/101 [======>.......................] - ETA: 31s - loss: 0.6632 - acc@1: 0.9606
   
26/101 [======>.......................] - ETA: 31s - loss: 0.6638 - acc@1: 0.9603
   
27/101 [=======>......................] - ETA: 30s - loss: 0.6631 - acc@1: 0.9604
   
28/101 [=======>......................] - ETA: 30s - loss: 0.6629 - acc@1: 0.9609
   
29/101 [=======>......................] - ETA: 30s - loss: 0.6636 - acc@1: 0.9604
   
30/101 [=======>......................] - ETA: 29s - loss: 0.6652 - acc@1: 0.9594
   
31/101 [========>.....................] - ETA: 29s - loss: 0.6645 - acc@1: 0.9592
   
32/101 [========>.....................] - ETA: 28s - loss: 0.6641 - acc@1: 0.9592
   
33/101 [========>.....................] - ETA: 28s - loss: 0.6641 - acc@1: 0.9593
   
34/101 [=========>....................] - ETA: 27s - loss: 0.6655 - acc@1: 0.9586
   
35/101 [=========>....................] - ETA: 27s - loss: 0.6657 - acc@1: 0.9587
   
36/101 [=========>....................] - ETA: 27s - loss: 0.6665 - acc@1: 0.9588
   
37/101 [=========>....................] - ETA: 26s - loss: 0.6674 - acc@1: 0.9578
   
38/101 [==========>...................] - ETA: 26s - loss: 0.6695 - acc@1: 0.9570
   
39/101 [==========>...................] - ETA: 25s - loss: 0.6692 - acc@1: 0.9569
   
40/101 [==========>...................] - ETA: 25s - loss: 0.6689 - acc@1: 0.9574
   
41/101 [===========>..................] - ETA: 24s - loss: 0.6692 - acc@1: 0.9571
   
42/101 [===========>..................] - ETA: 24s - loss: 0.6692 - acc@1: 0.9568
   
43/101 [===========>..................] - ETA: 24s - loss: 0.6689 - acc@1: 0.9571
   
44/101 [============>.................] - ETA: 23s - loss: 0.6692 - acc@1: 0.9569
   
45/101 [============>.................] - ETA: 23s - loss: 0.6700 - acc@1: 0.9564
   
46/101 [============>.................] - ETA: 22s - loss: 0.6702 - acc@1: 0.9562
   
47/101 [============>.................] - ETA: 22s - loss: 0.6715 - acc@1: 0.9551
   
48/101 [=============>................] - ETA: 22s - loss: 0.6715 - acc@1: 0.9552
   
49/101 [=============>................] - ETA: 21s - loss: 0.6722 - acc@1: 0.9554
   
50/101 [=============>................] - ETA: 21s - loss: 0.6723 - acc@1: 0.9552
   
51/101 [==============>...............] - ETA: 20s - loss: 0.6732 - acc@1: 0.9547
   
52/101 [==============>...............] - ETA: 20s - loss: 0.6729 - acc@1: 0.9548
   
53/101 [==============>...............] - ETA: 19s - loss: 0.6734 - acc@1: 0.9542
   
54/101 [===============>..............] - ETA: 19s - loss: 0.6730 - acc@1: 0.9546
   
55/101 [===============>..............] - ETA: 19s - loss: 0.6728 - acc@1: 0.9544
   
56/101 [===============>..............] - ETA: 18s - loss: 0.6727 - acc@1: 0.9544
   
57/101 [===============>..............] - ETA: 18s - loss: 0.6732 - acc@1: 0.9538
   
58/101 [================>.............] - ETA: 17s - loss: 0.6735 - acc@1: 0.9537
   
59/101 [================>.............] - ETA: 17s - loss: 0.6739 - acc@1: 0.9531
   
60/101 [================>.............] - ETA: 17s - loss: 0.6741 - acc@1: 0.9530
   
61/101 [=================>............] - ETA: 16s - loss: 0.6741 - acc@1: 0.9530
   
62/101 [=================>............] - ETA: 16s - loss: 0.6735 - acc@1: 0.9533
   
63/101 [=================>............] - ETA: 15s - loss: 0.6738 - acc@1: 0.9531
   
64/101 [==================>...........] - ETA: 15s - loss: 0.6741 - acc@1: 0.9529
   
65/101 [==================>...........] - ETA: 14s - loss: 0.6750 - acc@1: 0.9523
   
66/101 [==================>...........] - ETA: 14s - loss: 0.6754 - acc@1: 0.9522
   
67/101 [==================>...........] - ETA: 14s - loss: 0.6758 - acc@1: 0.9518
   
68/101 [===================>..........] - ETA: 13s - loss: 0.6758 - acc@1: 0.9520
   
69/101 [===================>..........] - ETA: 13s - loss: 0.6763 - acc@1: 0.9520
   
70/101 [===================>..........] - ETA: 12s - loss: 0.6768 - acc@1: 0.9516
   
71/101 [====================>.........] - ETA: 12s - loss: 0.6760 - acc@1: 0.9518
   
72/101 [====================>.........] - ETA: 12s - loss: 0.6761 - acc@1: 0.9516
   
73/101 [====================>.........] - ETA: 11s - loss: 0.6755 - acc@1: 0.9518
   
74/101 [====================>.........] - ETA: 11s - loss: 0.6759 - acc@1: 0.9516
   
75/101 [=====================>........] - ETA: 10s - loss: 0.6765 - acc@1: 0.9515
   
76/101 [=====================>........] - ETA: 10s - loss: 0.6762 - acc@1: 0.9517
   
77/101 [=====================>........] - ETA: 9s - loss: 0.6759 - acc@1: 0.9520
   
78/101 [======================>.......] - ETA: 9s - loss: 0.6761 - acc@1: 0.9521
   
79/101 [======================>.......] - ETA: 9s - loss: 0.6760 - acc@1: 0.9518
   
80/101 [======================>.......] - ETA: 8s - loss: 0.6762 - acc@1: 0.9514
   
81/101 [=======================>......] - ETA: 8s - loss: 0.6759 - acc@1: 0.9516
   
82/101 [=======================>......] - ETA: 7s - loss: 0.6762 - acc@1: 0.9516
   
83/101 [=======================>......] - ETA: 7s - loss: 0.6761 - acc@1: 0.9515
   
84/101 [=======================>......] - ETA: 7s - loss: 0.6757 - acc@1: 0.9517
   
85/101 [========================>.....] - ETA: 6s - loss: 0.6762 - acc@1: 0.9517
   
86/101 [========================>.....] - ETA: 6s - loss: 0.6756 - acc@1: 0.9521
   
87/101 [========================>.....] - ETA: 5s - loss: 0.6762 - acc@1: 0.9516
   
88/101 [=========================>....] - ETA: 5s - loss: 0.6766 - acc@1: 0.9513
   
89/101 [=========================>....] - ETA: 4s - loss: 0.6768 - acc@1: 0.9515
   
90/101 [=========================>....] - ETA: 4s - loss: 0.6771 - acc@1: 0.9515
   
91/101 [==========================>...] - ETA: 4s - loss: 0.6775 - acc@1: 0.9512
   
92/101 [==========================>...] - ETA: 3s - loss: 0.6775 - acc@1: 0.9511
   
93/101 [==========================>...] - ETA: 3s - loss: 0.6778 - acc@1: 0.9509
   
94/101 [==========================>...] - ETA: 2s - loss: 0.6783 - acc@1: 0.9507
   
95/101 [===========================>..] - ETA: 2s - loss: 0.6785 - acc@1: 0.9502
   
96/101 [===========================>..] - ETA: 2s - loss: 0.6785 - acc@1: 0.9504
   
97/101 [===========================>..] - ETA: 1s - loss: 0.6787 - acc@1: 0.9501
   
98/101 [============================>.] - ETA: 1s - loss: 0.6790 - acc@1: 0.9499
   
99/101 [============================>.] - ETA: 0s - loss: 0.6800 - acc@1: 0.9493


100/101 [============================>.]- ETA: 0s - loss: 0.6800 - acc@1: 0.9493



101/101 [==============================] - ETA: 0s - loss: 0.6807 - acc@1: 0.9489



101/101 [==============================] - 42s 415ms/step - loss: 0.6807 - acc@1: 0.9489

0/Unknown - 0s 0s/sample - loss: 1.0568 - acc@1: 0.7812

  0/Unknown - 0s 0s/sample - loss: 0.9848 - acc@1: 0.8086

  0/Unknown - 0s 0s/sample - loss: 0.9768 - acc@1: 0.8177

  0/Unknown - 1s 0s/sample - loss: 0.9760 - acc@1: 0.8160


4/4 [==============================] - 1s 143ms/sample - loss: 0.9760 - acc@1: 0.8160

Accuracy of INT8 model after fine-tuning: 0.816

Accuracy drop of tuned INT8 model over pre-trained FP32 model: 0.006

OpenVINO 中間表現 (IR) へのモデルのエクスポート

モデル変換 Python API を使用して、モデルを OpenVINO IR に変換します。

モデル変換の詳細については、このページを参照してください。

このコマンドの実行には時間がかかる場合があります。

model_ir_fp32 = ov.convert_model(fp32_model)
WARNING:tensorflow:Please fix your imports. Module tensorflow.python.training.tracking.base has been moved to tensorflow.python.trackable.base. The old module will be deleted in version 2.11.
WARNING:tensorflow:Please fix your imports. Module tensorflow.python.training.tracking.base has been moved to tensorflow.python.trackable.base. The old module will be deleted in version 2.11.
model_ir_int8 = ov.convert_model(int8_model)

推論時間の計算によるベンチマーク・モデルのパフォーマンス

最後に、ベンチマーク・ツールを使用して、FP32 モデルと INT8 モデルの推論パフォーマンスを測定します。

  • OpenVINO の推論パフォーマンス測定ツール。デフォルトでは、ベンチマーク・ツールは CPU 上の非同期モードで推論を 60 秒間実行します。推論速度をレイテンシー (画像あたりのミリ秒) およびスループット (1 秒あたりのフレーム数) の値として返します。

注: このノートブックは、benchmark_app を 15 秒間実行して、パフォーマンスを簡単に示します。より正確なパフォーマンスを得るには、他のアプリケーションを閉じて、ターミナル/コマンドプロンプトで benchmark_app を実行することを推奨します。benchmark_app -m model.xml -d CPU を実行して、CPU で非同期推論のベンチマークを 1 分間実行します。GPU でベンチマークを行うには、CPU を GPU に変更します。benchmark_app --help を実行すると、すべてのコマンドライン・オプションの概要が表示されます。

ov.save_model(model_ir_fp32, fp32_ir_path, compress_to_fp16=False)
ov.save_model(model_ir_int8, int8_ir_path, compress_to_fp16=False)


def parse_benchmark_output(benchmark_output):
    parsed_output = [line for line in benchmark_output if 'FPS' in line]
    print(*parsed_output, sep='\n')


print('Benchmark FP32 model (IR)')
benchmark_output = ! benchmark_app -m $fp32_ir_path -d CPU -api async -t 15 -shape [1,64,64,3]
parse_benchmark_output(benchmark_output)

print('\nBenchmark INT8 model (IR)')
benchmark_output = ! benchmark_app -m $int8_ir_path -d CPU -api async -t 15 -shape [1,64,64,3]
parse_benchmark_output(benchmark_output)
Benchmark FP32 model (IR)
[ INFO ] Throughput:   2822.70 FPS

Benchmark INT8 model (IR)
[ INFO ] Throughput:   11084.28 FPS

参考として CPU 情報を表示します。

core = ov.Core()
core.get_property('CPU', "FULL_DEVICE_NAME")
'Intel(R) Core(TM) i9-10920X CPU @ 3.50GHz'