2023年4月

AWS DeepRacer 概念和术语

AWS DeepRacer 建立在以下概念的基础上,并使用以下术语。

AWS DeepRacer 服务

AWS DeepRacer 是一项 AWS Machine Learning(亚马逊云机器学习) 服务,用于探索以自动驾驶赛车为重点的强化学习。AWS DeepRacer 服务支持以下功能:

  1. 在云端训练强化学习模型。
  2. 在 AWS DeepRacer 控制台中评估经过训练的模型。
  3. 提交训练后的模型用于模拟比赛,并在符合要求时,将成绩发布到相关活动的排行榜。
  4. 克隆经过训练的模型以继续训练以提高性能。
  5. 下载经过训练的模型工件以上传到 AWS DeepRacer 车辆。
  6. 将车辆置于物理轨道上进行自动驾驶,并评估模型的实际性能。
  7. 通过删除不需要的模型来消除不必要的费用。(对的除了初始的免费套餐,要继续想用亚马逊的机器学习服务,还得付费,不过根据使用时间收费,很合理)

AWS DeepRacer

“AWS DeepRacer” 可以指三种不同的车辆:

  • 虚拟赛车可以采用原始 AWS DeepRacer 设备、Evo 设备或通过参加 AWS DeepRacer
    联赛虚拟巡回赛获得的各种数字奖励的形式。您还可以对虚拟汽车进行更改。
  • 最初的 AWS DeepRacer 设备是 1/18
    比例的物理模型汽车。它有一台车载摄像机和一个板载计算模块。计算模块运行推理是为了自己沿着轨道行驶。计算模块和车辆底盘由分别称为计算电池和驱动电池的专用电池供电。
  • AWS DeepRacer Evo
    设备是带有可选传感器套件的原始设备。该套件包括一个额外的摄像头和激光雷达(光探测和测距),允许汽车检测自身后方和侧面的物体。该套件还包括一个新外壳。

强化学习

强化学习是一种机器学习方法,它侧重于代理的自主决策,以便通过与环境的交互来实现特定目标。在强化学习中,学习是通过反复试验实现的,训练不需要带标签的输入。训练依赖于奖励假设,该假设认为所有目标都可以通过在动作序列之后最大限度地提高未来的奖励来实现。在强化学习中,设计奖励函数很重要。精心设计的奖励功能可以让代理做出更好的决策。

对于自动驾驶赛车,代理是一个车辆。环境包括行驶路线和交通状况。目标是让车辆快速到达目的地而不会发生事故。使用积分来奖励安全快速地行驶至目的地的行为。对于危险和破坏性的驾驶通过扣分进行惩罚。

为了鼓励在培训期间学习,必须允许学习主体有时采取可能不会带来回报的行动。这被称为勘探和开采权衡。它有助于减少或消除代理人可能被误导到虚假目的地的可能性。

有关更多信息,请参阅 Wikipedia 上更正式的强化学习定义。

强化学习模型

强化学习模型是代理在其中发挥作用的环境,它建立了三件事:代理拥有的状态、代理可以采取的行动以及通过采取行动获得的奖励。代理决定其行动的策略被称为策略。该策略将环境状态作为输入并输出要采取的操作。在强化学习中,策略通常由深度神经网络表示。我们将其称为强化学习模型。每个训练作业均会生成一个模型。即使训练作业提前停止,也可以生成模型。模型是不可变的,这意味着它在创建后不能被修改和覆盖。

AWS DeepRacer 模拟器

AWS DeepRacer 模拟器是基于 AWS 构建的虚拟环境, RoboMaker 用于可视化培训和评估 AWS DeepRacer 模型。

AWS DeepRacer 车辆

请参阅 AWS DeepRacer。

AWS DeepRacer 汽车

这种类型的 AWS DeepRacer 车辆是 1/18 比例的模型车。

排行榜

排行榜是 AWS DeepRacer 车辆在 AWS DeepRacer 联赛赛事中的表现排名列表。比赛可以是在模拟环境中进行的虚拟赛事,也可以在现实环境中进行的物理赛事。绩效指标取决于比赛类型。它可以是 AWS DeepRacer 用户提交的最快单圈时间、总时间或平均单圈时间,这些用户在与给定赛道相同或相似的赛道上评估了自己的训练模型。

