CV / CLIP
CLIP ViT-B/32
reComputer RK3576およびRK3588上でRKNNにより高速化されたOpenAI CLIP ViT-B/32画像・テキスト照合モデル。
使用しているデバイスを選択してください。セットアップガイドとドキュメントがそれに応じて更新されます。
はじめる
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:latestREST API
REST API を使用して推論を実行します。以下のコマンドをコピーしてください。
curl http://localhost:8080/v1/chat/completions -d '{
"model": "clip-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'import requests
resp = requests.post(
"http://localhost:8080/v1/chat/completions",
json={"model": "clip-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())モデル詳細
クイックスタート
1. Dockerをインストールする
開発ボードで次のコマンドを実行してDockerをインストールします。
# インストールスクリプトをダウンロード
curl -fsSL https://get.docker.com -o get-docker.sh
# Aliyunミラーを使用してインストール
sudo sh get-docker.sh --mirror Aliyun
# Dockerを起動し、自動起動を有効化
sudo systemctl enable docker
sudo systemctl start docker2. プロジェクトを実行する(1コマンド、Webプレビュー)
本プロジェクトはWebブラウザからゼロショット画像分類と自然言語画像検索を提供し、画像・テキスト両エンコーダーをRKNNで実行します。
ステップA:イメージを取得
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:1クリックで実行
RKボード RK3588:
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
RKボード RK3576:
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. コマンドライン推論
python inference.py --platform rk3576 --model_dir model \
+ --file samples/dog_224x224.jpg \
+ --prompts 'a photo of a dog|a photo of a cat'RK3588のソースディレクトリでは--platform rk3588を使用してください。
🔌 APIドキュメント
Endpoint: POST /api/models/clip/predict
リクエストパラメータ(Multipart/Form-Data):
file:必須の画像ファイル。224 x 224に前処理されます。prompts:必須の候補ラベル。JSON配列、改行、または|区切りで最大32件。topk:任意の返却件数。1~32、既定値5。
使用例:
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|a photo of a cat' -F 'topk=2'レスポンス形式(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
}
]
}
}テキスト入力は20トークン固定です。検索API POST /api/models/clip/retrieveは1~32個のfiles、必須のtext、任意のtopkを受け取ります。現リリースは各プラットフォーム1組のみで、量子化バリアント選択はありません。
2. 自然言語画像検索インターフェース
エンドポイント: POST /api/models/clip/retrieve
リクエストパラメータ(Multipart/Form-Data):
files:1~32枚の画像を含む必須の繰り返しフィールド。text:必須の自然言語クエリ。topk:任意の返却件数(1~32)。
使用例:
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'3. システム設定インターフェース
現在の設定を取得
- Endpoint:
GET /api/config - Response:
{"topk": 5}
設定を更新
curl -X POST "http://127.0.0.1:8000/api/config" \
+ -H 'Content-Type: application/json' -d '{"topk": 3}'GET /api/healthで現在のプラットフォーム、モデルの準備状態、読み込まれたRKNNファイル、ランタイム機能を確認できます。OpenAPIドキュメントは/docsにあります。
🛠️ 開発者ガイド(本番環境向け推奨事項)
コードの説明
web_service.py:- Web API:ブラウザインターフェース、推論API、設定API、ヘルス状態、リクエスト検証を提供します。
task_runtime.py:- 画像とプロンプトを処理し、特徴を正規化して分類または検索の類似度を計算します。
inference.py: 単発のコマンドライン推論を提供します。
モデルファイル
| コンポーネント | ファイル |
|---|---|
| Image encoder | model/clip_images.rknn |
| Text encoder | model/clip_text.rknn |
| Vocabulary | model/clip_vocab.h |
モデルの変更
- 互換性のある変換済みファイルを
model/に配置し、表のファイル名を維持します。 - すべてのコンポーネントを同じ変換バンドルから用意し、既存の入出力と前処理規約を維持します。
- 公開前にRK3576とRK3588でWeb、REST API、コマンドラインの各経路を検証します。
ローカルイメージをビルドする
reComputer-RK-CVのルートで実行します。
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枚の画像とテキストクエリ。出力:正規化類似度スコアとランキング結果。