• [执行问题] mindspore 求梯度报错
    【功能模块】对mask_tensor进行优化【操作步骤&问题现象】1、定义的优化器:self.opt = nn.Adam(params=[Parameter(default_input=self.mask_tensor,name="mask", requires_grad=True)], learning_rate=0.01, weight_decay=0.0001)2、自定义的trainonestep:class TrainOneStepCell_3(nn.Cell): """自定义训练网络""" def __init__(self, network, optimizer, sens=1.0): """入参有三个:训练网络,优化器和反向传播缩放比例""" super(TrainOneStepCell_3, self).__init__(auto_prefix=False) self.network = network self.network.set_grad() self.optimizer = optimizer self.weights = self.optimizer.parameters self.grad = ops.composite.GradOperation(get_all=True, sens_param=False) def construct(self, input_tensor,mask_tensor,ref): loss = self.network(input_tensor,mask_tensor,ref) grads = self.grad(self.network)(input_tensor,mask_tensor,ref) # loss = ops.depend(loss, self.optimizer(grads[1])) self.optimizer(grads[1]) return grads,loss【截图信息】报错信息:【日志信息】(可选,上传日志内容或者附件)
  • [其他] NeuroFluid: 流体仿真的人工智能新范式
    近日,上海交通大学人工智能研究院杨小康教授、王韫博助理教授指导的AI+Science研究团队的成果《NeuroFluid: Fluid Dynamics Grounding with Particle-Driven Neural Radiance Fields》被国际顶级机器学习会议ICML 2022收录。论文所提出的“神经流体(NeuroFluid)”模型,利用基于神经隐式场的人工智能可微渲染技术,将流体物理仿真看作求解流体场景三维渲染问题的逆问题——从流体场景的一段多视角表观图像中,即可反推出流体内部的运动规律。这项成果为计算流体动力学、多粒子动力学系统研究开辟了一种人工智能新途径。论文链接: https://www.zhuanzhi.ai/paper/ddad8ebf86c68fae5d98015f1bc671f7代码地址: github.com/syguan96/NeuroFluid项目主页: syguan96.github.io/NeuroFluid/流体运动研究是重要的自然科学基础研究领域,在航空航天、大气、海洋、航运、能源、建筑、环境等众多领域有着广泛应用。在传统研究方法中,求解流体运动(例如速度场)需要首先在理论上精确刻画流体的动力学模型,并结合微分方程、数值分析对模型求解。但是通常对于复杂问题(例如湍流),人们很难用数学物理方程进行描述,复杂流体的Navier-Stokes方程是世界级千禧难题,至今依然没被很好解决。现有基于深度学习的方法通常从拉格朗日视角描述流体,即流体被看作由许多粒子组成,通过测定和约束每个粒子的运动即可测定和改变流体的运动。但是大多数方法通常要求已知流体的物理属性(例如粘性),并且需要粒子的运动信息(位置和速度)作为训练数据,这在真实场景中几乎不太可能。针对流体力学模型难以刻画和求解的问题,本文提出一种名为NeuroFluid的神经网络方法,实现流体动态反演(fluid dynamics grounding),即根据稀疏视角下对流体的2D表观视觉观察,推断推流体内在的3D物理运动状态,例如粒子的速度和位置等。如图2所示,NeuroFluid包含基于神经网络的流体粒子状态转移模型(Particle Transition Model)和由粒子驱动的神经网络渲染器(PhysNeRF),并将二者整合到一个端到端的联合优化框架中。优化过程包含三个阶段:1. 模拟:粒子状态转移模型根据初始状态(可用立体视觉方法粗估)预测流体粒子在后续时刻的运动轨迹;2. 渲染:神经网络渲染器PhysNeRF(图2右)根据粒子的几何信息将模拟结果渲染成图像;3. 比对:渲染图像和真实图像比对,计算误差,通过梯度反向传递优化模型参数。图2. NeuroFluid的训练过程(图左)及PhysNeRF的渲染示意(图右)本文使用的流体数据(HoneyCone、WaterCube、WaterSphere)具有不同的物理属性(如密度、粘度、颜色)或初始状态(如流体粒子位置、整体形态)。下列的实验从粒子动态反演、未来状态预测、新视角图像渲染、PhysNeRF域外场景泛化,验证了NeuroFluid的有效性。1实验1:流体粒子动态反演本实验计算从图像反演的粒子位置与真实粒子位置之间的距离误差(Pred2GT distance),作为评价指标。图3展示了NeuroFluid与流体粒子预测的有监督方法DLF[1]的数值结果对比,显然,NeuroFluid从视频中反演的流体粒子状态比DLF(用粒子运动速度和位置作为训练数据)更准确。图4对模型的粒子状态推断结果做了可视化,注意到随着时间的推移,NeuroFluid相比基线模型,其反演结果运动更加自然,能更好地匹配真实流体动态。图3. NeuroFluid(浅蓝色)在三个测试集上关于流体粒子位置的反演结果,相比流体粒子仿真的有监督模型DLF,NeuroFluid从图像推理流体内部状态,明显具有更好的准确性图4. NeuroFluid(第三行)在WaterCube场景中对流体粒子位置的推断结果,图中第一行为生成对应观测图像序列时所使用的“真实”流体粒子位置2实验2:流体未来状态预测在有效学习了流体的粒子状态转移模型后,可以很方便地实现预测流体在未来时刻的运动状态。如图5所示,本实验评估未来十个时刻内,模型预测的粒子位置与真实情况的误差。结果表明,NeuroFluid能够通过视觉观测学习流体运动的规律,推演合理的流体未来动态。图5. 流体未来状态预测误差。其中,DLF*表示将基线模型在与测试场景物理属性相近的数据上进行微调;DLF+表示将基线模型直接在测试场景上进行微调3实验3:流体场景的新视角图像渲染为了验证PhysNeRF渲染器的有效性,本实验在新视角合成(novel view synthesis)的任务上,广泛对比了各种基于神经隐式场的可微渲染技术,包括NeRF[2],NeRT-T (即NeRF+Time Index), D-NeRF[3]和Li et al. (2022)[4]等。如图6所示,在输入了粒子几何信息的情况下,NeuroFluid的渲染结果不仅在动态上与目标结果的匹配度最高,而且可以更好地渲染出流体的细节(如溅起的水珠)。图6. 新视角合成结果对比,左起第一列为新视角下的目标图像4实验4:  域外场景泛化PhysNeRF的基本假设是流体图像渲染应以粒子状态为驱动,故而应具有不同粒子分布下的强大泛化能力。为验证其泛化能力,本实验在使用有限的场景训练好PhysNeRF渲染器后,在测试时改变了流体的初始形貌,如图7所示,该几何形状为计算机图形学经典的Stanford Bunny。值得注意的是,在没有用Stanford Bunny数据对模型进行训练微调的情况下,PhysNeRF较为精细地渲染出了流体的表面细节。图7. PhysNeRF在域外流体场景(训练所未见)上的泛化效果总结:上海交通大学AI+Science研究团队所提出的NeuroFluid模型能成功拟合符合视觉观测的流体运动转移规律,从视觉表观观测反演流体内在运动,有望为传统流体力学无法准确刻画的复杂流体运动(如湍流)提供一种全新的计算范式。
  • [其他] 基于对抗性神经表示学习的异构域适应:电子商务与网络安全实验
    在现代监督学习中,如何在训练数据稀缺的新领域学习预测模型是一个日益严峻的挑战。这激励开发领域适应方法,利用已知领域(源领域)中的知识,以适应具有不同概率分布的新领域(目标领域)。当源和目标域处于异构特征空间(称为异构域适应(HDA))时,这就变得更具挑战性。虽然大多数HDA方法利用数学优化将源数据和目标数据映射到一个共同的空间,但它们具有较低的可转移性。神经表征已被证明更具可转移性;然而,它们主要是为同类环境设计的。基于区域适应理论,我们提出了一种新的框架——异构对抗性神经域适应(Heterogeneous Adversarial Neural domain adaptation, HANDA),以有效地最大化异质性环境下的可迁移性。HANDA在统一的神经网络体系结构中进行特征和分布对齐,通过对抗核学习实现域不变性。在主要的图像和文本电子商务基准测试中,我们进行了三个实验,以评估与最先进的HDA方法相比的性能。HANDA显示了统计上显著的预测性能改善。HANDA的实际效用在真实世界的暗网在线市场中得到了展示。HANDA是电子商务应用领域成功适应的重要一步。 https://arxiv.org/pdf/2205.07853.pdf
  • [知识分享] AI全流程开发难题破解之钥
    【摘要】 将通过对ModelArts、盘古大模型、ModelBox产品技术的解读,帮助开发者更好的了解AI开发生产线。本文分享自华为云社区《【大厂内参】第16期:华为云AI开发生产线,破解AI全流程开发难题》,作者:华为云社区精选 。近日,华为云对AI开发生产线进行服务升级,帮助各行各业的软件开发更简单快速地完成SaaS化,在云上创造更大价值。AI开发生产线,通过 ModelArts 和 AI Gallery , 支持AI开发运维的DevOps全流程。通过预集成盘古大模型和丰富的AI资产,让开发者实现从数据标注、数据处理、模型训练、到部署上线、模型调优等环节全流水线自动衔接,大幅提升效率。1.基于行业算法套件的ModelArts云原生AI开发最佳实践在AI开发的探索阶段,选择合适的环境、便利的工具、按需的算力、一键可运行的算法资源是我们最重要的因素。在环境和算力方面,使用ModelArts提供云化Notebook,配合弹性按需算力资源能力,可以快速地让我们拿到一个带AI计算资源的环境。在算法方面,面向特定领域问题的算法解法集合、AI算法套件,可以让我们快速的在算法间切换,找到合适的并且具备实际应用的自研及开源算法,通过订阅和选择的方式,可以在ModelArts上一键式的运行。在工具方面,我们基于云化的Notebook提供了参数化的开发模式,让你的探索变得更便捷高效。1.1选择合适的AI开发套件,让你的开发事半功倍1.1.1云原生Notebook华为云会选择Notebook作为线上AI开发与探索的首选工具,其优势在于可贯穿整个AI开发探索生命周期,从数据的处理到模型的开发以及验证和调测,都是能够全部覆盖的。Notebook可提供交互式的编程体验,探索过程中的可视化要求,可以快速地进行结果的分享与重现。如上图“Kaggle在2021年机器学习开发者调研数据”所示,可以看到在IDE的流行度里面,Notebook占据很重要的位置。纵观整体业界趋势,各个云化AI开发厂商还是以JupyterLab底座+插件的方式演进,主打资源免费、协作、社交化。ModelArts云化Notebook也是基于此趋势进行演进,并且提供丰富的差异化场景能力。资源切换、CodeLab、云上云下插件等,贴近用户使用习惯,提升AI开发效率。1.1.2算法开发套件我们知道,在AI的算法方面,需要去寻找匹配我们业务场景的合适算法,并且需要进行环境和算法之间的适配开发,以及算法相关参数的调优。ModelArts提供的算法套件是面向一类算法问题解的集合,是针对特定的行业、领域预训练模型、算法实现及数据集。以简单易用为基础正对云边端场景的不同需求,提供相应的内容支持。目前,华为云AI算法套件是通过自研+社区两个方面,确保算法的丰富度。自研方面,结合丰富的真实AI开发经验,提供领域预训练模型、算法实现及数据集。目前已经在图像分类、目标检测、视觉分类、姿态预估等多个领域提供相关的内容,并且后续会持续丰富。用户可以在AI Gallery上一键订阅,在ModelArts上一键运行,提升用户的AI开发和探索效率。社区方面,对于社区的主流算法套件完成了非侵入式的适配,例如MMDetection、MMOCR、MMSegmentation等算法套件,可以像加载自研算法套件一样,在ModelArts中快速加载一键运行。1.1.3算法调优有了工具和算法,接下来就是算法开发的探索和调优。华为云基于ModelArts提供的基于Notebook的参数化、图形化、交互式的能力加速开发过程,帮助开发者在数据处理、模型调优以及模型预测方面进行可视化的操作,低门槛完成多种场景的AI算法开发与应用,配套提供的算法套件可以更加高效进行AI开发。上图是Notebook的Excel,用户可以进行参数化的定义数据处理过程和训练过程,可以图形化查看训练结果,有表格,而不是之前的大篇幅的日志,还可以进行交互式的进行结果调测。不仅如此,Notebook还提供了丰富的基础组件和组件定义能力,用户可以根据自己的使用需求和习惯定义个性化的插件。在开发的资源和算力方面,ModelArts云原生AI开发资源与算力构建在开放的华为云云原生平台之上,基于底层应用、开放自主的相关基础云原生能力,方便开发者按需,低成本,灵活获取到可用的资源和算力。1.2标准化的开发工具,云上云下协同从前面的介绍大家可以了解到,对于华为云AI开发工程师,在AI开发的实验原型和探索阶段是基于ModelArts提供的serverless化的Notebook的交互式参数化能力,配合弹性按需算力、资源和环境,以及丰富的算法套件,帮助我们加速实验原型的探索及开发。面对具体AI团队开发及应用落地时,需要涉及多人和多阶段配合完成从数据处理、算法开发和调优,到模型训练、推理开发及测试,并且在后续运行中涉及反复的迭代,怎么样可以高效地完成这项工作。借鉴传统软件开发经验和实践,华为云通过工程化的AI开发模式,从工具到开发标准,再到代码化工程管理能力,助力开发团队协同完成AI开发及应用落地。在工具方面,为了更加匹配通用的IDE工具使用习惯,使用ModelArts提供VSCode\PyCharm插件,就可以在自己的本地VSCode\PyCharm上进行代码开发,使用插件远程连接云上资源进行远程开发调测,并且可以调用模型训练、模型部署等能力。通过定义AI工程框架,来让AI开发标准化,这个标准化的工程框架是实践的总结和积累。使用ModelArts提供的标准化AI开发工程模板在模板中对于数据、算法、推理等各个环节的结构进行定义,并且还提供了CLI工程脚手架,通过代码与命令的方式与平台功能相结合,全流程完成工程化的AI开发。用户可以基于我们提供的工程结构定义,分工协同,完成不同内容的开发。上图为ModelArts提供的标准化工程结构,可以通过代码化方式完成AI过程、步骤、行为、资源等定义,并且通过代码仓统一管理。例如:用户可以定义workflow、镜像、训练、作业、应用部署等,并且配合统一的资产管理进行工程化的AI开发。前面介绍了云上开发工具的能力,云上的IDE与传统的IDE在能力上还是存在差距的,所以为了更加匹配开发者通用IDE工具的使用习惯,ModelArts使用了基于VSCode\PyCharm+ModelArts插件,满足本地化开发及调测诉求。面对稀缺的GPU资源的诉求,通过远程连接云上资源的能力,打造本地开发远程资源按需使用的能力,插件提供一键式的安装配置等能力,方便我们开发者的使用。后续ModelArts也会提供更加沉浸式的AI开发能力,包含AI计算资源、云上存储预置AI镜像,让用户体验到云上资源便利的同时,也带来本地开发的顺畅感。在远程插件上,可以调用云上的开发、数据、训练、推理等能力,以及提供的工程相关的所有AI开发能力,真正满足一个团队不同用户的诉求。1.3AI Gallery构建丰富活跃的AI生态在正式的AI开发项目中,我们会面临更多的困难和问题。AI Gallery是在ModelArts的基础上构建了开发者生态社区,丰富及活跃的生态是AI开发的基础和推动力。在AI Gallery中,不仅提供了Notebook代码样例、数据集、算法套件、模型等AI数字资产;而且还有学习、实践、交流等板块,方便不同诉求的用户交流。并且在资产方面提供分享和订阅能力,方便AI资产持续更新和迭代。我们希望开发者沉淀更多的资产,帮助更多的AI开发者,提升大家的开发效率,加速AI产业的发展。传统软件开发完成后就是交付运维,AI的软件开发交付后不仅仅是交付运维,还有面临持续的数据更新、模型迭代、难例挖掘,这些流程应该是标准化可信的,并且与开发流程解偶,所以ModelArts提供了工作流的能力。工作流是基于实际业务场景开发的,用于部署AI应用流水线工具,把已经完成好的AI开发业务场景,通过ModelArts Python SDK进行编排和开发,将数据处理、模型训练、模型部署等能力进行编码,然后把流水线发布给业务应用人员。对于应用者来说不一定需要了解整个开发实现细节,他们只需要了解流水线的机制,以及需要存在变化的内容即可。例如:数据的增强、更新或者模型的参数变化,就可以方便地进行模型迭代、上线,这样让开发和运行分离,提高后续业务迭代的效率。综上我们可以看出,ModelArts 致力打造一站式的AI开发平台,让AI开发变得简单、高效。华为云从AI开发全流程出发,在分析设计算法模型探索和实验模型集成与开发以及AI应用运维上提供高效、便捷的能力,并且结合华为云丰富的实践经验,沉淀更多的标准化AI开发流水线,为AI开发者提供更多更好的服务。2.华为云盘古大模型,开启AI工业化开发2025年,企业对AI的采用率将达到86%。所以,AI走进企业的生产核心系统创造更大价值是大势所趋。但与之相对的是,封闭的作坊式AI开发已经无法满足行业高效、高质量的数字化转型需求。因为当企业有了AI需求以后,就需要独立的创建一个场景。在这个场景中,企业要投入专家和开发人员,来针对这个场景去进行专门的研发。这会导致AI应用的开发效率低下,并且它的开发经验,包括产生的一些资产也是无法得到有效积累。针对这样的情况,华为提出了 盘古大模型 。2.1什么是华为盘古大模型华为云盘古大模型,是把海量的数据知识存储在超大型的神经网络中,针对定制化的需求,只需要将这些需求固化成一些流水线。在这个过程中,由于不同的流水线之间大部分的流程都是一样的,仅仅只有小部分的操作或者场景专有的知识是有所不同的,所以就可以把这些知识或者操作像搭积木一样,放在在这个流水线上面进行开发。这样的开发模式比起作坊式的开发模式,就会更加的节省时间和人力。在实际测试当中,盘古大模型进入企业生产系统以后,效率提升是非常明显的。原来需要十个人所做的事情,现在只要一个人就可以把它做完,效率的提升达到十倍以上。2.2五大盘古大模型应用在千行百业为了更好地针对不同领域方面,在盘古大模型中,有视觉、NLP(自然语言处理)、多模态、Graph和科学计算等五个领域的大模型。在不同的行业。场景下,如金融风控、工业质检、时尚设计、案件审核和智慧育种等场景下,设置场景化模型。这些场景化模型都可以适配盘古大模型,最后应用在不同的行业案例中,如违规风险识别、布料质检、流行元素标注等等应用。盘古大模型是通过把算力、研发成本前置到华为云侧,如华为云每年会消耗英伟达V100GPU超过4000张、使用相当于4TB清洗后纯文本数据和10亿张图片去进行训练,配备大量的工程师,经过多年的积累研发了大模型系统,这个大模型系统及可以帮助业界把成本大大减少和降低,不用在耗时耗力重复性的开发算法及模型,应用大模型从而快速的进行AI开发为了让大家更好的认识和熟悉大模型,接下来将为大家展示大模型在不同行业中的应用。2.2.1CV大模型在铁路TFDS进行未知的故障预测的场景中:一辆列车行驶路途中,有个摄像头架设在一个固定地点,通过拍摄列车上各种不同视角不同位置的图像后,快速的去判断列车是否有故障。由于这些故障出现次数较少,故障类型多、拍摄图片质量差等原因,因此很多情况下小模型无法取得很好的应用。很多情况下,工程师要针对每个故障去适配一个小模型,成本就非常高,更不要说未知故障的预测了。通过盘古大模型,可以用一个或者少数几个大模型去适配铁路TFDS中的100多种不同的故障场景。最终保证故障的召回率达到90%,未知故障预测发现率提升1倍以上,同时还能保证单张图片的识别时间小于4ms。2.2.2NLP大模型关于NLP大模型,为大家介绍的是最高检应用项目。在这个项目当中,从最高检获取文本,对法律文书文本进行分析,去理解其中所代表的内容。比如,某一项法律为什么应用在这个判决的这个地方,这中间包含了哪些原因等等。如果是传统小模型,需要适配数据再去适配不同的案例,这就导致时间较长。盘古大模型已经在预训练过程中积累了大量NLP方面的知识,所以基于盘古大模型就可以在很短的时间内,把测试结果不断地从开始的73%提升到最后的测试结果92%,也是高效地完成了项目。除了在最高检的项目应用以外,盘古NLP大模型还在反电炸等场景上得到应用。NLP大模型的迁移性强,对人工的依赖程度小,少量样本、简单调参即可。2.2.3科学计算大模型所谓科学计算就是把AI的能力辐射到其他领域。在科学计算领域,比如气象、医药、航天航空、海洋、工业、地质等不同场景,在这些场景当中所面临的共同问题就是解偏微分方程。在偏微分方程解的过程当中,盘古大模型可以发挥出它自己得天独厚的优势。比如说神经网络体量很大,所以在解方程的时候,科学计算大模型可以捕捉到小模型无法捕捉到的特征,从而得到更精确的解答。相比于传统方法,用数值模拟的方法求解偏微分方程,求解效率会比较高。在一些极端的场景下,求解效率能够从2天缩短到0.1秒,提升4~5个数量级的程度。在这种情况下,就可以用实时预测能力为科学计算应用提供实时预警,比如在海量预测问题上,可使用实时预警能力提供实时预警,从而提升在各个方面应对突发海事情况的能力。接下来位大家展示盘古科学计算大模型的演示demo。该demo主要是进行全球海浪的实时预测,模拟一个地球的形状,包含全球的陆地和海洋数据。通过模拟给定风速后,全球海洋的海浪高度是可以实时地显示在屏幕上,这也是得益于推理速度的加快。因为盘古大模型使用0.1秒就完成预测,因此可以实时把结果显示出来。同时还可以模拟海洋上的突发情况,比如海洋上可能出现的风暴和台风。在demo当中给大家展示实时生成台风的路径,并且调整这台风的强度、风速、生命周期等参数,就能发现台风对海浪的高度等造成的影响。因此就可以去模拟台风对海洋的海浪造成的影响。所以该模型就可以有效的帮助我们去指导海洋上的生产生活,比如指导渔船去避险,发挥它自己所特有的价值。对于大部分海上作业来说,精确的海浪预报具有重要的价值。与基于超级计算机的传统预报模式相比,Al全球海浪预报模型可以以较低的计算成本,灵活的结合短期气象预报更新结果,快速提供相关海域未来数小时的海况。该预报系统可以为航运公司提供服务,通过海浪数据结合航速航向来优化航行路径,减少航行过程中的碳排放,同时避免遭遇极端海况造成人员和财产损失。2.2.4多模态大模型多模态,是指把图像和文本两种不同的模态结合在一起,它们之间可以进行交互,从而可以帮助我们完成各种各样的应用。比如像趋势预测、辅助设计等,这些在时装行业比较重要的应用。都是得益于多模态大模型,把人类所希望做的事情以文本形式表示出来,然后把它体现成图像的形式,让设计师能够以图像生成设计图的方法,交付到生产线,加速最后的生产过程。在这个过程当中,利用大模型这样的思路,使得图像和文本之间能够高效地进行交互,从而最后完成这样的过程。2.2.5Graph大模型盘古Graph大模型,主要是用来处理结构化数据。以企业报表数据为例,华为与广发证券合作中发现,有些广发证券客户会存在这个财务造假的情况。广发证券通过使用盘古大模型,利用数据可以帮助他们高效分析出哪些企业可能存在造假的情况,从而帮助广发证券更好的去完成业务情况。2019年有496家企业被监管处罚、问询或被ST处理和利用。得益于大模型当中所具备的特征抽取及预测的能力,盘古多模态大模型能构建定制化、高效的产业链条,并在企业的生产、生活当中是可以发挥出更加重大的作用。如果大家对盘古大模型感兴趣,包括对前面所展示的这个demo比较感兴趣的话,请与华为商务部门联系。3.ModelBox加速跨平台高性能AI应用开发和落地随着新基建的推进,以及5G通信、云计算、大数据和物联网的快速发展,人工智能应用的场景越来越多,AI正从极具想象力的概念成为具有超大发展前景的商业赛道,并逐渐渗透到各行各业,催生了技术产业新的发展。在深耕行业AI落地的过程中,我们发现AI的大规模应用落地并非一帆风顺,面临着比传统软件更复杂的难题:部署场景、复杂系统架构涉及端边云多种组合。易购计算平台多样,给应用性能优化带来了更高的技能要求。AI基础推理框架的API不统一,带来繁琐的适配工作。为解决这些难题,在今年的这次大会上,我们对AI开发生产线ModelArts进行了重磅升级,发布了ModelBox端边云统一AI应用开发框架。ModelBox是让模型以统一的格式和接口更高效地运行。通过ModelBox开发者无需过多关注底层技术也能开发出跨平台高性能的AI应用,提升开发效率。开发者在华为云AI开发生产线ModelArtes上完成模型的训练和优化之后,均可以将模型通过ModelBox完成应用的开发和集成,并一键部署到端边云场景的不同设备中运行,打通行业AI应用落地最后一公里。为了帮助开发者快速完成AI应用的开发和部署,ModelBox集成了三大核心技术:高性能并发调度引擎。可实现数据计算和资源管理的精细化智能调度,集成了特别优化过的硬件加速单元。译制的应用编排异构计算组件。丰富的组件覆盖了主流芯片、多数操作系统和主流的推理框架,可屏蔽这三个层次的平台差异。框架中提供了端边云AI系统单元,让开发者快速写出格式一致的AI应用,并结合场景需求,一键部署到端边云不同的设备上运行。基于高性能并发调度引擎,开发者无需掌握底层调度机制,也能保证高性能应用优化效果。ModelBox中将所有的任务都以功能单元的形式封装,一个完整的应用就是由多个功能单元构成。华为云自研一套灵活调度策略,在执行过程中,功能单元的计算将统一由线程池并发调度,确保计算单元被分配到对应的一个硬件中执行。同时计算中数据和执行单元绑定,保证数据处理的合理分配和高吞吐量。根据引擎在实际应用案例中,让典型的图片检测场景的数据吞吐量从54QPS提升到了442QPS,处理时延从0.5亿毫秒降到了0.2毫秒。为了带给开发者更好的开发体验,提供了图编排的开发模式,所有API以功能单元的方式提供,应用开发可以做到像搭积木一样方便。同时针对常用的AI推理场景提供了丰富的译制功能单元,做到低代码/零代码就能完成应用开发。一次开发无需改动代码就能实现端边云不同设备的一致部署运行。三大核心技术带来的收益也是明显的,在节约80%左右的开发成本的情况下,还带来2-10倍的推理性能提升。3.1应用编排异构计算组件,缩短跨平台开发和部署成本ModelBox作为AI应用开发框架,华为云始终关注开发者体验。依据ModelBox的技术内核,华为云提供了完整的开发工具链,可以让开发者能够以自己喜欢的IDE上手ModelBox。ModelBox的丰富工程模板可降低开发门槛,对应用的AI开发部分包含功能单元开发和图编排,可以实现对Python、C++等多种语言的灵活支持和可视化编排的低门槛开发模式。同时还提供完整的调试机制以应对开发中的问题。开发完成以后,ModelBox以RPN或者容器镜像的打包方式,一键发布应用。并且,ModelBox格式的应用支持多种部署方式,可以一键发布成ModelArts云上在线推理服务,也可以通过HiLens端云协同服务,远程部署到端边侧运行。为了实际场景需要,ModelBox还提供灵活的插件,帮助开发者实现模型的权限管理和配置等。3.2ModelBox助力智慧出行应用实现高性能提升和快速落地从去年开始,已经陆续有伙伴开始将AI应用牵引到ModelBox框架上来。以智慧出行场景为例,我们与伙伴全面重构了安全出行方案中的AI推理业务。在重构前,其中的疲劳和分神驾驶检测任务是根据传统的方式,进行AI应用开发和部署。由于业务量的增加,AI运算的性能已经满足不了要求,并且基础平台将带来扩容成本的增加。同时,切换品牌代码需要重新开发,难度就随之增加。在双方团队配合中选择了ModelBox重构现有业务,数据吞吐量提升了2-10倍。以抽烟识别为例,从15QPS提升到了150QPS,在不扩容的情况下,业务能力大幅提高,节约了非常高的硬件成本。由于性能提升,我们也可以大胆尝试更强大的算法,使得识别准确率也有超过10%的提升,同时耗时降低78%。3.3华为云助力ModelBox开发者实现商业成功华为云开源ModelBox,是希望通过开源能够与广大伙伴共同构建端边云协同的AI应用生态。2021年,华为云依托旗帜社区平台完成了源码发布,这也是社区中第一个应用框架类项目。经过半年的开源社区化开发,我们的项目更加完善和强大。今年晚些时候,我们将在下一个版本推出更多的用户体验,优化工具。未来,我们计划提供越来越多的ModelBox开源解决方案,让大家可以结合更多的参考样例和项目做到开箱即用。华为云诚挚邀请广大开发者朋友参与到ModelBox的开源项目中来。希望北向的AI算法应用开发者可以贡献自己的能力,来丰富ModelBox的功能单元和应用场景,同时让自己的应用可以被更多硬件高效运行。也希望南向设备厂商把自己的硬件通过开源项目对接到ModelBox项目中来,这样具有丰富的AI应用,可以补充和扩展硬件的AI使用场景。为降低开发者上手门槛,华为云与国办合作推出了ModelBox生态入门级开发板。开发者可以从开发板套件开始体验ModelBox结合硬件和端游协同带来的便利,将自己的IDEA快速变成现实。同时还为开发者准备了丰富的上手课程,包含入门、进阶和高阶课。通过系列课程掌握ModelBox的基础开发概念,上手体验功能单元和图形化编排的开发模式。正是由于ModelBox天生对平台操作系统和推理框架的适配开放能力,结合统一的应用打包格式,让应用不管是云上还是端边侧,可复制性都大大提高,这就给开发者的商业变现提供了更多可能。为了更好的帮助开发者实现商业成功,华为云AI开发生产线ModelArts和华为云应用商店,帮助开发者打通从开发到落地的变现通路。ModelBox开发的AI应用,可以通过云上平台和销售网络以及集成商伙伴,触达更多的行业客户,带来更多的商业机会。最后华为云AI开发生产线已通过中国信通院评测,是中国信通院认证的首批全能力域领先级AI开发平台。通过不断创新,在国内率先支持MLOps,让更多企业上好云、用好云,进而推动AI进入更多核心生产环节,产生更高价值。
  • [其他] 《深度学习入门》笔记 - 12
    学习步长$\alpha$是一个很重要的参数。 如果太小,算法会收敛的很慢。 如果太大,容易造成算法不收敛,甚至发散。 自变量的标准化,和因变量的中心化,是建立深度学习模型常用的数据预处理方法。 他们的好处,是不仅可以让梯度下降法的数值表现的更加稳定,还有助于我们找到合适的初始值和步长。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/4/1659621510931174824.png) 在梯度下降法中,`学习步长`和`batch size`需要事先给定,而不像`参数w`一样通过最小化损失函数得到,这类参数在机器学习中叫做`超参数`。 接下来是介绍线性分类模型,logistic模型。`回归模型`和`分类模型`的主要区别就是因变量y的数据类型不一样。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/4/1659621769682711777.png) 在处理实际问题的时候,根据这个区别,我们就可以选择建立回归模型还是分类模型: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/4/1659621848855146071.png)
  • [技术干货] 使用 Fastai 构建食物图像分类器【转载】
    背景社交媒体平台是分享有趣的图像的常用方式。食物图像,尤其是与不同的美食和文化相关的图像,是一个似乎经常流行的话题。Instagram 等社交媒体平台拥有大量属于不同类别的图像。我们都可能使用谷歌图片或 Instagram 上的搜索选项来浏览看起来很美味的蛋糕图片来寻找灵感。但是为了让这些图片可以通过搜索获得,我们需要为每张图片设置一些相关的标签。这使得搜索关键字并将其与标签匹配成为可能。由于手动标记每张图像极具挑战性,因此公司使用 ML (机器学习)和 DL (深度学习)技术为图像生成正确的标签。这可以使用基于一些标记数据识别和标记图像的图像分类器来实现。在本文中,让我们使用 fastai 构建一个图像分类器,并使用一个名为“ fastai”的库来识别一些食物图像。Fastai 简介Fastai 是一个开源深度学习库,它为从业者提供高级组件,可以快速轻松地在传统深度学习领域产生最先进的结果。它使研究人员可以混合和组合低级组件以创建新技术。它旨在在不影响可用性、灵活性或性能的情况下实现这两个目标。由于 fastai 是用 Python 编写的,并且基于 PyTorch,因此需要 Python 知识才能理解本文。我们将在 Google Colab 中运行此代码。除了 fastai,我们将使用图形处理单元 (GPU) 以尽可能快地获得结果。使用 Fastai 构建图像分类器让我们从安装 fastai 库开始:!pip install -Uqq fastai如果你使用的是 Anaconda,请运行以下命令:conda install -c fastchan fastai anaconda让我们导入分类任务所需的包。该库分为模块,其中最常见的是表格、文本和视觉。因为我们手头的任务包括视觉,所以我们从vision库中导入我们需要的所有功能。from fastai.vision.all import *通过 fastai 库可以获得许多学术数据集。其中之一是 FOOD,它是 URL 下的URLs. FOOD第一步是获取并提取我们需要的数据。我们将使用 untar_data 函数,它会自动下载数据集并解压它。foodPath = untar_data(URLs.FOOD)该数据集包含 101,000 张图像,分为 101 个食物类别,每个类别有 250 个测试图像和 750 个训练图像。训练中的图像没有被清理。所有图像的大小都调整为每边最大 512 像素。下一个命令将告诉我们必须处理多少图像。len(get_image_files(foodPath))此外,使用以下命令,我们将打印 Food 数据集的元目录的内容。print(os.listdir(foodPath))meta文件夹包含八个文件,其中四个是文本文件:train.txt、test.txt、classes.txt和labels.txt。train.txt 和 test.txt 文件分别包含训练集和测试集的图像列表。classes.txt 文件包含所有食品类别和标签的列表。txt 提供了所有食品图像标签的列表。该目录还包含一个带有预训练模型的 .h5 文件和一个包含 101,000 张 JPG 格式图像的图像文件夹。最后,训练集和测试集以 JSON 格式提供。要查看所有图像类别,我们将运行以下命令:image_dir_path = foodPath/'images'image_categories = os.listdir(image_dir_path)print(image_categories)然后,我们将执行以下命令以查看 101,000 张图像集合中的示例图像。img = PILImage.create('/root/.fastai/data/food-101/images/frozen_yogurt/1942235.jpg')img.show();我们将使用 pandas 函数读取 JSON 格式的训练和测试文件。JSON 是一种以人类可读的形式存储信息的数据格式。以下代码从目录中读取 train.json 文件并将结果保存在 df_train 数据帧中。df_train=pd.read_json('/root/.fastai/data/food-101/train.json')然后可以使用 head() 函数打印数据帧的标题,如下所示。df_train.head()同样,通过使用 pandas 函数,我们将读取 test.json 文件并将其存储在 df_test 数据帧中。df_test=pd.read_json('/root/.fastai/data/food-101/test.json')df_test.head()我们正在创建三个带有我们选择的食物名称的标签来对食物图像进行分类。labelA = 'cheesecake'labelB = 'donuts'labelC= 'panna_cotta'现在我们将创建一个 for 循环,它将遍历我们下载的所有图像。在此循环的帮助下,我们将删除没有标签 A、B 或 C 的图像。此外,我们使用以下函数重命名具有各自标签的图像。for img in get_image_files(foodPath): if labelA in str(img):  img.rename(f"{img.parent}/{labelA}-{img.name}") elif labelB in str(img):   img.rename(f"{img.parent}/{labelB}-{img.name}") elif labelC in str(img):   img.rename(f"{img.parent}/{labelC}-{img.name}") else: os.remove(img)让我们使用以下命令检查运行循环后获得的图像数量:len(get_image_files(foodPath))让我们在三个选择的食物中尝试一个示例标签,看看重命名是否正确。def GetLabel(fileName):return fileName.split('-')[0]GetLabel("cheesecake-1092082.jpg")以下代码生成一个 DataLoaders 对象,该对象表示训练和验证数据的混合。dls = ImageDataLoaders.from_name_func(   foodPath, get_image_files(foodPath), valid_pct=0.2, seed=42,   label_func=GetLabel, item_tfms=Resize(224))dls.train.show_batch()在这种情况下,我们将:· 使用路径选项指定下载和提取数据的位置。· 使用 get_image_ files 函数从指定位置收集所有文件名。· 对数据集使用 80–20 拆分。· 使用 GetLabel 函数从文件名中提取标签。· 将所有图像调整为相同大小,即 224 像素。· 使用 show_batch 函数生成一个输出窗口,显示带有指定标签的训练图像网格。是时候将模型放置到位了。使用 ResNet34 架构,我们将通过专注于称为 vision_learner () 的单个函数调用来构建卷积神经网络。vision_learner 函数(也称为 cnn_learner)有利于训练计算机视觉模型。它包括你的原始图像数据集、预训练模型 resnet34 和一个度量错误率,它决定了在验证数据中错误识别的图像的比例。resnet34 中的 34 指的是这种架构类型中的层数(其他选项有 18、50、101 和 152)。使用更多层的模型需要更长的训练时间并且更容易过度拟合。Fastai 提供了一个“fine_tune”函数,用于调整预训练模型,以使用我们选择的数据解决我们的特定问题。为了训练模型,我们将 epoch 数设置为 10。learn = vision_learner(dls, resnet34, metrics=error_rate, pretrained=True)learn.fine_tune(epochs=10)也可以通过将指标替换为“accuracy”来检查相同模型的准确性。从上面的结果,我们可以说,即使只有 10 个 epoch,预训练的 ResNet34 模型在多标签分类任务中表现出 > 85% 的良好准确率。如果我们增加 epoch 的数量,模型的准确性可能会提高。现在,让我们测试一些示例图像来检查我们的模型的性能。示例图片 #1示例图片 #2示例图片 #3从上面的结果,我们可以说我们的模型能够正确识别样本图像。训练模型后,我们可以将其部署为 Web 应用程序供其他人使用。尽管 fastai 主要用于模型训练,但你可以使用“learn.export”函数快速导出 PyTorch 模型以用于生产。结论在本教程中,我们学习了如何使用基于 PyTorch 的 fastai 构建食物图像分类器。可以使用 Heroku 或 Netlify 等服务部署此模型,以使此模型可用作 Web 应用程序。以下是本文的一些主要内容:我们可以使用 fastai 以最少的代码建立深度学习模型。因此,fastai 使得使用 PyTorch 进行深度学习任务变得更加容易。食品分类对于计算机视觉应用来说是一项具有挑战性的任务,因为根据装饰和供应方式的不同,同一种食品在不同地方看起来可能会有很大差异。尽管如此,通过利用迁移学习的力量,我们可以使用预训练模型来识别食品并对其进行正确分类。我们为此分类器使用了预训练模型 ResNet34。但是,你可以使用其他预训练模型,如 VGG、Inception、DenseNet 等,来构建你自己的模型。转载自https://iot.ofweek.com/2022-08/ART-132200-11000-30570049.html
  • [其他] 《深度学习入门》笔记 - 11
    继续随机梯度下降法, 回到广告数据,以TV,radio为自变量,以sales为因变量,没有截距,所有观测点作为训练数据。 先要对自变量进行`标准化`,对因变量进行`中心化`。 标准化后所有自变量的均值是0,方差是1。中心化后因变量的均值是0。 这样做可以让梯步下降法的数值更加稳定,更容易找到合适的初始值和学习步长。 一个标准化的方法就是让数据的每一列减去该列的均值,然后除以该列的样本标准差($sd(x)$): ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/4/1659569344728935204.png) 中心化,只要前面的一步即可: $centered\_y = y - \bar{y}$ ```python #标准化和中心化。然后随机梯度下降 x=ad.iloc[:,0:2].values y=ad.iloc[:,3].values scaled_x=(x-np.mean(x,axis=0,keepdims=True))/ \ np.std(x,axis=0,keepdims=True) centered_y=y-np.mean(y) lr=0.1 w=np.zeros(2) w_record=[w.copy()] for iter in range(5): total_loss=0 for i in range(len(scaled_x)): pred=np.sum(scaled_x[i]*w) total_loss+=((pred-centered_y[i])**2)/2 delta=(pred-centered_y[i]) w-=lr*(delta*scaled_x[i]) w_record.append(w.copy()) print('Loss: %0.5f'%(total_loss/(i+1))) print(w) ``` ```html Loss: 1.98663 [3.46941055 3.19188802] Loss: 1.62702 [3.46941055 3.19188802] Loss: 1.62702 [3.46941055 3.19188802] Loss: 1.62702 [3.46941055 3.19188802] Loss: 1.62702 [3.46941055 3.19188802] ``` 在`随机梯度下降法`中,每次迭代只使用一个观测点,计算的梯度随机性比较大,所以有时候参数的值不会朝着最小损失的方向移动。 `全数据梯度下降法`(`Full Gradient Dscent`)在计算梯度时会用到所有观测点,因此算出来的梯度会比较稳定。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/4/1659571169573914119.png) 全数据梯度下降法的代码例子就不看了。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/4/1659571583651887858.png) 这两种梯度下降法各自的特点是如此的鲜明,所以必定还会有一种中庸调和的方法,那就是`批量随机梯度下降法`(`Batch Stochastic Gradient Descent`)。 他在计算梯度时,既不是使用单个观测点,也不是使用所有观测点,而是每次用一小部分观测点,在实际中常用的有16,32~1024个观测点,根据内存和模型规模选取合适的。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/4/1659571887339433583.png) 批量随机梯度下降法的代码例子也不看了。
  • [其他] 《深度学习入门》笔记 - 10
    接着看梯度下降,用循环来实现。 ```python #循环迭代20次 x,y=0.5,0.8 w=0;lr=0.5 #lr学习率=0.5 w_record=[] loss_record=[] ​ for iter in range(20): pred=x*w loss=((pred-y)**2)/2 w_record.append(w) loss_record.append(loss) delta=pred-y w=w-lr*(delta*x) if (iter%5==0 or iter==19): print('iter: %2d; w: %0.2f; Loss: %0.3f'%(iter,w,loss)) w_record.append(w) loss_record.append((x*w-y)**2/2) ``` ```html iter: 0; w: 0.20; Loss: 0.320 iter: 5; w: 0.88; Loss: 0.084 iter: 10; w: 1.23; Loss: 0.022 iter: 15; w: 1.41; Loss: 0.006 iter: 19; w: 1.49; Loss: 0.002 ``` 把这循环的过程中的变化可视化出来: ```python #模型参数w 和 残差平方和RSS 随迭代的变化曲线 w_vec=np.linspace(-1,4,100) rss_vec=[] for w_tmp in w_vec: rss_tmp=(y-x*w_tmp)**2/2 rss_vec.append(rss_tmp) plt.plot(w_vec,rss_vec) plt.scatter(0,0.32,s=100,c='y',marker='o') for i in range(len(w_record)-1): plt.arrow(w_record[i],loss_record[i],\ w_record[i+1]-w_record[i],\ loss_record[i+1]-loss_record[i],width=0.01,\ color='y',head_width=0.05) plt.xlabel('w',fontsize=16) plt.ylabel('RSS',fontsize=16) plt.show() ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/3/1659535760107353372.png) 好了我们上面说的是最简单的情况,因为为了学习,是一个权重或叫参数w,一个自变量x,并且只有一个观测点(x,y)。 在实际情况中,一般就不仅仅是学习的那么简单的情况。 数据会包含多个自变量,多个权重,很多个观测点。 用 $L(w)=L(w_1,w_2,...,w_p)$ 表示包含p个权重或参数的损失函数,它的梯度可以表示为: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/3/1659536268538613050.png) 它是由函数$L(w)$对各个参数的偏导数构成的向量。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/3/1659536366914343088.png) 上面就是`随机梯度下降法`(`Stochastic Gradient Descent` SGD)。随机是指每次只使用一个观察点计算梯度,在实现随机梯度下降的过程中,随机抽取观测点来计算梯度并更新参数。
  • [技术干货] 人工智能真的可以帮助我们与动物交谈吗?
    作者:Zoe Corbyn一家位于加利福尼亚的组织希望利用机器学习的力量来解码整个动物王国的通信。但有人对该项目表示怀疑。一位海豚训练员用手发出“一起”的信号,然后是“创造”。两只训练有素的海豚消失在水下,交换声音然后浮出水面,仰面翻转并抬起尾巴。他们设计了自己的新把戏,并按照要求一前一后地表演。“这并不能证明存在语言,”拉斯金(Aza Raskin )说。“但是,如果他们能够使用一种丰富的、象征性的交流方式,那肯定会让这项任务变得更容易。”拉斯金是Earth Species Project (ESP) 的联合创始人兼总裁,这是一家加州非营利组织,其雄心壮志是:使用称为机器学习的人工智能 (AI) 形式对非人类通信进行解码,并将公开所有可用的专有技术,从而加深我们与其他生物物种的联系,以助力对它们的保护。一张1970 年的鲸鱼歌曲专辑激发了导致商业捕鲸被禁止的运动。动物王国的谷歌翻译会产生什么?该组织于 2017 年在 LinkedIn 联合创始人 Reid Hoffman 等主要捐助者的帮助下成立,去年 12 月发表了第一篇科学论文。目标是在我们的有生之年开启与动物的沟通。“我们正在努力的目标是,我们能否解码动物交流,发现非人类语言的奥秘,”拉斯金说。“在此过程中,同样重要的是,我们正在开发支持生物学家和动物保护的技术。”长期以来,了解动物的发声一直是令人类着迷并展开探究的主题。各种灵长类动物发出的警报声因捕食者而异;海豚用标志性的口哨呼朋引伴;一些鸣禽可以从它们的叫声中提取元素并重新排列它们以传达不同的信息。但大多数专家都没有将其称为一种语言,因为没有动物交流符合所有标准。直到最近,解码主要依赖于艰苦的观察。但是,人们对应用机器学习来处理现在可以由现代动物交流传感器收集的大量数据产生了浓厚的兴趣。“人们开始使用它,”哥本哈根大学研究哺乳动物和鸟类声音交流的副教授 Elodie Briefer 说。“但我们还不知道我们能做多少。”Briefer 与他人共同开发了一种算法,可以分析猪的咕噜声,以判断动物是否正在经历积极或消极的情绪。另一个名为 DeepSqueak 的方法是根据啮齿动物的超声波呼叫判断啮齿动物是否处于压力状态。另一个倡议——CETI 项目(代表鲸类翻译倡议)——计划使用机器学习来翻译抹香鲸的交流。今年早些时候,Elodie Briefer 及其同事发表了一项基于猪的发声情绪的研究。在各种场景中从 411 头猪身上收集了 7,414 种声音。然而 ESP 表示,它的方法不同,因为它不是专注于解码一个物种的交流,而是所有这些。虽然拉斯金承认,社会动物(例如灵长类动物、鲸鱼和海豚)之间进行丰富的象征性交流的可能性更高,但目标是开发可应用于整个动物王国的工具。“我们是物种不可知论者,”拉斯金说。“我们开发的工具……以便在所有生物学中发挥作用,从蠕虫到鲸鱼。”Raskin 说,他对 ESP 的“激发直觉”的工作表明,机器学习可用于在不同的、有时是遥远的人类语言之间进行翻译——而不需要任何先验知识。这个过程始于开发一种在物理相空间中表示单词的算法。在这种多维几何表示中,点(词)之间的距离和方向描述了它们如何有意义地相互关联(它们的语义关系)。例如,“国王”与“男人”的关系和“女人”与“女王”的距离和方向相同。(映射不是通过知道单词的含义来完成的,而是通过查看它们彼此靠近的频率。)后来注意到,这些“形状”对于不同的语言是相似的。然后,在 2017 年,两组独立工作的研究人员发现了一种技术,可以通过对齐形状来实现平移。要从英语到乌尔都语,请对齐它们的形状并找到最接近英语单词点的乌尔都语词点。“这样一来你可以很好地翻译大多数单词,”拉斯金说。ESP 的愿望是创造这种动物交流的表现形式——同时在单个物种和许多物种上工作——然后探索诸如是否与普遍的人类交流“形状”重叠等问题。Raskin 说,我们不知道动物是如何体验这个世界的,但也有一些情绪,例如悲伤和喜悦,似乎有些动物会与我们分享,并且很可能会与它们物种中的伙伴交流。“我不知道哪个更令人难以置信——形状重叠的部分,我们可以直接交流或翻译,还是那些我们不能与其的部分。”海豚使用咔哒声、口哨声和其他声音进行交流。但他们在说什么?他补充说,动物不仅仅通过声音交流。例如,蜜蜂通过“摇摆舞”让其他人知道一朵花的位置。也需要跨不同的沟通模式进行翻译。目标是“就像去月球一样”,拉斯金承认,但这个想法也不是一下子就能达到。相反,ESP 的路线图涉及解决一系列小问题,以实现更大的图景。这应该会看到通用工具的发展,这些工具可以帮助研究人员尝试应用人工智能来解开所研究物种的秘密。例如,ESP 最近发表了一篇关于动物交流中所谓的“鸡尾酒会问题”的论文(并分享了其代码),其中很难辨别一组相同动物中的哪个个体在嘈杂的社会环境中发声.“据我们所知,以前没有人做过这种端到端的[动物声音]解缠,”拉斯金说。ESP 开发的基于 AI 的模型在海豚标志性口哨、猕猴咕咕声和蝙蝠发声上进行了试验,当呼叫来自模型训练过的个体时效果最佳;但是对于更大的数据集,它能够解开来自不在训练队列中的动物的混合呼叫。另一个项目涉及使用人工智能产生新的动物叫声,以座头鲸作为测试物种。新颖的呼叫——通过将发声分成微音素(持续百分之一秒的不同声音单位)并使用语言模型“说出”类似鲸鱼的东西——然后可以回放给动物看它们是如何回应。Raskin 解释说,如果 AI 能够识别出随机变化与语义上有意义的变化的原因,它会让我们更接近有意义的交流。“它将让人工智能说这种语言,尽管我们还不知道它的含义。”夏威夷乌鸦以使用工具而闻名,但也被认为有一套特别复杂的发声。另一个项目旨在开发一种算法,该算法通过应用自我监督机器学习来确定一个物种有多少种呼叫类型,这不需要人类专家对数据进行任何标记来学习模式。在一个早期的测试案例中,它将挖掘由圣安德鲁斯大学生物学教授 Christian Rutz 领导的团队制作的录音,以制作夏威夷乌鸦的声音曲目清单——Rutz 发现了夏威夷乌鸦的声音曲目,具有制造和使用觅食工具的能力,并且被认为具有比其他乌鸦物种更复杂的发声集。Rutz 对该项目的动物保护价值感到特别兴奋。夏威夷乌鸦极度濒临灭绝,只存在于圈养环境中,在那里它被繁殖以重新引入野外。希望通过记录不同时间的记录,可以追踪该物种的召唤曲目是否在圈养中受到侵蚀——例如,特定的警报呼叫可能已经丢失——这可能对其重新引入产生影响;这种损失可以通过干预来解决。Rutz 说:“这可能会在我们帮助这些鸟类从危机中恢复过来的能力上产生一个进步,”他补充说,手动检测和分类呼叫将是劳动密集型的,而且容易出错。与此同时,另一个项目试图自动理解发声的功能意义。加州大学圣克鲁兹分校海洋科学教授 Ari Friedlaender 的实验室正在研究它。该实验室研究难以直接观察的野生海洋哺乳动物如何在水下活动,并运行世界上最大的标记程序之一。附着在动物身上的小型电子“生物记录”设备可以捕捉它们的位置、运动类型,甚至它们所看到的(这些设备可以包含摄像机)。该实验室还拥有来自海洋中战略性放置的录音机的数据。ESP 旨在首先将自我监督机器学习应用于标签数据,以自动衡量动物正在做什么(例如它是否在进食、休息、旅行或社交),然后添加音频数据以查看是否可以赋予功能意义与该行为相关的呼叫。(然后可以使用回放实验来验证任何发现,以及之前已经解码的调用。)这项技术最初将应用于座头鲸数据——实验室已经在同一组中标记了几只动物,因此可以看到如何发出和接收信号。弗里德兰德说,就目前可用的工具可以从数据中梳理出的内容而言,他“达到了上限”。“我们希望 ESP 可以做的工作将提供新的见解,”他说。​但并不是每个人都对人工智能实现如此宏伟目标的力量如此狂热。Robert Seyfarth 是宾夕法尼亚大学心理学名誉教授,他在灵长类动物的自然栖息地中研究社会行为和声音交流已有 40 多年。虽然他认为机器学习可以解决一些问题,例如识别动物的声音曲目,但还有其他领域,包括发现发声的意义和功能,他怀疑这会带来很多问题。他解释说,问题在于,虽然许多动物可以拥有复杂的社会,但它们的声音库比人类要少得多。结果是,完全相同的声音可以用于在不同的上下文中表示不同的事物,而这只能通过研究上下文——个人的呼唤是谁,他们与其他人的关系如何,他们在层次结构中的位置,他们与谁互动——其意义才有希望被确立。“我只是认为这些人工智能方法是不够的,”Seyfarth 说。“你必须出去看看动物。”动物交流地图需要包含非声音现象,例如蜜蜂的“摇摆舞”。对于这个概念本身——动物交流的形式将以有意义的方式与人类交流“形状”重叠——也存在疑问。Seyfarth 说,将基于计算机的分析应用于我们非常熟悉的人类语言是一回事。但对其他物种这样做可能“完全不同”。“这是一个令人兴奋的想法,但它是一个很大的延伸,”华盛顿大学的神经科学家 Kevin Coffey 说,他共同创建了 DeepSqueak 算法。拉斯金承认,单靠人工智能可能不足以解锁与其他物种的交流。但他提到的研究表明,许多物种的交流方式“比人类想象的更复杂”。绊脚石是我们收集足够数据并进行大规模分析的能力,以及我们自己有限的认知。“这些是让我们摘下人类眼镜并了解整个物种交流系统的工具,”他说。责任编辑:华轩    来源: 科技世代千高原
  • [执行问题] 【MindSpore1.5.1】faster_rcnn在modelarts上训练,数据类型报错
    代码来源official/cv/faster_rcnn · MindSpore/models - 码云 - 开源中国 (gitee.com)在modelarts上训练faster rcnn时报错。mindspore版本为1.5.1,看着像数据格式没有转换为Tensor,请问可以帮我看看具体是哪一步不对吗?
  • [分布式] 【Mindspore】【多机多卡AI分布式训练】RuntimeError 1456
    【功能模块】调用的run_cluster.sh代码(代码来源:https://gitee.com/mindspore/docs/tree/r1.7/docs/sample_code/distributed_training/run_cluster.sh)如下:#!/bin/bash # applicable to Ascend echo "==============================================================================================================" echo "Please run the script as: " echo "bash run.sh DATA_PATH RANK_TABLE_FILE RANK_SIZE RANK_START" echo "For example: bash run.sh /path/dataset /path/rank_table.json 16 0" echo "It is better to use the absolute path." echo "==============================================================================================================" execute_path=$(pwd) echo ${execute_path} script_self=$(readlink -f "$0") self_path=$(dirname "${script_self}") echo ${self_path} export DATA_PATH=$1 export RANK_TABLE_FILE=$2 export RANK_SIZE=$3 RANK_START=$4 DEVICE_START=0 for((i=0;i<=7;i++)); do export RANK_ID=$[i+RANK_START] export DEVICE_ID=$[i+DEVICE_START] rm -rf ${execute_path}/device_$RANK_ID mkdir ${execute_path}/device_$RANK_ID cd ${execute_path}/device_$RANK_ID || exit pytest -s ${self_path}/resnet50_distributed_training.py >train$RANK_ID.log 2>&1 &【操作步骤&问题现象】使用Mindspore进行多机多卡的AI分布式训练。共使用两台机器,一台Ascend 910A 八卡,另一台也是Ascend 910A 八卡,共十六卡。但是在使用https://www.mindspore.cn/tutorials/experts/zh-CN/r1.7/parallel/train_ascend.html的分布式AI训练的教程时发现一些问题。运行报错,运行的命令如下:# server0 bash run_cluster.sh /path/dataset /path/rank_table.json 16 0 # server1 bash run_cluster.sh /path/dataset /path/rank_table.json 16 8【截图信息】【报错信息】[ERROR] DEVICE(19823,ffff9ad057e0,python3.7):2022-08-03-14:47:37.722.356 [mindspore/ccsrc/plugin/device/ascend/hal/device/ascend_kernel_runtime.cc:1268] HcclInit] Invalid environment variable 'MINDSPORE_HCCL_CONFIG_PATH' or 'RANK_TABLE_FILE', the path is: cluster_rank_table_16pcs.json. Please check (1) whether the path exists, (2) whether the path has the access permission, (3) whether the path is too long.[ERROR] DEVICE(19823,ffff9ad057e0,python3.7):2022-08-03-14:47:37.722.434 [mindspore/ccsrc/plugin/device/ascend/hal/device/ascend_kernel_runtime.cc:1183] InitDevice] HcclInit init failed[CRITICAL] PIPELINE(19823,ffff9ad057e0,python3.7):2022-08-03-14:47:37.722.459 [mindspore/ccsrc/pipeline/jit/pipeline.cc:1456] InitHccl] Runtime init failed.============================= test session starts ==============================platform linux -- Python 3.7.5, pytest-7.1.2, pluggy-1.0.0rootdir: /sunhanyuan/docs-r1.7/docs/sample_code/distributed_trainingcollected 0 items / 1 error==================================== ERRORS ====================================______________ ERROR collecting resnet50_distributed_training.py _______________../resnet50_distributed_training.py:35: in <module>    init()/usr/local/python37/lib/python3.7/site-packages/mindspore/communication/management.py:142: in init    init_hccl()E   RuntimeError: mindspore/ccsrc/pipeline/jit/pipeline.cc:1456 InitHccl] Runtime init failed.=========================== short test summary info ============================ERROR ../resnet50_distributed_training.py - RuntimeError: mindspore/ccsrc/pip...!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!=============================== 1 error in 7.40s ===============================
  • [问题求助] 【Atlas300T训练卡产品】【驱动安装错误】dcmi module initialize failed. ret is -8
    【功能模块】最新社区版本驱动,下载地址 https://www.hiascend.com/hardware/firmware-drivers?tag=communityA300t-9000-npu-driver_22.0.0_linux-x86_64.run【操作步骤&问题现象】1、机器重新安装的 Centos7.6 的操作系统2、安装 A300t-9000-npu-driver_22.0.0_linux-x86_64.run 成功3、重启之后运行 npu-smi info 提示 dcmi module initialize failed. ret is -8005 【截图信息】dmesg信息如下,全量 dmesg日志已经放在附件zip文件中【日志信息】(可选,上传日志内容或者附件)/var/log/ascend_seclog 下的日志信息已经打包上传,见附件机器信息如下[root@yq01-sys-rpm0-1f021 log]# uname -m && uname -r && cat /etc/*releasex86_643.10.0-957.el7.x86_64CentOS Linux release 7.6.1810 (Core)NAME="CentOS Linux"VERSION="7 (Core)"ID="centos"ID_LIKE="rhel fedora"VERSION_ID="7"PRETTY_NAME="CentOS Linux 7 (Core)"ANSI_COLOR="0;31"CPE_NAME="cpe:/o:centos:centos:7"HOME_URL="https://www.centos.org/"BUG_REPORT_URL="https://bugs.centos.org/"CENTOS_MANTISBT_PROJECT="CentOS-7"CENTOS_MANTISBT_PROJECT_VERSION="7"REDHAT_SUPPORT_PRODUCT="centos"REDHAT_SUPPORT_PRODUCT_VERSION="7"CentOS Linux release 7.6.1810 (Core)CentOS Linux release 7.6.1810 (Core)[root@yq01-sys-rpm0-1f021 log]# lspci | grep d8013b:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d801 (rev 20)
  • [数据加载及处理] 华为云平台的空间维护
    技术干货 -- 华为云平台的空间维护1 引言1.1 研究任务描述1.1.1 任务VQA( Visual Question Answering )以一张图片和一个关于图片内容的自然语言形式的问题作为输入,要求输出正确的答案。例如给出如下图片及问题,要求结合图片内容对于问题进行回答。图片问题:“图片中有几个人?”预期回答:“3个”1.1.2 数据集数据集 URL :https://drive.google.com/open?id=1_VvBqqxPW_5HQxE6alZ7_-SGwbEt2_zn数据集结构Train: 44375Validation: 21435Test: 21435Directory: 其中 annotation 文件夹包含对于回答、问题以及对应图像的注解;images 文件夹中为测试、验证、训练集的图片;questions 文件夹中为对应各个图片的问题。data├── annotations│ ├── test.json│ ├── train.json│ └── val.json├── images│ ├── test│ ├── train│ └── val├── questions├── test.json├── train.json└── val.json1.2 VQA 简介VQA 介于图像理解( CV )和自然语言处理( NLP )的交集。任务的目的是开发出一种 系统来回答有关输入图像的特定问题。答案可以采用以下任何形式:单词,短语,二元答案,多项选择 答案或文本填空。在 CV 领域,CNN 是当前非常重要的基础模型。进而产生了 VGGNet,Inception,ResNet 等模型。类似的, NLP 领域,RNN 是之前主要的模型架构,因为 LSTM 的引入使得 RNN 有了重大突破。如 Vanilla VQA 模型使用了 VGGNet 和 LSTM 相结合的方法。后来在 NLP 领域的注意力机制也开始在 CV 领域开始得到应用,就有了 Stacked Attention Network 等模型。2018年 BERT 横空出世,在 NLP 领域掀起了革命。所以近两年,BERT 也开始进入到 VQA 任务中, 一开始是用于替换 RNN 来处理文本。但是在2019,2020年开始,一些模型(如,VL - BERT )开始把简单有效的 Transfomer 模型作为主干并进行拓展,视觉和语言嵌入特征可以同时作为输入,然后进行预训练以兼容下游的所有视觉-语言联合任务。1.3 提出问题在华为云平台使用 MindSpore 训练 VQA 问题时,由于数据集太大,导致华为云平台的内存和存储空间比较紧张。为了解决这个问题,我们使用了一些方法和技巧进行华为云平台的空间维护。2 及时删除不需要的文件在华为云平台上,因为 Notebook 是挂载在 obs 上的,所以运行的容器实例不能直接读取操作 obs 上的文件,需要下载到容器本地环境中,需要使用 moxing 库中的文件拷贝功能,将 obs 容器中的文件拷贝到当前操作平台下。一般地,在训练开始,都会将存储数据集的文件夹进行拷贝:mox.file.copy_parallel(src_url=obs_path+"data",       dst_url='./data')读取完数据集中的信息之后,为了节省空间,删除环境下的 data 文件夹。# 删除 data 文件夹下的文件,以节省空间import os​for root,dirs,files in os.walk("./data"):    for file in files:        os.remove(root+"/"+file)3 大数据集分批次读取方法3.1 Featuremap 分批读取feature_map:从 top-down 模型原论文的网站中下载了 fast_CNN 处理后得出的图片的 feature_map,代替我们实验中自己写的 VGG 等得出特征向量的方法。文件的大小为46G,在本地和实验平台 ModelArts 都因为内存不够而无法一次读取,我们先在把本地把文件拆分成13个 feature_mapx.npy 小文件。拆分代码如下:import pandas as pdimport numpy as npimport base64from mindspore import Tensor​def generate_feature_map_dict(path='./trainval_resnet101_faster_rcnn_genome_36.tsv'):  def decode_feature_map(image, *args):    feature_map_dict = args[0]    feature_map_dict[image[0]] = np.frombuffer(base64.b64decode(image[1]), dtype=np.uint8).reshape((36, -1))​  with open(path) as fp:    feature_maps = pd.read_csv(path, sep='\t', iterator=True, header=None)    cnt = 1    while True:      try:        user = feature_maps.get_chunk(10000)        feature_map_dict = dict()        arr = user.to_numpy()[:, (0,-1)]        np.apply_along_axis(decode_feature_map, 1, arr, feature_map_dict)        np.save('./feature_map'+str(cnt)+'.npy', feature_map_dict)        cnt += 1      except StopIteration:        break3.2 Featuremap 分批生成 mindrecord观察到文件是一个 image_id 和 feature_map 对应的字典,而通过实验发现,同一个 image_id 可能对应了多个 question,即一张图片可能被拿来作为不同问题的图片,因此构建数据集的时候,不能简单地将 image_id 设置为字典的 key,我们采用了元组 (image_id, j) 来作为字典的 key ,其中 j 是 image_id 的标号,从0开始。字典中的 value 是 (q, a, o),即 question_vec,answer_vec,和 options_vec:train_combine_dict = dict()for i, q, a, o in zip(train_images, train_questions_vec, train_answers_vec, train_options_vec):    j=0    while train_combine_dict.__contains__((i, j)):        j += 1    train_combine_dict[(i, j)] = (q, a, o)    valid_combine_dict = dict()for i, q, a, o in zip(valid_images, valid_questions_vec, valid_answers_vec, valid_options_vec):    j=0    while valid_combine_dict.__contains__((i, j)):        j += 1    valid_combine_dict[(i, j)] = (q, a, o)​test_combine_dict = dict()for i, q, a, o in zip(test_images, test_questions_vec, test_answers_vec, test_options_vec):    j=0    while test_combine_dict.__contains__((i, j)):        j += 1    test_combine_dict[(i, j)] = (q, a, o)再生成对应的13组 train,valid,和 test 的 mindrecord / mindrecord.db 文件。train_data_dict = dict()valid_data_dict = dict()test_data_dict = dict()​# id in range(1, 14)id = 1mox.file.copy_parallel(src_url=obs_path+"pretrained/feature_map" + str(id) + ".npy", dst_url='./pretrained/feature_map' + str(id) + '.npy')feature_map_set = np.load('./pretrained/feature_map' + str(id) + '.npy', allow_pickle=True).item()​for key, value in feature_map_set.items():    j = 0    while train_combine_dict.__contains__((key, j)):        train_data_dict[(key, j)] = (value.view(np.float32), train_combine_dict[(key, j)])        j += 1    j = 0    while valid_combine_dict.__contains__((key, j)):        valid_data_dict[(key, j)] = (value.view(np.float32), valid_combine_dict[(key, j)])        j += 1    j = 0    while test_combine_dict.__contains__((key, j)):        test_data_dict[(key, j)] = (value.view(np.float32), test_combine_dict[(key, j)])        j += 1每读完一个 feature_map 文件,就删除一个。try: os.remove('./pretrained/feature_map' + str(id) + '.npy') print("-- delete file successfully!")except(FileNotFoundError): print("-- file not exists!")通过 generate_featurerecord 函数生成 train.mindrecord / valid.mindrecord / test.mindrecord 文件。generate_featurerecord("./featurerecord/train" + str(id) + ".mindrecord", 1, train_data_dict)​generate_featurerecord("./featurerecord/valid" + str(id) + ".mindrecord", 1, valid_data_dict)​generate_featurerecord("./featurerecord/test" + str(id) + ".mindrecord", 1, test_data_dict)3.3 mindrecord 分批训练因为存储空间有限,训练的时候就不能将所有 mindrecord 文件存储到服务器平台,应该读取一部分,训练一部分,删除了再读取下一部分,训练函数的逻辑因此相比之前做了一些改动。具体实现方法是在 epoch 循环体内再嵌套一个循环,依次映射 mindrecord 文件,训练后再删去,直到所有13个 mindrecord 文件都被使用过,完成一次 epoch。def train_feature_map(train_net, valid_net, train_config, filter_dict): ... ... for epoch_num in range(1, train_config.epoch_size+1): # train train_losses = [] train_accs = [] for id in range(1, 14): # 总共有 13 组 mindrecord 文件 mox.file.copy_parallel(src_url= obs_path+train_config.train_featurerecord_path + "train" + str(id) + ".mindrecord",    dst_url=train_config.train_featurerecord_path + "train" + str(id) + ".mindrecord") mox.file.copy_parallel(src_url= obs_path+train_config.train_featurerecord_path + "train" + str(id) + ".mindrecord.db",    dst_url=train_config.train_featurerecord_path + "train" + str(id) + ".mindrecord.db") train_dataset = generate_feature_map_dataset(train_config.train_featurerecord_path + 'train'+str(id)+'.mindrecord', train_config.batch_size, 1, train_config.max_length, filter_dict) for i in train_dataset.create_dict_iterator(): ... ... # delete file try: os.remove(train_config.train_featurerecord_path + "train" + str(id) + ".mindrecord") os.remove(train_config.train_featurerecord_path + "train" + str(id) + ".mindrecord.db") print("-- delete file successfully!") except(FileNotFoundError): print("-- file not exists!")     train_loss = sum(train_losses) / len(train_losses) train_acc = sum(train_accs) / len(train_accs) print('epoch:', epoch_num, ' train loss =', train_loss, 'acc =', train_acc)​ # valid loss = [] acc = [] for id in range(1, 14): mox.file.copy_parallel(src_url= obs_path+train_config.train_featurerecord_path + "valid" + str(id) + ".mindrecord",    dst_url=train_config.train_featurerecord_path + "valid" + str(id) + ".mindrecord") mox.file.copy_parallel(src_url= obs_path+train_config.train_featurerecord_path + "valid" + str(id) + ".mindrecord.db",    dst_url=train_config.train_featurerecord_path + "valid" + str(id) + ".mindrecord.db") valid_dataset = generate_feature_map_dataset(train_config.train_featurerecord_path + 'valid'+str(id)+'.mindrecord', train_config.batch_size, 1, train_config.max_length, filter_dict) for j in valid_dataset.create_dict_iterator(): ... ... # delete file ... ...     ... ...最终,网络中传入的是 fast_CNN 处理后得到的 (batch_size, 66, 2048)* 维度的 images_feature_map。4 总结在华为云平台上进行训练时,如果数据集太大,导致平台的内容和存储空间不够,可以及时删除平台上不需要的数据文件。此外,还可以分批读取文件并分批生成 mindrecord 文件,训练时分批读取 mindrecord 文件进行训练。
  • [API使用] 程序问题
    【功能模块】我的运行环境:win10  64bit; mindspore 1.8; cpu; python 3.7 【操作步骤&问题现象】专家好,我想要训练一个非常简单的全连接神经网络。神经网络只有5层。输入层是v和p。3个隐藏层,每层100个神经元,激活函数relu。输出层是DP,UU,DU。构建一个从u v到DP UU DU的映射关系。70%的数据用于训练,30%的数据用于验证。损失函数用MSE,求解器用Adam。我的程序如图1-3所示。目前遇到了几个问题。1、神经网络的输出层有3个,分别为DP,UU,DU。但是我在将神经网络的输出分开的时候出现了报错,如图4.2、我尝试把神经网络的输入和输出都变成1个,因此只将v作为输入,DP作为输出,如图5. 希望这样可以把程序走通。但是在将神经网络的预测值与标签求MSE的时候又出现了报错,如图6.请问我应该如何调整我的程序,谢谢。【截图信息】我自己尝试写的神经网络训练程序全图图1图2图3图4图5图6【日志信息】(可选,上传日志内容或者附件)
  • [热门活动] 昇腾AI训练营——众智专场