Closed4

MiniGPT-v2を試す

kun432kun432

レポジトリをクローン

$ git clone https://github.com/Vision-CAIR/MiniGPT-4 && MiniGPT-4

READMEを見るとcondaを使っているが、うちはpyenv+pyenv-virtualenv環境でやる。

$ pyenv virtualenv 3.10.13 MiniGPT-4
$ pyenv local MiniGPT-4

CUDAのバージョンに合わせてまずpytorchをインストール。うちは11.8。

$ pip install torch==2.0.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

その他のパッケージをインストール

$ pip install \
    huggingface-hub==0.18.0 \
    matplotlib==3.7.0 \
    psutil==5.9.4 \
    iopath \
    pyyaml==6.0 \
    regex==2022.10.31 \
    tokenizers==0.13.2 \
    tqdm==4.64.1 \
    transformers==4.30.0 \
    timm==0.6.13 \
    webdataset==0.2.48 \
    omegaconf==2.3.0 \
    opencv-python==4.7.0.72 \
    decord==0.6.0 \
    peft==0.2.0 \
    sentence-transformers \
    gradio==3.47.1 \
    accelerate==0.20.3 \
    bitsandbytes==0.37.0 \
    wandb

LLama-2-7b-chat-hfをダウンロード

$ huggingface-cli login
$ git lfs install
$ git clone https://huggingface.co/meta-llama/Llama-2-7b-chat-hf

MiniGPT-4の事前学習済みチェックポイントをダウンロード。Googleドライブからのダウンロードはこのあたりを参考に。

$ FILE_ID=1aVbfW7nkCSYx99_vCRyP1sOlQiWVSnAl
$ FILE_NAME=minigptv2_checkpoint.pth
$ curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=${FILE_ID}" > /dev/null
$ CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)"  
$ curl -Lb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=${FILE_ID}" -o ${FILE_NAME}

モデルのパスを設定。どうやらフルパスで設定する必要がある様子。

minigpt4/configs/models/minigpt_v2.yaml(14行目)
  llama_model: "/SOMEWHERE/MiniGPT-4/Llama-2-7b-chat-hf"
eval_configs/minigptv2_eval.yaml(8行目)
  ckpt: '/SOMEWHERE/MiniGPT-4/minigptv2_checkpoint.pth'

では起動、、、と行きたいところだけど、ちょっと使いにくいので以下を修正する(必須ではない)

demo_v2.py
demo.launch(share=True, enable_queue=True)

デフォルトではshare=Trueになっているのでインターネット上に公開されてしまう。気にしない人はこのままで。個人的にはローカルで完結させたいので以下のように修正。

demo_v2.py
demo.launch(enable_queue=True, server_name="0.0.0.0", server_port=7860)

次、チャットウインドウが狭くてヒストリーが追いにくい。

demo_v2.py
             chatbot = gr.Chatbot(label='MiniGPT-v2')

ちょっと高さを広げておく。

demo_v2.py
             chatbot = gr.Chatbot(label='MiniGPT-v2', height=800)

ではいよいよ起動。初回起動時はなにかダウンロード(1.89GB)が行われるようでちょっと時間がかかる。

$ python demo_v2.py --cfg-path eval_configs/minigptv2_eval.yaml  --gpu-id 0

こんな感じ。

メモリ使用量はこんな感じ。

+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.30.02              Driver Version: 530.30.02    CUDA Version: 12.1     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                  Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf            Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 4090         On | 00000000:01:00.0 Off |                  Off |
|  0%   58C    P8               12W / 450W|  11329MiB / 24564MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A      1122      G   /usr/lib/xorg/Xorg                            9MiB |
|    0   N/A  N/A      1359      G   /usr/bin/gnome-shell                         10MiB |
|    0   N/A  N/A   1654734      C   ...pyenv/versions/MiniGPT-4/bin/python    11304MiB |
+---------------------------------------------------------------------------------------+
kun432kun432

MiniGPT-v2でできること

画像をアップロードして、なにかクエリを入力すれば、その画像についての対話ができる。

それ以外に、予め用意されているいくつかのタグを使うと物体検出等でよく行われるタスクを言語で指示できる

Grounding

"Grounding"は日本語にどう訳せばいいのかわからなかった。色々調べてみると"Visual Grounding"ともいうようなので、ChatGPTに聞いてみた。

「Visual grounding」とは、通常、自然言語処理(NLP)とコンピュータビジョン(CV)の領域で使用される用語で、テキストと画像の関連性や対応関係を特定し、理解することを指します。これは、特定のテキストが示す情報や言及が、画像内のどの部分に対応しているのかを確認する過程を意味します。

単純に言うと、画像を読み取った内容をテキスト化して、そのテキストを画像内のオブジェクトと紐づけるということだと理解した。

[grounding]タグを付けて画像を説明させると

  • 画像内の説明がテキストで行われる
  • 画像内のオブジェクトがバウンディングボックスでアノテートされる
  • テキストとオブジェクトがそれぞれ紐づけられる

となっているのがわかる。

Detection

[detection]タグを使うと、画像内からテキストで指定した物体を検出する。

Refer

Detectionと似ているけど、[refer]タグを使うと指定の物体の画像内での位置が返される。

Identity

[refer]タグで画像内の位置を指定すると、その領域内二検出された物体がテキストで返される。

VQA

Visual Question and Answeringだと思うけど、[vqa] タグを使うと画像に対する質問に回答する。回答は説明的なものではなくてシンプルな単語での回答になる。

kun432kun432

まとめ

7B でこのレベルはちょっとすごい。

このスクラップは2023/10/17にクローズされました