此分支主要供参与leaderboard排名使用,介绍如何构建队伍,提交自己代码,此部分较为简单,主要是基本教学与演示;后续可以参考更多的开源代码进行学习等。
基本参与此榜单的大多都是学校和实验室,还是很少看到有公司比如waymo uber 等参与的,可能是… 他们已经有自己的数据集了
合作会议
Carla leaderboard 排行榜每年都会和相关会议/期刊进行合作 作为某个workshop的一部分进行结果总结和方法分享,例如:The CARLA Autonomous Driving Challenge 2021 is organized as part of the Machine Learning for Autonomous Driving Workshop at NeurIPS 2021.
年份 | 会议 |
---|---|
2019 | CVPR |
2020 | NeurIPS |
2021 | NeurIPS |
2022 | TBD |
每个赛道的第一名为被作为邀请嘉宾进行分享,然后其他选手根据提交的论文和技术报告来由组委会进行选择两组队伍作为邀请嘉宾
可使用及其相关配置
截图至官网
agent车辆的驾驶熟练程度可以用多个指标来表征。 对于这个排行榜,我们选择了一组指标来帮助理解驾驶的不同方面。 虽然所有路由都具有相同类型的度量,但它们各自的值是单独计算的。 具体指标如下:
Driving Score: R i P i R_iP_i RiPi
排行榜的主要指标,作为路线完成和违规处罚之间的乘积;其中 R i R_i Ri 为第 i i i个路线的完成百分比, P i P_i Pi 为第 i i i个路线的违规处罚
Route completion: R R R
此条路线的完成百分比,还有一个额外的违规,会影响路线完成的计算
此外,一些事件会中断模拟,阻止agent继续。 在这些情况下,正在模拟的路线将被关闭,排行榜将移动到下一个,正常触发它。
30
meters from the assigned route.180
simulation seconds.60
seconds.Infraction penalty: P = ∏ j ped., ..., stop ( p i j ) # infractions j P=\prod_{j}^{\text {ped., ..., stop }}\left(p_{i}^{j}\right)^{\# \text { infractions }_{j}} P=∏jped., ..., stop (pij)# infractions j
排行榜跟踪多种类型的违规行为,该指标将agent触发的所有这些违规行为汇总为几何序列。 代理从理想的 1.0 基本分数开始,每发生一种违规行为,该分数就会减少。
所有的违规行为分数汇总:
0.50
.0.60
.0.65
.0.70
.0.80
.最后 一般在上传前,会自己运行一下本地的测试场景,可以通过记录来查看:每次发生上述任何一种情况时,都会记录一些详细信息,这些详细信息将显示为列表,供您查看路线的各个指标。 下面是一个路线的例子,其中agent既闯红灯 → 所以要乘以0.7的penalty,总分因为完成了整条路线 所以是100,然后100*0.7=70,所以最终这条线的分数为70分
{
"index": 53,
"infractions": {
"collisions_layout": [],
"collisions_pedestrian": [],
"collisions_vehicle": [],
"outside_route_lanes": [],
"red_light": [
"Agent ran a red light 3740 at (x=6.91, y=184.96, z=0.22)"
],
"route_dev": [],
"route_timeout": [],
"stop_infraction": [],
"vehicle_blocked": []
},
"meta": {
"duration_game": 611.9500091187656,
"duration_system": 589.3781015872955,
"route_length": 974.0864898139865
},
"route_id": "RouteScenario_53",
"scores": {
"score_composed": 70.0,
"score_penalty": 0.7,
"score_route": 100.0
},
"status": "Completed"
},
如果没看懂,再举一个例子
比如这个是 自己撞了两次别人的车,所以0.50.5=0.25的penalty,然后因为完成了路线 1000.25=25 所以分数为25分
{
"index": 10,
"infractions": {
"collisions_layout": [],
"collisions_pedestrian": [],
"collisions_vehicle": [
"Agent collided against object with type=vehicle.audi.etron and id=2373 at (x=242.536, y=88.114, z=0.196)",
"Agent collided against object with type=vehicle.audi.etron and id=2373 at (x=241.405, y=79.254, z=0.105)"
],
"outside_route_lanes": [],
"red_light": [
"Agent ran a red light 2236 at (x=249.4, y=46.07, z=0.2)"
],
"route_dev": [],
"route_timeout": [],
"stop_infraction": [],
"vehicle_blocked": []
},
"meta": {
"duration_game": 467.50000696629286,
"duration_system": 3596.4442558288574,
"route_length": 1128.3240988201576
},
"route_id": "RouteScenario_10",
"scores": {
"score_composed": 25.2,
"score_penalty": 0.252,
"score_route": 100.0
},
"status": "Completed"
},
首先要明确,截止 December 17, 2021 11:29 AM 时间时,CARLA排行榜支持的版本仅0.9.10.1
python配置
conda create -n py37 python=3.7
conda activate py37
cd CARLA_0.9.10.1 # Change ${CARLA_ROOT} for your CARLA root folder
pip3 install -r PythonAPI/carla/requirements.txt
下载leaderboard
cd CARLA_SUBMIT
git clone -b stable --single-branch https://github.com/carla-simulator/leaderboard.git
cd leaderboard # Change ${LEADERBOARD_ROOT} for your Leaderboard root folder
pip3 install -r requirements.txt
git clone -b leaderboard --single-branch https://github.com/carla-simulator/scenario_runner.git
cd scenario_runner # Change ${SCENARIO_RUNNER_ROOT} for your Scenario_Runner root folder
pip3 install -r requirements.txt
添加路径:在bashrc或者zshrc里进行添加路径
# << Leaderboard setting
export CARLA_ROOT=~/CARLA_0.9.10.1
export SCENARIO_RUNNER_ROOT=~/CARLA_SUBMIT/scenario_runner
export LEADERBOARD_ROOT=~/CARLA_SUBMIT/leaderboard
export PYTHONPATH="${CARLA_ROOT}/PythonAPI/carla/":"${SCENARIO_RUNNER_ROOT}":"${LEADERBOARD_ROOT}":"${CARLA_ROOT}/PythonAPI/carla/dist/carla-0.9.10-py3.7-linux-x86_64.egg":${PYTHONPATH}
至此 所需要的环境已经有了,可以手动测试一下是否有这个评估平台:
cd CARLA_0.9.10.1
./CarlaUE4.sh -quality-level=Epic -world-port=2000 -resx=800 -resy=600
再开一个terminal
cd ~/CARLA_SUBMIT/leaderboard
touch test_run.sh
chmod +x test_run.sh
gedit test_run.sh
复制这个进去:
# Parameterization settings. These will be explained in 2.2. Now simply copy them to run the test.
export SCENARIOS=${LEADERBOARD_ROOT}/data/all_towns_traffic_scenarios_public.json
export ROUTES=${LEADERBOARD_ROOT}/data/routes_devtest.xml
export REPETITIONS=1
export DEBUG_CHALLENGE=1
export TEAM_AGENT=${LEADERBOARD_ROOT}/leaderboard/autoagents/human_agent.py
export CHECKPOINT_ENDPOINT=${LEADERBOARD_ROOT}/results.json
export CHALLENGE_TRACK_CODENAME=SENSORS
./scripts/run_evaluation.sh
最后,运行一下这个脚本
./test_run.sh
最后的效果就是:
在窗口四 ,你可以使用WASD来操控车辆,整条路上会突然冒出来行人啥的
最后开到终点后,终端会给出结果,例如这样子:
这一节太多了,而且也不是直接能构建出一个agent,毕竟要完成这么个系统需要做很多步[如果不是端到端的哈,就是先完成目标检测→然后行为规划→局部规划→轨迹规划→控制器等模块],比如这篇开源的:
ICRA 2021: Pylot: A Modular Platform for Exploring Latency-Accuracy Tradeoffs in Autonomous Vehicles
官网详情见:https://leaderboard.carla.org/get_started/#3-creating-your-own-autonomous-agent
这块等后面单独开,等审核完了再按开源的给大家进行讲解
下一节 我们直接使用 开源出来的一个agent来进行本地测试 → 提交云端测试 的一系列示意
首先为了让 CARLA 排行榜能够评估自身代码,它需要被封装在一个 docker 镜像中。在提交到云端前,先必须使用本地 docker 内的排行榜运行agent
而本地的docker制作也需要根据官方的dockerfile.master
文件来决定,这里面默认情况下有的都是给leaderboard和scenario_runner用的,然后关于我们对这个环境的设置可以在 “BEGINNING OF USER COMMANDS” and “END OF USER COMMANDS” 之间搞
所以根据前两步现在是文件夹是这样的,其中leaderboard和scenario_runner都是官方那边clone的 也就是第二步骤中有的,team_code也就是自身的代码和模型文件等,只要是代码运行需要的 都要放到里面来
首先在这之前 我们需要在终端再次export所有需要的路径,因为制作docker的脚本里需要提取这些信息
export CARLA_ROOT=~/CARLA_0.9.10.1
export SCENARIO_RUNNER_ROOT=~/CARLA_SUBMIT/scenario_runner
export LEADERBOARD_ROOT=~/CARLA_SUBMIT/leaderboard
export TEAM_CODE_ROOT=~/CARLA_SUBMIT/team_code
然后还要进行自定义指明自己的team_code agent是什么,需要source一些什么东西:
在 ${LEADERBOARD_ROOT}/scripts/Dockerfile.master
找到leaderboard提供的dockerfile。这里已经设置了场景运行器和排行榜所需的所有依赖项。包括您的代理所需的依赖项和其他包。我们建议您在由标签*“BEGINNING OF USER COMMANDS”和“END OF USER COMMANDS”*分隔的区域中添加新命令。
展开查看代码,类似于这样在Dockerfile.master
申明自身的agent文件是哪个:
########################################################################################################################
########################################################################################################################
############ BEGINNING OF USER COMMANDS ############
########################################################################################################################
########################################################################################################################
ENV TEAM_AGENT ${TEAM_CODE_ROOT}/npc_agent.py
ENV TEAM_CONFIG ${TEAM_CODE_ROOT}/YOUR_CONFIG_FILE
ENV CHALLENGE_TRACK_CODENAME SENSORS
########################################################################################################################
########################################################################################################################
############ END OF USER COMMANDS ############
########################################################################################################################
########################################################################################################################
比如pylot的master file就长这样:相关issue
########################################################################################################################
########################################################################################################################
############ BEGINNING OF USER COMMANDS ############
########################################################################################################################
########################################################################################################################
RUN apt-get update && apt-get install -y clang libgeos-dev python-opencv libqt5core5a libeigen3-dev cmake qtbase5-dev python3-tk
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="/root/.cargo/bin/:${PATH}"
RUN rustup default nightly
RUN packages='wheel setuptools setuptools-rust fire' && pip install ${packages}
RUN git clone https://github.com/erdos-project/erdos.git && cd erdos && python3 python/setup.py install --user
RUN packages='absl-py cvxpy gdown lapsolver matplotlib==2.2.4 motmetrics numpy<1.17 open3d-python==0.5.0.0 opencv-python>=4.1.0.25 opencv-contrib-python>=4.1.0.25 pillow>=6.2.2 pytest scikit-image<0.15 scipy==1.2.2 shapely==1.6.4 tensorflow-gpu==1.15.4 torch==1.3.1 torchvision==0.2.1 filterpy==1.4.1 numba==0.50.0 scikit-learn==0.20.0 imgaug==0.2.8 nonechucks==0.3.1 cython' \
&& pip install ${packages}
ENV PYTHONPATH ${TEAM_CODE_ROOT}/:${TEAM_CODE_ROOT}/dependencies/:${PYTHONPATH}
ENV TEAM_AGENT ${TEAM_CODE_ROOT}/pylot/simulation/challenge/ERDOSAgent.py
ENV TEAM_CONFIG ${TEAM_CODE_ROOT}/pylot/simulation/challenge/challenge.conf
ENV CHALLENGE_TRACK_CODENAME MAP
ENV PYLOT_HOME ${TEAM_CODE_ROOT}/
RUN cd ${TEAM_CODE_ROOT}/dependencies/frenet_optimal_trajectory_planner && rm -r build && ./build.sh
RUN cd ${TEAM_CODE_ROOT}/dependencies/hybrid_astar_planner && rm -r build && ./build.sh
RUN cd ${TEAM_CODE_ROOT}/dependencies/rrt_star_planner && rm -r build && ./build.sh
########################################################################################################################
########################################################################################################################
############ END OF USER COMMANDS ############
########################################################################################################################
########################################################################################################################
再比如transfuser的Dockerfile USER部分长这样:
ENV PYTHONPATH "/workspace":${PYTHONPATH}
RUN apt-get update && apt-get install -y --no-install-recommends libgtk2.0-dev
RUN pip install -r /workspace/team_code/requirements.txt
ENV TEAM_AGENT ${TEAM_CODE_ROOT}/transfuser_agent.py
ENV TEAM_CONFIG ${TEAM_CODE_ROOT}/model_ckpt/transfuser
ENV CHALLENGE_TRACK_CODENAME SENSORS
更新变量TEAM_AGENT
以设置您的代理文件,即从 AutonomousAgent 继承的入口文件。不要更改路径“/workspace/team_code”的其余部分。如果您的代理需要配置文件进行初始化,请将变量TEAM_CONFIG
设置为配置文件。
确保您想要${HOME}/agent_sources.sh
获取的任何内容都在里面,因为不会调用添加到其他任何地方的源。在云中运行代理之前,此文件会自动获取。
最后,运行官方给的make_docker.sh
制作docker镜像:
${LEADERBOARD_ROOT}/scripts/make_docker.sh
这一步运行后 很慢的,几点小坑提醒(如果是走Plan A无需看 那个已经fix bugs了):
原dockerfile.master有pip upgrade的操作,但是!这是会报错的emm
所以正确的做法是:1 直接不升级pip 放心没啥问题;2 修改一下dockerfile.master改一下,把pip版本升级限制在 21.0以下,默认会走到21.3所以会一直报错
python 3.5
needs to match withpip3 version < 21.0
rm -rf 找不到删除的地方
删掉就行
缺少一个系统文件库:libgeos-dev
添加就行
相关:Pull request
export CARLA_SUBMIT_FOLDER=~/MMFN_SUBMIT
export CARLA_ROOT=~/CARLA_0.9.10.1
export SCENARIO_RUNNER_ROOT=${CARLA_SUBMIT_FOLDER}/scenario_runner
export LEADERBOARD_ROOT=${CARLA_SUBMIT_FOLDER}/leaderboard
export TEAM_CODE_ROOT=${CARLA_SUBMIT_FOLDER}/team_code
${LEADERBOARD_ROOT}/scripts/make_docker.sh
自己本地测试一下Docker内agent是否可以进行评估
docker run -it --net=host --gpus all leaderboard-user /bin/bash
./leaderboard/scripts/run_evaluation.sh
更多详情见官网,以下为简易版:
注册登录:https://app.alphadrive.ai/teams
创新新队伍
走到carla的benchmark:https://app.alphadrive.ai/benchmarks/3/overview,然后点击apply carla leaderboard
电脑上进行alphadrive秘钥设置
curl http://dist.alphadrive.ai/install-ubuntu.sh | sh -
登录,emmm 因为上一个秘钥是404的状态,这一个 我之前运行过,记得有点坑,但是忘记坑在哪里了 大概是一个双边认证的操作
alpha login
等上面密钥不是404了 我再试试 December 17, 2021 9:37 PM → 工作人员终于回信息了 已更新 January 30, 2022 10:47 AM
密钥已过期,不知道是不是因为carla leaderboard停止了 但是安装alpha不应该过期才对呀
也就是把现在终端显示的QKMB-LBSX
填进去 然后就显示logged in了
然后认证完后,就可以提交啦,但是最好是在本地进行测试后
alpha benchmark:submit --split {2, 3} ${YOUR_DOCKERIMAGE_NAME}
2是MAP赛道,3是SENSOR赛道,默认情况下 ${YOUR_DOCKERIMAGE_NAME}
一般是 leaderboard-user:latest.
比如我投的就是MAP赛道,等待docker images push上去中
最后上传成功,就可以看到网页上有一个提交了:
这个其实是alphadrive那边提供的一个免费云上去运行你的docker,然后查看效果;一般呢,大多需要60小时以上,模型跑的越久/越好 可能出结果就越慢,结果不会很仔细,只会给一个这样的报告,不过也展示了较多的infraction是什么 从而进行更新
所以呢 建议最好大致都在本地进行一波调试,确认好了再上去,不然容易等着等着百忙,而且一个队伍限制了200小时的提交时长和20次的提交次数,不过通过自己的测试,我发现一个月基本还是不会超过的
赠人点赞 手有余香 ;正向反馈 才能更好开放记录