事前学習済みのViTモデルを使用した画像キャプショニングにおけるVision Transformer(ViT)

Using pre-trained ViT model for image captioning with Vision Transformer (ViT).

はじめに

事前学習済みのViTモデルを使用した画像キャプショニングは、画像の詳細な説明を提供するために画像の下に表示されるテキストまたは書き込みのことを指します。つまり、画像をテキストの説明に翻訳するタスクであり、ビジョン(画像)と言語(テキスト)を接続することで行われます。この記事では、PyTorchバックエンドを使用して、画像のViTを主要な技術として使用して、トランスフォーマーを使用した画像キャプショニングの生成方法を、スクラッチから再トレーニングすることなくトレーニング済みモデルを使用して実現します。

Source: Springer

現在のソーシャルメディアプラットフォームや画像のオンライン利用の流行に対応するため、この技術を学ぶことは、説明、引用、視覚障害者の支援、さらには検索エンジン最適化といった多くの理由で役立ちます。これは、画像を含むプロジェクトにとって非常に便利な技術であります。

学習目標

  • 画像キャプショニングのアイデア
  • ViTを使用した画像キャプチャリング
  • トレーニング済みモデルを使用した画像キャプショニングの実行
  • Pythonを使用したトランスフォーマーの利用

この記事で使用されたコード全体は、このGitHubリポジトリで見つけることができます。

この記事は、データサイエンスブログマラソンの一環として公開されました。

トランスフォーマーモデルとは何ですか?

ViTについて説明する前に、トランスフォーマーについて理解しましょう。Google Brainによって2017年に導入されて以来、トランスフォーマーはNLPの能力において注目を集めています。トランスフォーマーは、入力データの各部分の重要性を異なる重み付けする自己注意を採用して区別されるディープラーニングモデルです。これは、主に自然言語処理(NLP)の分野で使用されています。

トランスフォーマーは、自然言語のようなシーケンシャルな入力データを処理しますが、トランスフォーマーは一度にすべての入力を処理します。注意機構の助けを借りて、入力シーケンスの任意の位置にはコンテキストがあります。この効率性により、より並列化が可能となり、トレーニング時間が短縮され、効率が向上します。

トランスフォーマーアーキテクチャ

次に、トランスフォーマーのアーキテクチャの構成を見てみましょう。トランスフォーマーアーキテクチャは、主にエンコーダー-デコーダー構造から構成されています。トランスフォーマーアーキテクチャのエンコーダー-デコーダー構造は、「Attention Is All You Need」という有名な論文で発表されました。

エンコーダーは、各レイヤーが入力を反復的に処理することを担当し、一方で、デコーダーレイヤーはエンコーダーの出力を受け取り、デコードされた出力を生成します。単純に言えば、エンコーダーは入力シーケンスをシーケンスにマッピングし、それをデコーダーに供給します。デコーダーは、出力シーケンスを生成します。

ビジョン・トランスフォーマーとは何ですか?

この記事では、画像キャプショニングにViTを実用的に使用するため、ViTの動作方法についても理解することが役立ちます。ビジョン・トランスフォーマーは、画像を含む視覚的なタスクを実行するトランスフォーマーの一種であり、入力画像間の関係を見つけるために注意機構も使用します。このユースケースでは、画像をトークンまたはテキストと接続します。

Source: Alexey et al. 2021

画像キャプショニングの実装

トランスフォーマーの動作方法を理解したので、画像キャプショニングモデルを実装しましょう。まず、トランスフォーマーライブラリをインストールし、モデルを構築した後、モデルを使用して画像のキャプションを生成します。

コードを書く前に、Hugging Faceライブラリから提供される画像キャプショニングのためにトレーニングされたvit-gpt2-image-captioningモデルを実際に使用していることを思い出しましょう。このモデルのバックボーンはビジョン変換器です。

必要なライブラリのインポート

最初に、Colabにはまだ事前にインストールされていないTransformerライブラリをインストールする必要があります。

# Installing Transformer Libraries

!pip install transformers

これで、ライブラリをインポートできます。

# Web links Handler
import requests

# Backend
import torch

# Image Processing
from PIL import Image

# Transformer and pre-trained Model
from transformers import VisionEncoderDecoderModel, ViTImageProcessor, GPT2TokenizerFast

# Managing loading processing
from tqdm import tqdm