如果一辆车连续完成三圈,则有资格在排行榜上名列前茅。最先完成的连续三圈的平均单圈时间将提交到排行榜。

机器学习框架

机器学习框架是用于构建机器学习算法的软件库。AWS 支持的框架 DeepRacer 包括 Tensorflow。

策略网络

策略网络是指训练后的神经网络。策略网络将视频图像作为输入,并预测代理的下一步行动。根据此算法,它还可以评估代理的当前状态的值。

优化算法

优化算法是用于训练模型的算法。对于监督训练,通过使用更新权重的特定策略最小化损失函数来优化算法。对于强化学习,通过使用特定的奖励函数最大化预期的future 奖励来优化算法。

神经网络

神经网络(也称为人工神经网络)是一组连接的单元或节点,用于建立基于生物系统的信息模型。每个节点都被称为人工神经元,它模仿生物神经元,因为它接收输入(刺激),如果输入信号足够强(激活)就会被激活,并产生基于输入和激活的输出。它被广泛用于机器学习,因为人工神经网络可以用作任何函数的通用近似值。教机器学习变为为为给定输入和输出找到最佳函数近似值。在深度强化学习中,神经网络代表策略,通常被称为策略网络。培训政策网络等于反复执行步骤,这些步骤涉及根据现行政策生成经验,然后利用新产生的经验优化政策网络。该过程将继续,直到某些性能指标符合要求的标准。

超参数

超参数是控制神经网络训练性能的算法相关变量。一个示例超参数是学习率,它控制在每一步学习中计入多少新体验。学习率越高,训练速度越快,但可能会使训练后的模型质量降低。超参数是经验性的,需要对每次训练进行系统调整。

AWS DeepRacer 追踪

轨道是 AWS DeepRacer 车辆行驶的路径或路线。轨道可以存在于模拟环境中,也可以存在于现实世界的物理环境中。您可以使用模拟环境在虚拟赛道上训练 AWS DeepRacer 模型。AWS DeepRacer 控制台提供虚拟轨道。您使用真实环境在物理赛道上运行 AWS DeepRacer 车辆。AWS Le DeepRacer ague 为赛事参与者提供物理赛道供他们竞争。如果您想在任何其他情况下运行 AWS DeepRacer 车辆,则必须创建自己的物理赛道。要详细了解如何创建自己的赛道,请参阅建立您的物理赛道。

奖励函数

奖励函数是学习模型中的一种算法,它告诉代理执行的操作是否导致:

  • 一个应该得到加强的好结果。
  • 中立结果。
  • 一个应劝阻的糟糕结果。

奖励功能是强化学习的关键部分。它通过激励特定行为而不是其他行为来决定代理人学习的行为。用户使用 Python 提供奖励功能。优化算法使用此奖励函数来训练强化学习模型。

经验情节

体验事件是指代理从给定起点跑到完成赛道或离开赛道,从环境中收集经验作为训练数据的时期。不同的情节可以有不同的长度。这也被称为剧集或产生经验的剧集。

经验迭代

体验迭代(也称为经验生成迭代)是每次策略迭代之间的一组连续体验,用于更新策略网络权重。在每次体验迭代结束时,收集的剧集将添加到体验重播或缓冲区中。可以在训练的超参数之一中设置大小。神经网络通过使用随机体验样本进行更新。

策略迭代

策略迭代(也称为策略更新迭代)是指在梯度上升期间通过随机抽样的训练数据来更新策略神经网络权重的任意次数。单次遍历训练数据以更新权重也称为纪元。

训练作业(training job)

训练作业是一种工作负载,用于训练强化学习模型并创建经过训练的模型工件来进行推理。每个训练作业都有两个子流程:

启动代理以遵循当前策略。该特工在多个剧集中探索环境并创建训练数据。此数据生成本身是一个迭代过程。

应用新的训练数据来计算新的策略梯度。更新网络权重并继续训练。重复步骤 1,直到满足停止条件。

