スタンドアロンモデルカードツールキットのデモ

この「スタンドアロン」ノートブックは、TFX / MLMDコンテキストなしでModelCardToolkitを使用する方法を示しています。 TFX / MLMDでモデルカードツールキットを使用する方法については、 MLMDモデルカードツールキットのデモを確認してください。

TensorFlow.orgで表示 GoogleColabで実行 GitHubで表示ノートブックをダウンロードする

目的

このノートブックは、Jupyter / Colab環境でModelCardToolkitを使用してモデルカードを生成する方法を示しています。モデルカードの詳細については、 https://modelcards.withgoogle.com/aboutをご覧ください。

このデモではKerasモデルを使用しています。ただし、以下のロジックは、他のMLフレームワーク全般にも適用されます。

セットアップ

まず、a)必要なパッケージをインストールしてインポートし、b)データをダウンロードする必要があります。

Pip 20.2にアップグレードし、Model CardToolkitをインストールします

pip install -q --upgrade pip==20.2
pip install -q 'model-card-toolkit>=0.1.1,<0.2'
pip install -q 'tensorflow>=2.3.1'

ランタイムを再起動しましたか?

上記のセルを初めて実行するときにGoogleColabを使用している場合は、ランタイムを再起動する必要があります([ランタイム]> [ランタイムの再起動...])。これは、Colabがパッケージをロードする方法が原因です。

輸入

import tensorflow as tf
import numpy as np
from model_card_toolkit import ModelCardToolkit
from model_card_toolkit.documentation.examples import cats_vs_dogs
from model_card_toolkit.utils.graphics import figure_to_base64str
import tempfile
import matplotlib.pyplot as plt
from IPython import display
import requests
import os
import zipfile

モデル

人気のある16層の画像分類モデルであるMobileNetV2に基づくアーキテクチャを備えた事前トレーニング済みモデルを使用します。私たちのモデルは、 Cats vs Dogsデータセットを使用して、猫と犬を区別するようにトレーニングされています。モデルトレーニングは、 TensorFlow転送学習チュートリアルに基づいています。

URL = 'https://storage.googleapis.com/cats_vs_dogs_model/cats_vs_dogs_model.zip'
BASE_PATH = tempfile.mkdtemp()
ZIP_PATH = os.path.join(BASE_PATH, 'cats_vs_dogs_model.zip')
MODEL_PATH = os.path.join(BASE_PATH,'cats_vs_dogs_model')

r = requests.get(URL, allow_redirects=True)
open(ZIP_PATH, 'wb').write(r.content)

with zipfile.ZipFile(ZIP_PATH, 'r') as zip_ref:
    zip_ref.extractall(BASE_PATH)

model = tf.keras.models.load_model(MODEL_PATH)

データセット

cats-vs-dogsデータセットでは、label = 0は猫に対応し、label = 1は犬に対応します。

def compute_accuracy(data):
  x = np.stack(data['examples'])
  y = np.asarray(data['labels'])
  _, metric = model.evaluate(x, y)
  return metric
examples = cats_vs_dogs.get_data()
print('num validation examples:', len(examples['combined']['examples']))
print('num cat examples:', len(examples['cat']['examples']))
print('num dog examples:', len(examples['dog']['examples']))
num validation examples: 320
num cat examples: 149
num dog examples: 171
accuracy = compute_accuracy(examples['combined'])
cat_accuracy = compute_accuracy(examples['cat'])
dog_accuracy = compute_accuracy(examples['dog'])
10/10 [==============================] - 2s 163ms/step - loss: 0.0794 - binary_accuracy: 0.9812
5/5 [==============================] - 1s 132ms/step - loss: 0.0608 - binary_accuracy: 0.9933
6/6 [==============================] - 1s 135ms/step - loss: 0.0956 - binary_accuracy: 0.9708

モデルカードツールキットを使用する

モデルカードツールキットを初期化する

最初のステップは、 モデルカードのJSONファイルモデルカードのドキュメントなどのアセットを保持するModelCardToolkitオブジェクトを初期化することModelCardToolkitModelCardToolkit.scaffold_assets()を呼び出してこれらのアセットを生成し、 ModelCardオブジェクトを返します。

