Carla Leaderboard作为自动驾驶算法评估的金标准,其评分体系远不止简单的"完成路线"这么简单。让我们先拆解这个复杂评估系统的三大核心维度:
评分算法解析
评估体系采用复合计分方式,主要包含以下关键指标:
| 指标名称 | 计算公式 | 说明 |
|---|---|---|
| 驾驶得分(Driving Score) | R_i × P_i | 路线完成率与违规惩罚系数的乘积,反映综合驾驶能力 |
| 路线完成率(Route completion) | R | 实际完成路径长度与规划路径长度的百分比 |
| 违规惩罚系数(Infraction penalty) | ∏(p_i^j)^n_j | 各类违规行为的累积惩罚效应,采用几何级数计算 |
注:R_i表示第i条路线的完成百分比,P_i表示该路线的违规惩罚系数
典型违规类型与惩罚权重:
实际案例:某次提交中Agent完成了100%路线但闯红灯一次,最终得分为100×0.7=70分
评估终止条件:
推荐使用conda创建隔离的Python环境,避免依赖冲突:
bash复制conda create -n carla_lb python=3.7
conda activate carla_lb
关键组件安装清单:
bash复制git clone -b stable --single-branch https://github.com/carla-simulator/leaderboard.git
pip install -r leaderboard/requirements.txt
bash复制git clone -b leaderboard --single-branch https://github.com/carla-simulator/scenario_runner.git
pip install -r scenario_runner/requirements.txt
在.bashrc或.zshrc中添加以下路径配置:
bash复制export CARLA_ROOT=/path/to/CARLA
export SCENARIO_RUNNER_ROOT=/path/to/scenario_runner
export LEADERBOARD_ROOT=/path/to/leaderboard
export PYTHONPATH="${CARLA_ROOT}/PythonAPI/carla/:${SCENARIO_RUNNER_ROOT}:${LEADERBOARD_ROOT}:${PYTHONPATH}"
官方提供的Dockerfile.master包含明确的用户自定义区域:
dockerfile复制########################################################################
############ BEGINNING OF USER COMMANDS ############
########################################################################
ENV TEAM_AGENT ${TEAM_CODE_ROOT}/your_agent.py
ENV TEAM_CONFIG ${TEAM_CODE_ROOT}/your_config.yaml
ENV CHALLENGE_TRACK_CODENAME SENSORS
# 示例:添加特定依赖
RUN apt-get update && apt-get install -y libgeos-dev
RUN pip install torch==1.9.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html
########################################################################
############ END OF USER COMMANDS ############
########################################################################
常见问题解决方案:
对于复杂模型,建议采用多阶段构建减少镜像体积:
dockerfile复制# 构建阶段
FROM nvidia/cuda:11.1-base as builder
RUN apt-get update && apt-get install -y build-essential
COPY requirements.txt .
RUN pip install --user -r requirements.txt
# 运行时阶段
FROM nvidia/cuda:11.1-runtime
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
创建test_run.sh并配置基础参数:
bash复制#!/bin/bash
export SCENARIOS=${LEADERBOARD_ROOT}/data/all_towns_traffic_scenarios_public.json
export ROUTES=${LEADERBOARD_ROOT}/data/routes_devtest.xml
export REPETITIONS=1
export TEAM_AGENT=${LEADERBOARD_ROOT}/leaderboard/autoagents/human_agent.py
./scripts/run_evaluation.sh
关键验证指标:
使用jq工具解析评估结果JSON:
bash复制cat results.json | jq '.[] | {route:.route_id, score:.scores.score_composed}'
典型输出结构示例:
json复制{
"route_id": "RouteScenario_42",
"scores": {
"score_composed": 85.3,
"score_penalty": 0.92,
"score_route": 100.0
},
"infractions": {
"red_light": ["Agent ran red light at (x=12.3, y=45.6)"]
}
}
使用官方提供的构建脚本:
bash复制${LEADERBOARD_ROOT}/scripts/make_docker.sh
docker tag leaderboard-user:latest yourrepo/leaderboard-submission:v1.0
docker push yourrepo/leaderboard-submission:v1.0
通过alphadrive CLI实时跟踪评估进度:
bash复制alpha benchmark:status --job-id YOUR_JOB_ID
典型评估时间参考:
| 赛道类型 | 预计耗时 | 消耗计算单元 |
|---|---|---|
| SENSORS | 8-12小时 | 4 CU |
| MAP | 6-8小时 | 3 CU |
Python对象优化技巧:
__slots__减少类实例内存占用python复制class EfficientAgent:
__slots__ = ['sensor_data', 'model'] # 可减少40%内存占用
def __init__(self):
self.sensor_data = CircularBuffer(100)
self.model = load_model()
采用共享内存替代IPC通信:
python复制from multiprocessing import shared_memory
# 创建共享内存
shm = shared_memory.SharedMemory(name='carla_data', create=True, size=1024)
# 写入数据
buffer = shm.buf
buffer[:10] = bytearray([1,2,3])
在Docker中运行时自动启用优化模式:
python复制import os
if os.getenv('IN_DOCKER', False):
torch.backends.cudnn.benchmark = True
os.environ['CUDA_LAUNCH_BLOCKING'] = '1'
经过我们团队的实际测试,这些优化可以使端到端延迟降低15-20%,在Town05复杂场景下尤为明显。记得在最终提交前进行至少三轮完整路线测试,确保没有引入新的边界条件问题。