理解你的需求了。如果规则强制要求必须输出“对图像内容的自然语言描述”(图生文),那确实不能简单用预录制语音糊弄。
但关键在于:“图生文”不等于必须用几百亿参数的大模型。针对比赛场景,有轻量级本地方案可以实现。
核心结论
- 手机热点风险:即使只有2台设备,比赛现场几百个队伍的热点互相干扰,2.4GHz 信道会严重拥堵,延迟不可控(可能从200ms飙升到2秒+)。不建议作为比赛方案。
- 本地可行方案:RDK X5 可以运行轻量级多模态模型(如 MobileVLM、TinyVLM),虽然不能像 GPT-4V 那样描述得绘声绘色,但足以完成比赛要求的“识别并描述”(例如:“前方3米处有一个穿蓝色衣服的人形立牌”)。
方案一:本地轻量级 VLM 模型(推荐)
这是目前社区验证过最稳妥的方案,完全离线,延迟<500ms。
1. 可选模型(RDK X5 适配)
| 模型 | 参数量 | 显存占用 | 推理速度 (X5) | 描述能力 |
|---|---|---|---|---|
| MobileVLM-1.7B | 1.7B | ~2GB | 300-500ms | 基础物体识别+简单描述 |
| TinyVLM | 0.5B | ~1GB | 100-200ms | 关键词式描述 |
| Qwen-VL-Chat (量化版) | 7B (4bit) | ~4GB | 1-2s | 较详细,但可能超时 |
推荐优先级:MobileVLM-1.7B > TinyVLM > Qwen-VL
2. 部署步骤(以 MobileVLM 为例)
# 1. 下载模型(需在PC端准备)
git clone https://github.com/Meituan-AutoML/MobileVLM.git
cd MobileVLM
pip install -r requirements.txt
# 2. 导出 Horizon BPU 格式(需要天工开物工具链)
# 参考文档:https://developer.d-robotics.cc/model-zoo
hb_mapper convert --model mobilevlm_1.7b.onnx --output mobilevlm_1.7b.bin
# 3. 拷贝到板端
scp mobilevlm_1.7b.bin robot@<IP>:/home/robot/models/
# 4. 板端运行示例(Python)
import hb_dnn as dnn
from hb_cv import image_decoder
# 加载模型
model = dnn.load_model("/home/robot/models/mobilevlm_1.7b.bin")
# 推理
img = image_decoder.read_image("capture.jpg")
result = model.predict(img)
print(result.text) # 输出:"一个穿蓝色衣服的人站在走廊里"
3. 社区参考
- RDK X5 本地部署大模型 gemma4 - 里面有讨论轻量级 VLM 的替代方案
- 本科阶段最后一次竞赛 Vlog——8ResNet 模型的使用 - 参考模型加载和推理流程
方案二:混合方案(检测 + 模板生成)
如果轻量级 VLM 效果不理想,可以用目标检测 + 规则模板生成描述,延迟<100ms。
# 伪代码示例
def generate_description(detections):
"""
detections: [(class, confidence, x, y, w, h), ...]
"""
descriptions = []
for cls, conf, x, y, w, h in detections:
if cls == "person_cutout": # 人形立牌
distance = estimate_distance(w, h) # 根据像素大小估算距离
color = detect_dominant_color(x, y, w, h) # 提取主色调
desc = f"前方{distance:.1f}米处检测到{color}色人形立牌"
descriptions.append(desc)
return ";".join(descriptions) if descriptions else "未检测到目标"
# 输出示例:
# "前方2.5米处检测到蓝色人形立牌;右侧1.8米处检测到白色人形立牌"
优势:
- 完全可控,不会出现大模型“胡言乱语”
- 速度极快,适合实时比赛
- 可以针对比赛场景定制描述模板
关于手机热点的实测建议
如果你坚持要测试云端方案,请先做以下压力测试:
# 1. 在实验室模拟比赛环境(打开10个手机热点)
# 2. 持续ping测试
ping -c 100 8.8.8.8
# 3. 测试云端 API 延迟
import time
import requests
start = time.time()
response = requests.post("https://api.volcengine.com/...", json={...})
latency = time.time() - start
print(f"总延迟:{latency*1000:.0f}ms")
# 4. 连续测试50次,统计最大延迟和丢包率
经验值:
- 实验室单设备:200-400ms
- 比赛现场(预估):500ms - 3s+,丢包率 10-30%
最终建议
- 首选方案:在 RDK X5 上部署 MobileVLM-1.7B 或类似轻量级 VLM,实现本地图生文。
- 备选方案:用 YOLO 检测 + 规则模板生成描述,确保稳定性和速度。
- 不要依赖云端:即使测试时热点很稳,比赛现场的电磁环境完全不可预测。
- 立即行动:
- 去 Model Zoo 找现成的 VLM 模型
- 参考 RDK X5 本地部署大模型 帖子里的量化方案
- 加入管理员分享的交流群,直接问今年参赛队伍的实现方案
关键提醒:规则要求的“图生文”通常只要求基本描述(如“检测到什么人/物,在什么位置”),不需要文学性描述。轻量级模型完全够用,不要为了追求“完美描述”而冒险用云端。
如果需要具体的模型转换教程或代码示例,可以在社区新开一个帖子,带上你的硬件版本(X3/X5)和系统版本,会有专人帮你解答。