# https://github.com/tensorflow/model-card-toolkit/blob/master/model_card_toolkit/model_card_toolkit.py
model_card_dir = tempfile.mkdtemp()
mct = ModelCardToolkit(model_card_dir)

# https://github.com/tensorflow/model-card-toolkit/blob/master/model_card_toolkit/model_card.py
model_card = mct.scaffold_assets()

モデルカードに注釈を付ける

scaffold_assets()によって返されるModelCardオブジェクトには、直接変更できる多くのフィールドがあります。これらのフィールドは、最終的に生成されたモデルカードドキュメントに表示されます。包括的なリストについては、 model_card.pyを参照してください。詳細については、ドキュメントを参照しください。

テキストフィールド

モデルの詳細

model_card.model_detailsは、 nameownersversionなど、多くの基本的なメタデータフィールドが含まれています。 overviewフィールドにモデルの説明を入力できます。

model_card.model_details.name = 'Fine-tuned MobileNetV2 Model for Cats vs. Dogs'
model_card.model_details.overview = (
    'This model distinguishes cat and dog images. It uses the MobileNetV2 '
    'architecture (https://arxiv.org/abs/1801.04381) and is trained on the '
    'Cats vs Dogs dataset '
    '(https://www.tensorflow.org/datasets/catalog/cats_vs_dogs). This model '
    'performed with high accuracy on both Cat and Dog images.'
)
model_card.model_details.owners = [
  {'name': 'Model Cards Team', 'contact': 'model-cards@google.com'}
]
model_card.model_details.version = {'name': 'v1.0', 'date': '08/28/2020'}
model_card.model_details.references = [
    'https://www.tensorflow.org/guide/keras/transfer_learning',
    'https://arxiv.org/abs/1801.04381',
]
model_card.model_details.license = 'Apache-2.0'
model_card.model_details.citation = 'https://github.com/tensorflow/model-card-toolkit/blob/master/model_card_toolkit/documentation/examples/Standalone_Model_Card_Toolkit_Demo.ipynb'
定量分析

model_card.quantitative_analysisは、モデルのパフォーマンスメトリックに関する情報が含まれています。

以下では、データセットに基づいて構築された架空のモデルのいくつかの合成パフォーマンスメトリック値を作成します。

model_card.quantitative_analysis.performance_metrics = [
  {'type': 'accuracy', 'value': accuracy},
  {'type': 'accuracy', 'value': cat_accuracy, 'slice': 'cat'},
  {'type': 'accuracy', 'value': dog_accuracy, 'slice': 'Dog'},
]
考慮事項

model_card.considerationsは、モデルに関する適格な情報(適切な使用例、ユーザーが留意する必要のある制限、アプリケーションの倫理的考慮事項など)が含まれています。

model_card.considerations.use_cases = [
    'This model classifies images of cats and dogs.'
]
model_card.considerations.limitations = [
    'This model is not able to classify images of other classes.'
]
model_card.considerations.ethical_considerations = [{
    'name':
        'While distinguishing between cats and dogs is generally agreed to be '
        'a benign application of machine learning, harmful results can occur '
        'when the model attempts to classify images that don’t contain cats or '
        'dogs.',
    'mitigation_strategy':
        'Avoid application on non-dog and non-cat images.'
}]

グラフフィールド

多くの場合、レポートでは、モデルのトレーニングデータ、および評価データ全体でのパフォーマンスに関する情報を提供することがベストプラクティスです。モデルカードツールキットを使用すると、ユーザーはこの情報をモデルカードでレンダリングされた視覚化でエンコードできます。

model_card -グラフのための3つのセクションがあるmodel_card.model_parameters.data.train.graphicsトレーニングデータセットの統計情報について、 model_card.model_parameters.data.eval.graphics評価データセットの統計情報について、およびmodel_card.quantitative_analysis.graphicsモデルの性能の定量分析のために。

グラフはbase64文字列として保存されますmatplotlibの図がある場合は、 model_card_toolkit.utils.graphics.figure_to_base64str()model_card_toolkit.utils.graphics.figure_to_base64str()してbase64文字列に変換できます。

