VectorMapNet: End-to-end VectorizedHD Map Learning学习记录

这篇论文提出了一种端到端的地图学习方法,与之前工作HDMapNet不同,VectorMapNet无需进行后处理即可完成地图生成。

核心创新点:

本文将该问题构建为稀疏点集预测问题,每个语义元素由N_v个有序二维点列构成的折线表示。这种设置使得我们能够对地图元素之间的空间和拓扑关系进行建模,并强调地图元素的实例特征。

polyline(折线)优势:

  1. 高精地图通常由不同几何形状的元素混合组成,例如点、线、曲线和多边形。polyline是一种灵活的基元,可以有效地表示这些几何图形
  2. 折线顶点的顺序是编码地图元素方向信息的自然方式,这对于车辆规划至关重要;
  3. 折线表示已被下游自动驾驶模块广泛采用,例如运动预测

整体流程如下所示:

 图像和点云数据经过学习,获得BEV特征,由BEV特征进行类别和关键点检测,再通过类别,关键点和BEV特征(BEV特征图中没表示)生成折线点。

具体流程如下所示:

原始图像经过卷积层,逆透视变换形成图像特征,图像特征再和点云经过动态体素化的pointpillars提取到的点云特征叠加,形成BEV特征;再采用一个基于transformer的set prediction 检测器从BEV特征中学习地图元素的关键点和类别。最后是一个polyline折线生成器,基于前面获得的BEV特征和地图元素关键点和类别,生成地图元素详细的几何polyline。

总体来说,vectorMapNet分为三步,BEV feature 提取地图元素检测polyline生成。由于地图元素的结构位置和位置具有广泛的多样性,共同学习它们可能极具挑战性,因此基于bev feature建模Polylines分为两步,将该建模任务解耦为两部分:

1.场景级元素检测,通过预测元素关键点及其类别,来定位和分类所有的地图元素。

2.为检测到的每个地图元素生成对应的polyline顶点序列。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
补全以下代码private String cid;// Course id, e.g., CS110. private String name;// Course name, e.g., Introduce to Java Programming. private Integer credit;// Credit of this course private GradingSchema gradingSchema; //Grading schema of this course // enum GradingSchema{FIVE_LEVEL, PASS_FAIL} private Integer capacity;// Course capacity. private Integer leftCapacity;// Course capacity left. You should update the left capacity when enrolling students. private Set<Timeslot> timeslots;// One course may have one or more timeslots. e.g., a lecture in Monday's 10:20-12:10, and a lab in Tuesday's 14:00-15:50. public Course(String cid, String name, Integer credit, GradingSchema gradingSchema, Integer capacity) // constructor public void addTimeslot(Timeslot timeslot) //Record a timeslot for this course private Integer id;// A unique student id, should be an 8-digit integer: Undergraduates' ids should start with 1; Postgraduates' ids should start with 3. e.g., 12213199. private String name;// Student’s name private Map<Course, Grade> courses;// Enrolled courses, using Map structure to store course and its grade as a pair. Grade is an enum type enum Grade{PASS,FAIL,A,B,C,D,F}with an attribute: Double gradePoint protected Student(Integer id, String name) // constructor public abstract boolean canGraduate() // Checks if this student satisfies all the graduating conditions. Hint: you are allowed to change this abstract method into non-abstract to check if the student satisfies the common graduation conditions. public void enroll(Course course) // Tries to enroll the course, do some checks before enrolling. public void recordGrade(Course course, Grade grade)// Records the grade of a course that is current learning. public double getGpa() // Calculates the GPA for this student. public UndergraduateStudent(Integer id, String name)// constructor public boolean canGraduate() //Additional graduating conditions for undergraduate students public PostgraduateStudent(Integer id, String name)// constructor public boolean canGraduate() //Additional graduating conditions for postgraduate students
06-02
完整代码如下: ```java import java.util.*; public class Course { private String cid;// Course id, e.g., CS110. private String name;// Course name, e.g., Introduce to Java Programming. private Integer credit;// Credit of this course private GradingSchema gradingSchema; //Grading schema of this course // enum GradingSchema{FIVE_LEVEL, PASS_FAIL} private Integer capacity;// Course capacity. private Integer leftCapacity;// Course capacity left. You should update the left capacity when enrolling students. private Set<Timeslot> timeslots;// One course may have one or more timeslots. e.g., a lecture in Monday's 10:20-12:10, and a lab in Tuesday's 14:00-15:50. public Course(String cid, String name, Integer credit, GradingSchema gradingSchema, Integer capacity) { this.cid = cid; this.name = name; this.credit = credit; this.gradingSchema = gradingSchema; this.capacity = capacity; this.leftCapacity = capacity; this.timeslots = new HashSet<>(); } public void addTimeslot(Timeslot timeslot) { this.timeslots.add(timeslot); } } class Student { private Integer id;// A unique student id, should be an 8-digit integer: Undergraduates' ids should start with 1; Postgraduates' ids should start with 3. e.g., 12213199. private String name;// Student’s name private Map<Course, Grade> courses;// Enrolled courses, using Map structure to store course and its grade as a pair. Grade is an enum type enum Grade{PASS,FAIL,A,B,C,D,F}with an attribute: Double gradePoint public Student(Integer id, String name) { this.id = id; this.name = name; this.courses = new HashMap<>(); } public abstract boolean canGraduate(); // Checks if this student satisfies all the graduating conditions. Hint: you are allowed to change this abstract method into non-abstract to check if the student satisfies the common graduation conditions. public void enroll(Course course) { if (course.leftCapacity > 0) { this.courses.put(course, null); course.leftCapacity--; } } public void recordGrade(Course course, Grade grade) { if (this.courses.containsKey(course)) { this.courses.put(course, grade); } } public double getGpa() { double points = 0.0; int credits = 0; for (Map.Entry<Course, Grade> entry : this.courses.entrySet()) { Course course = entry.getKey(); Grade grade = entry.getValue(); if (grade != null) { double gradePoint = grade.gradePoint; int credit = course.credit; points += gradePoint * credit; credits += credit; } } return credits == 0 ? 0 : points / credits; } } class UndergraduateStudent extends Student { public UndergraduateStudent(Integer id, String name) { super(id, name); } public boolean canGraduate() { double gpa = this.getGpa(); int credits = 0; for (Map.Entry<Course, Grade> entry : this.courses.entrySet()) { Course course = entry.getKey(); int credit = course.credit; credits += credit; } return gpa >= 2.0 && credits >= 120; } } class PostgraduateStudent extends Student { public PostgraduateStudent(Integer id, String name) { super(id, name); } public boolean canGraduate() { double gpa = this.getGpa(); int credits = 0; for (Map.Entry<Course, Grade> entry : this.courses.entrySet()) { Course course = entry.getKey(); int credit = course.credit; credits += credit; } return gpa >= 3.0 && credits >= 30; } } class Timeslot { private String day;// Day of the week, e.g., Monday, Tuesday, etc. private String startTime;// Start time of the timeslot, e.g., 10:20. private String endTime;// End time of the timeslot, e.g., 12:10. public Timeslot(String day, String startTime, String endTime) { this.day = day; this.startTime = startTime; this.endTime = endTime; } } enum Grade { PASS("Pass", 4.0), FAIL("Fail", 0.0), A("A", 4.0), B("B", 3.0), C("C", 2.0), D("D", 1.0), F("F", 0.0); public String name; public double gradePoint; Grade(String name, double gradePoint) { this.name = name; this.gradePoint = gradePoint; } } enum GradingSchema { FIVE_LEVEL, PASS_FAIL } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值