見出し画像

画像や写真が読めるAI MiniGPT-4マルチモーダルLLMをローカルで動かす--続編

こちら最近本家がアップデートされて動きません。以下の記事で動かしてください。


8月の中頃にMiniGPT4の動かし方について解説した記事を書きました。まだ半月ほど前のことです。その時は使えるLLMがVicunav0〜1.3までで、非商用利用に限定されていました。当時からMeta社の最新版で商用利用可能なLlama2で利用する要求は出ていましたが、MiniGPT4で絵を理解するモデルの再学習が必要ななめ、原著者は明確に答えていませんでした。先週、新たに期待されていたLlama2で動くモデルが公開されたので、早速使ってみました。

論文執筆者ホームページは以下になります。
https://minigpt-4.github.io/

リポジトリのダウンロード、またはアップデート

Llmam2に対応するためにコードの一部が修正されています。
すでにMiniGPT4を動かしている方はgit pullでアップデートしてください。新規に使う方は、再度インストール手順を記載しておきます。

デモを動かしてみる
以下でデモを試すことが出来ます。

ローカルでの動かし方

システム構成
第12世代 i5
メモリー 32G
GPU   GForce-3060-12G
OS    Ubuntu20.04-JP

ソースコードはこちらです。

環境設定

git clone https://github.com/Vision-CAIR/MiniGPT-4.git
cd MiniGPT-4
conda env create -f environment.yml
conda activate minigpt4

モデルの準備

VicunaV1.3までのモデルは以前の記事を参考にしてください。ここでは最新のLlama2を動かします。

READ.MEの中ほ、の以下の表からLlama 2 Chat 7Bをダンロードします。

Downloadボタンを押すとHaggingHaceのMetaのリポジトリに飛びます。Llama2 をダウンロードするにはMetaの承認が必要なので、承認手続きをします。名前、メールアドレス、所属を記載して、利用規定確認チェックボックスにチェックを入れてサブミットボタンを押すと、間もなく登録したメールアドレスに承認通知が来て、ダウンロドを促してくれます。

Llama-2-7b-chat-hfフィルダーを作成し、
モデル名 Llama-2-7b-chat-hfのすべてのファイルをダウンロードします。

次にminiGPT4のチェックポイントのダンロードをします。

Llama2なので、Checkpoint Aligned with Llama 2 Chat 7BのDownloadからダンロードします。複数のCheckpoint を管理するためにCheckpoint フォルダーを作成しておきます。ダンロードしたファイルはこのホルダーい入れておきます。
MiniGPT-4内にはGit-Hubからクローンした各種のファイルとホルダー、作成したLlama-2-7b-chat-hfホルダ、Checkpoint ホルダが出来たことになります。Llama-2-7b-chat-hfホルダの構成はダウンロードファイルを入れておいたので以下のようになっているはずです。

Llama-2-7b-chat-hf
├── config.json
├── generation_config.json
├── pytorch_model.bin.index.json
├── pytorch_model-00001-of-00003.bin

minigpt4_llama2.yamlの設定
新たにminigpt4_llama2.yamlが作成されているので、説明通りに修正しておきます。
/minigpt4/configs/models/minigpt4_llama2.yamlの15行目にLLMのモデルへのPathを記載します。

model:
  arch: mini_gpt4

  # vit encoder
  image_size: 224
  drop_path_rate: 0
  use_grad_checkpoint: False
  vit_precision: "fp16"
  freeze_vit: True
  has_qformer: False

  # generation configs
  prompt: ""

  llama_model: "./Llama-2-7b-chat-hf/"

preprocess:
    vis_processor:
        train:
          name: "blip2_image_train"
          image_size: 224
        eval:
          name: "blip2_image_eval"
          image_size: 224
    text_processor:
        train:
          name: "blip_caption"
        eval:
          name: "blip_caption"

minigpt4_eval.yamlの修正

/eval_configs/minigpt4_eval.yamlの11行目にCheckpoint へのpathを記載します。
こっちらも、minigpt4_llama2_eval.yamlが出来ているので/eval_configs/minigpt4_llama2_eval.yamlの11行目にCheckpoint へのpathを記載します。

model:
  arch: mini_gpt4
  model_type: pretrain_llama2
  max_txt_len: 160
  end_sym: "</s>"
  low_resource: True
  prompt_template: '[INST] {} [/INST] '
  ckpt: './checkpoint/pretrained_minigpt4_llama2_7b.pth'


datasets:
  cc_sbu_align:
    vis_processor:
      train:
        name: "blip2_image_eval"
        image_size: 224
    text_processor:
      train:
        name: "blip_caption"

run:
  task: image_text_pretrain

デモUIの起動

Llama2では起動時に指定するコンフィグファイルが異なるので以下のコマンドで起動します。

python demo.py --cfg-path eval_configs/minigpt4_llama2_eval.yaml  --gpu-id 0

起動後に以下のURLにアクセスします。
http://127.0.0.1:7860
ブラウザー起動直後の画面

デモと同じ画面が表示されればOKです。

使ってみる

以前と同じ画像で試してみます。

プロンプト:explain this picture
This is an image of a garden in the spring. The garden is surrounded by a white picket fence and has a pathway running through it. The trees are in full bloom and there are several benches and a gazebo in the garden. The sky is blue and there are fluffy white clouds in it.
翻訳
春の庭園のイメージです。庭園は白いピケットフェンスで囲まれ、その中を小道が通っています。木々は満開で、庭園にはいくつかのベンチと東屋があります。空は青く、その中にふわふわの白い雲があります。

日本語で試してみました。

プロンプト:この絵の説明を日本語でしてください。
Sure, here is the explanation of the picture in Japanese:
この絵は春の庭です。白標の網が庭の中央にあり、桜の花が庭のすべての面に咲いています。庭の中央には、木製の床があり、庭の中には椅子や箱を置いています。空は白く、小さな白い雲が飛んでいます。
Translation:
This is a picture of a garden in the spring. The white fence in the middle of the garden is surrounded by blooming cherry blossoms on all sides. There is a wooden bench in the middle of the garden, and some chairs and boxes are placed inside. The sky is blue, and small white clouds are flying around.

なかなか日本語も上手く出来てます。

まとめ

Llama2が使えることで商用利用も可能になり、ローカルでも動かすことができるので、利用できる範囲が広がります。さらに日本語が以前よりも堪能になったこともありがたいですね。