当前位置:   article > 正文

CCF智能无人车比赛(国内绿洲科学实验云平台)心路历程+AWS Deepracer智能无人车比赛经验(附优秀代码re:lnvent 2018赛道)_绿洲无人车

绿洲无人车

PS: 本人2022年从学校组队参加CCF全国智能无人车大赛(re:lnvent 2018赛道),一开始是跟着学校用的绿洲科学实验云平台进行模型的训练,但是学校提供的免费训练时间一开始只有6h,小组成员都是从零开始,时间不知不觉就用完了,而训练出的小车模型却不是很理想,成绩在1min以外(因为一切都是未知的,每一次尝试都需要花费有限的训练时间,才能从其中得到经验以更进一步)。在这种较为不理想的情况下,我开始在网络上寻求经验,却意外的发现国内网站上的相关经验十分有限,搜寻起来十分困难,在连续几个晚上的信息检索和向主办方指导人员交流后,发现智能无人车的训练起源于国外的AWS平台,并且在AWS平台上每个新账号都可以有10h的免费训练时间,而创建账号只需要有一个信用卡(可绑定多个不同账号!!)和一个邮箱地址,也就是说,有一个信用卡和多个邮箱,就可以拥有数倍10h的训练时间,并且相互之间还可以进行模型的继承与转移,这无疑是一个更好的选择!!

 

  1. 无人车:绿洲云平台 VS亚马逊AWS平台

绿洲云平台是国内的无人车训练平台,知识内容和操作流程等与AWS平台相差无几,可以理解为汉化版的AWS Deepracer平台

区别:1(训练过程).AWS可以实时监控训练曲线并即时暂停,而绿洲云只有等结束才能看到训练曲线结果

         2.(收费情况)AWS主要收费包括 1.训练(分析) 3.5$/h  2.存储模型(费用很少,自己用一个月大概1毛左右) 0.023$/GB,采用分别计算收费的方式。 绿洲云平台则是将所有费用整合起来,只有在训练上收费,费用为35/h,分析存储等不额外收费

         3.(模型的转移)AWS的账号上,可以实现通过其中的S3桶的方式。 绿洲云平台上暂不支持模型转移

        2.  无人车训练基础(经验)

       一个模型的创建包括三个部分1.奖励函数 2.动作空间 3.超参数。 相关部分的基本概念在官方网站有更详细的讲解在这里就不赘述了,主要分享一下个人在训练模型中最常用到的几点。

①奖励函数,这是整个小车快慢的一个重要来源(但记住一定要搭配相应且合理的动作空间与训练时长),基本上看的是python代码的逻辑结构和策略调整,无编程基础的人也可以根据模板调整出合适的奖励函数。其中可以加入自己对于单一赛道(适用于单一赛道)的策略调整,也可以选择编译一个适应度更高(适用于许多赛道)的模型,当然也可以导入数学函数,

使得模型能更快拟合(达到速度和完成度的极限)

 

②动作空间,默认是离散型,每个赛道确实有不同的最佳离散型数值,但是较为单一且有限制(追求极限速度的可以尝试用log的可视化分析分析每个赛道的不同点的极限速度或角度,如这位大佬文章中所示)。本人常用的是连续型空间,采用的方法:在确定奖励函数的情况下,初始模型先设一个较小的最大速度+最小速度,然后逐步迭代,逐步增大最大和最小速度,以达到模型的极限

 

③超参数,本人还未尝试更改各个超参数的数值,但是其中最常用且感觉影响直观的就是batch size ,默认为32,这个参数的数值越大,模型在相同时间内训练就会迭代更多次,建议在初始模型训练时调大数值(如512)以更快达到极限,而在后面微调时则可以调小以降低改变量。

3   . 分析模型

在模型训练后提供的三条曲线图中,其中对于进一步训练最重要的判断依据为红线(分析or评估线),满值为100,若曲线图最后红线为100,此时的模型进行该赛道的分析结果全为100%完成度,所以红线与最终完成度直接挂钩。一般80以上的模型,其分析也会有2-3个以上的100%完成度(当分析5圈的情况下),这样的模型基本可保证0出界,若是有1-2次出界,也可以通过重复提交刷到0出界。

4    .小tips

       ①同一个模型在提交到相同比赛赛道时,每一次提交的成绩都会上下波动,其中完成度较高(出界少或者无出界)波动较小,在比赛的过程中可以通过重复提交的方式来尽量刷新掉出界,以此提高成绩(例,若分析结果中只有一次100%,在提交模型的过程中就可通过重复多次提交的方式令其三次都100%-快速且不出界)

 

5   实战案例分析(re:lnvent 2018赛道)

       模型1:最终成绩29s(赛制为三圈的计时赛,出界一次罚时3s)。

训练时间共2h,单圈(100%)最快为9.8s左右

     第一次训练如下,时长为1hae7a5af17e8740d0a28e00f212178728.png

865b73b20c414db391ae45b657df346e.png

当然,第一次训练出来的模型连一次完整的赛道都跑不完,不过这只是初始模型,在最后的红线评估有一个大的跃迁就是件好事,可以接着往下训练

 

下面是第二次训练(第一次的克隆,参数不变),时长为1h

bccf989a487c4b3da4eeb8b2e617e40b.png

c328099e7e584dc3809dad18fb7fefac.png