# Assign available GPU
device = "cuda" if torch.cuda.is_available() else "cpu"

このGitHubリポジトリで全コードを見つけることができます。

# Loading a fine-tuned image captioning Transformer Model

# ViT Encoder-Decoder Model
model = VisionEncoderDecoderModel.from_pretrained("nlpconnect/vit-gpt2-image-captioning").to(device)

# Corresponding ViT Tokenizer
tokenizer = GPT2TokenizerFast.from_pretrained("nlpconnect/vit-gpt2-image-captioning")

# Image processor
image_processor = ViTImageProcessor.from_pretrained("nlpconnect/vit-gpt2-image-captioning")

私たちは、transformersクラスから3つの事前トレーニングモデルを紹介しました。それらの機能を簡単に見てみましょう。

  • VisionEncoderDecoderModel : これは、Transformers(エンコーダー)を使用して、ViT(ここで使用した)またはBEiTなどのモデルを使用して、事前トレーニングされたビジョンモデルを使用して画像からテキストの生成を実行するのに役立ちます。ビジョントランスフォーマー(ViTs)の自己教師あり事前トレーニングを使用して監視された事前トレーニングを上回り、GPT2(ここでも使用している)などの事前トレーニング済み言語モデルをデコーダーとして使用します。したがって、このアプローチでは、画像のエンコードにVisionEncoderDecoderを使用し、後で言語モデルを使用してキャプションを生成することで、画像キャプショニングのアプリケーションとしてVisionEncoderDecoderを使用します。
  • GPT2TokenizerFast : これは、Hugging Face tokenizersライブラリを使用してGPT-2トークナイザーを作成します。トークナイザーは、キャプショニングに必要なすべての機能を処理するためにすでにトレーニングされています。
  • ViTImageProcessor : 最後に、ViTImageProcessorです。ViT画像プロセッサを構築するのに役立ちます。

キャプチャ用の画像の準備

今度は、URLをロードし、キャプチャしたい画像を処理する関数を作成する必要があります。

# Accesssing images from the web
import urllib.parse as parse
import os
# Verify url
def check_url(string):
    try:
        result = parse.urlparse(string)
        return all([result.scheme, result.netloc, result.path])
    except:
        return False

# Load an image
def load_image(image_path):
    if check_url(image_path):
        return Image.open(requests.get(image_path, stream=True).raw)
    elif os.path.exists(image_path):
        return Image.open(image_path)

したがって、URLを確認する最初の関数と、その確認されたURLを使用してキャプチャするための別の関数を作成しました。

画像の推論の実行

推論により、画像の特徴に基づいて合理的な結論を導き出すことができます。アプローチは、PyTorchを使用して画像をテンソルに変換する(ここでは使用している)か、ピクセルとして処理することです。推論を実行するために、以下に示す一般的な方法を使用して自己回帰的にキャプションを生成します。

# Image inference
def get_caption(model, image_processor, tokenizer, image_path):
    image = load_image(image_path)
    
    # Preprocessing the Image
    img = image_processor(image, return_tensors="pt").to(device)
    
    # Generating captions
    output = model.generate(**img)
    
    # decode the output
    caption = tokenizer.batch_decode(output, skip_special_tokens=True)[0]
    
    return caption

ここでは、デフォルトである貪欲なデコーディングを使用しました。他のオプションにはビームサーチや多項式サンプリングなどがあります。それらを実験して、違いを確認できます。

画像のロードとキャプチャ

最後に、必要に応じて画像を読み込み、キャプチャすることができました。いくつかの画像を読み込み、キャプチャのパフォーマンスを確認します。これらの画像はcocoデータセットではなく、ウェブ上のソースから取得されたものです。必要に応じて、自分の画像を使用してください。

#  画像メディア表示
from IPython.display import display

例1

# URLの読み込み
url = "https://images.pexels.com/photos/101667/pexels-photo-101667.jpeg?auto=compress&cs=tinysrgb&w=600"

# 画像の表示
display(load_image(url))

# キャプションの表示
get_caption(model, image_processor, tokenizer, url)
Source: Pexels

キャプション:

草地を駆ける黒い馬

例2

# URLの読み込み
url = "https://images.pexels.com/photos/103123/pexels-photo-103123.jpeg?auto=compress&cs=tinysrgb&w=600"

