此分支主要供参与leaderboard排名使用,介绍如何构建队伍,提交自己代码,此部分较为简单,主要是基本教学与演示;后续可以参考更多的开源代码进行学习等。

基本参与此榜单的大多都是学校和实验室,还是很少看到有公司比如waymo uber 等参与的,可能是... 他们已经有自己的数据集了

参考与前言

  1. Leaderboard排行榜https://leaderboard.carla.org/leaderboard/
  2. 关于Carla Challenge 2020年的介绍视频[包括比赛的路线和测试场景等]:https://www.bilibili.com/video/bv1r54y1V7wP
  3. Github链接等:https://github.com/carla-simulator/scenario_runner
  4. 官方场景测试网址说明:https://carla-scenariorunner.readthedocs.io/en/latest/openscenario_support/
  5. 我发现leaderboard直接是开源的状态,然后... 部分场景也写在这里面了:https://github.com/carla-simulator/leaderboard
  6. 关于OpenSCENARIO的中文版介绍
  7. OpenSCENARIO在carla内部支持的setup:https://carla-scenariorunner.readthedocs.io/en/latest/openscenario_support.html
  8. 自己收集整理的一些专家expert 用以做e2e同学收集数据,代码地址:https://github.com/Kin-Zhang/carla-expert 记得给个start! 此部分适合有经验 后续需要做此任务的同学

合作会议

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

每个赛道的第一名为被作为邀请嘉宾进行分享,然后其他选手根据提交的论文和技术报告来由组委会进行选择两组队伍作为邀请嘉宾

1. 简单介绍

传感器

可使用及其相关配置

截图至官网

相关指标

agent车辆的驾驶熟练程度可以用多个指标来表征。 对于这个排行榜,我们选择了一组指标来帮助理解驾驶的不同方面。 虽然所有路由都具有相同类型的度量,但它们各自的值是单独计算的。 具体指标如下:

  • Driving Score:\(R_iP_i\)

    排行榜的主要指标,作为路线完成和违规处罚之间的乘积;其中 \(R_i\) 为第\(i\)个路线的完成百分比,\(P_i\) 为第\(i\)个路线的违规处罚

  • Route completion: \(R\)

    此条路线的完成百分比,还有一个额外的违规,会影响路线完成的计算

    • Off-road driving — If an agent drives off-road,则在计算路线完成分数时将不考虑该路线的百分比

    此外,一些事件会中断模拟,阻止agent继续。 在这些情况下,正在模拟的路线将被关闭,排行榜将移动到下一个,正常触发它。

    • Route deviation — If an agent deviates more than 30 meters from the assigned route.
    • Agent blocked — If an agent doesn’t take any actions for 180 simulation seconds.
    • Simulation timeout — If no client-server communication can be established in 60 seconds.
    • Route timeout — If the simulation of a route takes too long to finish.
  • Infraction penalty:\(P=\prod_{j}^{\text {ped., ..., stop }}\left(p_{i}^{j}\right)^{\# \text { infractions }_{j}}\)

    排行榜跟踪多种类型的违规行为,该指标将agent触发的所有这些违规行为汇总为几何序列。 代理从理想的 1.0 基本分数开始,每发生一种违规行为,该分数就会减少。

    所有的违规行为分数汇总:

    • Collisions with pedestrians0.50.
    • Collisions with other vehicles0.60.
    • Collisions with static elements0.65.
    • Running a red light0.70.
    • Running a stop sign0.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"
    },

2. 开始配置

首先要明确,截止 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来操控车辆,整条路上会突然冒出来行人啥的

最后开到终点后,终端会给出结果,例如这样子:

3. 构建自己的agent

这一节太多了,而且也不是直接能构建出一个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来进行本地测试 → 提交云端测试 的一系列示意

4. 如何提交

首先为了让 CARLA 排行榜能够评估自身代码,它需要被封装在一个 docker 镜像中。在提交到云端前,先必须使用本地 docker 内的排行榜运行agent

而本地的docker制作也需要根据官方的dockerfile.master文件来决定,这里面默认情况下有的都是给leaderboard和scenario_runner用的,然后关于我们对这个环境的设置可以在 “BEGINNING OF USER COMMANDS” and “END OF USER COMMANDS” 之间搞

  1. FROM nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04

创建提交文件夹

所以根据前两步现在是文件夹是这样的,其中leaderboard和scenario_runner都是官方那边clone的 也就是第二步骤中有的,team_code也就是自身的代码和模型文件等,只要是代码运行需要的 都要放到里面来

制作本地docker

首先在这之前 我们需要在终端再次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了):

  1. 原dockerfile.master有pip upgrade的操作,但是!这是会报错的emm

    所以正确的做法是:1 直接不升级pip 放心没啥问题;2 修改一下dockerfile.master改一下,把pip版本升级限制在 21.0以下,默认会走到21.3所以会一直报错

    python 3.5 needs to match with pip3 version < 21.0

  2. rm -rf 找不到删除的地方

    删掉就行

  3. 缺少一个系统文件库: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

