【Ferret】Appleが開発したマルチモーダル大規模言語モデルの使い方〜実践まで
WEELメディア事業部LLMライターのゆうやです。
Ferretは、Appleが開発したマルチモーダル大規模言語モデルで、画像の領域を指定して解釈する能力があることが特徴です。
領域の指定は「point」「box」「free-form shape」の3種類あり、以下の画像のようにテキストで「領域~には何がありますか?」と質問すると、その領域にある物体を認識して回答を出力します。
こちらの例では、「領域[100, 600, 500, 900]には何がありますか?」という質問に対して、「猫のしっぽです[80, 590, 450, 920]」と回答しています。
このモデルは2023年10月に公開されていましたが、12月14日にウェイト情報が公開されたので、モデルを学習できる環境がない方でもモデルを実装して使用できるようになりました。
今回は、Ferretの概要や使ってみた感想をお伝えします。
是非最後までご覧ください!
Ferretの概要
Ferretは、Appleが開発したマルチモーダル大規模言語モデルで、画像内の特定の領域を用いてクエリを実行する能力があることが特徴です。
領域の指定は「point」「box」「free-form shape」の3種類あり、以下の画像のようにテキストで「領域~には何がありますか?」と質問すると、その領域にある物体を認識して回答を出力します。
こちらの例では、「領域[100, 600, 500, 900]には何がありますか?」という質問に対して、「猫のしっぽです[80, 590, 450, 920]」と回答しています。
Ferretは、Llama2をベースに構築された大規模言語モデル「Vicuna」をベースに開発されています。
Appleは、Ferretの性能を評価するために、「Ferret-Bench」というベンチマークツールも開発し、公開しています。
このベンチマークで、過去のデータをもとに他のマルチモーダル大規模言語モデル (MLLM)と比較したところ、Ferretは他のモデルと比較して20.4%程高い性能を示しました。
Appleは、このFerretのウェイト情報を12月14日に公開しました。
このウェイトのデータはCC-BY-NCライセンスでの提供となっており、研究目的でのみ利用可能です。
また、今回公開されたウェイト情報はVicunaのウェイトからの差分データのみなので、実装する際はVicunaのウェイトとFerretの差分データを元にFerretのウェイトを作成する必要があります。
今回は、このウェイト情報を用いてFerretを実行していようと思います。
まずは使い方から説明します。
Ferretの使い方
Ferretを実装して実行するためのスペック要件について、詳しい記載はなかったのですが、ベースLLMのVicunaが7Bの場合、約14GBのGPUメモリ、13Bの場合は28GBのGPUメモリ必要なので、同等かそれ以上のスペックが必要そうです。
今回は、この要件を満たすために、Google Colab ProでA100GPUを使用して実装と実行を行っていきます。
まずは以下のコマンドを実行してリポジトリのクローンを行い、ml-ferretのディレクトリに移動します。
!git clone https://github.com/apple/ml-ferret
!cd ml-ferret
次に、以下のコマンドで最新のpipをインストールします。
!pip install --upgrade pip
次に、以下のコマンドで必要なパッケージをインストールします。
!pip install -e .
ここまで完了したら、以下のコードでVicuna-7b-v1.3のモデルをロードします。
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("lmsys/vicuna-7b-v1.3")
model = AutoModelForCausalLM.from_pretrained("lmsys/vicuna-7b-v1.3")
次に、ferretの重みのオフセットをダウンロードして解凍します。
!wget https://docs-assets.developer.apple.com/ml-research/models/ferret/ferret-7b/ferret-7b-delta.zip
!unzip ferret-7b-delta.zip
ここまで完了したら、以下のコマンドでオフセットをVicunaの重みに適用します。
!python3 -m ferret.model.apply_delta \
--base lmsys/vicuna-7b-v1.3 \
--target ferret-7b-v1-3 \
--delta /content/ml-ferret/ferret-7b-delta
これでFerretの重みの作成は完了です。
ここからはFerretを実行する方法ですが、公式GitHubではGradio Web UIを使用する方法が紹介されていました。
方法は、以下のコマンドを順に実行し、URLにアクセスすると以下のようにGradio Web UIで使用できるようになります。
これで実装は完了です。
なお、Apple開発のマルチモーダルAI訓練用フレームワークである4Mについて詳しく知りたい方は、下記の記事を合わせてご確認ください。
→【4M】Apple開発のマルチモーダルAI訓練用フレームワークの仕組みを徹底解説
Ferretを実際に使ってみた
まずはあらかじめ用意されていた以下のデモを実行してみます。
What are the things I should be cautious about when I visit here? Tell me the coordinates in response.
ここを訪れる際に注意すべきことは?それに対する座標を教えてください。
結果はこのようになりました。
When visiting this location, you should be cautious about the water [0, 522, 998, 997] which might be deep or have strong currents.
Additionally, the wooden pier [218, 535, 809, 997] is a popular spot for fishing but be careful of the fish that might be jumping out of the water.
Lastly, the surrounding trees and mountains [0, 325, 279, 492] can be a home to wildlife, so be aware of your surroundings and respect the local ecosystem.
この場所を訪れる際は、水 [0, 522, 998, 997] が深かったり流れが強かったりする可能性があるので注意が必要だ。さらに、木製の桟橋 [218, 535, 809, 997] は釣りの人気スポットだが、水面から魚が飛び出してくるかもしれないので注意が必要だ。最後に、周囲の木々や山[0, 325, 279, 492]には野生動物が生息していることがあるので、周囲に気を配り、地元の生態系を尊重しよう。
画像を正確に認識して、注意すべきスポットとその理由を教えてくれていますが、座標は文章で示すのみで、画像内では示してくれなかったので、少しわかりにくいですね。
ここからは複数のパターンの画像とプロンプトを入力して、どのような結果になるか検証します。
Ferretの高い画像認識機能は本当なのか検証してみた
まずは以下の画像で検証します。
以下のように領域を指定します。
これで以下のプロンプトを入力します。
Are [region3] and [region4] the same meerkat?
[region3]と[region4]は同じミーアキャットですか?
結果はこのようになりました。
No, [233, 570, 361, 920] and [133, 751, 266, 863] are not the same meerkat.
The meerkat [233, 570, 361, 920] is standing while the one [133, 751, 266, 863] is sitting.
They have different postures and are not the same animal.
いいえ、[233, 570, 361, 920]と[133, 751, 266, 863]は同じミーアキャットではありません。[233, 570, 361, 920]のミーアキャットは立っていて、[133, 751, 266, 863]のミーアキャットは座っている。両者は異なる姿勢をしており、同じ動物ではない。
体がかぶって同一個体に見えるようなこの画像も、問題なく画像を認識して違う個体だとし、その座標と姿勢まで説明してくれました。
次は、以下のプロンプトを入力してみます。
Tell me the name of the animal in the image and the animal's staple food.
画像に写っている動物の名前とその動物の主食を教えて
結果はこのようになりました。
The animal in the image is a meerkat. Their staple food is grass. Meerkats are known for their black and white fur and their habit of standing on their hind legs while alert.
They are native to the deserts of Africa and are well-known for their unique appearance and behavior.
画像の動物はミーアキャット。主食は草である。ミーアキャットは黒と白の毛並みと、警戒しながら後ろ足で立つ習性で知られている。アフリカの砂漠に生息し、そのユニークな外見と行動でよく知られている。
ミーアキャットと正しく認識し、主食だけでなく習性や生息地といった情報まで出力してくれました。
次に、以下のローストビーフの画像を入力します。
以下のように領域を指定します。
以下のプロンプトを入力します。
Tell me the name of the dish in [region1] and how to prepare it.
[region1]の料理の名前と作り方を教えて
結果はこのようになりました。
The dish [65, 31, 954, 891] is called “steak and tomatoes.” To prepare it, you need to bake a thick steak and arrange it on a white plate.
You can also garnish it with tomatoes. Set the plate on a table and enjoy the dish.
[65, 31, 954, 891]の料理は、”ステーキとトマト “と呼ばれている。作り方は、分厚いステーキを焼いて白い皿に並べる。トマトを添えてもよい。お皿をテーブルの上に置いて、料理を楽しんでください。
結果は、ローストビーフだと認識できず、詳しい作り方も教えてくれませんでした。
正直これは人間であれば一目でローストビーフだと認識できるので、間違って認識したのは意外でした。
今回の検証の結果をまとめると、Ferretは高い認識能力を有しており、他のマルチモーダルLMMにはない領域指定機能で、自分が知りたい部分にフォーカスして質問することが容易だと感じました。
しかし、画像認識能力は完璧ではなく、間違って認識することもあるので、今後さらに強化されていくことに期待します。
なお、日本語特化型マルチモーダルAIであるJapanese Stable CLIPについて詳しく知りたい方は、下記の記事を合わせてご確認ください。
→【Japanese Stable CLIP】Stability AI開発の日本語特化型マルチモーダルAIを使ってみた!
まとめ
Ferretは、Appleが開発したマルチモーダル大規模言語モデルで、画像内の特定の領域を用いてクエリを実行する能力があることが特徴です。
領域の指定は「point」「box」「free-form shape」の3種類あり、テキストで「領域~には何がありますか?」と質問すると、その領域にある物体を認識して回答を出力してくれます。
Ferret-Benchという専用のベンチマークツールも開発され、それを用いたベンチマークの結果、Ferretは他のモデルと比較して20.4%程高い性能を示しました。
実際に使ってみた感想は、Ferretは完璧ではないものの高い認識能力を有しており、他のマルチモーダルLMMにはない領域指定機能で、自分が知りたい部分にフォーカスして質問することが容易だと感じました。
Ferretは、今後登場するApple製品やSiriに搭載される可能性があり、近い将来、映画「マイノリティ・リポート」で登場したようなインタラクティブな画像分析技術を搭載した製品が登場するかもしれませんね!
生成系AIの業務活用なら!
・生成系AIを活用したPoC開発
・生成系AIのコンサルティング
・システム間API連携
最後に
いかがだったでしょうか?
弊社では
・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
・ハルシネーション対策AIツールの開発
・自社専用のAIチャットボットの開発
などの開発実績がございます。
まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。
➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。
「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。
セミナー内容や料金については、ご相談ください。
また、サービス紹介資料もご用意しておりますので、併せてご確認ください。