此时出现了100%完成率的情况,而且为9.865s,根据我之前说的重复提交方法,就可以在赛道里面提交出三次都不出界的成绩,预估为9.8×3,大约能达到29s

如下所示,用该模型进行提交

144718d98fe644ba9c0746dbf3beeb01.png

下面这个是同样的模型提交到了AWS四月线上公开赛的成绩,为前5%,共1728人,排名66,因为在前10%,晋级了5月的专业赛,还得到一份车手套装奖励

a716e73abd834f7aac985644369ffec5.png

540b46cfe3ac44b9a2826745b0dafa7b.jpeg

a095da461a8b4582845d3e0b9aaedbea.jpeg

 

其中值得注意的是,我提交的模型如上,训练的是2018赛道

41f6efd90489426e96983d79dd5dece6.png

 

而这次的AWS四月赛采用的是另一个赛道,如下图

9fd8eff0bd9647099665dd528f64a065.png

 

这样的差别可以说明,上面我训练出来的模型通用性较强,即使在不同赛道也能有较好成绩。下面是该模型的奖励函数代码,在这里分享给大家

  1. def reward_function(params):
  2. track_width = params['track_width']
  3. distance_from_center = params['distance_from_center']
  4. all_wheels_on_track = params['all_wheels_on_track']
  5. speed = params['speed']
  6. closest_waypoints = params["closest_waypoints"]
  7. SPEED_THRESHOLD = 2.0
  8. # Calculate 3 markers that are at varying distances away from the center line
  9. marker_1 = 0.1 * track_width
  10. marker_2 = 0.25 * track_width
  11. marker_3 = 0.5 * track_width
  12. # Give higher reward if the car is closer to center line and vice versa
  13. if distance_from_center <= marker_1:
  14. reward = 2.0
  15. elif distance_from_center <= marker_2:
  16. reward = 0.5
  17. elif distance_from_center <= marker_3:
  18. reward = 0.1
  19. else: reward = 1e-3 # likely crashed/ close to off track
  20. if not all_wheels_on_track:
  21. # Penalize if the car goes off track
  22. reward = 1e-3
  23. elif speed < SPEED_THRESHOLD:
  24. # Penalize if the car goes too slow
  25. reward = reward + 0.1
  26. else:
  27. # High reward if the car stays on track and goes fast
  28. reward = reward + 1.5
  29. if closest_waypoints[0] >= 0 and closest_waypoints[1] <= 16 or closest_waypoints[0] >= 111 and closest_waypoints[1] <= 117:
  30. speed = 3.0
  31. if all_wheels_on_track and (0.5 * track_width - distance_from_center) >= 0.05:
  32. reward = 2.0
  33. elif closest_waypoints[0] >= 87 and closest_waypoints[1] <= 103:
  34. speed = 2.6
  35. if all_wheels_on_track and (0.5 * track_width - distance_from_center) >= 0.05:
  36. reward = 2.0
  37. return float(reward)

 

 

 

模型2.  最终成绩为27.162s,赛制赛道同上,这次的模型采用了不同的训练策略和奖励函数(来自于大佬@Rambo.Fan的指导和分享),因为这次模型大部分来自这位前辈的指导,不是自己独立做出,所以在这里就不透露奖励函数的代码,但是这次模型的稳定性到了一个新的高度!!

              训练时长为大约6h,经过多次模型迭代

 

首先是初始模型的效果如下图

809d8cd7c7ea426ead329026ed43eb3b.png

d7580130f5b54098b6cfdc728b5d5874.png

4cb14d181e574b3cb0f134d65a00a345.png

其中为了快速达到完成度的100%,所以将速度范围设置得较小,为了保持红线一直在100,以达到快速拟合。

后面的几次迭代也仅仅是慢慢加大最大速度和最小速度,其中会一直保持红线为100,一直到了最后一个迭代,也就是该模型在速度和完成度上的一个相对极限

单圈平均为9.5s

da6ad037af6d4af1a0956273426b369d.png

c558c186fab249d98b21fca080030687.png

68d09f3b7a2442c7a60da0d17df5de73.png

该模型的稳定性很高,因为在奖励函数中导入了数学函数,可以帮助模型快速拟合

下面是在比赛中的提交成绩

3d2bb6fcb010414caed7fcb321cae57b.png

跟上一个模型一样,同样参加了AWS四月公开赛,并且以前5%的成绩晋级专业赛,获得了相应奖励,下面是目前在专业赛的排名,同样是用如上在2018赛道训练模型进行的参赛,再次说明这两个模型通用性较好

02d4a1de42be4c2c9a5440b7326137d5.png

 

 

模型3  最终成绩为26.797, 赛制赛道如上,单圈平均9.2,其具体训练过程同样来自前辈@Rambo.Fan,暂不展示出来

09d62552086745759fc9bc3d8b767527.png

 

 

后续还在积极尝试新的模型,如果能单圈突破到8s,就有可能成绩到24s,甚至还在其他赛道看到过成绩为22s的,估计单圈都突破7s了,真是人外有人啊,学习之路任重道远,本人还差得很多,也希望大家不要轻易放弃或者满足,争取取得更好的成绩!!!

Ps.本人现在还在进行2022年CCF全国智能无人车比赛南部赛区的线上巡回赛,5.31号出晋级结果,如果有相关问题可以私聊我,会积极与大家交流学习。

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/197091
推荐阅读
相关标签
  

闽ICP备14008679号