admin管理员组

文章数量:1445122

多模态大模型驱动的类特斯拉FSD自动驾驶实践

近年来,多模态大模型层出不穷,但鲜有令人耳目一新的实际应用。那么,多模态大模型究竟能做什么?许多人最常见的用法是:对话时给它一张图片,它告诉你图片里有什么。但这仅仅是开始,真正的潜力远不止于此!本文将带你探索如何借助视觉大模型开发一个有趣的实际应用,驱动自动驾驶。

前言

前几天,我在 X(Twitter)上刷到一个非常有趣的视频。视频展示了一辆特斯拉在路口等待红灯,绿灯亮起后仍然静候对向车道的警车通过。整个视频采用第一视角,生动展现了特斯拉 FSD 自动驾驶系统的表现。

众所周知,特斯拉的自动驾驶系统依赖纯视觉方案。那么,是否可以基于这个视频,结合视觉大模型开发一个有趣的 demo 呢?让我们一探究竟!

.f10002.mp4?

1. 系统设计

尽管我们对特斯拉 FSD 自动驾驶系统的内部逻辑知之甚少,但可以推测其基本原理:先感知环境,基于感知数据进行决策,再输出指令进行执行。基于这一逻辑,我们设计了一个基于视觉大模型的小型自动驾驶方案(虽然只是一个 demo,但未来可能真的会出现类似的玩具!)。

2. 准备工作

认识视觉大模型

视觉大模型不仅能识别图像中的内容,还能像语言大模型(LLM)一样进行规划、反思和推理工作。因此,它在结合多模态输入时展现出了强大的潜力。

在本次实验中,我们采用了 BigModel 智谱 AI 大模型开放平台[1] 提供的免费在线视觉大模型 GLM-4V-Flash。它支持语言理解、图像理解和生成等多维度应用场景,能够快速实现实验目标。据了解 BigModel 的 Flash 系列免费模型全家桶上线,覆盖语言、图像理解、图像生成、视频生成,均可免费调用 API,多能力多维度应用场景,实现理想效果。

相关模型与链接:语言模型 GLM-4-Flash[2]、多模态理解模型 GLM-4V-Flash[3]、文生图模型 CogView-3-Flash[4]、文生视频模型 CogVideoX-Flash[5]

点击原文访问BigModel开放平台,登录平台后,进入控制台,点击右上角的钥匙图标即可生成 API Key,用于后续调用。

3. 实现过程

根据设计方案,我们的实现流程包括以下几个步骤:解析视频、调用 GLM-4V-Flash 进行感知与决策、以及将结果进行可视化输出。在此之前,我们需要初始化一下客户端。

代码语言:javascript代码运行次数:0运行复制
client = openai.OpenAI(
    api_key="你的智谱API KEY",
    base_url=";
)

3.1 视频读取

使用 OpenCV 从视频中逐帧读取图像。你可以通过以下命令安装 OpenCV:

代码语言:javascript代码运行次数:0运行复制
pip install opencv-python

通过以下代码读取视频和遍历视频帧:

代码语言:javascript代码运行次数:0运行复制
cap = cv2.VideoCapture(video_path)
while True:
    ret, frame = cap.read()
    ...
    assistant_reply = process_frame_with_model(frame, user_command)
    cv2.imshow("实时视频帧", frame)
    cv2.waitKey(1)

cap.release()
cv2.destroyAllWindows()

3.2 感知与决策

通过视觉大模型 GLM-4V-Flash 进行感知与决策。我们需要为大模型设定角色和任务,以便其理解当前的工作背景。按照我们之前的文章《敲黑板!吴恩达LLM Agent工作流Prompt精华全解析》,显然要给大模型设定一些角色和任务,这里按照大家自己的理解或者请大模型辅助编写。例如:

代码语言:javascript代码运行次数:0运行复制
sysmte_prompt = """
你是一套 Tesla 的 Full Self-Driving (FSD) 系统,负责实时处理车辆摄像头和传感器捕获的数据,以辅助自动驾驶决策。
你首先需要环境感知,其次根据感知的内容提供驾驶决策,最后输出清晰简介的指令。
你的职责包括:

### 环境感知:
- 分析实时传输的单帧图像,识别车道线、交通标志、红绿灯、行人、车辆和障碍物等。
....

### 决策支持:
- 根据目标物体的位置、车辆的当前速度和环境状态,评估是否需要立即采取行动(如停车、减速或变道)。
...

### 反馈输出:
- 输出清晰、简洁的驾驶环境描述...
- 返回格式示例:
{
  "objects": [
    {"label": "Traffic Light", "bbox": [50, 30, 100, 80], "distance": 25, "priority": "high"}
  ],
  "action": "stop"
}
"""

为了上传图像数据,我们需要将帧图像编码为 Base64 格式:

代码语言:javascript代码运行次数:0运行复制
def encode_image_from_frame(frame):
    _, buffer = cv2.imencode(".jpg", frame)
    return base64.b64encode(buffer).decode("utf-8")

然后,将图像和提示文本一并发送至大模型:

代码语言:javascript代码运行次数:0运行复制
def process_frame_with_model(frame, user_text=None):
    base64_image = encode_image_from_frame(frame)
    if user_text is None:
        user_text = "我目前行驶在右车道,请分析这张图像,告诉我当前环境的驾驶风险,并建议下一步行动。"
    messages = [
        {"role": "system","content": system_prompt},
        {"role": "user","content": [{"type": "text","text": user_text},{"type": "image_url","image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}}]}
    ]

    response = client.chatpletions.create(model="glm-4v-flash",messages=messages,temperature=0,)
    return response.choices[0].message.content

3.3 输出解析与可视化

从模型输出的 JSON 中提取关键信息,并将结果可视化在帧图像上:

代码语言:javascript代码运行次数:0运行复制
def parse_and_draw_response(frame, response_text):
    json_content = extract_json_from_response(response_text)
    response_data = json.loads(json_content)
    objects = response_data.get("objects", [])
    action = response_data.get("action", "")
    height, width, _ = frame.shape
    if action:
        frame_height, frame_width = frame.shape[:2]
        cv2.putText(frame, action, (frame_width // 2, frame_height // 2), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255), 3)
    ...绘制物体边框和标签...

4. 运行

在运行过程中,每帧图像都会被分析并生成对应的决策指令。以下是某一帧的输出示例:

代码语言:javascript代码运行次数:0运行复制
{
  "objects": [
    {
      "label": "Car",
      "bbox": [200, 150, 300, 250],
      "distance": 70,
      "priority": "medium"
    },
    {
      "label": "Traffic Light",
      "bbox": [400, 350, 500, 450],
      "distance": 120,
      "priority": "high"
    }
  ],
"action": "go"
}

你可以通过以下视频查看实际运行效果,其中红色字体显示了模型生成的行动指令。

.f10002.mp4?

5. 总结

通过本次实验,我们初步探索了多模态大模型在自动驾驶中的潜力。虽然这只是一个简单的 demo,但它展示了视觉大模型在环境感知、决策和指令输出方面的强大能力。未来,随着技术的不断发展,类似的方案或许能在实际应用中大放异彩!

参考资料

[1]

BigModel 智谱 AI 大模型开放平台: /

[2]

GLM-4-Flash:

[3]

GLM-4V-Flash:

[4]

CogView-3-Flash:

[5]

CogVideoX-Flash:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-01-08,如有侵权请联系 cloudcommunity@tencent 删除系统自动驾驶模型实践视频

本文标签: 多模态大模型驱动的类特斯拉FSD自动驾驶实践