# Validation Set Size Bar Chart
fig, ax = plt.subplots()
width = 0.75
rects0 = ax.bar(0, len(examples['combined']['examples']), width, label='Overall')
rects1 = ax.bar(1, len(examples['cat']['examples']), width, label='Cat')
rects2 = ax.bar(2, len(examples['dog']['examples']), width, label='Dog')
ax.set_xticks(np.arange(3))
ax.set_xticklabels(['Overall', 'Cat', 'Dog'])
ax.set_ylabel('Validation Set Size')
ax.set_xlabel('Slices')
ax.set_title('Validation Set Size for Slices')
validation_set_size_barchart = figure_to_base64str(fig)

png

# Acuracy Bar Chart
fig, ax = plt.subplots()
width = 0.75
rects0 = ax.bar(0, accuracy, width, label='Overall')
rects1 = ax.bar(1, cat_accuracy, width, label='Cat')
rects2 = ax.bar(2, dog_accuracy, width, label='Dog')
ax.set_xticks(np.arange(3))
ax.set_xticklabels(['Overall', 'Cat', 'Dog'])
ax.set_ylabel('Accuracy')
ax.set_xlabel('Slices')
ax.set_title('Accuracy on Slices')
accuracy_barchart = figure_to_base64str(fig)

png

これで、それらをModelCard追加できます。

model_card.model_parameters.data.eval.graphics.collection = [
  {'name': 'Validation Set Size', 'image': validation_set_size_barchart},
]
model_card.quantitative_analysis.graphics.collection = [
  {'name': 'Accuracy', 'image': accuracy_barchart},
]

モデルカードを生成する

モデルカードドキュメントを生成しましょう。利用可能なフォーマットはmodel_card_toolkit / templateに保存されています。ここでは、HTML形式とMarkdown形式について説明します。

まず、 ModelCardToolkitを最新のModelCardで更新する必要があります。

mct.update_model_card_json(model_card)

これで、 ModelCardToolkitは、 ModelCardToolkit.export_format()を使用してモデルカードドキュメントを生成できます。

# Generate a model card document in HTML (default)
html_doc = mct.export_format()

# Display the model card document in HTML
display.display(display.HTML(html_doc))

Markdownなどの他の形式でモデルカードを出力することもできます。

# Generate a model card document in Markdown
md_path = os.path.join(model_card_dir, 'template/md/default_template.md.jinja')
md_doc = mct.export_format(md_path, 'model_card.md')

# Display the model card document in Markdown
display.display(display.Markdown(md_doc))

猫と犬の微調整されたMobileNetV2モデルのモデルカード

モデルの詳細

概要概要

このモデルは、猫と犬の画像を区別します。 MobileNetV2アーキテクチャ( https://arxiv.org/abs/1801.04381 )を使用し、Cats vs Dogsデータセット( https://www.tensorflow.org/datasets/catalog/cats_vs_dogs )でトレーニングされています。このモデルは、猫と犬の両方の画像で高精度で実行されました。

バージョン

名前:v1.0

日付:2020年8月28日

所有者

  • モデルカードチーム、model-cards @ google.com

ライセンス

Apache-2.0

参考文献

引用

https://github.com/tensorflow/model-card-toolkit/blob/master/model_card_toolkit/documentation/examples/Standalone_Model_Card_Toolkit_Demo.ipynb

考慮事項

ユースケース

  • このモデルは、猫と犬の画像を分類します。

制限事項

  • このモデルは、他のクラスの画像を分類することはできません。

倫理的配慮

  • リスク:猫と犬を区別することは機械学習の良性のアプリケーションであると一般に認められていますが、モデルが猫や犬を含まない画像を分類しようとすると、有害な結果が生じる可能性があります。
    • 緩和戦略:犬や猫以外の画像への適用は避けてください。

グラフィックス

評価セット

検証セットのサイズ

定量分析

正確さ

指標

名前
正確さ0.981249988079071
精度、猫0.9932885766029358
精度、犬0.9707602262496948