🚀 MSI-Net
🤖 MSI-Netは、眼球運動データで学習された文脈エンコーダー・デコーダーネットワークを使用して、自然画像上で人間が注視する場所を予測する視覚顕著性モデルです。このモデルは畳み込みニューラルネットワークアーキテクチャに基づいており、異なる膨張率の複数の畳み込み層を持つASPPモジュールを含み、並列に多尺度の特徴を捉えることができます。
🚀 クイックスタート
MSI-Netは、眼球運動データで学習された文脈エンコーダー・デコーダーネットワークを使用して、自然画像上で人間が注視する場所を予測する視覚顕著性モデルです。このモデルのデモはHuggingFace Spacesで見ることができます。
📖 このモデルに関する詳細な情報は、論文を参照してください。
✨ 主な機能
- 文脈エンコーダー・デコーダーネットワークを使用して、自然画像上で人間が注視する場所を予測します。
- 畳み込みニューラルネットワークアーキテクチャに基づいており、ASPPモジュールを含み、多尺度の特徴を捉えることができます。
- グローバルなシーン情報と組み合わせることで、視覚顕著性の正確な予測を行います。
📦 インストール
必要な依存関係をインストールするには、pip
またはconda
を使用します。
pip install -r requirements.txt
conda env create -f requirements.yml
💻 使用例
基本的な使用法
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
from huggingface_hub import snapshot_download
hf_dir = snapshot_download(repo_id="alexanderkroner/MSI-Net")
model = tf.keras.models.load_model(hf_dir)
def get_target_shape(original_shape):
original_aspect_ratio = original_shape[0] / original_shape[1]
square_mode = abs(original_aspect_ratio - 1.0)
landscape_mode = abs(original_aspect_ratio - 240 / 320)
portrait_mode = abs(original_aspect_ratio - 320 / 240)
best_mode = min(square_mode, landscape_mode, portrait_mode)
if best_mode == square_mode:
target_shape = (320, 320)
elif best_mode == landscape_mode:
target_shape = (240, 320)
else:
target_shape = (320, 240)
return target_shape
def preprocess_input(input_image, target_shape):
input_tensor = tf.expand_dims(input_image, axis=0)
input_tensor = tf.image.resize(
input_tensor, target_shape, preserve_aspect_ratio=True
)
vertical_padding = target_shape[0] - input_tensor.shape[1]
horizontal_padding = target_shape[1] - input_tensor.shape[2]
vertical_padding_1 = vertical_padding // 2
vertical_padding_2 = vertical_padding - vertical_padding_1
horizontal_padding_1 = horizontal_padding // 2
horizontal_padding_2 = horizontal_padding - horizontal_padding_1
input_tensor = tf.pad(
input_tensor,
[
[0, 0],
[vertical_padding_1, vertical_padding_2],
[horizontal_padding_1, horizontal_padding_2],
[0, 0],
],
)
return (
input_tensor,
[vertical_padding_1, vertical_padding_2],
[horizontal_padding_1, horizontal_padding_2],
)
def postprocess_output(
output_tensor, vertical_padding, horizontal_padding, original_shape
):
output_tensor = output_tensor[
:,
vertical_padding[0] : output_tensor.shape[1] - vertical_padding[1],
horizontal_padding[0] : output_tensor.shape[2] - horizontal_padding[1],
:,
]
output_tensor = tf.image.resize(output_tensor, original_shape)
output_array = output_tensor.numpy().squeeze()
output_array = plt.cm.inferno(output_array)[..., :3]
return output_array
input_image = tf.keras.utils.load_img(hf_dir + "/example.jpg")
input_image = np.array(input_image, dtype=np.float32)
original_shape = input_image.shape[:2]
target_shape = get_target_shape(original_shape)
input_tensor, vertical_padding, horizontal_padding = preprocess_input(
input_image, target_shape
)
output_tensor = model(input_tensor)["output"]
saliency_map = postprocess_output(
output_tensor, vertical_padding, horizontal_padding, original_shape
)
alpha = 0.65
blended_image = alpha * saliency_map + (1 - alpha) * input_image / 255
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.imshow(input_image / 255)
plt.title("Input Image")
plt.axis("off")
plt.subplot(1, 2, 2)
plt.imshow(blended_image)
plt.title("Saliency Map")
plt.axis("off")
plt.tight_layout()
plt.show()
📚 ドキュメント
データセット
モデルを注視データで学習する前に、エンコーダーの重みは、ImageNet分類タスクで事前学習されたVGG16バックボーンから初期化されました。その後、モデルはSALICONデータセットで学習されました。このデータセットは、注視測定の代理としてマウスの動きの記録から構成されています。最後に、重みは人間の眼球追跡データで微調整することができます。
このモデルの評価は、元のMIT顕著性ベンチマークと更新されたMIT/Tübingen顕著性ベンチマークで利用できます。後者の結果は、予測された顕著性マップの確率的表現から導出され、公平なモデル比較のために指標固有の事後処理が行われています。
制限事項
MSI-Netは、自由視聴パラダイムで収集された人間の注視データで学習されています。したがって、予測された顕著性マップは、実験中にタスク指示を受けた視聴者には一般化できない可能性があります。また、学習データは主に自然画像で構成されていることに注意する必要があります。その結果、特定の画像タイプ(例:フラクタル、パターン)または敵対的サンプルの注視予測は、あまり正確ではない可能性があります。
もう1つの制限事項は、2018年から2021年の間にソーシャルメディアプラットフォームTwitterにアップロードされた画像に以前適用されていた、顕著性ベースのクロッピングアルゴリズムが人種と性別に関するバイアスを示していることです。したがって、顕著性モデルを使用する際には注意が必要であり、その適用に伴う潜在的なリスクを認識することが重要です。
参考文献
このコードまたはモデルが役立つ場合、以下の論文を引用してください。
@article{kroner2020contextual,
title={Contextual encoder-decoder network for visual saliency prediction},
author={Kroner, Alexander and Senden, Mario and Driessens, Kurt and Goebel, Rainer},
url={http://www.sciencedirect.com/science/article/pii/S0893608020301660},
doi={https://doi.org/10.1016/j.neunet.2020.05.004},
journal={Neural Networks},
publisher={Elsevier},
year={2020},
volume={129},
pages={261--270},
issn={0893-6080}
}
📄 ライセンス
このプロジェクトはMITライセンスの下でライセンスされています。