-
作者昵称:外围的小尘埃大赛链接:https://competition.huaweicloud.com/information/1000041287/introduction、正文:点击人脸识别服务链接:https://console.huaweicloud.com/frs/?region=cn-north-4#/frs/home 开通人脸识别服务开通登陆状态下,进入人脸识别接口:(本地上传任意一张人像图片)https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=FRS&api=FaceDetectV2ByFile直接调用API,就可以识别人的各种信息,很方便
-
大赛详情地址:https://competition.huaweicloud.com/information/1000041320/introduction华为云账号:gogosuccess正文内容:随着大数据人工智能时代的到来,在我们的生活中仍有很多生活方式,因为没有数字化而引来了一些不便利,作为学生,学校犹如我们的家。在这里让我们感受到的不便利主要是学习和生活的未数字化造成的。首先在学习方面,我经常往返图书馆让我感到不变的首先是身份验证,每当入馆,我们先要打开微信,找到公众号进行入馆预约,并且每次都要重新输密码,验证码。输完后才能刷卡进入图书馆,然后在进行排队在机器上座位预约签到,除此之外,图书馆可能有的人一个人占两个座位,水龙头未关闭,借书需要电脑检索在自己去寻找等等。面对这些情形,如何解决呢。1. 入馆时,我们可以进行人脸与学生证上的图片进行识别核对,并在每个入馆的关卡外设置红外线测温仪器,入馆后才可以在公众号上进行预约并扫脸签到。这3件事可以有效地防止“占座”现象,体温异常现象,以及因为网络拥堵导致网站崩溃的现象发生。2. 在馆中,可以将水龙头换成红外线水龙头,这样可以较为有效的避免水源浪费以及水龙头的损坏。3. 借书时,可以运用自动借还书柜,一来可以减少工作人员的工作量,二来方便寻找。其次在做实验时,经常遇到仪器损坏导致实验无法完成,建议运用数字化平台进行模拟实验,这样既可以减少仪器损坏也可以让学生在课后多加练习。最后便是生活方面,主要有点餐,疫情拿快递需要出校门并且需要验证,宿舍充电费需要去食堂,无法找到具体的共享单车等现象。1. 由于冬天来临,天气较为寒冷,饭菜容易凉,食堂可以采用保温饭菜器代替传统的热水热气保温的方式,第二冬天上课时间表缩短,导致中午时间减少大半,然而每次放学都会排很长的队,导致中午无法缓解疲劳,建议使用扫码点餐,机器人送餐。2.在这个交通便利的时代,快递成为了我们生命中不可或缺的一部分。由于特殊情况,我们拿快递需要请假,然后出校门要给门卫看,进门要证明是学校的学生并且量体温。这一系列操作十分繁琐,可以在校内采用智能快递柜,由快递人员将消毒过的快递产品,放入快递柜中,这样既可以避免一系列事情发生,又可以通过效率。3.共享单车在学校内经常乱停乱放,因此有时不容易寻找,也不易出行,既增加了工作人员的工作量,也耽误了需要出行人的时间。如何解决呢?首先可以使用一个专门在校园内借还车app,此app有一系列的功效,必须在固定的停车点,才能还车,并且可以显示车辆数目和定位。除此之外,对于每次遵守规则的人提高借车成功率,反之降低。4.最后便是宿舍充电,有时会出现半夜停电因为电费不足,而充电费必须去食堂,此时宿管人员已经关门,碰上夏天只能热一晚上,甚至有时会出现食堂的缴费机器都坏了。为解决这一问题,我认为可以让移动支付平台与学校平台对接,这样就随时随地交电费了,并可以减少一些不必要的麻烦。
-
在2020年第二届华为云人工智能大赛•无人车挑战杯赛道中,“华中科技大学无人车一队”借助华为云一站式AI开发与管理平台ModelArts及HiLens端云协同AI开发应用平台,进行无人车模型开发与部署,最终夺冠,获得20万奖励(10万现金+10万代金券)。战队撰文分享其参赛体验,包括无人车比赛的整体方案,多维数据处理及行驶控制的能力等。 1. 比赛背景第二届华为云无人车挑战杯大赛,相比第一届大赛,难度更大,赛道环境更加接近真实的道路。在比赛中,无人车需要从发车区出发,通过车道线循迹沿“8”字形赛道在不能压线和触碰挡板的条件下行走一周半后,准确地停入到停车区。在小车行驶期间,需要完成交通信号灯识别、斑马线识别、机器人动态避障、挡板区循迹、限速/解限速标志识别、精准停车等任务。无人车不仅需要完美无误地完成所有的任务,在速度上也有要求,在总决赛中,无人车需要在70s内完成所有任务,时间加分项才能为满分。在比赛中,华为云ModelArts一站式AI开发与管理平台,给参赛选手提供全流程的AI模型开发环境,助力参赛选手高效地完成检测任务中模型的训练,HiLens端云协同AI开发应用平台帮助参赛选手快速地完成模型在端侧设备上的部署和加速。华为云无人车挑战杯在由上海交大学生创新中心智能制造实验室自主研发的无人车的基础上,结合华为云人工智能平台,全面锻炼和提高赛队的AI解决方案能力及无人驾驶编程技巧。图1‑1 华中科技大学无人车一队的后浪图1‑2 华为云无车人挑战赛总决赛现场2. 整体方案无人车比赛整体解决方案如图2‑1所示,比赛主要分为三个部分,ModelArts做模型的在线训练,HiLens Kit做模型的部署,无人车上工控机的通过ROS将各个节点整合到一起,做无人车底盘的决策和控制。通过华为云ModelArts一站式AI开发与管理平台完成数据标注、模型训练、模型转换等工作,得到可供HiLens Kit前向推理的卷积神经网络的模型。HiLens Kit通过自带的相机采集图像,通过技能部署进行模型的前向推理和加速,HiLens Kit搭载着高性能的华为人工智能芯片昇腾310,针对卷积神经网络进行了优化,在模型的前向推理过程中可发挥出强大的算力。HiLens Kit完成红绿灯、限速/解限速标志识别、斑马线的目标检测识别,通过Socket通信,将检测结果传给无人车上的工控机。无人车上工控机处理激光雷达的点云数据,做Slam建图和运行中的实时定位,工控机处理USB摄像头的采集的车道线数据,做车道线的识别,再通过ROS将所有节点信息做整合,做底盘电机和舵机的决策控制。3. ModelArts模型训练ModelArts是面向AI开发者的一站式开发平台,包含数据处理、模型训练、模型管理、模型部署等操作,并且提供AI市场功能,能够在市场内与其他开发者分享模型,其功能总览如图3‑1所示。在比赛中,我们通过ModelArts平台完成了数据标注、模型训练和模型在线转换等工作,并且通过ModelArts做模型的线上部署,检验模型的精度效果。3.1. 任务分析本次大赛涉及6类目标的检测识别:红灯、绿灯、黄灯、限速标志牌、解限速标志牌、斑马线,如图3‑2所示。无人车在运行过程中,对目标采集的图像涉及不同的视角和距离,而且比赛场地光强未知,所以对于目标检测任务,要充分考虑到目标不同视角的刚体形变、不同距离的尺度变化、不同环境光强的变化以及无人车运行中的运动模糊。无人车根据检测的结果做出相应决策和控制,对目标检测的精度要求很高,一但误检或漏检,小车的控制就会出错,而且小车在赛道上快速运行,所以对目标检测的速度也要求较高,一但小车看见目标,需要快速输出检测结果。3.1. 数据标注数据标注采用ModelArts中的数据管理功能,进入ModelArts平台的数据标注模块,创建数据集,选择物体检测,添加标签集。既可以选择手动标注,也可以在手动标注一部分后选择智能标注,最终再修改确认智能标注。当数据集较大的时候,智能标注可以有效降低数据集标注的工作量。通过创建标注团队,将数据集分配给团队队员,团队合作加快数据集标注速度。3.3. 数据增强我们模型训练的数据集大部来自HiLens Kit拍摄的不同环境下的视频序列,数据集中图像的重复比例较大,有必要将重复的图像做一些删除,对数据集做数据增强实现数据扩增,解决由于图像数据量较少带来的模型过拟合的问题。在比赛中,我们参考2018年的论文《Albumentations: fast and flexible image augmentations》开源的代码做数据集的扩充,开源代码网址:https://github.com/albumentations-team/albumentations。该项目对于数据的扩充采用颜色空间变换、模糊、亮度调整、黑白、压缩、随机噪声等30余中数据扩充办法。由于我们比赛中要识别的对象,颜色是很重要的一个特征,例如:红灯、黄灯、绿灯三种灯的颜色,限速标识的红色和解限速标识的黑色,颜色变化相关的数据扩充,会造成数据颜色特征的丢失。红灯、黄灯、绿灯三种灯分别在左、中、右三个位置,交通灯亮的位置,也是区分三种灯的很重要的特征。所以对数据集的扩充,去掉了色彩变换和水平翻转的数据扩充办法。数据扩充采用扩充方法级联的方式,如图3‑4所示,更大程度上,减小数据之间的相似性,增加图像数据的多样性,数据增强的效果如图3‑5所示。3.4. 模型训练通过数据增强,减小了数据之间的相似性,增加了数据多样性,最终选用了6031张图像数据做模型训练。模型训练我们选用的是华为云AI市场里面基于TensorFlow框架的YOLOv3_Darknet53的网络。在训练时,采用COCO数据集上的预训练模型,训练完后,通过模型转换功能将TensorFlow的PB模型转换成Ascend类型,以支持在HiLens Kit的Ascend 310 AI芯片上做模型推理。YOLOv3是典型的一阶段的目标检测网络,图像输入为416*416条件下,COCO数据集上测试的mAP的分数为31.0,模型转换后在Ascend-310推理速度:17.8ms/pic,是目前速度和精度最为均衡的目标检测网络之一,其网络结构如图3‑6所示。YOLOv3采用Darknet53作为backbone,Darknet53大量使用类似于ResNet的残差跳层连接,从而可以加深网络的深度,特征提取可以提取出更高层的语义特征,并且为了降低池化带来的梯度负面效果,作者直接摒弃了pooling,用conv的stride来实现降采样,在这个网络结构中,使用的是步长为2的卷积来进行降采样。YOLO v3中采用类似FPN的上采样和特征融合的做法,在多尺度的特征图上做检测,大大加强了对小目标检测的精确度。YOLOv3采用固定anchor对目标的位置做预测,图3‑6中输出的y1、y2、y3分别对应着32倍、16倍和8倍图像采样结果,32倍降采样的感受野最大,适合检测大的目标,所以在输入为416×416时,每个cell的三个anchor box为(116 , 90)、 (156 , 198)、 (373 , 326)。16倍适合一般大小的物体,anchor box为(30 , 61)、(62 , 45)、 (59 , 119)。8倍的感受野最小,适合检测小目标,因此anchor box为(10 , 13)、(16 , 30)、(33 , 23)。y1、y2、y3中每个cell回归边界框预测4个坐标,tx , ty , tw ,th。如果目标cell距离图像左上角的距离是(cx ,cy),且它对应边界框的宽和高为pw , ph ,如图3‑7所示,那么网络的预测值为:在ModelArts中做模型训练和调优参数相关设置如图3‑8所示,使用ModelArts中可视化工具做训练过程可视化结果如图3‑9所示。模型训练完成后,通过在线的模型转换工具,转换为.om的模型,以供在HiLens Kit上做推理。4. HiLens技能开发和模型部署华为HiLens为端云协同多模态AI开发应用平台,提供简单易用的开发框架、开箱即用的开发环境、丰富的AI技能市场和云上管理平台。HiLens Framework封装了丰富的视频分虚算法基础组件,如图像预处理、模型推理等,开发者只需少量代码即可开发自己的技能。HiLens Studio提供在线的开发环境,可以方便的在线编写和调试技能代码。管理控制台提供模型管理、技能开发等功能,供用户在云侧管理模型和技能,一键安装技能到端侧设备。在比赛中,我们使用HiLens Kit端侧设备做模型推理,线上开发好的技能可以一键部署到HiLens Kit上。4.1. 检测任务的Skill开发如图4‑2所示在本次无人车比赛中,我们团队开发了3个Skill,get_pic是用HiLens Kit采集图像数据并通过socket通信传给主机,做数据集采集使用;yolo-v3-v1-test是用来在测试模型的精度效果,不加与工控机通信代码;uac-yolov3-v1是在无人车实际行驶时的技能,在比赛中采集图像进行模型推理并与工控机通信。在做检测任务的技能开发,我们首先利用HiLens Studio的开发环境和HiLens Framework,在线做模型前向推理的测试,HiLens Studio开发环境如图4‑4所示,代码流程如图4‑3所示,先初始化HiLens、摄像头和加载模型,接着进入一个循环,读取摄像头采集的图像,做数据预处理,HiLens读取摄像头的图像为YUV格式,需要转为RGB格式,以及将图像resize为(416,416),以便做模型推理。模型推理通过调用HiLens Framework封装好的API,做模型前向推理的计算。由于Ascend310不支持模型后处理的计算,所以这一部分需要通过软件来做,后处理主要包括,从模型输出的特征矩阵中解码出检测框的位置、类别、置信度等信息、NMS筛选检测框等,最后输出结果。在结果后处理阶段,我们也加入了一些小技巧,以提高检测任务的准确率:l 对于6类目标我们分别采用不同的置信度阈值做筛选,交通灯和斑马线需要在较远的距离就识别到,置信度阈值我们设置为0.5,而限速/解限速,为确保检测正确性,置信度设置为0.9。l 对于红绿灯和限速/解限速,通过计算目标框中图像的红色分量值,来纠正检测的错误,例如,但检测到红灯,必须红色分量值大于0.15,才认为正确,否则视为错误。对于检测到绿灯或黄灯,必须红色分量小于0.1,才认为正确。l 同理,对于斑马线的检测,将目标框图像二值化,白色像素占比大于0.3,才认为检测正确。最终,我们在HiLens Studio对决赛现场的图像做测试,测试了700张图像,只有23张图像检测错误,目标漏检的也很少,而且都是在角度很偏的时候,漏检率在5%以内。在HiLens Studio技能代码做完了测试之后,在“技能管理”里面,创建一个新的技能,导入在HiLens Studio里面的代码,加入与工控机通信的部分,就完成了检测任务加上通信的技能开发,然后将技能在线安装到端侧设备HiLens Kit上。下一次HiLens Kit启动后,就会自动启动技能。4.2. HiLens的通信在无人车比赛中,HiLens Kit通过网口采用Socket通信与工控机或PC机进行通信,Socket网络通信框架如图4‑5所示,Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。Socket通信分为基于TCP和基于UDP两种。TCP协议是基于连接的协议,需要先建立可靠的连接,而UDP不需要事先建立可靠的链接,而是直接把数据包发送出去,是不稳定的连接。在图像数据集采集时,通过Socket通信传输视频数据,数据量大且不必要求每一个数据包都准确接收,我们采用Socket UDP通信,传输视频数据。在HiLens Kit做目标检测任务时,客户端数据少又需要稳定可靠的传输,所以我们采用基于TCP协议的Socket通信,基于TCP协议的Socket通信如图4‑6所示。5. ROS无人车决策控制无人车上由车上的工控机完成各项数据的处理和融合,进行无人车的决策控制。通过处理激光雷达的点云数据,做Slam建图和运行中的实时定位以及挡板区的循迹,处理USB摄像头的采集的车道线数据,做车道线的识别,通过Socket通信接收来自HiLens kit的目标检测的结果。如图5‑1所示,无人车的控制方案主要包括:车道线循迹、挡板去循迹、斑马线停车及避障、限速和解像素、发车和停车、建图和定位,通过ROS整合各个节点的消息,将多种数据进行多模态融合,进行无人车控制状态机的切换,给驱动控制发送不同的速度和方向指令,驱动控制将速度和方向信息转为无人车底盘的电机速度和舵机打角指令,通过串口发送给无人车驱动,最终实现无人车完美高效地完成整个比赛任务。5.1. 车道线识别在本次比赛中,车道线的识别也是本次比赛的一个难点,无人车上USB camera的位置低、视角窄导致大部分时间只能看到单线,再加上工控机的性能较弱,对图像相关处理速度较慢。对于车道线识别,我们没有采用比赛方提供的例程,而是从实际驾车思路出发,想办法得到道路的中线,通过中线推算偏差。车道线识别的流程如图5‑2所示,首先将图像二值化,通过膨胀与腐蚀,将车道线线条的断裂给补上,小车在运行中,车道线总是会交与图像的左、右、下三条边,所以在这三条边上搜索车道线基本点,根据搜索到的基本点搜索边线。由于摄像头固定,采用提前标定好的透视变换矩阵将图像变换到俯视图。由于在搜索车道线基本点可能会搜索到多个,例如图5‑3搜索到3个基本点,从而会搜到多个边线,所以需要对边线进行筛选,提取车道线。将车道线做一次拟合,由于道路宽度固定,所以可以通过拟合的车道线计算出中线。根据中线的计算结果,即可求解偏差。在图像计算中,通过采用python的numpy矩阵操作代替大量python低速循环进行计算加速,精简计算流程,(640,480)的图像在工控机计算帧率平均可达到46fps。5.2. 激光雷达挡板区循迹与无人车定位无人车上的激光雷达传感器可扫描到无人车周围360度的障碍物的信息,可以用来做挡板区的循迹和无人车的实时定位。雷达数据的可视化展示如图5‑4(a)所示,雷达的点云数据组成了无人车行驶的车道,可采用和车道线相似的处理办法,采用搜索雷达右半部分0-75度的范围,拟合右边线,从而计算中线,求取偏差。具体处理过程可参考车道线处理方案,此处不再赘述。无人车Slam建图和定位的方案,现已经很成熟, GitHub、GitLab等开源平台也有很多非常棒的基于ROS的激光Slam项目和定位方案,我们采用开源的rf2o将激光雷达数据转为里程计信息,通过AMCL做定位,采用Gmapping建图,ROS开源社区(http://wiki.ros.org)都有详细的介绍,此处不再赘述。5.3. 多模态融合的无人车决策控制在HiLen Kit部署的技能,尽管采用一些技巧提升了图像的识别准确率,但也并非百分百准确。无人车在行驶过程中,存在运动模糊、未知光源干扰、反光灯等问题,尽管制作数据集考虑了此类情况,但是还是会有影响。我们采用了数字滤波中常用的的窗口滤波处理来做图像信息的后端处理。l 采用长度为k的定长队列做为观察窗口l 选取k个元素中出现最多类别作为当前阶段预测类别在小车行驶过程中,将ROS节点的各个信息,做多模态融合,实现无人车不同状态下切换,如图5‑6所示,无人车完成起步、斑马线停车避障、挡板区循迹、限速/解限速、精准停车等任务。6. 联合使用ModelArts和HiLens体验在此次华为云无人车大赛中,联合使用ModelArts和 HiLens,这全流程的解决方案对项目的完成提供了高质量的服务。ModelArts提供全流程的AI开发平台,数据管理、模型训练、在线部署,都方便高效;HiLens提供了端云协同的AI开发平台,大大降低了嵌入式平台开发门槛,实现模型高效快捷的端侧部署。我们在使用华为云的全栈式解决方案之前,也接触过一些其他的AI解决方案,但是无论是云还是端都没有华为云ModelArts和HiLens的联合使用便捷高效。其便捷高效主要体现在以下几个方面:(1)数据管理平台支持数据上传、存储、标注、处理一体化服务;(2)ModelArts提供了各种配置好的开发环境,支持各种深度学习框架的开发;(3)ModelArts的AI市场提供了丰富的网络模型,提高开发者开发效率;(4)ModelArts支持模型在线部署和测试,可提供网络接口供物联网设备实现云端协同;(5)HiLens的HiLens Framework,丰富的API解决了驱动和图像接入问题,自带媒体数据处理库,支持各种自定义操作;(6)HiLens Studio开发环境可在不需要硬件的条件下,做模型的测试和代码的调试;(7)HiLens技能管理平台可对技能直接做在线的部署和切换,方便、快捷。(8)HiLens的技能市场,提供了丰富的开发好的技能,开发者可以站在巨人的肩膀上做开发,提高开发效率。
-
视频观看链接:https://bbs.huaweicloud.com/videos/1018552019年,越来越多的行业都将业务放上了“云端”。大势所趋的背后,不只是AI、云计算、大数据等新兴技术的崛起,也是各种各样应用场景的智能化激活和渗透。凭借自身深厚的技术积累与实践,华为云不断深入行业场景,以AI开发为切口,让技术赋能千行百业。2019年,华为云举行了一系列开发者大赛,为开发者提供展示自我的舞台,助力企业与优秀人才、前沿科技的对接,让“高深莫测”的技术更加落地,让云上世界更加智能。No.1数字中国创新大赛:文化传承-汉字书法多场景识别赛2019年1月,华为云以“文化传承-汉字书法识别场景”为赛题,通过人工智能算法实现书法文字的自动识别,解决实际场景中有些书法文字难以识别的问题,传承中国千年文化。赛事共有1071赛队的1203名选手报名,最终破晓、银月之晶、Gtai三支团队获得前三名。冠军团队破晓,赢得最高8万元大奖,并获得华为云AI实验室的实习机会,以及华为云面试绿色通道资格。比赛过程中,华为云为参赛选手们提供了华为云ModelArts一站式AI开发与管理平台和华为云OCR(文字识别服务)技术支持。其中,华为云OCR凭借识别精度高、服务稳定、支持复杂场景、简单易用等优势,现今已被广泛应用于物流、医疗、金融等行业。No2华为云人工智能大赛•无人车挑战杯7月1日,“华为云人工智能大赛•无人车挑战杯”开始报名。通过本项赛事,华为云全面锻炼和提高了赛队的AI解决方案能力及无人驾驶编程技巧的赛事。作为整场赛事的技术支撑,华为云ModelArts一站式AI开发与管理平台及端云协同AI开发应用平台HiLens让参赛开发者们轻松地进行了模型开发与部署。具体而言,在识别红绿灯的问题上,无人车可在上路前通过华为云HiLens Kit采集交通灯照片,然后在ModelArts上进行图片数据集的标注并生成标注数据,轻松过灯。No3华为云鲲鹏开发者大赛7月23日,“2019华为云鲲鹏开发者大赛”开赛,选手基于华为云自研的鲲鹏云服务器,进行主题为“化鲲为鹏”的游戏策略开发。大赛吸引了来自北京大学、浙江大学、哈尔滨工业大学等全国374所高校的学生,以及50个来自不同行业的开发者共1200多位选手参赛。而华为云鲲鹏开发者大赛的最大亮点就是在于华为云为参赛选手们提供最新的华为云鲲鹏云服务器。基于鲲鹏处理器对云原生软件随时随地的部署,华为云鲲鹏云服务可以帮助开发者在大数据、分布式存储、ARM原生应用等诸多应用开发场景中游刃有余,为其提供从芯片到服务器到云平台的全栈自主创新能力,帮助开发者轻松应对多云计算的挑战。No4华为云人工智能大赛·垃圾分类挑战杯于7月30日启动“华为云人工智能大赛·垃圾分类挑战杯”致力于运用AI赋能垃圾分类,减轻城市居民在垃圾分类方面产生的困扰。截至比赛结束,有2600多位社会各界开发者参赛。比赛中,华为云为选手提供ModelArts、算力云资源、数据集等。ModelArts以全流程的极简和自动化升级已有的传统AI开发模式,让数据准备、算法开发、模型训练、模型管理、模型推理全链条产生质的飞越。值得一提的是,华为云ModelArts不仅仅应用于垃圾分类,还可适用于建筑、互联网、医疗等诸多行业场景。华为云历来重视用技术使能开发者,不仅发布了ModelArts、HiLens、华为云鲲鹏云服务、OCR等众多解决方案及工具,帮助开发者驰骋开发界,还在2019华为全联接大会上,发布了沃土计划2.0,宣布未来五年将投入15亿美元,帮助全球开发者基于华为开源开放的产品和服务进行技术与商业创新。依托华为30年的技术积淀,华为云正在努力构建完善的开发者生态,以促进每一位加入华为云生态的开发者,不仅能获得技术支持,还能找到同伴、发现商机,将梦想从不可能变可能。如果说云计算改变了中国各行各业的发展历程,那么可以说,华为云正让每一位开发者参与到这一历史进程当中。
-
是什么让选手们茶饭不思?是什么样的操作把团队从倒数第一抢救为第一?队友怎么找?老板不让参加比赛怎么办?比赛外的收获?来看2019年软挑上海合肥赛区四强的独家访谈!队伍名:Nebula成员:李子旸、任正行、曾明亮Q:对比赛印象最深刻的点是什么?A:我们写的组合优化算法有很多超参数,给调优带来了很大困难:我们按照文档实现了官方的判题器,以在提交代码前就能知道最终分数,便于调整参数,在比赛过程中,我们使用了超级计算机寻找算法的最优超参数,在比赛快结束时提交了一次代码(最终成绩只考虑最后一次的代码提交,获得分数结果需要十五分钟,我们把这次当作最后一次提交),然而这一次超级计算机找到的参数恰好触发了我们代码中的一个隐藏很久的 bug ,导致我们以为能运行成功的代码没有得到分数,队友看到分数结果时都吓坏了,当时比赛只剩不到三十秒就结束了,我们都不知道问题出在哪里。我凭借直觉赶紧把参数改得不那么激进,并且编译打包提交,代码提交上去的瞬间比赛就结束了,我们也不知道这次是否会成功,还好最后是运行成功了,就这样从最后一名抢救到了第一名。Q:华为软挑和大家参加的其他比赛有什么不同?A:有些比赛有点像考试,它需要一个熟练度,华为的软挑有更真实的应用场景,不是考察熟练度,对学习能力的要求更高,也更好玩一些。另外,在参赛的整个经历中,能够感受到公司特点和做事风格,比如目标导向、质量优先等等,复赛和决赛的时候能够和已经工作很多年的华为前辈交流,对未来的工作内容和发展方向也更有了解了。Q:有什么想对今年选手说的?A:复赛需要找准思路,调整好心态,另外不要乱立FLAG~ 队伍名:USTC410成员:曹鸿儒、程穗、赵喆Q:是怎么找到彼此作为队友的?期间有什么故事?A:我们是同一个实验室的,当时听师兄说了这个比赛,就想正好一起组队,一拍即合(瞒着老板参赛的);初赛的时候只是想试一下,进入复赛之后就很认真准备了,每天都会碰头,想到什么就写一写、调一调,三个人分工合作,复赛当场提交还是很从容的,觉得进决赛没什么问题,一点都不慌。 Q:对比赛印象最深刻的点是什么?A:决赛用了更仿真的数据,会觉得眼前一亮,因为一路打过去,前期觉得用的数据不够真实,像一个数字游戏,而决赛用了更真实的数据,我就觉得大赛的主题更加贴近实际,有真实的背景,是真正的去解决问题。另外收获了一首法语歌——《On écrit sur les murs》,是一首反战歌曲,之所以印象深刻是因为后期准备比赛的时候会熬到很晚,经常听它来提神,反反复复地听,觉得很好听。队伍名:我是个机器人成员:陈宇航、赵瑞、朱英达Q:是怎么听说到这个比赛的?队友怎么找的?A:和师兄吃饭的时候顺便和他请教怎么拿offer,聊天的时候知道了华为软挑,师兄当时拿了前一年的上合赛区第一,全国13强。实验室的同学推荐了另外的队友,我们三个人按照算法建模、官方调度器的实现还有车牌识别三个模块来分工,每隔两三天就碰头交流一两个小时。Q:比赛过程中有没有什么让大家印象深刻的事情?A: 我们复赛的时候一共提交了3次,最后一次的提交不知道能否运行,特别担心跑的时候有bug,所以后面的研究所实验室参观都心思不在,了解了下训练赛几个排在前面的队伍的成绩,算了下我们组应该不是第四就是第五,这是能不能进决赛的区别,所以我们连饭都没吃好就等排名,后面发现进了决赛很激动。Q:想对今年参赛的学生说什么吗?A:尽量做好分工,多水大赛论坛,多水群,和大神交流借鉴能进步很多。 队伍名:是是非非成员:张棠磊Q:为什么选择单人成队参赛?A:实验室的师妹当时看到了大赛的宣传,来问我要不要组队,我当时实验室的项目比较忙,觉得自己一个人先去试试后面如果时间来不及就算了,如果组队的话,临时鸽掉比赛不太负责,所以当时就自己花了一个下午的时间搞了下初赛的题目,后来发现进了复赛,就开始认真投入,决赛前在异地做项目,就抽晚上的时间准备比赛。感觉组队更需要一个合作的磨合,合作的好就是1+1>2,否则会1+1<1,自己参赛比较机动。Q:对今年的选手们有什么想说的?A:不要盲目的改代码,图像化的展示运行情况,有助于进行改进分析。 --------上合赛区 报道
-
比赛简介共10类食物,数据集共5000个图片,尺寸大小不一,类别分别均衡。需要自己划分训练集和验证集,用于判分的测试集不可见。比赛难度不大,主要难点在于如何减小过拟合,提高模型的泛化能力。代码已在我的github上开源,欢迎star。源码的github地址涨点核心思想:cbam注意力auto_augmentcutmixsnapshotLabelSmooth数据探索由于数据集比较小,也比较简单,因此主要是统计了一下所有图像的尺寸分布,发现大多数图像的宽高在400~500,因此可以选择将图像输入尺寸调整到这个区间。大尺寸的另一个好处是可以显著提高分类准确率。训练策略数据集划分采用9:1的比例将数据集划分为训练集和验证集,时间和资源允许的情况下,可以进行10折交叉验证。数据增强数据集比较小,因此数据增强是提分的重点方向。除了torch自带的随机裁切和随机擦除以外,涨分的一大技巧是采用auto_augment。数据增强的代码如下:train_transform = transforms.Compose([ transforms.Resize((size+32, size+32)), transforms.RandomChoice([transforms.RandomCrop(size, padding=1, pad_if_needed=True, padding_mode='edge'), transforms.RandomResizedCrop(size, scale=(resize_scale, 1.0), ratio=(0.8, 1.2))]), transforms.RandomHorizontalFlip(), auto_augment.AutoAugment(dataset='CIFAR'), transforms.ToTensor(), transforms.RandomErasing(p=erasing_prob), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ])模型选择采用efficientnet-b5,同时增加了cbam注意力模块,代码如下:class ChannelAttention(nn.Module): def __init__(self, in_planes, ratio=16): super(ChannelAttention, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.max_pool = nn.AdaptiveMaxPool2d(1) self.fc1 = nn.Conv2d(in_planes, in_planes // 16, 1, bias=False) self.relu1 = nn.ReLU() self.fc2 = nn.Conv2d(in_planes // 16, in_planes, 1, bias=False) self.sigmoid = nn.Sigmoid() def forward(self, x): avg_out = self.fc2(self.relu1(self.fc1(self.avg_pool(x)))) max_out = self.fc2(self.relu1(self.fc1(self.max_pool(x)))) out = avg_out + max_out return self.sigmoid(out) class SpatialAttention(nn.Module): def __init__(self, kernel_size=7): super(SpatialAttention, self).__init__() assert kernel_size in (3, 7), 'kernel size must be 3 or 7' padding = 3 if kernel_size == 7 else 1 self.conv1 = nn.Conv2d(2, 1, kernel_size, padding=padding, bias=False) self.sigmoid = nn.Sigmoid() def forward(self, x): avg_out = torch.mean(x, dim=1, keepdim=True) max_out, _ = torch.max(x, dim=1, keepdim=True) x = torch.cat([avg_out, max_out], dim=1) x = self.conv1(x) return self.sigmoid(x)优化器和学习率衰减优化器采用RAdam,学习率衰减策略采用torch1.4自带的学习率自动重启的余弦衰减。optimizer = newoptim.RAdam(model.parameters(), lr=lr, weight_decay=weight_decay) scheduler = optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0=epochs//snap_num)训练方法采用三阶段训练法,每一阶段基于快照集成思想获得5个模型快照,选择acc最高的模型作为当前阶段的训练结果。具体流程如下:Stage 1:图像输入尺寸为400,使用LabelSmooth和cutmix,采用带学习率自动重启的CosineAnnealingWarmRestarts方法,获得5个模型快照,选择val_acc最高的模型,作为Stage 1的训练结果。Stage 2:图像输入尺寸为500,适当调整随机裁切和随机擦除的参数,增加weight_decay,在Stage 1模型的基础上训练获得5个模型快照,选择val_acc最高的模型,作为Stage 2的训练结果。Stage 3:图像输入尺寸为500,关闭cutmix,损失函数采用CrossEntropyLoss,在Stage 2模型的基础上训练获得5个模型快照,选择val_acc最高的模型,作为最终的训练结果。模型性能单模型,验证集上acc为99.4%,提交到modelarts上,测试集的acc为99.2%。由于图像分辨率较大,推理时间比较长,500张图片需要40多分钟。
-
赛事介绍 美食数据包含10个类别,数据集共5000个图片,尺寸大小不一,类别分别均衡。需要自己划分训练集和验证集,竞赛数据来自真实的美食图片数据,包含中餐、西餐、甜点、粥类,每张图像中美食所占比例大于3/4,每张图片代表一类美食。 竞赛数据分为2个数据集:参赛选手可使用第1个数据集,第2个数据集作为评判用(参赛者不可见)。主要思路数据集划分 采用了8.5:1.5的比例将数据集划分为训练集和验证集数据增强对图片进行了一定的旋转处理()和尺寸处理,这里计算了一下所有照片的均值,方差 mean std = [0.6736, 0.5654, 0.4031],[0.1994, 0.2248, 0.2528],具体代码如下:normalize = transforms.Normalize([0.6736, 0.5654, 0.4031],[0.1994, 0.2248, 0.2528])train_transformer_ImageNet = transforms.Compose([ transforms.Resize((size,size)), transforms.RandomHorizontalFlip(), transforms.RandomAffine(degrees=3, translate=(0.05, 0.05), scale=(0.95, 1.05)), transforms.ToTensor(), normalize]) val_transformer_ImageNet = transforms.Compose([ transforms.Resize((size,size)), #transforms.CenterCrop(224), transforms.ToTensor(), normalize]) 3.划分数据集和基础的图像预处理 色彩抖动,图像中有一个比较大的难点是背景干扰,在实际工程中为了消除图像在不同背景中存在的差异性,通常会做一些色彩抖动操作,扩充数据集合。色彩抖动主要是在图像的颜色方面做增强,主要调整的是图像的亮度,饱和度和对比度。工程中不是任何数据集都适用,通常如果不同背景的图像较多,加入色彩抖动操作会有很好的提升。def randomColor(image, saturation=0, brightness=0, contrast=0, sharpness=0): if random.random() < saturation: random_factor = np.random.randint(0, 31) / 10. # 随机因子 image = ImageEnhance.Color(image).enhance(random_factor) # 调整图像的饱和度 if random.random() < brightness: random_factor = np.random.randint(10, 21) / 10. # 随机因子 image = ImageEnhance.Brightness(image).enhance(random_factor) # 调整图像的亮度 if random.random() < contrast: random_factor = np.random.randint(10, 21) / 10. # 随机因1子 image = ImageEnhance.Contrast(image).enhance(random_factor) # 调整图像对比度 if random.random() < sharpness: random_factor = np.random.randint(0, 31) / 10. # 随机因子 ImageEnhance.Sharpness(image).enhance(random_factor) # 调整图像锐度 return image 4.batch_size 一般设为8、16、32、64、128、256等2的幂次值,batch_size越小,梯度下降方向变化越大,可能导致训练不收敛,batch_size越大,梯度下降方向越稳,但是有如下几个缺点: (1) 所需的内存和显存都越大,有可能撑爆机器; (2) 由于计算好大一批数据才进行一次梯度下降,会导致达到相同精度所需的训练时间变长; batch_size一般不影响最终精度,主要影响训练速度,每次做不同的训练任务,应该去尝试、总结合适的batch_size值,最后跑该类任务时就固定使用该batch_size=16 5. 预训练模型的选择 考虑到时间和精力的问题,在保证训练效果不错的基础上,将原有的resnet50神经网络结构训练模型换成了resnet101 6.学习率衰减调整 使用ReduceLROnPlateau学习调度器,如果三个epoch准确率没有提升,则减少学习率exp_lr_scheduler = lr_scheduler.ReduceLROnPlateau(optimizer_ft,mode='max',patience=3,verbose=True)7.通过训练中的实际情况对epochs做了点适当的微调以及推理文件的微调最后模型性能 单模型,验证集上best acc为96.933%,提交到modelarts上,测试集的acc为98%。
-
数据500 张图 x 10 类, 共 5000 个样本易混淆类别举例:三明治 和 玉米饼冰激凌 和 土豆泥芒果班戟 和 鸡蛋布丁方案基于成熟模型进行迁移学习模型EfficientNet B3在 ImageNet 数据集上精度比较高输入图像尺寸 300参数少,训练快,部署快训练策略损失函数标签平滑:抑制过拟合优化器RangerSGD数据增强随机进行旋转、平移、翻转变换随机调节亮度对比度过程两阶段训练阶段一Ranger + one-cycle只训练离输出较近的几层,锁定其他层用比较大的学习率,收敛到一个比较低的 validation loss阶段二改用 SGD使用较低学习率微调 epochs 和 lr 等超参数其他尝试Selective-Backprop参考:https://arxiv.org/abs/1910.00762minimum loss percentage 用 0.9效果不明显Weighted CE'土豆泥', '鸡蛋布丁', '冰激凌', '小米粥', '三明治' 损失函数权重设置为 1.2参考代码: weight = torch.Tensor(np.ones(data_.c)) if torch.cuda.is_available(): weight = weight.cuda() hard_classes = ['土豆泥', '鸡蛋布丁', '冰激凌', '小米粥', '三明治'] hard_classes_idx = [data_.train_ds.c2i[x] for x in hard_classes] weight[hard_classes_idx] = 1.2 loss_func = nn.CrossEntropyLoss(weight=weight)效果不明显展望尝试注意力机制尝试调整 WeightedCE 权重其他参考https://towardsdatascience.com/label-smoothing-making-model-robust-to-incorrect-labels-2fae037ffbd0https://towardsdatascience.com/exploring-learning-rates-to-improve-model-performance-in-keras-e37f5e63f16c
-
比赛简介共10类食物,数据集共5000个图片,尺寸大小不一,类别分别均衡。需要自己划分训练集和验证集,用于判分的测试集不可见。比赛难度不大,主要难点在于如何减小过拟合,提高模型的泛化能力。代码已在我的github上开源,欢迎star。源码的github地址涨点核心思想:cbam注意力auto_augmentcutmixsnapshotLabelSmooth数据探索由于数据集比较小,也比较简单,因此主要是统计了一下所有图像的尺寸分布,发现大多数图像的宽高在400~500,因此可以选择将图像输入尺寸调整到这个区间。大尺寸的另一个好处是可以显著提高分类准确率。训练策略数据集划分采用9:1的比例将数据集划分为训练集和验证集,时间和资源允许的情况下,可以进行10折交叉验证。数据增强数据集比较小,因此数据增强是提分的重点方向。除了torch自带的随机裁切和随机擦除以外,涨分的一大技巧是采用auto_augment。数据增强的代码如下:train_transform = transforms.Compose([ transforms.Resize((size+32, size+32)), transforms.RandomChoice([transforms.RandomCrop(size, padding=1, pad_if_needed=True, padding_mode='edge'), transforms.RandomResizedCrop(size, scale=(resize_scale, 1.0), ratio=(0.8, 1.2))]), transforms.RandomHorizontalFlip(), auto_augment.AutoAugment(dataset='CIFAR'), transforms.ToTensor(), transforms.RandomErasing(p=erasing_prob), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ])模型选择采用efficientnet-b5,同时增加了cbam注意力模块,代码如下:class ChannelAttention(nn.Module): def __init__(self, in_planes, ratio=16): super(ChannelAttention, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.max_pool = nn.AdaptiveMaxPool2d(1) self.fc1 = nn.Conv2d(in_planes, in_planes // 16, 1, bias=False) self.relu1 = nn.ReLU() self.fc2 = nn.Conv2d(in_planes // 16, in_planes, 1, bias=False) self.sigmoid = nn.Sigmoid() def forward(self, x): avg_out = self.fc2(self.relu1(self.fc1(self.avg_pool(x)))) max_out = self.fc2(self.relu1(self.fc1(self.max_pool(x)))) out = avg_out + max_out return self.sigmoid(out) class SpatialAttention(nn.Module): def __init__(self, kernel_size=7): super(SpatialAttention, self).__init__() assert kernel_size in (3, 7), 'kernel size must be 3 or 7' padding = 3 if kernel_size == 7 else 1 self.conv1 = nn.Conv2d(2, 1, kernel_size, padding=padding, bias=False) self.sigmoid = nn.Sigmoid() def forward(self, x): avg_out = torch.mean(x, dim=1, keepdim=True) max_out, _ = torch.max(x, dim=1, keepdim=True) x = torch.cat([avg_out, max_out], dim=1) x = self.conv1(x) return self.sigmoid(x)优化器和学习率衰减优化器采用RAdam,学习率衰减策略采用torch1.4自带的学习率自动重启的余弦衰减。optimizer = newoptim.RAdam(model.parameters(), lr=lr, weight_decay=weight_decay) scheduler = optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0=epochs//snap_num)训练方法采用三阶段训练法,每一阶段基于快照集成思想获得5个模型快照,选择acc最高的模型作为当前阶段的训练结果。具体流程如下:Stage 1:图像输入尺寸为400,使用LabelSmooth和cutmix,采用带学习率自动重启的CosineAnnealingWarmRestarts方法,获得5个模型快照,选择val_acc最高的模型,作为Stage 1的训练结果。Stage 2:图像输入尺寸为500,适当调整随机裁切和随机擦除的参数,增加weight_decay,在Stage 1模型的基础上训练获得5个模型快照,选择val_acc最高的模型,作为Stage 2的训练结果。Stage 3:图像输入尺寸为500,关闭cutmix,损失函数采用CrossEntropyLoss,在Stage 2模型的基础上训练获得5个模型快照,选择val_acc最高的模型,作为最终的训练结果。模型性能单模型,验证集上acc为99.4%,提交到modelarts上,测试集的acc为99.2%。由于图像分辨率较大,推理时间比较长,500张图片需要40多分钟。
-
比赛简介 大赛提供5000张图片,10分类问题。 本次主要在数据,网络模型和优化器做优化,数据量较小,主要工作是在防止过拟合。数据处理:1.数据增强随机水平翻转 RandomHorizontalFlip随机仿射变换 RandomAffine2.数据扩充 大赛提供了5000张数据进行训练,数据量较小。 在网上爬取了4946张图片,爬取的数据集链接: 链接:https://pan.baidu.com/s/1MbKgC3JP1EA5TbQUdl53xw 提取码:97qy 爬取的数据有很多脏数据,做了两轮简单的数据清洗后扩充数据集。 给易混淆的类别多扩充一些数据,同时考虑数据均衡。两轮每个类别的的数据增加量如下图。 训练时分别使用两个扩充的数据集训练。 模型选择 本次比赛分别尝试了ResNet系列和efficientnet系列,参考了下图, 最后直接选择了参数量最大的efficientnet-b7。 其他工作 优化器:训练全程采用ranger优化器,使用L2正则化。 损失函数:使用了标签平滑(LabelSmoothingCrossEntropy) 学习率策略:使用ReduceLROnPlateau,两个epoch验证集准确度没有上升就减小学习率。模型训练 训练分两部分,图片输入尺寸为(224,224) 第一阶段:使用数据处理部分第一轮添加的数据,9:1划分,只训练最后一层网络参数,10个epoch。 第二阶段:在第一阶段模型基础上继续训练,使用数据处理部分第二轮添加的数据,9.6:0.4划分,训练最后一层网络参数10个epoch后,训练全部参数25个epoch。未来展望 在efficientnet网络中添加cbam注意力机制。 使用学习率余弦退火等方法。 增大图片输入尺寸。模型性能 单模型,测试集acc98.4%。参考: 模型选择出图片来源:https://github.com/lukemelas/EfficientNet-PyTorch
-
赛事介绍 美食数据包含10个类别,数据集共5000个图片,尺寸大小不一,类别分别均衡。需要自己划分训练和验证数据,竞赛数据来自真实的美食图片数据,包含中餐、西餐、甜点、粥类,每张图像中美食所占比例大于3/4,每张图片代表一类美食。 除提供给参赛选手的训练集外,主办方还有一个测试集,该数据集对参赛者不可见,用于多提交模型进行评判。主办方提供使用resnet50训练的baseline,其测试精度在86%左右。优化思路数据增强采用旋转、翻转和剪裁对数据进行增强数据集划分采用9:1的训练和验证集划分,经过多次训练发现,在训练集上达到最优的模型,往往验证准确率也越高。于是,为了充分利用数据,训练时不做验证,最终选取在训练集达到上最优的模型提交。模型选择考虑不做验证,为避免严重的过拟合,选取结构简单、参数量较少的Xception,用ImageNet预训练的权重进行初始化。其他设置经过多次测试,在最后的全连接层,添加dropout(0.2)的层,使用SGD优化器以及StepLR梯度下降,可得到最优的测试准确率。最终结果提交在训练集上表现最好的模型,最终测试准确率97.2%总结真正的小白技巧,几乎单纯通过对数据进行增强和一点防止过拟合的技巧,就可以将模型的准确率提升至97.2%。感想:这次青年班的学习和比赛太合适入门与实践了,既入门了CNN,又会学会了使用modlearts,通过比赛还能学到其他大佬的优化技巧,太值了!
-
赛题简介基于ModelArts一站式AI开发平台,对10类美食图片进行分类。数据集一共包含5000张美食图片,均来自真实的美食图片数据,包含中餐、西餐、甜点、粥类,每张图像中美食所占比例大于3/4,每张图片只代表一类美食。竞赛数据分为2个数据集:参赛选手可使用第1个数据集,第2个数据集有500张美食图片作为评判用(参赛者不可见)。下面是官方给出的Baseline。经验分享数据集划分Baseline中默认为0.8训练集,0.2验证集。适当增加训练集的比例,可提高验证集的best acc。但是如果训练集比例过高,会降低模型的的泛化能力,造成最终评分和best acc 相差过大,即模型仅对已知验证集表现良好,对未知验证集表现较差。简单数据增强size = 224 # 使用image net的mean std 归一化 normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) train_transformer_ImageNet = transforms.Compose([ transforms.Resize((size,size)), transforms.RandomHorizontalFlip(), transforms.RandomAffine(degrees=0, translate=(0.05, 0.05), scale=(0.95, 1.05)), transforms.ToTensor(), normalize ]) val_transformer_ImageNet = transforms.Compose([ transforms.Resize((size,size)), transforms.ToTensor(), normalize ])模型选择尝试了ResNet的不同深度,最后选择了ResNet-101优化器和学习率衰减optimizer_ft = optim.SGD(parameters, lr=0.001, momentum=0.9, nesterov=True) # 使用ReduceLROnPlateau学习调度器,如果三个epoch准确率没有提升,则减少学习率 exp_lr_scheduler = lr_scheduler.ReduceLROnPlateau(optimizer_ft,mode='max',patience=3,verbose=True)模型性能单模型,验证集上acc为96.556%,提交到modelarts上,测试集的acc为97.8%。
-
赛事介绍美食数据包含10个类别,数据集共5000个图片,尺寸大小不一,类别分别均衡。需要自己划分训练集和验证集,竞赛数据来自真实的美食图片数据,包含中餐、西餐、甜点、粥类,每张图像中美食所占比例大于3/4,每张图片代表一类美食。 竞赛数据分为2个数据集:参赛选手可使用第1个数据集,第2个数据集作为评判用(参赛者不可见)。主要思路数据增强考虑到数据集不算太大,且美食较为居中,将其Resize后CenterCrop。为提高其泛化能力,使用随机水平翻转和亮度、对比度调节数据集划分将数据集随机划分,划分比例初期测试时使用0.9/0.1, 最后提交时使用0.95/0.05Label Smoothing学习参考:https://blog.csdn.net/qq_43211132/article/details/100510113将one-hot编码扁平化,有利于增强其泛化性能,防止过拟合模型选用根据github对cifar10预训练模型选用测试,选择densenet161模型,并修改最后的Linear层,加上Dropout防止过拟合5.其他设置经过各种测试,使用Adam优化器以及StepLR梯度下降,Label Smoothing参数设为0.15能得到最优效果测试结果在Epoch12左右能收敛至训练集准确率0.99以上,测试集准确率0.98,上传至modelarts测试平台准确率为0.978
-
比赛简介共十类美食,总计5000张图片,包含中餐、西餐、甜点、粥类,每张图像中美食所占比例大于3/4,数据分布均衡,自由划分训练集和验证集比例,本方案采取9:1的比例进行划分,项目最终以识别准确率作为评价指标,本方案使用单模型,在ModelArts上测试集的acc为0.978训练策略数据方面数据集划分采用9:1的比例将数据集划分为训练集和验证集,并将数据打乱(实际影响不大)数据增强采用简单的数据增强方案,包括图像的翻转,仿射变化及标准化这里的size选用的是224(听说太小了)train_transformer_ImageNet=transforms.Compose([ transforms.Resize((size,size)), transforms.RandomHorizontalFlip(), transforms.RandomAffine(degrees=5, translate=(0.05, 0.05), scale=(0.95, 1.05)), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ])模型方面模型的选择baseLine选用的是Resnet模型,本着一切从简的原则(其实就是懒),分别试了Resnet18,ResNet34,ResNet101,ResNet152,还是ResNet152的acc较高,所以预训练模型选用的是ResNet152模型的训练策略方面采用了标签平滑,个人感觉差别也不大def reduce_loss(loss, reduction='mean'): return loss.mean() if reduction == 'mean' else loss.sum() if reduction == 'sum' else loss def lin_comb(a, b, epsilon): return epsilon * a + b * (1 - epsilon) class LabelSmoothingCrossEntropy(nn.Module): def __init__(self, epsilon: float = 0.1, reduction='mean'): super().__init__() self.epsilon, self.reduction = epsilon, reduction def forward(self, output, target): c = output.size()[-1] log_preds = F.log_softmax(output, dim=-1) loss = reduce_loss(-log_preds.sum(dim=-1), self.reduction) nll = F.nll_loss(log_preds, target, reduction=self.reduction) return lin_comb(loss / c, nll, self.epsilon)学习率调整,使用ReduceLROnPlateau学习调度器,如果三个epoch准确率没有提升,则减少学习率exp_lr_scheduler = lr_scheduler.ReduceLROnPlateau(optimizer_ft,mode='max',patience=3,verbose=True)模型性能验证集上的acc为0.974,提交到ModelArts上为0.978比赛总结这次的比赛对我来说收获挺大的,有些东西真是在学校里边体会不到的,还得多实践,同时也认识到了不同地区的小伙伴,寒假快要结束了,又是新的学期啊,可能只有短短一个多月?我们都加油,祝大家始终保持心里有火,眼里有光的状态!
-
ModelArts、Hilens联合开发助力人工智能落地电子科技大学 自动化工程学院 贵兴泰 由华为云携手上海交通大学学生创新中心举办的“第二届华为云人工智能大赛 · 无人车挑战杯”总决赛已成功落下帷幕。来自电子科技大学的“暑期休闲队”,自身拥有扎实的模式识别、机器人等学科知识,以及借助华为云一站式AI开发管理平台ModelArts和端云协同解决方案HiLens,进行无人车模型开发与部署,最终获得季军。“暑期休闲队”撰文分享其参赛体验,包括如何使用华为云ModelArts和HiLens实现无人车的目标检测,多源数据融合及行驶控制的能力等。一 队伍背景故事1 “我们为什么参加”我们是来自电子科技大学自动化工程学院以及计算机科学与工程的五名研究生新生,因为研究生研究方向多为模式识别、机器人等领域,并且对人工智能技术非常感兴趣,因此在今年七月份的时候自发组织报名参加了今年的华为云无人车挑战赛。五位队员都有较为丰富的科研竞赛经历,且都是华为的忠实粉丝,对于这次全新的比赛充满了信心与热情。2 “我们遇到了哪些困难”首先是因为今年特殊的疫情原因,我们五个人前期无法集合在一起进行比赛项目的商讨以及规划,正式开始备赛是在九月初,因此我们的准备时间只有大概十五天,但是在学校学院的支持下,我们可以有一个比较好的调试场地,我们从开学也是直接进入高强度的开发工作中,在前往上海之前已经把基本功能实现。在半决赛和决赛的过程中,主要是小车巡线功能对光线环境有些敏感,在决赛比赛中时出现了跑出轨道的情况,不过我们队伍负责巡线的队员通过丰富的临场调车经验,还是及时的解决了这个问题,最终也取得了不错的成绩3 “我们的欢乐时光”现在回想一下我们备赛的日子,最欢乐的时光就是五个人在校园里调车的日日夜夜,一起面对技术难点,一起享受灵感实现的快乐,看着一台小车从什么都不会到最后实现了各种各样的功能。当然,在决赛的时候,最终能取得季军的成绩也让我们非常开心。二 赛题介绍小车需要在规定赛道上通过层层关卡,包括交通灯识别(出发&泊车)、弯道行驶、斑马线行人识别、限速解限速识别、自动泊车、竞速等。小车不仅仅要完成所有的赛点,还要跑得快。而这里考验的是参赛者的综合能力,包括车体结构、底盘控制、传感器、网络通信、云端数据处理、人工智能等多学科的知识,而难点在于将这些知识点融合贯通。参赛队员需要结合华为云人工智能平台(华为云ModelArts一站式AI开发与管理平台、HiLens端云协同AI开发应用平台)以及ROS操作系统对小车进行开发。三 整体解决方案:此次无人车大赛中参赛车辆主要有三个传感器:激光雷达和两个摄像头,分别是小车自身的摄像头以及HiLens Kit上的摄像头,而激光雷达+相机的多源数据融合解决方案正是无人驾驶领域最为主流的技术。我们队伍对每个传感器的作用进行了总结:利用激光雷达进行可通行区域检测以及动态避障,利用小车摄像头进行车道线检测以及利用HiLens Kit进行目标检测以及相应的决策控制。3.1 激光雷达通过获取点云数据在小车行驶前方的有效扇区内进行障碍均值坐标计算,给与有无障碍状态实现近距应急障碍检测,行人障碍检测,因此本车的一大亮点是当在行驶过程任意状态检测到障碍物都可以进行及时的刹车,在备赛过程中大大方便了我们的调试。可行进区域检测通过对激光雷达对可行进区域边界进行检测,获得可行进区域均值点。再通过阿克曼地盘运动边界确定前进点,并且获得期望方向。我们利用上面两个技术完成了比赛中对于在人行道处对障碍物的检测以及顺利通过交叉路口两个任务 3.2 利用小车车头部分的摄像头进行车道线检测,检测方案如下:Step1 :使用高斯滤波,均值滤波,大津法对图像进行处理。Step2:在图像中逐行搜索边界点。Step3:滤除不合理边界点。Step4:使用最小二乘法对左右边线进行修复。Step5:计算图像中线。Step6:使用最小二乘法对中线进行修复。Step7:使用PID计算转角。车道线检测效果如下:3.3再通过HiLens Kit进行目标检测, HiLens Kit是由华为云开发的多模态AI开发套件,使用的AI芯片是华为自研的Ascend 310芯片,具体16T的算力。同时,开发者不仅可以使用设备自带的摄像头,还可以外接摄像头,同时处理10-16路视频分析。HiLens Kit检测到各种目标后,通过socket协议发送给ROS端,并在ROS端进行一系列决策控制完成红灯停、绿灯行、人行道停止、限速牌限速、解限速牌解限速以及黄灯泊车一系列操作。 3.4小车整体实行方案如图:ROS通信如图:四 华为云ModelArts平台的使用比赛需要利用ModelArts平台进行目标检测任务,检测包括红绿黄灯检测、限速解限速牌检测、人行道检测。使用ModelArts平台进行模型搭建的流程包括:数据获取与增强、数据集准备、模型选择与训练、模型转换4.1 数据获取与增强 本次比赛除了官方提供的训练集外,在决赛阶段我们还额外增加了在测试场地与比赛场地的训练集,训练集的获取首先通过HiLens Kit摄像头捕捉到行驶路段的视频,保存到/tmp目录下,再通过tcp从HiLens 传到本地使用opencv间隔地从视频中截取图像作为我们的原始数据集。 此外,我们还利用了三种数据增强的方法,来解决数据量较少带来的过拟合问题,分别是horizontal flip、cutout和mix up。 horizontal flip就是水平镜像翻转,这个方法实现较为简单,但是镜像翻转使用时要注意只有当一个图像分布不具备视觉手性的时候,我们才能在不改变原先图像分布的前提下,使用镜像翻转来增强数据集,因为人行道、预选赛的红绿灯就不具备视觉手性,因此我们使用镜像翻转对这类图像来进行数据增强,转换效果如下: Cutout和mixup是计算机视觉中常用的两种数据增强方法,Cutout是将图片的随机区域填充噪声,而mixup是一种运用在计算机视觉中的对图像进行混类增强的算法,它可以将不同类之间的图像进行混合,从而扩充训练数据集,增强效果如下:4.2 数据集准备 Step1 下载OBS Browser,配置OBS桶,将原始采集数据上传至OBS桶内,并创建数据集。对象存储服务(Object Storage Service)是一款稳定、安全、高效、易用的云存储服务,具备标准Restful API接口,可存储任意数量和形式的非结构化数据对象存储服务OBS配置说明文档:https://support.huaweicloud.com/obs/index.htmlOBS控制台说明文档:https://support.huaweicloud.com/usermanual-obs/obs-usermanual-zh.pdf再进入ModelArts平台的数据标注模块,创建数据集,选择物体检测,添加标签集。数据集创建参考:https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0004.html Step2 在ModelArts中进行标注在“数据标注”页面单击“未标注”页签,此页面展示所有未标注的图片数据。单击任意一张图片,进入图片标注界面。用鼠标框选图片中的物体所在区域,然后在弹出的对话框中选择标签颜色,输入标签名称,按“Enter”键完成此标签的添加。标注完成后,左侧图片目录中此图片的状态将显示为“已标注”。如下图ModelArts数据标注说明:https://support.huaweicloud.com/exemlug-modelarts/modelarts_21_0011.html 4.3 模型选择与训练 在ModelArts里选择模型并创建训练任务,我们选择的模型是YOLO v3,YOLO是one stage的算法,相较于two stage的类似rcnn之类的模型的特点是速度快,这在无人车实时目标检测任务中非常重要。YOLO v3在v2基础上增加了网络复杂度,牺牲了少量速度来换取精度提升,且精度足够满足比赛需求。模型选择之后等待训练任务完成。 训练完成后可以通过可视化观察训练情况4.4 模型转换 在ModelArts训练得到理想模型后,需要在HiLens Studio里面完成模型转化,生成昇腾芯片上可使用的模型(OM模型)(这一步也可以在HiLens Studio里进行),参考:ModelArts平台模型转换工具指南:https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0107.html Hilens Studio 模型转换指能:https://support.huaweicloud.com/usermanual-hilens/hilens_02_0098.html五 华为云端云协同AI开发平台HiLens的使用5.1 HiLens配置 使用HiLens Kit之前,需要开通HiLens服务。首先注册华为云账号,并完成实名认证,接着进入控制台选择登录HiLens管理控制台,完成HiLens的权限申请。 通过PC 与 HiLens Kit 组网后,通过web可以界面化地登录到HiLens Kit 管理平台,进行一键式操作链接无线网络。5.2 HiLens Studio的使用 在HiLens控制台中进入HiLens Studio,首先需要新建一个project,在技能模板中我们可以选择无人车比赛的模板技能,并基于此模板进行修改,在project中我们主要有utils.py、socket_config.py以及main.py,其中utils.py用来对图片进行预处理、检测框的标注并输出类别、标注框坐标信息等功能,socket_config.py主要将检测结果编码并构建socket通信协议与ROS端进行信息交互,main.py用来调用上述文件以及训练好的模型。main.py文件中我们利用多线程避免因为socket通信造成的程序堵塞。 模型检测实际比赛效果如下:六 亮点(1) 鲁棒性好,我们的数据采集于多场景,因此在不同环境下检测效果较为稳定。(2) 连续帧间检测稳定,我们针对每项分类单独设置置信度阈值,防止一帧检测到一帧检测不到,并且在决策时保证严格的条件再进行控制指令,避免因外界客观因素造成的误识别。(3) 小车巡线能力强,如下图,在小车行驶在交叉路口的过程中,并没有完整的车道线,但依然可以通过补线操作实现巡线,并且图像处理速度快,因此我队参赛车辆可以接近满速跑完全程,也因此我队在半决赛与决赛中均给裁判团以及观众留下了极为深刻的印象。(4) 多源数据融合提升决策效果,如以下两个例子:识别到人行道后,告知转弯方向,(例如上图,告知将要左转),帮助小车巡线七 ModelArts与HiLens联合开发感想 在人工智能发展迅速的今天,如何将人工智能算法与多学科交叉并落地实现真正的智能时代成为广大学者与研发者共同的目标。华为云平台开发的ModelArts与HiLens的联合使用给予不论是人工智能初学者还是经验丰富的工程师更为便捷高效的开发环境。本次比赛,这ModelArts与HiLens联合使用的解决方案对比赛提供了非常高质量的服务。其优点如下:(1) 数据操作包括数据上传、数据标注以及数据集的发布极为方便。(2) 算法市场中华为云以及广大开发者提供了针对各种任务,包括但不限于图像分类、目标检测、语义分割等任务的算法,使用者可以直接调参使用。(3) ModelArts支持模型部署到多种生产环境,可部署为云端在线推理和批量推理,也可以直接部署到端和边。(4) ModelArts训练的模型可以通过模型转化并协同HiLens开发相关技能,将技能直接部署到端侧设备,实现算法落地。(5) HiLens端侧设备注册后可在设备管理处进行管理,包括查看、注销设备,以及一键升级设备的固件版本等。(6) HiLens提供大量的技能模板,开发者可以基于各种模板进行技能开发与部署。(7) 昇腾芯片加速使得模型推理更加迅速,使得时延更低。 参考文献:DeVries, T.; Taylor, G. W. Improved Regularization of Convolutional Neural Networks with Cutout. arXiv:1708.04552 [cs] 2017. Zhang, H.; Cisse, M.; Dauphin, Y. N.; Lopez-Paz, D. Mixup: Beyond Empirical Risk Minimization. arXiv:1710.09412 [cs, stat] 2018. Lin, Z.; Sun, J.; Davis, A.; Snavely, N. Visual Chirality. 2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) 2020, 12292–12300. https://doi.org/10.1109/CVPR42600.2020.01231. Redmon, J.; Farhadi, A. YOLOv3: An Incremental Improvement. 2018. Zheng, Z.; Wang, P.; Liu, W.; Li, J.; Ye, R.; Ren, D. Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression. arXiv:1911.08287 [cs] 2019. Yamauchi, Brian. "Frontier-based exploration using multiple robots." Proceedings of the second international conference on Autonomous agents. 1998. Lopez Perez, Jose J., et al. "Distributed multirobot exploration based on scene partitioning and frontier selection." Mathematical Problems in Engineering 2018 (2018).
推荐直播
-
华为云码道 × 仓颉编程:工程化AI编码探索2026/05/27 周三 19:00-21:00
刘俊杰-华为云仓颉语言专家/李炎-华为云码道技术专家/王智鹏-OpenCangjie开源社区发起人
本场直播围绕华为云仓颉语言与华为云码道的深度结合,展示华为云智能编程从零基础到高效落地的完整生态能力。以华为云码道为引擎,仓颉语言为载体,带给大家日常提效、趣味创新到极速量产的开发体验。
回顾中
热门标签