CV / CLIP

CLIP ViT-B/32

reComputer RK3588

reComputer RK3576およびRK3588上でRKNNにより高速化されたOpenAI CLIP ViT-B/32画像・テキスト照合モデル。

36 ダウンロード
精度
RKNN

使用しているデバイスを選択してください。セットアップガイドとドキュメントがそれに応じて更新されます。

はじめる

OTA overlayroot が有効な Armbian 26.8.7 Gnome 以降: コンテナを実行する前に Docker のストレージを設定してください overlay のマウントエラーを防ぐために必要です。

デプロイ
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-clip:latest

REST API

REST API を使用して推論を実行します。以下のコマンドをコピーしてください。

Curl
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "clip-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "clip-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())

モデル詳細

OTA overlayroot が有効な Armbian 26.8.7 Gnome 以降: コンテナを実行する前に Docker のストレージを設定してください overlay のマウントエラーを防ぐために必要です。

クイックスタート

1. Docker のインストール

開発ボードで以下のコマンドを実行して Docker をインストールします:

bash
# Download installation script
curl -fsSL https://get.docker.com -o get-docker.sh
# Install using Aliyun mirror source
sudo sh get-docker.sh --mirror Aliyun
# Start Docker and enable auto-start on boot
sudo systemctl enable docker
sudo systemctl start docker

2. プロジェクトの実行(単一コマンド、デュアルモードプレビュー)

このプロジェクトは Web ブラウザー経由でゼロショット画像分類と自然言語による画像検索を提供します。画像エンコーダーとテキストエンコーダーはどちらも RKNN モデルとして動作します。

ステップ A:イメージの取得

bash
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3588-clip:latest
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3576-clip:latest

ステップ B:ワンクリックで実行

対象:RK3588:

bash
sudo docker run --rm --privileged --net=host \
    -e PYTHONUNBUFFERED=1 \
    -e RKNN_LOG_LEVEL=0 \
    -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-clip:latest

アクセス先: http://<Board_IP>:8000


対象:RK3576:

bash
sudo docker run --rm --privileged --net=host \
    -e PYTHONUNBUFFERED=1 \
    -e RKNN_LOG_LEVEL=0 \
    -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-clip:latest

アクセス先: http://<Board_IP>:8000

3. コマンドライン推論

候補プロンプトを使って画像を分類します:

bash
python inference.py --platform rk3576 --model_dir model \
    --file samples/dog_224x224.jpg \
    --prompts 'a photo of a dog|a photo of a cat'

自然言語のクエリを使って複数の画像を順位付けします:

bash
python inference.py --platform rk3576 --model_dir model \
    --files image1.jpg image2.jpg --query 'a red car' --topk 2

RK3588 のソースディレクトリで実行する場合は --platform rk3588 を使用してください。


🔌 API ドキュメント

サービスはゼロショット分類とテキストによる画像検索に個別の REST インターフェースを提供します。対話型 OpenAPI ドキュメントは http://<Board_IP>:8000/docs にあります。

1. ゼロショット画像分類

エンドポイント: POST /api/models/clip/predict

リクエストパラメータ(Multipart/Form-Data):

  • file:必須の画像ファイル。画像は 224 x 224 に前処理されます。
  • prompts:必須の候補ラベル。JSON 配列、改行区切り、または | 区切りのテキストを指定できます。最大 32 ラベルです。
  • topk:返すラベル数。省略可能で、範囲は 1~32、既定値は 5 です。

使用例:

bash
curl -X POST "http://127.0.0.1:8000/api/models/clip/predict" \
    -F 'file=@samples/dog_224x224.jpg' \
    -F $'prompts=a photo of a dog\na photo of a cat' \
    -F 'topk=2'

レスポンス形式(JSON):

json
{
  "success": true,
  "model": "clip",
  "platform": "rk3576",
  "inference_time_ms": 58.2,
  "result": {
    "mode": "classification",
    "image": {"width": 224, "height": 224},
    "candidate_count": 2,
    "predictions": [
      {"text": "a photo of a dog", "score": 0.97}
    ]
  }
}

2. 自然言語による画像検索

エンドポイント: POST /api/models/clip/retrieve

リクエストパラメータ(Multipart/Form-Data):

  • files:1–32 枚の画像を含む、繰り返し指定する必須フィールド。
  • text:必須の自然言語クエリ。
  • topk:返す一致結果の数。省略可能で、範囲は 1~32 です。

使用例:

bash
curl -X POST "http://127.0.0.1:8000/api/models/clip/retrieve" \
    -F 'files=@image1.jpg' \
    -F 'files=@image2.jpg' \
    -F 'text=a red car' \
    -F 'topk=2'

変換済みテキストエンコーダーの入力は固定 20 トークンなので、プロンプトとクエリは簡潔にしてください。類似度は正規化した画像特徴とテキスト特徴から計算します。

3. システム設定インターフェース

現在の設定の取得

  • エンドポイント: GET /api/config
  • レスポンス: {"topk": 5}

設定の更新

bash
curl -X POST "http://127.0.0.1:8000/api/config" \
    -H 'Content-Type: application/json' \
    -d '{"topk": 3}'

GET /api/health で現在のプラットフォーム、読み込み済み RKNN ファイル、ランタイムの機能を確認します。


🛠️ 開発者ガイド(本番環境向け推奨事項)

コードの説明

  • web_service.py:
    • Web API:ブラウザー画面、予測 API、検索 API、設定 API、ヘルスステータスを提供します。
    • リクエスト検証:アップロードは 64 MB、検索画像は 32 枚に制限します。
  • task_runtime.py:
    • 画像処理:入力を 224 x 224 にリサイズし、画像特徴を正規化します。
    • テキスト処理:clip_vocab.h でプロンプトをトークン化し、変換済みモデルの固定 20 トークン入力に合わせます。
    • 順位付け:分類と検索のために、正規化したコサイン類似度を計算します。
  • inference.py:単発のコマンドライン分類と検索を提供します。

モデルファイル

構成要素ファイル
画像エンコーダーmodel/clip_images.rknn
テキストエンコーダーmodel/clip_text.rknn
語彙model/clip_vocab.h

モデルの変更

  1. 互換性のある画像・テキストエンコーダーの .rknn ファイルを model/ に配置し、上記のファイル名を維持します。
  2. 両エンコーダーと語彙は同じ変換バンドルのものを使用します。
  3. 配備前に、置換後も 224 x 224 の画像入力と固定 20 トークンのテキスト入力仕様を満たすことを確認します。

上流プロジェクトは現在、各プラットフォームに 一組のモデルバンドルを提供しています。二つのエンコーダーはパイプラインの構成要素であり、量子化サイズの選択肢ではありません。このリリースにモデルバリアントのパラメータはありません。

ローカルイメージのビルド

reComputer-RK-CV のルートディレクトリから実行します:

bash
docker build -f docker/rk3576/clip.dockerfile \
    -t rk3576-clip:local src/rk3576_clip

docker build -f docker/rk3588/clip.dockerfile \
    -t rk3588-clip:local src/rk3588_clip

入力と出力

入力:画像と候補プロンプト、または最大32枚の画像とテキストクエリ。出力:正規化類似度スコアとランキング結果。