
aptpod Advent Calendar 2025 12月16日の記事を担当します、Roboticsグループの久保田です。
Roboticsグループとして、最近では四足歩行ロボットを扱う機会が増えており、自律走行だけでなく、ロボットに搭載されたセンサーデータの活用が重要なテーマになっています。 四足歩行ロボットには、カメラやLiDARといった視覚・環境認識系のセンサーが標準的に搭載されています。これらのセンサーデータは、aptpodの製品である intdash を用いることで、時系列データとして継続的に収集・蓄積 することができます。
intdashでは、ロボットから送信されるカメラ映像、センサ値などをリアルタイムに集約し、ダッシュボード上で可視化・再生・分析 することが可能です。そのため、データを「単に取得する」だけでなく、どのように解釈し、価値ある情報として可視化・活用するか が重要なテーマとなっています。
今回は、「見て理解できる」のかを検証するツールとして、生成AIを用いた画像認識、VLM(Vision-Language Model) の利用を紹介します。
ちなみにaptpodにおけるロボットの事例は以下のブログで紹介されていますのでご参照ください。
- 見て理解する
- VLM(Vision-Language Model)とは
- VLMのモデル
- Live VLM WebUIとは
- Live VLM WebUIのインストール
- Live VLM WebUIの使用
- まとめ
見て理解する
生成AIでも、画像と自然言語を同時に扱える VLM(Vision-Language Model) が登場し、
- 画像の内容を文章で説明する
- 画像に関する質問に答える
- 物体や状況を柔軟に認識する
といったことが可能になっています。 四足歩行ロボットにVLMを組み合わせれば、ロボットが“見て理解する”能力を持つことができ、 実現できれば、ロボット運用者にとっては次のような価値が期待できます。
- 現地に行かなくても状況把握が可能:映像とVLMによる説明を通じて、遠隔地からでもロボット周辺の状況を直感的に理解できる
- トラブル時の原因追跡:異常が発生した時点の映像・センサーデータ・認識結果を時系列で振り返ることで、原因分析が容易になる
- 実験ログの共有:取得したデータやVLMの推論結果をログとして共有し、チーム内でのレビューや知見の蓄積につなげられる
VLM(Vision-Language Model)とは
VLMとは、画像(Vision) と 言語(Language) を同時に扱うAIモデルの総称です。 従来の画像認識モデル(分類・検出)と異なり、VLMは
- 画像を文章として説明できる
- 自然言語の質問に対して画像を参照しながら回答できる
という特徴を持ちます。
一方で、VLMにはいくつか 苦手な点・注意点 も存在します。
- 数値の厳密性が求められるタスクは不得意:計測値や目盛りの正確な読み取りでは誤差が生じることがある
- 視点・照明・解像度の影響を受けやすい:撮影条件によって認識結果が大きく変わる場合がある
- リアルタイム性とのトレードオフ:高精度なモデルほど推論時間やGPUメモリを多く消費する
- 確信度の扱いが難しい:出力が自然言語であるため、結果の信頼性を別途評価する仕組みが必要になる
ロボット用途では、これらの特性を理解したうえで、人の判断を補助する役割としてVLMを活用する ことが重要になります。
VLMのモデル
VLMには複数の系統・モデルが存在しますが、ロボット用途では特に次の点が重要になります。
- 推論に必要なGPUメモリ
- 推論速度(fps)
- 多言語対応
- オープンソースかどうか
代表的なモデルとしては、次のようなモデルがあります。
- Alibaba Qwen
- Google Gemma 3
- Meta LLaMA
モデル比較: github.com
Live VLM WebUIとは
「どのモデルがどの程度の性能なのか」「Jetsonクラスのデバイスで実用になるのか」ということは、実際に試してみないとわかりません。 そこで今回使用したのが、NVIDIAがオープンソースで公開している「Live VLM WebUI」 です。
公式リポジトリ: github.com
Live VLM WebUIは、
- カメラ映像をリアルタイムに入力
- 複数のVLMモデルを切り替えて利用可能
- Webブラウザから操作できる
という特徴を持ち、 「モデル選定と性能評価」 を行うための実験環境として非常に便利です。
Live VLM WebUIのインストール
Live VLM WebUIは、Jetson向けにDockerベースで提供されています。
Ollamaインストール
ローカル環境でVLMを使用するためのプラットフォームであるOllamaをインストールします
$ curl -fsSL https://ollama.com/install.sh | sh >>> Installing ollama to /usr/local >>> Downloading Linux arm64 bundle ######################################################################## 100.0% >>> Downloading JetPack 5 components ######################################################################## 100.0% >>> Creating ollama user... >>> Adding ollama user to render group... >>> Adding ollama user to video group... >>> Adding current user to ollama group... >>> Creating ollama systemd service... >>> Enabling and starting ollama service... Created symlink /etc/systemd/system/default.target.wants/ollama.service → /etc/systemd/system/ollama.service. >>> NVIDIA JetPack ready. >>> The Ollama API is now available at 127.0.0.1:11434. >>> Install complete. Run "ollama" from the command line.
インストール後、systemdサービスで起動しています
VLMモデルインストール
使用するモデルをダウンロードします
$ ollama pull gemma3:4b pulling manifest pulling 9999d473417a: 100% ▕███████████████████████████████████████████████████████████████████▏ 7.8 GB pulling 715415638c9c: 100% ▕███████████████████████████████████████████████████████████████████▏ 269 B pulling d3ed60b91757: 100% ▕███████████████████████████████████████████████████████████████████▏ 6.0 KB pulling fcc5a6bec9da: 100% ▕███████████████████████████████████████████████████████████████████▏ 7.7 KB pulling fefc914e46e6: 100% ▕███████████████████████████████████████████████████████████████████▏ 32 B pulling 1506fb8a7284: 100% ▕███████████████████████████████████████████████████████████████████▏ 564 B verifying sha256 digest writing manifest success
Live VLM WebUIインストール
Live VLM WebUIをクローンします
$ git clone https://github.com/nvidia-ai-iot/live-vlm-webui.git Cloning into 'live-vlm-webui'... remote: Enumerating objects: 958, done. remote: Counting objects: 100% (29/29), done. remote: Compressing objects: 100% (18/18), done. remote: Total 958 (delta 11), reused 17 (delta 9), pack-reused 929 (from 1) Receiving objects: 100% (958/958), 7.52 MiB | 17.23 MiB/s, done. Resolving deltas: 100% (564/564), done.
クローンしたディレクトリに移動し、Dockerコンテナを起動します
$ ./scripts/start_container.sh
═══════════════════════════════════════════════════════════════
Live-VLM-WebUI Docker Container Starter
═══════════════════════════════════════════════════════════════
🔍 Checking Docker installation...
✅ Docker installed: Docker version 24.0.5, build 24.0.5-0ubuntu1~20.04.1
🔍 Detecting platform...
Architecture: aarch64
OS: Linux
Platform: NVIDIA Jetson Orin (L4T R35)
═══════════════════════════════════════════════════════════════
Select Docker Image Version
═══════════════════════════════════════════════════════════════
🔍 Fetching available versions...
Available versions:
[1] 0.2.1-jetson-orin
[2] 0.2.0-jetson-orin
[3] 0.1.1-jetson-orin
[4] 0.1.0-jetson-orin
💡 Tip: Use --version flag to skip this prompt
Example: ./scripts/start_container.sh --version 0.2.0
Select version number [1] or enter custom version:
✅ Selected version: 0.2.1-jetson-orin
🐳 Docker Image: ghcr.io/nvidia-ai-iot/live-vlm-webui:0.2.1-jetson-orin
Pull latest image from registry? (y/N):
📥 Pulling ghcr.io/nvidia-ai-iot/live-vlm-webui:0.2.1-jetson-orin...
0.2.1-jetson-orin: Pulling from nvidia-ai-iot/live-vlm-webui
895d322e8e59: Pull complete
d6b7b064c0ba: Pull complete
4be337001fb6: Pull complete
Digest: sha256:1cf1c89c868df8956f8f19ac7e0a05fd402d4f8ba173fc8924db8002cc83b160
Status: Downloaded newer image for ghcr.io/nvidia-ai-iot/live-vlm-webui:0.2.1-jetson-orin
ghcr.io/nvidia-ai-iot/live-vlm-webui:0.2.1-jetson-orin
✅ Using image: ghcr.io/nvidia-ai-iot/live-vlm-webui:0.2.1-jetson-orin
🚀 Starting container...
✓ jtop socket found: /run/jtop.sock
═══════════════════════════════════════════════════════════════
🐳 Docker Run Command:
docker run -d --name live-vlm-webui --network host --privileged --runtime nvidia -v /run/jtop.sock:/run/jtop.sock:ro ghcr.io/nvidia-ai-iot/live-vlm-webui:0.2.1-jetson-orin
═══════════════════════════════════════════════════════════════
46b16cc69f9ead521f678f38a8f0b1c1f967d008674df467529047b2cf9cf522
✅ Container started successfully!
🔍 Verifying jtop socket mount...
✓ jtop socket mounted correctly in container
═══════════════════════════════════════════════════════════════
🌐 Access the Web UI at:
Local: https://localhost:8090
Network: https://192.168.11.39:8090
═══════════════════════════════════════════════════════════════
📋 Useful commands:
View logs: docker logs -f live-vlm-webui
Stop container: docker stop live-vlm-webui
Remove container: docker rm live-vlm-webui
Dockerコンテナが起動し、表示されたURL (ここでは https://192.168.11.39:8090 )にて、Webブラウザでアクセスできます
Live VLM WebUIの使用
自宅で飼っているペットのオカメインコを対象として、VLMを使用してみました。
構成
今回の検証では、次の構成を使用しました。
- reComputer J4012(Jetson Orin NX 搭載)
- SwitchBot 見守りカメラ Plus(5MP)
- VLMモデル:Google Gemma 3
四足歩行ロボット Unitree Go2のDocking Stationに搭載されている Jetson Orin NX相当のホストで RTSPストリームのカメラ映像をLive VLM WebUIに入力し、VLMによる画像理解を試してみます。
画像を説明させる

カメラに写っている映像に対して
この画像を一文で説明してください
と指示すると、
鳥がその鳥かごの中で遊んでいる様子が、日本の障子模様の背景に写っています
といった内容を、自然な文章で説明してくれます
鳥の種類を説明させる

次に、
鳥は映っていますか。鳥の種類を教えてください
と質問すると、
写真に写っている鳥は、オカメインコである可能性が高いです。 特徴としては ・白と黒の模様 ・頭部が明るい色をしている ・丸い顔 などがあげられます。
といった情報を回答します。
温度計の読み取り

カメラに温度計を映し、
温度・湿度計はありますか。表示は上が気温、下が湿度です
と質問します。 VLMは、
はい、画像の温度計と湿度計の表示は以下の通りです ・気温:19.9℃ ・湿度:30%
デジタル表示を読み取り、温度・湿度を文章で回答してくれました。 OCR精度は高いです。
アナログ時計の読み取り

続いて、アナログ時計をカメラに映し、
この画像に時計は映っていますか。時計の時刻を読み取ってください
と質問しました。 VLMは、
時計の時刻は、12時21分です
と、自然言語で回答しました。 見た目は判断できますが、針の角度を読み取るような、角度を数値として厳密に扱う幾何的推論は不得意なようです。
モデル選定と性能評価
モデルをいろいろ試してみましたが、Jetson Orin NX 16GBではgemma3:4bが性能を期待できそうです。 1フレームの解析が8秒程度となりました。
まとめ
本記事では、「見て理解できる」のかを検証するツールとして、生成AIを用いた画像認識、VLM(Vision-Language Model) の利用について紹介しました。 VLMを活用することで、ロボットから送信されるカメラ映像、センサ値などを、より人に近い形で理解・活用できる可能性 が見えてきました。
また、Live VLM WebUIによって簡単に試行錯誤ができ、モデルの選定や性能評価が捗りそうです。 生成AIの評価をする際には、ぜひ参考にしてみてください