每个训练作业会生成一个训练模型,并将模型构件输出到指定的数据存储。

评估作业

评估作业是测试模型性能的工作负载。训练任务完成后,通过给定的指标来衡量性能。标准 AWS DeepRacer 性能指标是代理人在赛道上完成一圈所花费的行驶时间。另一个指标是完成一圈所占的百分比。

赛车赛事术语

AWS DeepRacer 赛车赛事使用以下概念和术语。

联赛/比赛

在 AWS DeepRacer 联赛赛事的背景下,联赛和比赛这两个术语与比赛结构有关。 AWS赞助 AWS DeepRacer 联赛,这意味着我们拥有、设计和运营它。比赛有开始和结束日期。

赛季

比赛可以在随后的几年中重演。我们将这些季节称为不同的季节(例如,2019 赛季或 2020 赛季)。规则可能因季节而异,但通常在一个赛季内保持一致。AWS DeepRacer 联赛的条款和条件可能因季节而异。

虚拟电路

虚拟巡回赛是指 AWS DeepRacer 联赛赛季AWS期间在 AWS DeepRacer 控制台中赞助的比赛。

事件

根据规则的定义,赛事是指您可以参加比赛的 AWS DeepRacer 联赛。活动有开始和结束日期。虚拟电路事件通常持续一个月。一个赛季中可能有许多赛事,有些规则可能会发生变化,例如我们如何对参加赛事的人进行排名、选择谁获胜以及之后会发生什么。

比赛类型

所有赛车手都可以参加计时赛 (TT)、物体回避 (OA) 或 head-to-bot (H2B) 比赛。每种比赛类型都将指定圈数和赛车手的排名方式。

Nationl He

全国赛季排名是指赛车手在本国其他赛车手中的排行榜排名。所有赛车手都可以在每月的虚拟比赛中与自己国家的其他赛车手竞争。

地区赛季排名

区域赛季排名是指赛车手在所在地区其他赛车手中的排行榜排名。

世界锦标赛

AWS DeepRacer 联赛的虚拟巡回赛月度排行榜按国家和地区划分。每个地区的顶级赛车手将有机会获得参加 reAWS: Invent 世界锦标赛的资格。

使用 AWS DeepRacer探索强化学习

强化学习(特别是深度强化学习)已被证明可有效解决一系列自主决策问题。它在金融交易、数据中心冷却、车队物流和自动驾驶赛车等领域都有应用。

强化学习有可能解决现实问题。但是,由于其广泛的技术范围和深度,它的学习曲线很艰难。现实世界的实验需要你建造一个物理代理,比如自动驾驶赛车。它还要求您保护物理环境,例如行车道或公共道路。环境可能是成本高昂的、危险的和耗时的。这些要求不仅仅是理解强化学习。

为了帮助缩短学习时间,AWS DeepRacer 通过三种方式简化了流程:

  • 在训练和评估强化学习模型时提供 step-by-step 指导。该指南包括预定义的环境、状态和操作,以及可自定义的奖励功能。
  • 提供模拟器来模拟虚拟代理和虚拟环境之间的交互。
  • 使用 AWS DeepRacer 车辆作为物理代理。使用车辆在物理环境中评估训练后的模型。这与真实的使用案例非常相似。

如果你是一位经验丰富的机器学习从业者,你会发现 AWS DeepRacer 是一个很好的机会,可以在虚拟和物理环境中为自主赛车构建强化学习模型。总而言之,使用 AWS DeepRacer 为自主赛车创建强化学习模型,步骤如下:

  1. 为自动驾驶比赛训练自定义的强化学习模型。通过使用与 SageMaker AWS 集成的 AWS DeepRacer 控制台来完成此操作 RoboMaker。
  2. 使用 AWS DeepRacer 模拟器评估模型并在虚拟环境中测试自动赛车。
  3. 将经过训练的模型部署到 AWS DeepRacer 模型车辆,在物理环境中测试自动驾驶赛车。

简单讲就是亚马逊提供的一个深度学习平台,提供有限的免费使用资源
透过deepracer这个全自动驾驶的小车这个实体以及虚拟的云服务构成了一个很不错的教育学习平台
非常适合学习深度学习、自动驾驶技术

