-
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).
-
直播回放链接:https://bbs.huaweicloud.com/live/cloud_live/202103021930.html直播时间:3月2日(本周二)晚19:30直播内容:1. 大赛介绍2. 往届选手分享3. Q&A答疑【赛事介绍】量子科技的发展具有重大科学意义和战略价值,是一项对传统技术体系产生冲击、进行重构的重大颠覆性技术创新,将引领新一轮科技革命和产业变革。其中,量子计算被认为是未来具有颠覆性影响的新型计算模式之一。上海大学将与华为、南方科技大学联合举办2021 量子计算黑客松全国大赛,该合作也将推进量子计算的基础与应用研究,争取做出开创性的前沿工作,望广大学子能够积极参与此次比赛,共同创新,推动量子计算的技术研究。【参赛对象】本次活动将在线上进行初赛和上海大学线下进行决赛。主要面向对量子计算感兴趣,具备一定量子计算、量子化学、机器学习等背景知识的本科及研究生均可报名参加。选手可自行组队,每队不超过3人。【时间安排】序号阶段开始时间结束时间说明1参赛报名2021/02/02 10:002021/03/15 15:00线上2赛题发布2021/02/02 10:00/线上3作品提交2021/02/02 10:002021/04/15 15:00线上4决赛名单及赛程公布2021/04/30 10:00/线上公布,选取前10名入围团队5决赛2021/05/152021/05/15上海大学(宝山校区)举行【报名方式】点击页面上方“立即报名”按钮注册报名,需要提交姓名、联系方式等信息。赛事官方网页:https://competition.huaweicloud.com/information/1000041373/introduction【报名要求】1、由于申请的计算资源限制,按报名次序接受先报名的前200个团队。2、参赛者需确保报名信息准确有效,如虚假信息报名,大赛组委会将取消参赛资格及奖励。【奖项设置】奖项奖品数量一等奖HUAWEI MateBook 13 2021/2020款 13英寸 全新11代酷睿i5 16G 512G 非触屏+ 5000元京东卡2张+实物证书1二等奖华为平板电脑MatePad 10.4英寸麒麟810/820八核处理器影音娱乐护眼办公学习教育平板电脑 4+128G/WiFi+2000元京东卡2张+实物证书2三等奖HUAWEI WATCH GT 2 运动款(46mm)华为智能手表+1000元京东卡2张+实物证书3优秀奖华为手环 4 Pro+200元京东卡2张+实物证书4【参赛流程】在线报名 → 在线比赛→ 决赛名单和赛程公布→决赛→获奖结果公布【组委会】主办方:上海大学理学院、华为量子计算研究团队协办方:南方科技大学【赛事交流】大赛交流答疑请务必加赛事微信群,小助手会拉你进群。群里会不定时公布赛事重要信息、获奖名单、直播信息等内容。大赛交流论坛:https://developer.huaweicloud.com/hero/group-1342.html【注意事项】奖品说明:如遇奖品库存不足会进行同价位奖品调换。
-
亲爱的同学们,恭喜进入到ICT大赛云赛道积分赛系列有奖活动中不管你是已经完成沙箱实验,还是准备开启沙箱实验,都可以参与到我们的活动中来,互动交流、总结分享,共同提升!共同进步!这次活动我们为大家准备了代金券、华为手环、华为音箱等惊喜奖励!!!心动了么???【活动时间】即日起-10月31日【活动规则】以“我的ICT大赛成长之路”为主题,在本活动帖下方回帖发表不少于100字的参赛经验/学习心得/实践笔记/沙箱成绩分享(实验进度完成100%截图)等内容,进行自身总结提升的同时也激励其他同学共同进步、成长和取得大赛佳绩【活动奖项】参与奖:对于符合要求的分享用户奖励精美开发者鼠标垫1个(按分享时间前50名获得);点赞奖:对于分享内容获得的点赞数进行排名,第1-10名将获得华为手环、智能音箱、华为云折叠收纳包等实物礼品;点赞人数第1名,获得华为手环 6 NFC版(349元)/华为 AI 音箱 2(349元)/华为超级快充无线车充 CK030(Max 50W)(349元)随机发放1个;点赞人数第2-3名,获得华为路由AX2 Pro/华为超级快充充电器(Max 66W)/有线机械键盘-罗技K845随机发放1个;点赞人数第4-10名,获得华为云折叠收纳包/开发者鼠标垫随机发放1个 【活动说明】1、为保证您顺利领取活动奖品,请您在获奖公示7日内填写奖品收货信息并完成实名认证,如您没有填写或未完成实名认证,视为放弃奖励。 >>实名认证操作指导2、礼品将于活动结束后随机选取并发货。如礼品出现断货,中奖用户可以选择等待到货,或置换同等价值礼品。3、公布活动结果且信息收集截止后7个工作日内发放相应奖品。⭐⭐⭐ ICT大赛云赛道积分赛有奖活动(云声反馈系列)------->>>>>点击参与⭐⭐⭐
-
亲爱的同学们,恭喜进入到ICT大赛云赛道积分赛系列有奖活动中不管你是已经完成沙箱实验,还是准备开启沙箱实验,都可以参与到我们的深度体验活动中来,互动交流、总结分享,共同提升!共同进步!这次活动我们为大家准备了代金券、华为手环、华为音箱等惊喜奖励!!!心动了么???【活动时间】即日起-12月31日【活动主题】寻找“产品试用”金点子【活动规则】领取免费试用产品的用户试用产品后反馈相关产品试用建议(如未体验过免费试用产品,可点击免费试用产品领取直达)【活动奖项】所有获奖用户均可优先获得华为官方旗舰级大会门票和官方证书,同时前五名还可获得实物大奖!!华为云金牌产品体验官·第1-3 名,获得官方证书及华为 GT2华为云银牌产品体验官·第4名,获得官方证书及华为 FreeBuds 3 无线耳机华为云铜牌产品体验官·第5名,获得官方证书及雷柏机械键盘V808xx产品体验最佳贡献奖,每个产品领域仅评选1名可获得官方证书【活动时间】即日起-10月31日【活动主题】云声建议反馈,好礼送不停【活动规则】用户可以在云声平台提交跟大赛赛事相关的问题和建议,跟华为云产品的功能建议、用户体验、产品缺陷等相关的问题和建议,帮助华为云产品优化迭代,实现产品共创。同时也可将建议截图在大赛技术圈活动中回帖反馈,根据回帖评论数前50名的用户奖励精美华为云折叠收纳包一个(条件:评论回复≥10人)【活动奖项】有效建议积分排行第1名: HUAWEI Sound 智能音箱有效建议积分排行第2-4名:华为随身WiFi有效建议积分排行第5-10名:华为快充移动电源 20000mAh【活动说明】1、为保证您顺利领取活动奖品,请您在获奖公示7日内填写奖品收货信息并完成实名认证,如您没有填写或未完成实名认证,视为放弃奖励。 >>实名认证操作指导2、云声建议反馈与“产品试用”金点子活动不叠加,如标题中出现【产品试用】字样,则默认此建议不参加当月云声活动。3、礼品将于活动结束后随机选取并发货。如礼品出现断货,中奖用户可以选择等待到货,或置换同等价值礼品。4、公布活动结果且信息收集截止后7个工作日内发放相应奖品。⭐⭐⭐ ICT大赛云赛道积分赛有奖活动(有奖反馈系列)------->>>>>点击参与⭐⭐⭐
-
赛题介绍这次比赛的赛道主要是针对金相显微图片来预测其对应定级,本次建模思路是当作一个分类问题来做,给定一个图像预测其所属的定级。比赛链接参赛队员本次比赛的队员有,裴森(中国科学院自动化研究所)、孙嘉玺(中国科学院自动化研究所)、安迪(南加大USC)、刘丹(山东财经大学)、张文轩(西安交通大学)我们的方法数据处理拿到数据后,我们首先对数据进行筛查,在筛查过程中我们发现,数据中主要包含两类错误,第一类就是同一张图片包含在数据集中有多个定级标签。第二类错误,就是图片明显的标签错误,因为标签是按照图片中晶元密度给定的,所以人眼就可以检测出来。具体实例如下:为了处理这些数据,我们采用了基于模型的清洗方法。因为在模型的训练中,一般outlier很难拟合。基于这个知识,我们首先将模型训练到0.9正确率,那么预测错误的0.1很可能含有outlier。这时候我们通过人工的手段,对这0.1预测错误的数据进行清洗。清洗后,如果模型表现更好,说明我们人工清洗的数据是对的,否则需要重新对数据进行清洗。数据增强为了提高训练阶段模型的泛化性能,我们使用了训练增强的技术。因为晶元的分布在显微图像上具有不均匀性,所以需要整个图像的信息才能判断出图像的定级。因此在数据增强上不建议使用随机裁剪,在我们的模型上,随机裁剪也会对我们模型的表现有消极影响。完整的数据增强的一些trick和其效果如下:随机旋转:小角度(5°)范围内随机旋转,可提升模型泛化能力(≈+0.5% )随机裁切:可以保留细节信息,但是全局信息受限,分级任务不过分强调局部信息(≈-0.7%)全局下采样:细节信息部分丢失,全局信息被较好地保留,分级任务依赖图像整体(≈+1.2% )色彩变换:对于包含语义信息的目标识别或者分类比较有效,分级任务收益较小(≈+0.0% )镜像翻转: 不改变金相图的含义与图像尺寸,可扩充样本数量,不会带来负面影响(≈+0.9% )尺度完备网络:Kernel Completed Net (KCN)我们这个模型也是从传统方法截点法得到的启发。这个模型有三个特点:输入时图像中的某一行或者列使用多个卷积神经网络并行提取多尺度感受野信息使用Attention机制对冗余感受野进行权重上的屏蔽首先为什么使用图像中的某一行作为输入呢?因为截点法就是在图像中画一个线,通过这些线与晶元边界交点的个数来计算定级。这就说明,某些行就包含了足够的定级信息。另外因为不同定级的晶元大小时不同的,因为对于大的晶元来说需要大的感受野对晶元进行计数,对于小的晶元来说,需要小的感受野对晶元进行计数。多以多尺度的感受野特诊提取是必要的。但是这同样引入一个问题,就是会有冗余的感受野,比如在对小晶元进行计数的时候,大的感受野输出结果是没有任何参考价值的,所以需要把大感受的输出进行屏蔽。我们使用的屏蔽方法就是用Attention机制来学习一个权重,把冗余信息的权重调小。网络架构入下:首先输入的图像行或者图像列被并行的卷积网络处理成多个不同长度的序列,这些序列经过自适应池化归一化成512长度。将这些序列堆叠到一起后,再经过Attention层的处理,就被送到MLP层预测分类结果。对比式残差网络:Contrast ResNet(CRN)我们为比赛设计的第二个模型就是对比式残差网络,这个网络使用了对比学习和有监督学习融合的训练方式,因为也继承了两者的优点。比如能捕捉更多类内信息和鲁棒性更高、精度更高等。架构如下:输入图像首先经过两次数据增强后得到三张图像,这三张图像经过ResNet得到三个特征向量,我们把这三个向量看作三张图的语义表示。将这三个向量经过Channel Attention的校正,送到MLP里面,就可以输出最终的分类结果。模型集成因为我们的模型是异构的,因此集成到一起可以大大提升最终效果。在集成公式上,我们选择Adaboost的集成公式对两个模型进行集成,最终获得了1.8%的性能提升。赛后总结这次比赛取得了不错的成绩。但是比赛完成后,复盘整个比赛,还是可以发现很多可以提升的地方,比如在问题的定义上,如果定义成回归问题,那么效果会不会更好。如果在我们的方法可以将截点法自动化建模,就算精度提升不多,但是比直接输出图片定级概率更有意义。因此学无止境,未来路上继续努力求索!撰写人:孙嘉玺 2021/11/10
-
成员介绍本次比赛我们的队长是 何笑韬,队员是何向萌和梁保金。我们都来自西安交通大学电信学部信通学院图像所, 主要研究方向为图像质量评价和视觉显著性分析。下面介绍我们团队的解决方案。一、赛题分析本赛题的任务是基于显微镜成像的金相图片评估定级结果,可将其抽象为一个图像分类任务或者是一个回归任务,赛题存在如下的几个难点,下面我们结合数据集和赛题,详细说明其具体难点。1.图片数量有限,尺寸较大本次比赛数据集图片较少,且图片尺寸较大,数据集中图片可以四张组合在一起为一张完整的大图。2.图片局部区域的晶粒度差异大本次比赛数据集图片内部patch区域的晶粒度差异较大,如下图所示。3.图片标注误差由于人为标注的不确定性,数据集中存在部分标注错误图片/重复图片,如下图所示。4.混合评分标准本次比赛的评分标准混合考虑了acc0和acc0_5的内容,因此需要指定合适的训练策略,有的放矢。5.图片特性分析最后就是赛题的图片内容上表现出,色彩单一,形状不敏感的特性,可据此采用不同的增强策略。二、数据预处理和增强根据上面的分析,我们可以制定出如下的数据预处理和数增强策略,(√)表示有效,(×)表示无效:数据预处理数据清洗(√)利用md5值查找重复图片,对于同标签的重复图片,保留一张对于不同标签的重复图片,通过人工标注的方式选择合适的标签,最终删除重复图片数:319张;更改标签图片数:35张。cleanlab数据清洗(×)使用五折训练,将预测结果使用cleanlab进行错误标签查找,具体流程如下: 3.针对准确率较差的数据人工清洗(×) 我们针对模型识别率较差的晶粒度9.0/9.5 7.0/6.5图片进行人工清洗,但效果不佳。数据增强离线切块训练baseline的RandomResizedCrop不符合此任务的实际,改用RandomCrop后,在线训练时难以收敛,为了增加数据量的同时,提高模型的训练稳定性,我们采用一种折衷的策略,即离线裁剪图像块,进行离线训练的策略。最终我们对训练集图片进行了重叠裁剪,将原始图片裁剪为224*224的patch,裁剪步长设置为56,即重叠3/4,最后得到训练图片1178688张。在线增强对于在线增强,我们主要采用了如下的增强策略,但只有随机水平和竖直翻转有效。三、网络选择和损失函数设计网络选择网络模型的选择上,我们尝试了很多网路,但最终发现小模型就可以满足精度要求,增大模型对最终的推理精度没有很大提升。我们还尝试了(1)结合梯度图,训练双分支网络(2)将分类问题退化为回归问题,最后都没有取得很好的结果。因此最终我们选择resnet34作为最终模型。损失函数设计本次比赛除了考虑了acc0还考虑了acc0_5,因此我们设计了如下的损失函数,其可以有效提高acc0_5的得分。四、模型训练此次比赛我们的训练中使用前面所生成的裁剪后的1178688张图片进行训练,5个epoch左右即可收敛,参数如下:(1)数据集将数据集按照9:1的比例划分为训练集与验证集训练集按照步长56、尺寸224×224进行滑动剪裁,获得训练集图片1178688张验证集图片380张 图片尺寸1376×1104(2)batch_size 32(3)训练epoch 8 选择最优线下epoch上传(4)初始学习率和更迭策略:1e-2,每1epoch衰减为原来的0.1倍(5)优化器:SGD(6)损失函数: 0.5CrossEntropyLoss + 0.5mapL1loss五、推理策略本次比赛中,为了提高模型推理的效果,我们还进行了测试增强,主要尝试了以下三种策略,如下图所示:大图预测:对整图预测,结合TTA,得到最终分类结果小图预测:大图裁成小块,预测小块,结合预测策略,得到分类结果小图滑动预测:大图重叠裁成小块,预测小块,结合预测策略,得到分类结果最终,我们采用的策略是:小图滑动裁剪,结合小图预测结果的众数,得到最终分类结果。这一策略在线上取得最优结果。六、性能提升曲线结合前面所说的解决方案,我们的性能提升曲线如下图:飞龙在天2021/11/10
-
团队介绍我们是来自广西师范大学计算机科学与工程学院的研二学生。队长冼添涛,队员何凯杰,主要研究方向为图像描述,跨模态检索,目标追踪。下面介绍我们团队的解决方案。1. 任务基于显微镜成像的金相图片评估定级结果2. 数据分析拿到初始数据后,我们对数据的类别进行了分析,如图中所示,数据集包含4222张图片,类别之间存在着严重的不均衡,最少的类别只有161张,最多的类别有524张,3倍多的差距。 使用图片查重工具Duplicate Photo Finder Plues,发现总共有621张重复图片,占总量的14.7%。 我们把重复数据分为三类: 类内重复、邻居重复(正负0.5范围的重复)和间隔重复(超出正负0.5的重复)。对不同类型采取不同的策略,尽量减少图片损失。3. 数据预处理通过观察数据,我们发现四张连号的图片是一张大图切分而来。如果1/4小大的局部信息就足以判断图片的类别,我们大胆假设图片的局部信息之间不存在强关联,那么可以通过打乱图片的局部位置获得新的图片,来作为数据扩充。 具体来说,我们把一张图分为四个小块,随机组合,那么一张图可以获得4x3x2x1=24种组合。 通过上述扩充,我们的获得了9465张图片的训练集和280张图片的验证集。注:验证集不包括任何扩充图片。4. 实验设置模型:Swin-Base-384学习率:初始1e-4, 策略ReduceLROnPlateau(5个epoch无提升则*0.5)损失函数 :Label Smothing(平滑因子0.2 ) 优化器 :Adam Batch size::24Epoch:805. 预测分类训练数据增强RandomGridShuffleGaussianBlurGridDistortionRandomResizedCropRandomHorizontalFlipRandomVerticalFlipRandomRotationRandomErasing本阶段主要是让Swin-Transformer拟合数据集。最终在初赛获得90.53,复赛85.99的成绩。6. 相似度分类训练受启发于比较法,除了让模型学习学习预测类别,我们也可以显式地训练模型根据对比图片的相似度判断类别。核心思想:基于对比学习的思想, 让相似的图片距离近,不相似的图片距离远。 实际上,在单纯的模型分类能力训练中,模型已经隐式的学习到了这种对比能力。为了强化模型的判断能力,我们设计了一种对比训练方法,对上一阶段得到的模型进行显式训练。对比学习的大概框架如图:为此,我们对模型结构进行了修改。我们新增了一个相似度计算头,把每张图片编码为144x512的向量表示注:本阶段只训练相似度头的参数。具体实现1. 对批次内的输入图片编码, 得到大小为 [batch,144,512] 的特征矩阵2. 对验证集所有图片编码,按类求均值,得到大小为 [14,144,512] 的特征矩阵,作为14个类别的对比图片表示3. 每张输入图片会对14个类别对比图片表示进行余弦相似度计算,得到大小为 [batch, 14] 的相似度矩阵4. 损失计算 损失函数该损失函数的核心思想为,当输入图片与正样本的相似度 >= 与负样本相似度 + α ,损失-> 0 。因此,为了最小化损失值,模型会在每个迭代拉大与同类对比图片的相似度,缩减与不同类对比图片的相似度,最终获得很好的分类能力。7. 结合完成第二阶段训练后,对所有图片(训练集+验证集)进行编码,按类别均值,得到大小为 [14, 144, 512] 的特征矩阵作为线上测试时候的对比集。最终分类结果 = 预测分类概率 + 相似度分类概率。 最终得到复赛成绩86.32。
-
一、前言团队介绍:三个来自于西安交通大学的研二学生: 高泱晗,专业:控制科学与工程 研究方向:社交网络,多分类问题 张 洁,专业:控制科学与工程 研究方向:智能电网 张潇然,专业:信息与通信工程, 研究方向:图像隐写,信息隐藏队伍宣言:岂曰无饭 与子同甘 干饭狂魔 拒绝摆烂(合影就不放大赛要求那个合照了,像是罚站一样)二、比赛历程和思路输入输出说明:输入是RGB的三通道数据;输出为类别。在确定完输入输出之后,首先按照惯例,进行一波baseline的复现。Baseline采用的是ResNet50。ResNet理解: 当深度学习网络层数越深时,理论上网络的表达能力会更强,但是CNN网络达到一定的深度后,再加深,分类性能不会提高,而是会导致网络收敛更缓慢,准确率也随着降低,即使把数据集增大,解决过拟合的问题,分类性能和准确度也不会提高,ResNet应运而生 。对于“随着网络加深,准确率下降”的问题,Resnet提供了两种选择方式,也就是identity mapping和residual mapping。分类结果正确率约为70%。后续优化思路也很清晰:1、基于数据的预处理和特征抽取;2、基于算法的优化。思路一:数据清洗:异常值处理 原始数据集中,部分图像被赋于了不正确的标签,例如以下两张图均为label=6.5的样本。当模型在训练集上充分拟合时,我们会获得较小的训练误差。但是,对于不可见的测试集模型的测试误差会增大。因而,标签错误数据将会成为噪声,干扰模型的训练。对于此类数据通过人工选取的方式进行剔除。思路二:数据增强图像随机地进行旋转;图像随机地进行水平翻转;图像随机地进行垂直翻转;调整图像的亮度,对比度和色调。目的:在不改变图像的尺寸与语义的前提下扩充图像样本,增强模型的泛化性能。思路三:改造数据集/TTA测试时数据增强(Test-Time Augmentation)数据增强是一种在模型训练期间通常使用的方法,它使用训练数据集中修改过的样本副本来扩展训练集。通常使用图像数据来执行数据增强,其中通过执行一些图像操作技术来创建训练数据集中的图像副本,例如缩放、翻转、移动等等。(transform/flip/rotation)思路四:模型的选择分别选用不同ResNet网络进行测试,根据奥卡姆剃刀原则,同时考虑到ResNet模型越复杂,越容易产生过拟合现象;最终选用ResNet 18;结果更新:89.96%。对于单一模型,初赛成绩为:0.8996(第七名);复赛成绩为:0.8432。引入TTA后,最终成绩为:0.8477(第五名) 。三、反思和感悟反思:比赛结束之后,最主要的遗憾是在发现数据处理和数据增强对于模型的准确率有巨大帮助之后,后期在尝试更多的模型的时候均为浅尝辄止,也并未模型融合的思想。感悟:比赛的初衷只是想丰富简历,抱着试试的态度,最后获得了大赛的第六名也是意料之外,欣喜若狂。最大的感慨在于:绝大多数情况下,我们所畏惧的就是恐惧本身,真刀真枪干的时候才发现很多困难并不是不可逾越的大山。BTW:感谢大赛组委员,比赛全过程公正公平公开,让每一位参赛人员都可以享受其中。同时感谢每一位工作人员,大家都很善解人意且认真。
-
赛题任务赛题是基于显微镜成像的金相图片评估定级,要求对于金相图片给出离散的评级以及置信度,因此我们将此评级任务视为图像分类任务来完成。数据处理在训练和推理过程中,我们将图像统一缩放到800×640。在训练时随机从图像中裁剪出384×384的区域作为网络输入。而在测试时从图像的中心以及四个角落进行裁剪。这种数据处理方式主要是出于以下两点:在思考数据处理方式时,考虑到尺度变换会影响到晶粒的形状和大小,所以我们认为应该尽量保持图片的长宽比,并且对图像进行统一尺度的缩放。此外,我们还有一个非常矛盾的观点,就是一方面想让模型“看到”的区域尽可能大(给出预测所依据的区域越大,给出的预测就越有代表性),一方面又不想让模型“看到”的区域过大(因为模型固定了输入的尺寸,我们觉得对较大的的区域进行下采样会使图像丢失过多细节)但是在学习了其他参赛队伍的方案之后,我们意识到我们可能低估了神经网络的鲁棒性,应该对数据进行更大胆的缩放和增强。模型训练首先训练swin-window12-patch4-base-384,训练所用参数:随后训练DeiT-patch16-base-384对swin transformer进行蒸馏,使用参数为:初赛中蒸馏得到的DeiT相对于swin提升了1.34%评分。(在训练DeiT时,虽然DeiT的论文中在imagenet上的结果是hard distillation好于soft distillation,但是我们的实验中是soft distillation好于hard distillation)模型推理由于在数据处理时我们采取了折中的方式,因此我们使用测试时数据增强来增加预测结果对整张图片的代表性,既对图像中心和四个角落的裁剪图片分别预测得到x_{1}~x_{5}五个score,然后对x_{1}~x_{5}进行以下操作:在初赛中,测试时数据增强能为我们所有尝试过的模型带来1.5%左右的评分提升。总结数据清洗与数据增强十分重要,虽然在比赛过程中我们也尝试了对错误数据进行纠正以及进行数据增强,但是由于缺乏经验和方法,并没有得到比较好的效果。这次比赛使我们有机会学习大佬们对数据的理解以及处理方法,学习的收获对于我们来说也是参赛奖励,所以十分庆幸能有这次参赛机会。
-
成员介绍我们是来自广西大学电气工程学院的队伍,我们的指导老师是高放老师,主要研究方向是深度学习,图像处理,量子人工智能,队长为李雪涛,主要研究方向是深度学习和图像分类,其他两名成员分别是王家宝和孙晴艺,主要研究方向是深度学习、深度图像处理和3D位姿估计。一、赛题分析众所周知,钢铁是当代社会重要的结构性材料之一,而晶粒度级别是评价钢材性能的重要指标,传统晶粒度定级方法是通过人眼比对,或者通过计数等方式对其定级,但是当一张钢材截面中晶粒数量按指数级倍增时,依靠肉眼是无法对其进行判断的,所以有什么方法可以代替传统定级方法对钢铁进行又快又准的定级呢?我们的答案是深度学习,我们对基于CNN的模型进行了很多尝试,下表是所尝试的模型,这些模型精度表现残次不齐,经过比对之后,Densenet121以最少的参数量以及较高的分数表现最优,所以我们选择了Densenet121作为backbone进行后续优化二、数据分析通过观察原数据集,我们发现原数据集中存在许多脏数据,如果这种数据过多,会影响系统的鲁棒性,所以我们决定对数据进行清洗。2.1 数据清洗清洗原则是如果多个模型对训练集的某张图片均判断错误,则通过列表记录图片名称,再通过人工判断是否应该对该图片进行删除。2.2 数据扩增清洗过后由于样本数过小,我们对清洗后的数据进行了扩充,首先我们对原图进行裁剪,分别在四个角裁出四张640X640的图片,然后我们对序号为偶数的图片进行了水平翻转,对序号为奇数的图片进行了垂直翻转,再对翻转之后的图片进行同样的裁剪操作,这样进行扩充之后即保证了样本的多样性,也保证了数据集容量。2.3 数据处理结果这是官方数据、清洗后的数据以及清洗扩展后的数据分布,我们可以直观地看到扩充之后的数据集在数量上和多样性上都有提升。经过数据处理后,初赛分数实现了由0.835到0.855的提升三、模型设计这是我们所选的backbone densenet121的网络结构。他由四个dense模块串联组成,其中每个dense块中又分别以稠密连接进行连接,这种连接方式可以对图中特征进行保留,并且可以通过dropout对参数量级进行缩小,因此虽然模型连接很稠密,但是模型参数量却很小。在此基础上我们引进了自适应权重通道注意力机制AWCA模块,和上下文注意力机制PSNL模块虽然说Attention is all your need!但是每当我们处理一个事情之前都需要考虑这三个问题,就是:WHY?HOW?WHAT?为什么做,怎么做,有什么效果。3.1 Why AWCA and PSNL?首先第一个问题,为什么要加入AWCA注意力机制,是因为注意力机制可以让机器有目的性地去学习与目标任务相关的图像信息,这些是经过AWCA处理之后的可视化图片,这里有128个通道的特征图,我们挑出了两张权重值相差较大的图片进行对比,可以看到权重值较大的图片可能会更多地去关注晶粒的面积信息。这是经过PSNL的特征图,可以看到经过上下文注意力机制后的特征图可能更多的会去关注晶粒的边缘信息。3.2 How AWCA and PSNL Work?AWCA具体的工作原理是,通过对原图进行维度变换,平面拉伸,正则化,点乘等操作计算出一个自适应权重对每个通道赋予权重,如图所示,输出图片的特征图可能在某个通道的权重值会比较高。PSNL模块首先会将图片分为四个大小相同的图像块,再对每个图像块进行变形,转置,叉乘,最后与原始图片进行相加操作。此操作可以将相隔较远的信息进行融合,实现空间加权操作以得到更强的特征表示。3.3 What can them do?最后,通过加入这两个注意力模块后,初赛得分从0.855提升至0.8793.4 其他的提分策略3.4.1 优化图片预处理其他提分的策略包括对图片预处理的优化,baseline中预处理步骤是先随机裁剪成任意大小,再统一缩放成224X224。这会损失很多图像信息。我们更改后的训练前的图片预处理是直接将整个图片缩小成640x797,再裁剪成640x640,最大程度保留了全图的信息。经过此操作后,初赛分数由0.879提升至0.881.3.4.2 优化预测结果此外,我们通过投票机制优化了预测结果,首先我们让模型对同一张图片进行五次预测,再对预测的出的结果进行投票选出重复次数最多的预测结果,此操作后,初赛分数由0.881提升至0.884.四、总结与展望总结针对数据进行数据清洗与扩充,增加了模型鲁棒性提出DenseNet121与通道级注意力机制、全文注意力机制结合的连接模型优化对图片的预处理,最大程度保留原图特征基于pytorch实现端到端训练,模型简洁,易复现模型容量小,参数量少(71M)展望潜力大,可通过优化模型结构对性能继续提升可对模型进行量化与剪枝,在保证精度的同时进一步提升模型速度可落地形成产品,并且在落地场景中增加反馈机制,对模型进行在线训练,可不断优化模型参数可利用多模态学习方法对模型进行优化撰写人:李雪涛2021/11/13
-
赛题介绍本次比赛需要选手基于显微镜成像的金相图片进行智能评估定级,原始数据为钢铁经过一系列处理后在500倍的显微镜下成像的金相图片,标签则在常见的定级范围[6.5,13.0]内以0.5级为间隔截断成14类分类标签,因此该比赛可以视为14分类的多分类问题。精度评价指标在初赛和复赛有所不同,但均为带有允许偏差的准确率指标。数据探索性分析我们首先对本次比赛的数据进行了一定的探索性分析,结果主要分为三个部分1.标签均衡:对标签的统计分析显示,该赛题提供的数据在14个类别间分布比较均衡,没有出现严重的倾斜2.尺寸恒定:所有金相图片均为1376x1104的固定尺寸图像3.高类纹理密度极大:在10.0以上的类别中晶粒分布非常密集,需要较高解析度的图片才能清晰分辨另外,我们还观察到了非常严重的图片重复与批次效应解决方案数据清洗Mean Nearest Maintaining 均值最邻近保留对于一组完全重复的图片,我们将其标签值进行平均,与组内原始标签集合进行对比,保留最邻近的数据并删除其它,在不修改原始标签的情况下去除了重复并且最小化人工噪声采样与增强随机滑窗采样将数据等比缩小至512x638,并在训练过程中在线使用512x512的随机滑窗进行均匀采样,在不破坏数据尺度的情况下获取经扩充的高分辨率面向应用的启发式数据增强利用金属晶体的对称性使用随机旋转/翻转进行数据扩充,并针对中大型金相显微镜可能发生的对焦问题引入了随机高斯模糊,另外根据现有数据中存在的金相组织缺陷的尺寸及数量加入了随机块擦除。此外,由于标签是由连续值截断而来,我们使用了Cutmix方法来扩增数据并将标签软化,防止模型对离群值产生过高置信度。基于簇的分类模型为了在数据有限的情况下避免过拟合,我们使用EfficientNetB0作为骨干网络,并在池化层后使用线性瓶颈模块将特征降维至512维为了适应基于簇分类时类数多、类内少的特点,我们在分类器的输出层加入对角度的间隔惩罚,与一般的softmax损失相比,使类内更加聚集,类间更加分离级联模型测试集存在簇外样本只针对簇进行分类时,本地交叉验证与在线提交成绩存在较大差距,由于测试集文件名不可见,所以推断为在线测试集中存在训练集中不存在的簇外样本级联分类模型基于这种假设,我们在簇分类模型之后级联了直接定级的分类模型,对于簇分类时置信度较低的簇外样本额外进行定级以提升准确率BatchTTA后处理卷积核的不对称性由于训练过程中卷积网络可能产生各向异性,我们在推理时将同一张图片进行了八方向的翻转,并将其推理结果进行均值融合。BatchTTA策略为了提升推理速度,我们将8张增强后图像叠加作为batch。如此仅需一次推理即可获得八个结果。相比单张推理仅增加了30%的推理时间,并大幅提升模型精度及泛化性能。消融实验基于V100 GPU的推理时间测试为了保证解决方案的可行性,我们对方案内每一个创新点带来的收益及对推理时间的影响进行了详细测定。最终方案在V100GPU FP16 Batch=1下可实现30FPS实时推理
-
团队介绍我们来自广西友迪咨询科技有限公司,队长陆宇升,队员林景锋、赖沛成。下面介绍我们团队的解决方案。路线选择本赛题的任务是基于显微镜成像的金相图片评估定级,可以使用比较法、截线法和面积法。比较法将赛题视为图像分类问题,比较容易实现。我们同时在比较法和面积法两条路线上进行探索。在比较法的尝试汇中我们发现,数据增强中使用RandomResizedCrop(官方baseline中使用了这个方法),会比使用固定缩放比的Resize/CenterCrop方案获得更高的分数。按照晶粒度等级的定义,晶粒度等级是由晶粒度大小决定的,因此,尺度相关特征应该是卷积网络用来分类的主要特征。RandomResizedCrop会把图像进行随机缩放,会让神经网络在分类决策的时候,排除尺度相关特征,实现尺度无关性,这对普通的分类问题会有用,但理论上会降低金相评级的准确性。但事实正好相反,我们猜测,卷积神经网络主要根据尺度无关的特征进行分类,这样真实的泛化能力应该不强。因此,大赛中我们把大部分时间和精力放在面积法探索上,由于图像噪音和模糊晶粒边界难以区分等问题难以在短时间内解决,在面积法上我们没有取得理想结果,下面只介绍我们在比较法上的具体方案。网络选择和超参数我们尝试了ResNeXt101、EfficientNet b0/b4等网络,最高分是基于EfficientNet b4的方案。数据增强我们使用了随机缩放裁剪,垂直翻转,水平翻转,仿射变换,cutout,其中仿射变换和cutout效果明显,提升大约1%。优化器使用AdamW,提升大约0.5%。gradcam热力图我们使用gradcam热力图分析神经网络分类效果不理想的原因,以下分析基于ResNeXt101网络。可以看出,单模型神经网络resnext101-32*8d很多情况下仅依据图片局部区域特征进行分类决策,容易发生过拟合。关注区域平均化改进算法ResNeXt、EfficientNet等网络只是根据局部区域特征进行分类,大部分区域属于无用背景被忽略。这适用于通常的分类问题,但对于晶粒度定级,整个图没有无用背景,如果仅根据局部特征进行分类,容易发生过拟合。我们提出一种新的改进方法,强制神经网络分类时均衡考虑图片的所有区域的特征,而不是某个局部的特征。 ResNeXt、EfficientNet等网络的最顶层输出的feature map,会被avgpool池化为1*1*c的张量,然后送入全连接层fc分类。我们改造avgpool的output size为(d,d),然后拆分为d*d个1*1*c的张量,分别送入全连接层fc,分别计算softmax和交叉熵损失函数并求和,作为损失函数。这样,改进后的网络根据d*d个区域特征进行分类,使得网络不会根据范围很小的局部特征分类,另一个角度上看,相当于样本数量增加d*d倍,抑制过拟合问题。本地测试有很大提升,相同参数下,分数提高2~4个百分点。我们使用gradcam热力图分析比较原网络和改进后的网络的模型:可以看到,改进后的网络关注的区域分散到图片的四个角,而不是集中在某个小区域,我们认为这应该可以提高网络的泛化能力。
-
HarmonyOS的分布式技术,让小朋友爱上涂鸦 作为一个拥有八年开发经验的团队,“儿童艺术创想”在儿童艺术创造类应用领域已颇有建树,本次带来的作品是——《Labo 涂鸦》。那么,“儿童艺术创想”是如何与 HarmonyOS 开发者应用创新大赛结缘并开发出创新作品的?背后用到哪些HarmonyOS先进技术?就让我们在负责人兼Labo涂鸦开发者吁勇的视频中深入了解吧~正如吁勇所说,HarmonyOS开发者创新大赛提供了一个平台,让开发者们能够抢先体验到HarmonyOS强大的分布式能力和开发工具链。得益于HarmonyOS强大的设备发现和互联能力,团队在开发过程中只需把重点放在产品本身的设计和调优上面,无需花太多精力在技术实现上,大大简化了开发流程。此外,基于HarmonyOS的分布式技术,《Labo涂鸦》摆脱了绘画应用多数只能单机操作的限制,实现了跨设备联机功能,既可以让小朋友绘制图画,也可以让父母或老师在不同设备上与小朋友一起进行涂鸦游戏,如绘画教学、联合作画、比赛等。只要设备处于同一局域网,就可以方便流畅地进行跨设备互动。尽管《Labo 涂鸦》已经初步实现团队关于亲子互动和教学的设想,但追求完美的他们不满足于此。团队十分看好HarmonyOS的未来发展并打算继续投入精力。 同时,他们也希望随着HarmonyOS 的发展,不断完善产品功能,创造出更多能让这个世界变的更加简单和有趣的产品,共同为用户带来更美好的生活体验。 HarmonyOS开发者【开发者说】栏目:https://mp.weixin.qq.com/s/dsIffKEOmYKNaCo790exRA
-
《分镜头App》的创作灵感来源于殷冬的日常观察,他发现平常人们在自拍时,往往会用前置摄像头,由于像素、取景景别等因素的限制,前摄拍出来的效果往往不是很理想;此外,当我们帮别人拍照时,对方也无法实时看到照片的取景角度和构图,拍出来的照片也很难让对方满意;对于照片的分享和美化,更是众口难调。为了解决这些痛点,提升用户的拍照体验,经过不断摸索,殷冬发现HarmonyOS的分布式技术有着很大的应用潜力。于是他基于HarmonyOS从0到1完成了《分镜头App》的开发。以下将为大家分享该款应用的开发者殷冬的开发心得。一、HarmonyOS技术使用 《分镜头App》主要用到了分布式文件服务、分布式硬件虚拟化、以及分布式数据服务。分布式文件服务利用分布式文件服务,可以自动同步其他设备拍摄的照片和视频,实现分布式相册功能。起初殷冬以为分布式文件服务使用起来会很复杂,例如是否需要自己控制同步、初始化功能等等。而真正接触后他发现,在底层上,分布式文件服务已经将复杂的工作都处理好了,只需用一行代码,就可以使用分布式文件服务,就相当于调用本地文件系统一样,只不过再继续向下,底层会帮助开发者处理很多业务。分布式硬件虚拟化分布式硬件虚拟化的特性,可以调用其他设备的硬件,实现相关的功能。在《分镜头App》中,调用其他设备的相机画面,就用到了分布式硬件虚拟化。并且可以控制拍摄画面的比例,实现不一样的拍摄效果。殷冬最初接触硬件虚拟化这个概念的时候,只是知道是基于分布式软总线实现的虚拟化,至于怎么使用,并不是很清楚,后来通过深入的学习发现,主动调用其他设备的接口,可以使用分布式任务调度或者IDL接口两种方法实现。而分布式任务调度和IDL接口,都可以传递实现Sequenceable接口的实现类对象。而硬件功能关键类都实现了Sequenceable接口,比如:相机预览画面的关键类Surface,就实现了Sequenceable接口。因此可以通过IDL将设备A的Surface对象,以参数的形式,传递到设备B。设备B的Service Ability执行相机初始化操作,就可以拿到设备B相机的拍摄画面。由此,就在代码编辑层面实现了硬件虚拟化。分布式数据服务在《分镜头App》中,有很多的协同操作。协同操作的核心逻辑,利用了分布式数据服务的数据变更通知功能。当一个设备触发协同操作时,通过变更通知,从设备触发UI和效果的变化,实现分布式协同功能。分布式数据服务有两个功能,可以为开发者带来很大的便捷。第一个是多端数据同步功能,当通过一个设备修改了数据库中的数据,其他设备也会做同步。第二个是在添加、修改、删除数据库数据时,其他设备如果创建了数据库的链接,并绑定了数据变更监听时,就会触发该监听。开发者可以利用这两个功能特性,做多端的协同功能。分布式相册实现相册主要存储图片、视频文件,可以使用分布式文件服务进行存储。此项功能殷冬还需要实现动态添加的效果,即:其他设备拍摄时,本机的相册列表动态显示刚刚拍摄的照片缩略图。这种效果可以在确定使用分布式文件服务存储照片和视频后,使用HarmonyOS的公共事件与通知功能,从而实现动态加载的效果。在拍摄完成时,通过公共事件功能发送一条广播。同时,在相册模块,注册公共事件,用于处理接收到通知后的动态添加缩略图逻辑。分布式文件服务负责同步拍摄的照片、视频等信息,公共事件通知则主动进行页面的刷新,二者合用,实现动态添加的效果。二、多设备协同实现目标设备未打开协同页面问题处理多设备协同实际上有个隐藏的前提,那就是所有设备都处于同一个协同页面中。这需要处理目标设备不在协同页面的问题。此时可以创建一个单版本分布式数据库,key值为设备id,value值为协同页面是否启动true/false。当进入到协同页面时,在onStart方法中设置值为true。当退出页面时,在onInactive方法中设置值为false。在发起协同前,可以通过单版本分布式数据库,获取到目标设备是否启动了协同页面。如果没有启动,可以先通过abilitySlice.startAbility()将目标设备拉起,进入到协同页面,然后再进入协同状态。如果目标设备已经处于协同页面,就可以直接进入到协同状态。统一管理分布式操作由于分布式数据服务每个应用最多同时打开16个KvStore,所以不能每一个协同操作都使用一个数据库。这里可以在value值上做文章,以实现通过一个分布式数据库,就可以实现一个页面中的多个操作的协同。首先,可以使用一个常量作为分布式协同数据库的key。每次put时,都使用这个常量作为key,以替换之前的数据。其次,需要创建一个实体类。成员变量中,需要有两个基础变量:1. operationType:int型,当前协同操作的类型;2. targetDeviceId:List<String>,需要协同的设备id数组;operationType字段主要是用来区分当前的操作类型,这样方便调用相同的功能进行协同操作。targetDeviceId主要是存储向哪些设备发起协同操作,可以通过判断本设备id是否在数组当中,如果不存在,就不做任何操作。此时需要将实体类转换成字符串,再存储到分布式协同数据库中。因此,可以通过JSONObject.toJSONString(),将实体类转换成字符串并进行存储。被调用方需要为分布式数据库,绑定数据变更监听。这样,其他设备添加或修改数据的时候,就会触发监听。监听类型要设备其他设备触发的变化,这样可以避免本地修改也会触发本地的监听的问题。在监听中就可以处理协同的功能。首先要判断变更的数据是否为空,避免后续出错。然后可以将key的json值取出,并做非空判断。接下来需要将json字符串转换成实体类,便于后续操作。这里可以使用JSONArray.parseObject(json, class)进行转换。然后进行判断,是否需要本设备进行协同。当本设备需要协同时,可以通过switch根据操作类型,调用不同的方法进行协同即可。总结殷冬通过官方文档、论坛、HarmonyOS技术社区等途径,系统的学习和了解HarmonyOS的特性,最终开发了本次大赛的《分镜头App》作品。未来,他还将持续深入了解HarmonyOS,尝试开发更为有趣的HarmonyOS分布式应用,也期待更多开发者加入到HarmonyOS生态,一起创造无限可能!HarmonyOS开发者【开发者说】栏目:https://mp.weixin.qq.com/s/ZYGIzhfGnhAc0s_GDTvcoA
-
HarmonyOS开发者创新大赛已于2021年5月24日落幕,在本次赛事中,来自古都西安的开拓者战队凭借《智能农场》这款作品最终获得大赛三等奖,该作品通过HarmonyOS的分布式软总线、分布式数据库技术、分布式任务调度、分布式跨设备数据流转等能力实现了多设备(传感器、智慧屏等)的互联互通、自动控制,实现了农场场景下多设备协同智能养殖体验,令人印象深刻。 以下是“开拓者战队”基于HarmonyOS打造《智能农场》作品的相关思考以及关键技术的简单分享:1、背景介绍 目前,市面上智慧农业相关的厂商设备(传感器等)相对独立,没有统一的操作系统平台,互联互通困难,且大多数设备部署需要连线,部署成本时间长,成本高,维护复杂度高。随着5G网络的覆盖,下一代全场景操作系统(HarmonyOS)的出现,让万物互联变得更加方便,可以实现一部手机操作所有IoT设备,实现各个IoT设备的互联互通。智能农场系统是基于HarmonyOS实现了多个IoT设备(传感器,电机,大屏等设备)的互联互通、自动控制,并实现全场景化的智慧养殖。智能农场通过各项传感器设备对农场的各项环境指标进行实时检测,并且可以进行自适应调节,让动物一直处于一个良好的生长环境。通过本系统可以实现指标超过阈值预警,智能提醒,智能求助等功能,让农场养殖门槛变低,让农场主轻松成为养殖专家。2、需求分析 智能农场系统通过对农场的空气温,湿度、光照度等各项环境参数进行实时采集,确保农场主可随时通过智能手机APP了解农场状况。同时,系统可以根据农场内外环境因子的变化进行自适应调解,不仅能保证农场中的动物长期处于良好的生长环境中,还能提升动物的产量和质量。本系统的特色业务功能包括:精细化智能提醒,专家视频求助等。智能提醒功能体现在多个场景中,如:农场温度过高,降温设备有损坏或者指定时间内温度没有降下来等异常情况出现时,系统会直接给管理者进行电话提醒或者消息推送;不仅如此,系统还会根据动物的年龄,对不同动物的生长周期进行预测,提醒管理者为动物打疫苗。智能求助功能则体现为,当管理者遇到一些养殖常识问题,可以通过智能求助查到相关帮助信息;同时,也提供了养殖专家视频求助功能,帮助管理者及时的解决养殖方面遇到的疑难杂症。 3、解决方案 本解决方案涉及角色:农场主,养殖专家 涉及硬件设备:手机、智慧屏、开发板,各类型传感器(比如:温湿度传感器、可燃气体传感器、光敏传感器、人体红外传感器等)以及各项外设(比如:风扇,加水设备,取暖设备等)。手机、智慧屏、开发板基于HarmonyOS,通过WIFI组网,实现各项设备之间的互联互通。农场主可以通过手机APP对养殖场景中的各项环境指标(温湿度阈值范围、可燃气体浓度范围、光照强度等)进行设置,也可设置定时任务(比如:定时加水、加料,定时播放音乐等),实现智能化提醒和自动化控制。解决方案中养殖技术和案例等信息的查询和分析等服务,由云端的数据服务提供,专家视频求助功能的视频通话服务由云端提供。4、主要模块介绍数据采集模块 (以采集温度为例)系统启动成功后,数据采集模块会启动定时任务采集温度数据,定时从温度传感器采集一次当前温度数据。如果采集成功,存入分布式数据库(KV方式存储),采集到的温度数据会实时刷新到温度显示界面。温度数据范围:-40~80℃。采集到的数据,可以流转到大屏方便用户查看。自动控制模块(以温度控制为例)定时获取当前温度数据与用户设置的正常阈值范围或者最大阈值范围(来自:Preferences)进行比较。如果当前温度在正常阈值范围内,不做处理;如果超过正常阈值范围,未超过最大阈值范围(比如:正常范围:5~30℃),包括两种情况:1. 低于5℃,打开加热设备,并调用智能提醒模块通知用户;温度恢复正常范围,关闭设备。2. 高于30℃,打开风扇降温,并调用智能提醒模块通知用户;温度恢复正常范围,关闭设备。如果超过最大阈值范围(比如:最大阈值范围:<-20℃或>60℃),包括两种情况:1. 低于-20℃,打开多个加热设备,并调用智能提醒模块,发送通知,并拨打电话通知用户;温度恢复正常范围,关闭设备。2. 高于60℃,打开喷水降温,并调用智能提醒模块,发送通知,并拨打电话通知用户;温度恢复正常范围,关闭设备。5、关键技术细节实现 1)分布式多设备发现,实现多设备协同、调度2)分布式数据流转3)socket通信实现设备间互联互通(如下关键代码)4) 踩坑(分布式任务调度和分布式数据库技术配合使用)(功能:智能农场手机端采集的数据实时同步到TV端)当手机端收到采集到的环境数据(如温度、湿度及可燃气体浓度),需要流转到智慧屏上进行显示,团队一开始使用的分布式任务调度,流转到TV端后,发现TV端显示的数据并没有实时刷新,显然不符合现实需求。为了实现数据的实时刷新,团队发现HarmonyOS有分布式数据服务的能力,可以实现同应用,同网络,同账号在不同设备之间实现数据实时共享,因此最终采用了HarmonyOS的分布式数据库技术,确保了手机端和TV端数据同步刷新的功能。在不依赖云端服务的情况下,实现此功能。从报名HarmonyOS开发者创新大赛开始,团队从一群从来没有配合过的HarmonyOS新手开发者成长为了专业开发者。参加大赛也让团队深刻感受到了HarmonyOS强大的分布式技术以及先进的设计理念,为今后开发更具创意和社会价值的作品打下了坚实的基础。星光不问赶路人,每一位HarmonyOS开发者都是华为汇聚的星星之火,希望越来越多的开发人才能够加入到HarmonyOS开发者生态,一起创造无限可能!
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第三期2026/08/21 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;念擎-华为云AI开发者运营案例开发专家
本期直播内容:AI六层能力首次详细解读 + 新一代华为云开发者空间亮相 + 校园案例直播带练
回顾中
热门标签