注册账号

更多详情见官网,以下为简易版:

  1. 注册登录:https://app.alphadrive.ai/teams

  2. 创新新队伍

  3. 走到carla的benchmark:https://app.alphadrive.ai/benchmarks/3/overview,然后点击apply carla leaderboard

  4. 电脑上进行alphadrive秘钥设置

    curl http://dist.alphadrive.ai/install-ubuntu.sh | sh -
  5. 登录,emmm 因为上一个秘钥是404的状态,这一个 我之前运行过,记得有点坑,但是忘记坑在哪里了 大概是一个双边认证的操作

    alpha login
    • 等上面密钥不是404了 我再试试 December 17, 2021 9:37 PM → 工作人员终于回信息了 已更新 January 30, 2022 10:47 AM

      密钥已过期,不知道是不是因为carla leaderboard停止了 但是安装alpha不应该过期才对呀

    也就是把现在终端显示的QKMB-LBSX填进去 然后就显示logged in了

  6. 然后认证完后,就可以提交啦,但是最好是在本地进行测试后

    alpha benchmark:submit  --split {2, 3} ${YOUR_DOCKERIMAGE_NAME}

    2是MAP赛道,3是SENSOR赛道,默认情况下 ${YOUR_DOCKERIMAGE_NAME} 一般是 leaderboard-user:latest.

    比如我投的就是MAP赛道,等待docker images push上去中

5. 结果示意

最后上传成功,就可以看到网页上有一个提交了:

这个其实是alphadrive那边提供的一个免费云上去运行你的docker,然后查看效果;一般呢,大多需要60小时以上,模型跑的越久/越好 可能出结果就越慢,结果不会很仔细,只会给一个这样的报告,不过也展示了较多的infraction是什么 从而进行更新

所以呢 建议最好大致都在本地进行一波调试,确认好了再上去,不然容易等着等着百忙,而且一个队伍限制了200小时的提交时长和20次的提交次数,不过通过自己的测试,我发现一个月基本还是不会超过的


赠人点赞 手有余香 ;正向反馈 才能更好开放记录