AWS DeepRacer 是一款完全自主的 1/18 比例赛车,由强化学习驱动。
它包括以下组件:
OIP-C.jpeg

AWS DeepRacer 控制台:一种 AWS Mac hine Learning 服务,用于在三维模拟自动驾驶环境中训练和评估强化学习模型。

AWS DeepRacer 车辆:一辆 1/18 比例的 RC 汽车,能够在经过训练的 AWS DeepRacer 模型上进行推理以实现自动驾驶。

AWS DeepRacer 联赛:世界上第一个全球自主赛车联赛。争夺奖品、荣耀和晋级世界冠军杯的机会。有关更多信息,请参阅条款和条件。

主题

  • AWS DeepRacer 控制台
  • AWS DeepRacer 车辆
  • AWS DeepRacer 联赛
  • 使用 A DeepRacer WS 探索强化学习
  • AWS DeepRacer 概念和术语
  • AWS DeepRacer 控制台

AWS DeepRacer 控制台是用于与 AWS DeepRacer 服务交互的图形用户界面。您可以使用控制台训练强化学习模型,并在基于 AWS 构建的 AWS DeepRacer 模拟器中评估模型性能 RoboMaker。在控制台中,您还可以下载经过训练的模型,将其部署到您的 AWS DeepRacer 车辆上,以便在物理环境中自动驾驶。

总之,AWS DeepRacer 控制台支持以下功能:

  • 创建训练作业以通过指定的奖励函数、优化算法、环境和超参数来训练强化学习模型。
  • 使用和 AWS 选择模拟轨道来训练 SageMaker 和评估模型 RoboMaker。
  • 克隆训练后的模型,以通过优化超参数来改进训练,从而优化车辆性能。
  • 下载经过训练的模型以部署到您的 AWS DeepRacer 车辆上,这样它就可以在物理环境中行驶。
  • 将您的模型提交到虚拟竞赛,并将其性能与虚拟排行榜中的其他模型进行比较并获得排名。

当您使用 AWS DeepRacer 服务控制台时,您需要根据训练或评估和存储模型的使用量付费。

为了帮助您入门,AWS DeepRacer 为首次使用 AWS 的 DeepRacer 用户提供免费套餐。这段时间足以训练和调整您的第一个模型并进入 AWS 联 DeepRacer 赛。提交模型以参加任何 AWS League 虚拟 DeepRacer 赛事均不收取任何费用。

有关定价的详细信息,请参阅 AWS DeepRacer 服务详细信息页面。

AWS DeepRacer 车辆
AWS DeepRacer 车辆是一种支持 Wi-Fi 的物理车辆,它可以通过使用强化学习模型在物理轨道上自行行驶。

您可以手动控制车辆或部署模型让车辆自动驾驶。

自主模式在车辆的计算模块上运行推理。推理使用从安装在前面的摄像机中捕获的图像。

车辆可通过 Wi-Fi 连接下载软件。用户也可以通过该连接使用计算机或移动设备访问设备控制台以操作车辆。

AWS DeepRacer 联赛
AWS DeepRacer 联赛是 AWS 的重要组成部分 DeepRacer。AWS DeepRacer 联赛旨在促进社区和竞争。

通过 AWS 联 DeepRacer 赛,您可以在物理或虚拟赛车赛事中将自己的 ML 技能与其他 AWS DeepRacer 开发人员进行比较。你不仅有机会获得奖品,还有一种方法可以衡量你的强化学习模型。你可以与其他参与者竞争,互相学习,互相启发。有关更多信息,请参阅条款和条件。

参加比赛或学习如何在联赛中训练模型。

需求

从特定网站抓取数据,存入exel文件! 因为有几万条,并且这些数据定期会更新,人工抓取显然效率太低了,所以有必要编写一些简单的工具自动抓取
目前这些网站数据免费,也不需要注册,处理器起来比较简单,有一些可能还需要验证码稍微复杂一些
但实现的基本思路都是一样的,只要人能做标准化流程的,机器就能自动化实现;人工重复操作的,有必要实现程序自动化