# 画像の表示
display(load_image(url))

# キャプションの表示
get_caption(model, image_processor, tokenizer, url)
Source: Pexels

キャプション:

山の上に立つ男性

例3

# URLの読み込み
url = "https://images.pexels.com/photos/406014/pexels-photo-406014.jpeg?auto=compress&cs=tinysrgb&w=600"

# 画像の表示
display(load_image(url))

# キャプションの表示
get_caption(model, image_processor, tokenizer, url)
Source: Pexels

キャプション:

長い鼻を持つ犬

ビジョン・トランスフォーマーのその他の応用

最後に、イメージキャプショニング以外のビジョントランスフォーマーの使用例をいくつか見てみましょう:

  • 光学式文字認識(OCR)
  • 画像検出/分類
  • ディープフェイクの識別
  • 異常検出/セグメンテーション
  • 画像セグメンテーションと分析

結論

PyTorchバックエンドでビジョントランスフォーマー(ViT)技術を使用してイメージキャプショニングを実行しました。ViTは、シーケンシャルな入力データを処理し、トレーニング時間を短縮する深層学習モデルです。事前学習されたモデルVisionEncoderDecoderModel、GPT2TokenizerFast、およびViTImageProcessorを使用することで、ゼロから構築することなく簡単に構築することができました。これらのモデルは、教師ありの事前トレーニングを超える能力を持っており、イメージキャプショニングに適しています。

キーポイント

  • 事前学習されたビジョントランスフォーマー(ViT)モデルとPyTorchバックエンドを使用して、イメージをテキストの説明に翻訳することで、イメージキャプショニングを見ることができました。
  • トランスフォーマーは、セルフアテンション、並列化、およびトレーニング時間の短縮を使用して、シーケンシャルな入力データを処理するモデルです。
  • ViTを実用的に使用する方法を示し、注目機構を使用して画像とテキストを接続しました。

よくある質問(FAQ)

  • プロジェクトGitHub:https://github.com/inuwamobarak/Image-captioning-ViT
  • Vision Transformer(ViT)私たちは、オープンソースとオープンサイエンスを通じて人工知能を進め、民主化する旅をしています。huggingface.co
  • OpenAI GPT2私たちは、オープンソースとオープンサイエンスを通じて人工知能を進め、民主化する旅をしています。huggingface.co
  • Tokenizer私たちは、オープンソースとオープンサイエンスを通じて人工知能を進め、民主化する旅をしています。huggingface.co
  • Vision Encoder Decoder Models私たちは、オープンソースとオープンサイエンスを通じて人工知能を進め、民主化する旅をしています。huggingface.co
  • https://link.springer.com/chapter/10.1007/978-3-030-74478-6_7
  • https://en.wikipedia.org/wiki/Transformer_(machine_learning_model)
  • https://openreview.net/pdf?id=YicbFdNTTy

この記事で表示されているメディアはAnalytics Vidhyaが所有するものではなく、著者の裁量で使用されています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

RAGのNLPにおける検索と生成の統一的な革新的アプローチ

イントロダクション AIの急速に進化する領域に、ゲームチェンジングなイノベーションが登場し、機械が人間の言語と関わる方法...

データサイエンス

「誰も所有していないサービスを修復するために、アンブロックされたものを使う」

「サービスが誰にも所有されていないのは珍しいことではありませんほとんどの文書化もない状態で、Unblockedの魔法を使って、...

機械学習

Falcon AI 新しいオープンソースの大規模言語モデル

はじめに Open AIによるGPT(Generative Pre Trained)の発表以来、世界はGenerative AIによって大いに沸き立っています。そ...

AIテクノロジー

高度なRAGテクニック:イラスト入り概要

この投稿の目標は、利用可能なRAGアルゴリズムとテクニックの概要と説明をすることなので、コードの実装の詳細には立ち入らず...

データサイエンス

イノベーションを推進するための重要なツール:データレイクハウスにおけるジェネラティブAIの向上

LLMおよびジェネレーティブAIアプリの登場により、データは全エコシステムの中心的な要素となっています本記事では、データレ...

AI研究

「SimCLRの最大の問題を修正する〜BYOL論文の解説」

SimCLRは対比学習のアイデアを成功裏に実装し、当時新たな最先端の性能を達成しました!それにもかかわらず、このアイデアに...