【排行榜】Carla leaderboard 排行榜 运行与参与手把手教学的更多相关文章

  1. requests+bs4爬取豌豆荚排行榜及下载排行榜app

    爬取排行榜应用信息 爬取豌豆荚排行榜app信息 - app_detail_url - 应用详情页url - app_image_url - 应用图片url - app_name - 应用名称 - ap ...

  2. 【仿真】Carla介绍与基本使用 [1] (附代码 基础版)

    0. 参考与前言 主要介绍无人驾驶的仿真环境CARLA,开源社区维护,以下为相关参考链接: Carla官方文档 建议后续找的时候 先按好版本号,有些功能/api 是新版本里有的 Carla官方gith ...

  3. 使用python landport库快速实现排行榜

    背景介绍 排行榜业务使用的频率实在太高了,各种活动都会使用排行榜.经过多次开发后我觉得实现一个简单的排行榜库,它能够完成当前我遇到的所有业务逻辑问题,也希望能够帮助到想要快速开发排行榜业务的同行. 我 ...

  4. 好好的 Tair 排行榜不用,非得自己写?20 行代码实现高性能排行榜

    TairZset 是阿里云自研的可实现任意维度 double 类型的分值排序的数据结构,借助 Tair 客户端同时可实现扩展性,即可以将计算任务分布至多个数据节点完成,实现分布式排行榜能力.本文介绍了 ...

  5. 爬虫实践---悦音台mv排行榜与简单反爬虫技术应用

    由于要抓取的是悦音台mv的排行榜,这个排行榜是实时更新的,如果要求不停地抓取,这将有可能导致悦音台官方采用反爬虫的技术将ip给封掉.所以这里要应用一些反爬虫相关知识. 目标网址:http://vcha ...

  6. 青瓷引擎之纯JavaScript打造HTML5游戏第二弹——《跳跃的方块》Part 10(排行榜界面&界面管理)

    继上一次介绍了<神奇的六边形>的完整游戏开发流程后(可点击这里查看),这次将为大家介绍另外一款魔性游戏<跳跃的方块>的完整开发流程. (点击图片可进入游戏体验) 因内容太多,为 ...

  7. net.sz.framework 框架 ORM 消消乐超过亿条数据排行榜分析 天王盖地虎

    序言 天王盖地虎, 老婆马上生孩子了,在家待产,老婆喜欢玩消消乐类似的休闲游戏,闲置状态,无聊的分析一下消消乐游戏的一些技术问题: 由于我主要是服务器研发,客户端属于半吊子,所以就分析一下消消乐排行榜 ...

  8. GooglePlay - 排行榜及支付接入

    前言 Google Play应用商店在国外Android市场中地位基本与AppStore在IOS中的地位一致,为此考虑国外的应用时,Android首要考虑的是接入GooglePlay的排行榜等支持. ...

  9. python3爬虫-爬取B站排行榜信息

    import requests, re, time, os category_dic = { "all": "全站榜", "origin": ...

  10. React全家桶构建一款Web音乐App实战(六):排行榜及歌曲本地持久化

    上一节使用Redux管理歌曲相关数据,实现核心播放功能,播放功能是本项目最复杂的一个功能,涉及各个组件之间的数据交互,播放逻辑控制.这一节继续开发排行榜列表和排行榜详情,以及把播放歌曲和播放歌曲列表的 ...

随机推荐

  1. Solution Set - 组合计数

    CF40E Number Table Link&Submission. 显然 \(n,m\) 奇偶性不同时无解.奇偶性相同时,假设有一行全为空,剩下每行至少一个有空,则除这些位置外没有限制的位 ...

  2. 创建第一个springmvc程序

    创建第一个springmvc程序 1.创建父项目文件,导入依赖,删除src文件夹 pom.xml文件 <dependencies> <dependency> <group ...

  3. golang 中 strings 包的 Replace 用法介绍笔记

    函数申明: func Replace(s, old, new string, n int) string 官方描述为: 返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换 ...

  4. 在jeecg-boot中密码的使用

    1.生成密码并入库保存 String id= SnowflakeIdUtil.nextValue();//生成id operatCompany.setId(id); String salt = oCo ...

  5. Django 安全性与防御性编程:如何保护 Django Web 应用

    title: Django 安全性与防御性编程:如何保护 Django Web 应用 date: 2024/5/13 20:26:58 updated: 2024/5/13 20:26:58 cate ...

  6. 移动通信网络中的 GTP 协议

    目录 文章目录 目录 GTP GTP-C 协议(GTP 控制面) GTP-U 协议(GTP 用户面) GTP' 协议(计费传输) GTPv2 Header GTP GTP(GPRS Tunnellin ...

  7. Selenium4自动化测试8--控件获取数据--上传、下载、https和切换分页

    10-上传 上传不能模拟用户在页面上选择本地文件,只能先把要上传的文件先准备好在代码里上传 import time from selenium.webdriver.support.select imp ...

  8. MySQL所有的主从同步架构搭建方式

    目录 一.前言 二.关于MySQL主从同步 三.部署规划 3.1 服务器规划 3.2 数据库目录规划 四.准备工具 五.四台机器上使用通用二进制包安装MySQL(以node7为例) 5.1 上传MyS ...

  9. java 项目的创建

    新建一个  Spring Initializr

  10. uni-app前端图表组件库,折线图横屏android失败的解决办法

    网址:https://www.ucharts.cn/v2/#/demo/index,需要登录,微信就可以 我在使用折现图时,业务需要把曲线图在点击全屏时横屏全屏显示.就做个全屏页面,点击后,把opti ...