基本思路

  1. 使用selenium模拟浏览器操作
  2. OpenCV图形处理,验证码识别与匹配
  3. selenium控制浏览器,模拟鼠标、键盘操作
  4. 最后用PyQt6包装个GUI界面,让一般用户也比较好使用
  5. 最最后一步就是使用pyinstaller,将python脚本打造成可以独立运行的程序
python脚本好处是跨平台,同样的代码在Linux,Windows,Mac上都可以运行,同样用pyinstaller分别打包不同平台的独立可执行程序,分发给普通用户使用,非常便利

实现效果

只是普通的工具,所以也没有所谓漂亮的外表,简单易用就好,开始没想好,界面上多了一些无用的组件,暂时没有禁止;实际使用也就涉及2~3次点击,即可抓取需要的数据
编写类似小工具,稳定性、速度、普通用户使用便捷性是我主要考虑的三大要素

截图 2023-04-15 11-39-56.png

实现过程

为了生产率,就算这样简单的小工具,也不应该重零开始编写;最近ChatGPT非常火,我也一直在使用,所以自然第一次接收到这个需求,我就想到使用#AGI帮助我完成;结果是显而易见的,感觉至少10x生产力提升

  • 首先,第一次接触网络数据抓取实际开发,虽然有所了解,但毕竟不是这方面的专家,透过和AGI聊天,我快速熟悉了selenium
  • 其次,让ChatGPT使用PyQt帮助我构建了GUI的几乎全部代码,剩下的就是一些简单的微调
  • 最后,透过ChatGPT聊天,熟悉了如何处理验证码,目前只处理了slider (滑动)验证码 - 移动拼图

涉及这三部分技术,如果靠传统的搜索,我也能搞定,但明显效率不会如此之高。 第一次给出的GUI代码,基本上就没有修改,直接能用,并且我只是使用很自然的语言,比如:

使用PyQt6构建这样一个GUI应用,包含两个combox,一个里面输入网址,‘xxxx1.com’, 'xxxx2.com'等等,一个combox输入设备类型,比如‘起重机’,‘吊车’ 等等,包含一个程序日志输出窗口,包含一个按钮...

对于selenium模块的使用,一开始并不知道这个东西的存在

selenium自动化操作浏览器

关于网络数据抓取,给ChatGPT的第一个问题是:

>我想编写python脚本,自动抓取某个特定网址的数据

balabal...
ChatGPT就给我输出一大堆相关的背景知识
截图 2023-03-26 16-07-53.png

我接下来是要求给一些代码,这样我可以快速 验证

模拟鼠标点击、选择的问题发出之后,很快selenium就进入了视野

比如我想定位网页上某个元素,比如‘查找按钮’、‘下一页’或者‘跳转’按钮等,这些AGI都能直接给出答案
截图 2023-03-26 16-08-29.png

opencv验证码处理

基本的思路是图形处理,轮廓识别与匹配

这部分可能是最花时间的,有一定的技术门槛,细节以后再深入探讨
截图 2023-03-26 16-10-21.png

PyQt6与pyinstaller

使用ChatGPT构建GUI确实非常方便,不过给出的一些例子代码可能有版本匹配的问题,不过如果出现类似错误,直接将错误作为问题继续对ChatGPT提问,往往很容易得到答案,如果经过几次尝试得不到答案,我一般还是选择人工google一下(这种情况有,不是很多)

小结:

这个工具断断续续利用周末的时间不断完善,也花了好几天,其实第一次使用ChatGPT基本构建了程序的原型,后面的工作主要作了一些优化:

  • 增加程序的稳定性,出错的处理和重试机制
  • 分块抓取,多线程抓取
另外还有一个坑,最开始使用PyQt5,使用pyinstaller打包始终不成功,大概率是opencv相关的版本冲突导致,果断切换到PyQt6,顺利解决问题
使用ChatGPT解决编写代码的问题,相关的prompt engineering 也是有一定的模式可遵循,多多练习就能让ChatGPT快速、精准提供可用的答案

参考代码

截图 2023-04-15 12-19-02.png