• [无人车赛道] 可爱的小女孩
    参数:Field, the happy girl ,the flowers,Fairy tale style, full-color。
  • [AI大赛] al绘画
    活动作品222222222222222222222
  • [ModelArts昇...] 华为云AI绘画创作
    华为云AI绘画创作分享
  • [其他] the girl next door
    the girl next door
  • [热门活动] 我的AI图画
    哈哈哈哈哈哈哈哈哈哈,第一次玩这种文字AI的,感觉好有趣,虽然刚开始AI出了一个老妖婆,但是最终在本学渣的不懈努力下,嘿嘿,成功喽.
  • [其他] 从别的日子里飘浮到我的生命里的云,不再落下雨点或引起风暴了,而给予我的夕阳的天空以色彩。
    从别的日子里飘浮到我的生命里
  • [数据管理] 发布数据集失败
    在使用ModelArts的自动学习功能时,标注数据后,发布数据集显示发布失败。
  • AI绘画-落日图
    sunset chart
  • 作业打卡
    第一章课后作业1打卡
  • [其他干货] torch模型迁移到mindspore模型的经验分享
    torch模型迁移到mindspore模型的经验分享1、gscnn模型开发背景我参加过一期昇腾众智迁移项目,负责gscnn模型的迁移工作,积累了不少经验和心得,希望可以和小伙伴们一起分享,能帮助到新加入的小伙伴们,也希望昇腾社区越办越好!gscnn模型是执行语义分割任务的,语义分割任务是对图像中的每一个像素进行分类,现今SOTA的方法是直接使用一个网络来处理。但是图像中包括颜色、形状、文本等低级语义信息往往会被忽略掉。由于图像中的信息是多种多样的,所以将这些信息输入一个统一的网络会使得分割结果不是最优的。因此作者提出了一种新的思路,通过两个并行CNN结构来分别进行常规抽取和抽取图像的边界相关信息。作者将他们分别称为regular stream和shape stream。Regular steam的结构与传统的语义分割模型相似。而Shape stream的主要作用是获取图像中的边界信息,最终将两者信息进行融合,从而得到最终的分割结果。2、开发经验我将开发流程分为四大步,分别是读取源码 , 查询算子对应关系 ,代码迁移以及最后一步网络调试调优. 这里我将按照开发流程来逐一介绍每一步的开发经验。读取源码这一步其实是项目的前期准备工作,为了更好的迁移项目,我们必须要熟读源码,将源码的数据预处理,网络构建以及网络训练全部弄懂. 同时我们也要熟读论文,对论文的整体内容有一定的把握,此时要特别注意论文里面对训练配置的描述,这将对我们的迁移有着至关重要的作用.通过前期准备工作,我们可以对网络结构有着更深的了解.gscnn的结果如图所示:查询算子对应关系这一步其实是为了保证这个模型具备可迁移性,我们需要在源码中找到其用到框架中的哪些算子,然后去minspore框架当中找到其对应关系,在这里,有一点我们需要特别注意,就是虽然有对应算子,但是其中的参数有可能不一样,我们在对应的时候需要特别注意相关参数. 在这步过程中,如果我们发现没有相应的算子,这时候需要我们仔细观察没有的算子实现的功能,能否用其他算子进行代替. 如果不能,我们再考虑能够自己使用python语句将算子功能自己实现出来.当上面两步都不行的话,我们这时候需要考虑代码的可迁移性,可以及时和工程师进行沟通,商讨一些办法.在这里我将举个算子对应的例子来简单对比一下.下面这个是minspore框架中的batchnorm2d的源码:class BatchNorm2d(_BatchNorm): r""" Batch Normalization layer over a 4D input. .. math:: y = \frac{x - \mathrm{E}[x]}{\sqrt{\mathrm{Var}[x] + \epsilon}} * \gamma + \beta Note: The implementation of BatchNorm is different in graph mode and pynative mode, therefore that mode can not be changed after net was initialized. Note that the formula for updating the :math:`moving\_mean` and :math:`moving\_var` is .. math:: \text{moving_mean}=\text{moving_mean∗momentum}+μ_β\text{∗(1−momentum)}\\ \text{moving_var}=\text{moving_var∗momentum}+σ^2_β\text{∗(1−momentum)} def __init__(self, num_features, eps=1e-5, momentum=0.9, affine=True, gamma_init='ones', beta_init='zeros', moving_mean_init='zeros', moving_var_init='ones', use_batch_statistics=None, data_format='NCHW'): """Initialize BatchNorm2d.""" super(BatchNorm2d, self).__init__(num_features, eps, momentum, affine, gamma_init, beta_init, moving_mean_init, moving_var_init, use_batch_statistics, input_dims='2d', data_format=data_format) def _check_data_dim(self, x): if x.ndim != 4: pass下面这个是torch框架的batchnorm2d的源码:class BatchNorm2d(_BatchNorm): r"""Applies Batch Normalization over a 4D input (a mini-batch of 2D inputs with additional channel dimension) as described in the paper `Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift <https://arxiv.org/abs/1502.03167>`__ . .. math:: y = \frac{x - \mathrm{E}[x]}{ \sqrt{\mathrm{Var}[x] + \epsilon}} * \gamma + \beta The mean and standard-deviation are calculated per-dimension over the mini-batches and :math:`\gamma` and :math:`\beta` are learnable parameter vectors of size `C` (where `C` is the input size). By default, the elements of :math:`\gamma` are set to 1 and the elements of :math:`\beta` are set to 0. The standard-deviation is calculated via the biased estimator, equivalent to `torch.var(input, unbiased=False)`. .. note:: This :attr:`momentum` argument is different from one used in optimizer classes and the conventional notion of momentum. Mathematically, the update rule for running statistics here is :math:`\hat{x}_\text{new} = (1 - \text{momentum}) \times \hat{x} + \text{momentum} \times x_t`, where :math:`\hat{x}` is the estimated statistic and :math:`x_t` is the new observed value. Shape: - Input: :math:`(N, C, H, W)` - Output: :math:`(N, C, H, W)` (same shape as input) def _check_input_dim(self, input): if input.dim() != 4: raise ValueError("expected 4D input (got {}D input)".format(input.dim()))我们仔细观察各自框架的源码,上面注释有公式的介绍,我们可以看出来两个框架的momentum参数是和为1的关系,而不是简单的对应关系,这里要特别注意友情提示: mindspore官网上有与torch框架对应算子的文档介绍, 比较常见的上面都有,我们可以直接去看,如果有什么算子上面没有介绍,欢迎提出.代码迁移代码迁移这一步主要是我们前两步如果做的很好,那么迁移这一步将极其顺利,在这里,我有一些小经验想分享一下.我们迁移的顺序可以先迁移数据预处理, 迁移好之后,我们可以进行测试,确保数据预处理迁移完全正确,这样我们后面出现问题,可以确保不是数据集的问题.接下来迁移网络会更合理一些,迁移网络之后可以拿tensor常量过一遍网络,如果网络迁移的没有问题,并且初始化也一致的话,那么过一遍网络的结果也应该完全一样.这里有个想强调的点,就是初始化,因为初始化具有一定随机性,所以我们不能保证初始化完全一样,这时候有两种方法,一种是固定随机种子,另一种比较麻烦,就是将初始化改成全是one的方法,这样可以看出我们的网络逻辑是否有问题.然后再迁移损失函数部分,如果我们前面都保持一致的话,那么此步得出的损失函数也应该完全一样.最后在迁移训练部分, 注意torch的训练逻辑,这里torch和mindspore的训练是有所不同的,mindspore的训练是封装好的.举个简单例子看一下mindspore的训练步骤:import numpy as np import mindspore.dataset as ds import mindspore.nn as nn import mindspore as ms from mindspore.common.initializer import Normal def get_data(num, w=2.0, b=3.0): """生成样本数据及对应的标签""" for _ in range(num): x = np.random.uniform(-10.0, 10.0) noise = np.random.normal(0, 1) y = x * w + b + noise yield np.array([x]).astype(np.float32), np.array([y]).astype(np.float32) def create_dataset(num_data, batch_size=16): """生成数据集""" dataset = ds.GeneratorDataset(list(get_data(num_data)), column_names=['data', 'label']) dataset = dataset.batch(batch_size) return dataset class LinearNet(nn.Cell): """定义线性回归网络""" def __init__(self): super().__init__() self.fc = nn.Dense(1, 1, Normal(0.02), Normal(0.02)) def construct(self, x): return self.fc(x) train_dataset = create_dataset(num_data=160) net = LinearNet() crit = nn.MSELoss() opt = nn.Momentum(net.trainable_params(), learning_rate=0.005, momentum=0.9) # 使用Model构建训练网络 model = ms.Model(network=net, loss_fn=crit, optimizer=opt, metrics={"mae"})我们可以看出来mindspore的训练网络是封装到mindspore.Model里, 将损失函数, 优化器 以及评价指标全都封装里面了,而不像torch框架当中需要自己写训练,进行for循环迭代,不断读取数据,计算损失和梯度,进行反向传播,对于使用者来说,将更加方便.网络调试调优网络调试调优就是进行调参, 使模型更能达到更低点, 使训练精度更高.min-batchs大小和学习率调整的理想状况是刚开时的时候选取较小的min-batchs(较大的学习率, 这里的较大较小是相对的),目的是让训练速度(收敛)变快, 随着迭代次数的增加,选取较大的min-batchs(较小的学习率)使得收敛速度放慢,避免错过最小值(最大值)。当梯度过大的时候,我们可以使用梯度裁剪, 当梯度过小的时候,我们可以使用loss_scale, 来进行放大梯度.我们还可以更换不同的优化器来观察训练效果, 看哪种优化器的训练效果更好.我们需要仔细观察loss的下降情况,这样我们可以制定对应的动态学习率,动态学习率相比静态学习率效果将达到更好.性能方面:当性能方面差异比较大时,我们可以测试每个算子所用的时间, 排查出究竟是哪个算子的问题, 然后针对这个算子进行仔细研究, 这里有一个小方法,就是可以将foalt32转换成float16,这时候精度不会产生较大影响,但性能会提升很多.mindspore平台正在不断进步, 虽然还有一些不足之处,但我相信随着时间的迁移,他一定会越来越好的,希望更多的小伙伴可以一起参与到mindspore框架的研发之中,加油!
  • 图像识别技术的应用及发展趋势(3)
    图像识别的高级阶段——拥有视觉的机器  目前的图像识别技术是作为一个工具来帮助我们与外部世界进行交互,只为我们自身的视觉提供了一个辅助作用,所有的行动还需我们自己完成。而当机器真正具有了视觉之后,它们完全有可能代替我们去完成这些行动。目前的图像识别应用就像是盲人的导盲犬,在盲人行动时为其指引方向;而未来的图像识别技术将会同其他人工智能技术融合在一起成为盲人的全职管家,不需要盲人进行任何行动,而是由这个管家帮助其完成所有事情。举个例子,如果图像识别是一个工具,就如同我们在驾驶汽车时佩戴谷歌眼镜,它将外部信息进行分析后传递给我们,我们再依据这些信息做出行驶决策;而如果将图像识别利用在机器视觉和人工智能上,这就如同谷歌的无人驾驶汽车,机器不仅可以对外部信息进行获取和分析,还全权负责所有的行驶活动,让我们得到完全解放。  《人工智能:一种现代方法》中提到,在人工智能中,感知是通过解释传感器的响应而为机器提供它们所处的世界的信息,其中它们与人类共有的感知形态包括视觉、听觉和触觉,而视觉最为重要,因为视觉是一切行动的基础。在一次论坛上百度IDL的余凯院长问大家,你觉得哪种感觉最重要?没有人能很快作答,后来余凯院长换了个提问方式,如果要放弃一种感觉,你最不愿意放弃的是那一种?这时大家都回答是视觉。Chris Frith在《心智的构建》中提到,我们对世界的感知不是直接的,而是依赖于“无意识推理”,也就是说在我们能感知物体之前,大脑必须依据到达感官的信息来推断这个物体可能是什么,这构成了人类最重要的预判和处理突发时间的能力。而视觉是这个过程中最及时和准确的信息获取渠道,人类感觉信息中的80%都是视觉信息。机器视觉之于人工智能的意义就是视觉之于人类的意义,而决定着机器视觉的就是图像识别技术。  更重要的是,在某些应用场景,机器视觉比人类的生理视觉更具优势,它更加准确、客观和稳定。人类视觉有着天然的局限,我们看起来能立刻且毫无费力的感知世界,而且似乎也能详细生动的感知整个视觉场景,但这只是一个错觉,只有投射到眼球中心的视觉场景的中间部分,我们才能详细而色彩鲜明的看清楚。偏离中间大约10度的位置,神经细胞更加分散并且智能探知光和阴影。也就是说,在我们视觉世界的边缘是无色、模糊的。因此,我们才会存在“变化盲视”,才会在经历着多样事物发生时,仅仅关注其中一样,而忽视了其他样事物的发生,而且不知道它们的发生。而机器在这方面就有着更多的优势,它们能够发现和记录视力所及范围内发生的所有事情。拿应用最广的视频监控来说,传统监控需要有人在电视墙前时刻保持高度警惕,然后再通过自己对视频的判断来得出结论,但这往往会因为人的疲劳、视觉局限和注意力分散等原因影响监控效果。但有了成熟的图像识别技术之后,再加以人工智能的支持,计算机就可以自行对视频进行分析和判断,发现异常情况直接报警,带来了更高的效率和准确度;在反恐领域,借助机器的人脸识别技术也要远远优于人的主观判断。  许多科技巨头也开始了在图像识别和人工智能领域的布局,Facebook签下的人工智能专家Yann LeCun最重大的成就就是在图像识别领域,其提出的LeNet为代表的卷积神经网络,在应用到各种不同的图像识别任务时都取得了不错效果,被认为是通用图像识别系统的代表之一;Google 借助模拟神经网络“DistBelief”通过对数百万份YouTube 视频的学习自行掌握了猫的关键特征,这是机器在没有人帮助的情况下自己读懂了猫的概念。值得一提的是,负责这个项目的Andrew NG已经转投百度领导百度研究院,其一个重要的研究方向就是人工智能和图像识别。这也能看出国内科技公司对图像识别技术以及人工智能技术的重视程度。
  • 图像识别技术的应用及发展趋势(2)
    图像识别的初级阶段——娱乐化、工具化   在这个阶段,用户主要是借助图像识别技术来满足某些娱乐化需求。例如,百度魔图的“大咖配”功能可以帮助用户找到与其长相最匹配的明星,百度的图片搜索可以找到相似的图片;Facebook研发了根据相片进行人脸匹配的DeepFace;雅虎收购的图像识别公司IQ Engine开发的Glow可以通过图像识别自动生成照片的标签以帮助用户管理手机上的照片;国内专注于图像识别的创业公司旷视科技成立了VisionHacker游戏工作室,借助图形识别技术研发移动端的体感游戏;创视新科技通过图像识别技术研发机器视觉表面检测系统。  这个阶段还有一个非常重要的细分领域——OCR(Optical Character Recognition,光学字符识别),是指光学设备检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程,就是计算机对文字的阅读。语言和文字是我们获取信息最基本、最重要的途径。在比特世界,我们可以借助互联网和计算机轻松的获取和处理文字。但一旦文字以图片的形式表现出来,就对我们获取和处理文字平添了很多麻烦。这一方面表现为数字世界中由于特定原因被存储称图片格式的文字;另一方面是我们在现实生活中看到的所有物理形态的文字。所以我们需要借助OCR技术将这些文字和信息提取出来。在这方面,国内产品包括百度的涂书笔记和百度翻译等;而谷歌借助经过DistBelief 训练的大型分布式神经网络,对于Google 街景图库的上千万门牌号的识别率超过90%,每天可识别百万门牌号。  在这个阶段,图像识别技术仅作为我们的辅助工具存在,为我们自身的人类视觉提供了强有力的辅助和增强,带给了我们一种全新的与外部世界进行交互的方式。我们可以通过搜索找到图片中的关键信息;可以随手拍下一件陌生物体而迅速找到与之相关的各类信息;可以将潜在搭讪对象拍下提前去她的社交网络了解一番;也可以将人脸识别作为主要的身份认证方式……这些应用虽然看起来很普通,但当图像识别技术渗透到我们行为习惯的方方面面时,我们就相当于把一部分视力外包给了机器,就像我们已经把部分记忆外包给了搜索引擎一样。  这将极大改善我们与外部世界的交互方式,此前我们利用科技工具探寻外部世界的流程是这样:人眼捕捉目标信息、大脑将信息进行分析、转化成机器可以理解的关键词、与机器交互获得结果。而当图像识别技术赋予了机器“眼睛”之后,这个过程就可以简化为:人眼借助机器捕捉目标信息、机器和互联网直接对信息进行分析并返回结果。图像识别使摄像头成为解密信息的钥匙,我们仅需把摄像头对准某一未知事物,就能得到预想的答案。就像百度科学家余凯所说,摄像头成为连接人和世界信息的重要入口之一。 
  • [其他] 图像识别技术的应用及发展趋势(1)
     图像识别技术的背景  移动互联网、智能手机以及社交网络的发展带来了海量图片信息,根据BI五月份的文章,Instagram每天图片上传量约为6000万张;今年2月份WhatsApp每天的图片发送量为5亿张;国内的微信朋友圈也是以图片分享为驱动。不受地域和语言限制的图片逐渐取代了繁琐而微妙的文字,成为了传词达意的主要媒介。图片成为互联网信息交流主要媒介的原因主要在于两点:  第一,从用户读取信息的习惯来看,相比于文字,图片能够为用户提供更加生动、容易理解、有趣及更具艺术感的信息;  第二,从图片来源来看,智能手机为我们带来方便的拍摄和截屏手段,帮助我们更快的用图片来采集和记录信息。  但伴随着图片成为互联网中的主要信息载体,难题随之出现。当信息由文字记载时,我们可以通过关键词搜索轻易找到所需内容并进行任意编辑,而当信息是由图片记载时,我们却无法对图片中的内容进行检索,从而影响了我们从图片中找到关键内容的效率。图片给我们带来了快捷的信息记录和分享方式,却降低了我们的信息检索效率。在这个环境下,计算机的图像识别技术就显得尤为重要。  图像识别是计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术。识别过程包括图像预处理、图像分割、特征提取和判断匹配。简单来说,图像识别就是计算机如何像人一样读懂图片的内容。借助图像识别技术,我们不仅可以通过图片搜索更快的获取信息,还可以产生一种新的与外部世界交互的方式,甚至会让外部世界更加智能的运行。百度李彦宏在2011年提到“全新的读图时代已经来临”,现在随着图形识别技术的不断进步,越来越多的科技公司开始涉及图形识别领域,这标志着读图时代正式到来,并且将引领我们进入更加智能的未来。
  • [其他问题] RuntimeError: For 'Conv2D', 'C_in' of input 'x' shape divide by parameter 'group' must be equal to 'C_in' of input 'weig
    运行报错:RuntimeError: For 'Conv2D', 'C_in' of input 'x' shape divide by parameter 'group' must be equal to 'C_in' of input 'weight' shape: 3, but got 'C_in' of input 'x' shape: 224, and 'group': 1.使用的卷积层:输入的图片shape为:对应的输入维度就是3,为什么还是报错是224呢?
  • [经验分享] 基于MindStudio的Resnet50深度学习模型开发
    基于MindStudio的MindX SDK应用开发全流程目录一、MindStudio介绍与安装 21 MindStudio介绍 22 MindSpore 安装 4二、MindX SDK介绍与安装 51 MindX SDK介绍 52.MindX SDK安装 6三、可视化流程编排介绍 81 SDK 基础概念 82.可视化流程编排 8四、SE-Resnet介绍 10五、开发过程 101 创建工程 102 代码开发 123 数据准备及模型准备 144 模型转换功能介绍 155 运行测试 16六、遇见的问题 21MindStudio介绍与安装相关课程:昇腾全流程开发工具链(MindStudio)本课程主要介绍MindStudio在昇腾AI开发中的使用,作为昇腾AI全栈中的全流程开发工具链,提供覆盖训练模型、推理应用和自定义算子开发三个场景下端到端工具,极大提高开发效率。建议开发前,学习该课程的第1章和第3章,可以少走很多弯路!!!MindStudio介绍MindStudio提供您在AI开发所需的一站式开发环境,支持模型开发、算子开发以及应用开发三个主流程中的开发任务。依靠模型可视化、算力测试、IDE本地仿真调试等功能,MindStudio能够帮助您在一个工具上就能高效便捷地完成AI应用开发。MindStudio采用了插件化扩展机制,开发者可以通过开发插件来扩展已有功能。功能简介针对安装与部署,MindStudio提供多种部署方式,支持多种主流操作系统,为开发者提供最大便利。针对网络模型的开发,MindStudio支持TensorFlow、Pytorch、MindSpore框架的模型训练,支持多种主流框架的模型转换。集成了训练可视化、脚本转换、模型转换、精度比对等工具,提升了网络模型移植、分析和优化的效率。针对算子开发,MindStudio提供包含UT测试、ST测试、TIK算子调试等的全套算子开发流程。支持TensorFlow、PyTorch、MindSpore等多种主流框架的TBE和AI CPU自定义算子开发。针对应用开发,MindStudio集成了Profiling性能调优、编译器、MindX SDK的应用开发、可视化pipeline业务流编排等工具,为开发者提供了图形化的集成开发环境,通过MindStudio能够进行工程管理、编译、调试、性能分析等全流程开发,能够很大程度提高开发效率。功能框架MindStudio功能框架如图1-1所示,目前含有的工具链包括:模型转换工具、模型训练工具、自定义算子开发工具、应用开发工具、工程管理工具、编译工具、流程编排工具、精度比对工具、日志管理工具、性能分析工具、设备管理工具等多种工具。图1-1 工具链功能架构工具功能MindStudio工具中的主要几个功能特性如下:工程管理:为开发人员提供创建工程、打开工程、关闭工程、删除工程、新增工程文件目录和属性设置等功能。SSH管理:为开发人员提供新增SSH连接、删除SSH连接、修改SSH连接、加密SSH密码和修改SSH密码保存方式等功能。应用开发:针对业务流程开发人员,MindStudio工具提供基于AscendCL(Ascend Computing Language)和集成MindX SDK的应用开发编程方式,编程后的编译、运行、结果显示等一站式服务让流程开发更加智能化,可以让开发者快速上手。自定义算子开发:提供了基于TBE和AI CPU的算子编程开发的集成开发环境,让不同平台下的算子移植更加便捷,适配昇腾AI处理器的速度更快。离线模型转换:训练好的第三方网络模型可以直接通过离线模型工具导入并转换成离线模型,并可一键式自动生成模型接口,方便开发者基于模型接口进行编程,同时也提供了离线模型的可视化功能。日志管理:MindStudio为昇腾AI处理器提供了覆盖全系统的日志收集与日志分析解决方案,提升运行时算法问题的定位效率。提供了统一形式的跨平台日志可视化分析能力及运行时诊断能力,提升日志分析系统的易用性。性能分析:MindStudio以图形界面呈现方式,实现针对主机和设备上多节点、多模块异构体系的高效、易用、可灵活扩展的系统化性能分析,以及针对昇腾AI处理器的性能和功耗的同步分析,满足算法优化对系统性能分析的需求。设备管理:MindStudio提供设备管理工具,实现对连接到主机上的设备的管理功能。精度比对:可以用来比对自有模型算子的运算结果与Caffe、TensorFlow、ONNX标准算子的运算结果,以便用来确认神经网络运算误差发生的原因。开发工具包的安装与管理:为开发者提供基于昇腾AI处理器的相关算法开发套件包Ascend-cann-toolkit,旨在帮助开发者进行快速、高效的人工智能算法开发。开发者可以将开发套件包安装到MindStudio上,使用MindStudio进行快速开发。Ascend-cann-toolkit包含了基于昇腾AI处理器开发依赖的头文件和库文件、编译工具链、调优工具等。MindStudio安装具体安装操作请参考:MindStudio安装指南 MindStudio环境搭建指导视频场景介绍纯开发场景(分部署形态):在非昇腾AI设备上安装MindStudio和Ascend-cann-toolkit开发套件包。可作为开发环境仅能用于代码开发、编译等不依赖于昇腾设备的开发活动(例如ATC模型转换、算子和推理应用程序的纯代码开发)。如果想运行应用程序或进行模型训练等,需要通过MindStudio远程连接功能连接已部署好运行环境所需软件包的昇腾AI设备。开发运行场景(共部署形态):在昇腾AI设备上安装MindStudio、Ascend-cann-toolkit开发套件包、npu-firmware安装包、npu-driver安装包和AI框架(进行模型训练时需要安装)。作为开发环境,开发人员可以进行普通的工程管理、代码编写、编译、模型转换等功能。同时可以作为运行环境,运行应用程序或进行模型训练。软件包介绍MindStudio:提供图形化开发界面,支持应用开发、调试和模型转换功能,同时还支持网络移植、优化和分析等功能。Ascend-cann-toolkit:开发套件包。为开发者提供基于昇腾AI处理器的相关算法开发工具包,旨在帮助开发者进行快速、高效的模型、算子和应用的开发。开发套件包只能安装在Linux服务器上,开发者可以在安装开发套件包后,使用MindStudio开发工具进行快速开发。MindX SDK介绍与安装MindX SDK介绍MindX SDK提供昇腾AI处理器加速的各类AI软件开发套件(SDK),提供极简易用的API,加速AI应用的开发。应用开发旨在使用华为提供的SDK和应用案例快速开发并部署人工智能应用,是基于现有模型、使用pyACL提供的Python语言API库开发深度神经网络应用,用于实现目标识别、图像分类等功能。图2-1 MindX SDK总体结构通过MindStudio实现SDK应用开发分为基础开发与深入开发,通常情况下用户关注基础开发即可,基础开发主要包含如何通过现有的插件构建业务流并实现业务数据对接,采用模块化的设计理念,将业务流程中的各个功能单元封装成独立的插件,通过插件的串接快速构建推理业务。mxManufacture & mxVision关键特性:配置文件快速构建AI推理业务。插件化开发模式,将整个推理流程“插件化”,每个插件提供一种功能,通过组装不同的插件,灵活适配推理业务流程。提供丰富的插件库,用户可根据业务需求组合Jpeg解码、抠图、缩放、模型推理、数据序列化等插件。基于Ascend Computing Language(ACL),提供常用功能的高级API,如模型推理、解码、预处理等,简化Ascend芯片应用开发。支持自定义插件开发,用户可快速地将自己的业务逻辑封装成插件,打造自己的应用插件。MindX SDK安装步骤1 Windows场景下基于MindStuido的SDK应用开发,请先确保远端环境上MindX SDK软件包已安装完成,安装方式请参见《mxManufacture 用户指南》 和《mxVision 用户指南》 的“使用命令行方式开发”>“安装MindX SDK开发套件”章节。步骤2 在Windows本地进入工程创建页面,工具栏点击File > Settings > Appearance & Behavior > System Settings > MindX SDK进入MindX SDK管理界面。界面中MindX SDK Location为软件包的默认安装路径,默认安装路径为“C:\Users\用户名\Ascend\mindx_sdk”。单击Install SDK进入Installation settings界面,如图2-2。图2-2 MindX SDK管理界面如图2-3所示,为MindX SDK的安装界面,各参数选择如下:Remote Connection:远程连接的用户及IP。Remote CANN Location:远端环境上CANN开发套件包的路径,请配置到版本号一级。Remote SDK Location:远端环境上SDK的路径,请配置到版本号一级。IDE将同步该层级下的include、opensource、python、samples文件夹到本地Windows环境,层级选择错误将导致安装失败。Local SDK Location:同步远端环境上SDK文件夹到本地的路径。默认安装路径为“C:\Users\用户名\Ascend\mindx_sdk”。图2-3 MindX SDK安装界面图2-4 安装完成后的MindX SDK管理界面步骤3 单击OK结束,返回SDK管理界面,可查看安装后的SDK的信息,如图2-4所示,可单击OK结束安装流程。可视化流程编排介绍SDK基础概念通过stream(业务流)配置文件,Stream manager(业务流管理模块)可识别需要构建的element(功能元件)以及element之间的连接关系,并启动业务流程。Stream manager对外提供接口,用于向stream发送数据和获取结果,帮助用户实现业务对接。Plugin(功能插件)表示业务流程中的基础模块,通过element的串接构建成一个stream。Buffer(插件缓存)用于内部挂载解码前后的视频、图像数据,是element之间传递的数据结构,同时也允许用户挂载Metadata(插件元数据),用于存放结构化数据(如目标检测结果)或过程数据(如缩放后的图像)。图3-1 SDK业务流程相关基础单元可视化流程编排MindX SDK实现功能的最小粒度是插件,每一个插件实现特定的功能,如图片解码、图片缩放等。流程编排是将这些插件按照合理的顺序编排,实现负责的功能。可视化流程编排是以可视化的方式,开发数据流图,生成pipeline文件供应用框架使用。图 4-2 为推理业务流Stream配置文件pipeline样例。配置文件以json格式编写,用户必须指定业务流名称、元件名称和插件名称,并根据需要,补充元件属性和下游元件名称信息。步骤1 进入工程创建页面,用户可通过以下方式开始流程编排。在顶部菜单栏中选择Ascend>MindX SDK Pipeline,打开空白的pipeline绘制界面绘制,也可打开用户自行绘制好的pipeline文件,如图3-3。绘制界面分为左侧插件库、中间编辑区、右侧插件属性展示区,具体参考pipeline绘制 。步骤2 在左侧编辑框选择插件,拖动至中间编辑框,按照用户的业务流程进行连接。如果拖动错误插件或者错误连线,选中错误插件或者错误连线单击键盘Del键删除。用户自定义的流水线绘制完成后,选中流水线中的所有插件,右键选择Set Stream Name设置Stream名称,如果有多条流水线则需要对每一条流水线设置Stream名称。绘制完成单击Save保存。图3-2 Detection and Classification配置pipeline样例图3-3 pipeline绘制界面SE-Resnet50介绍残差神经网络是何凯明提出的网络.在深度学习中,网络越深往往取得的效果越好,但是设计的网络过深后若干不为零的梯度相乘导致了梯度消失的现象影响了训练,在残差神经网络中借助其残差结构可以有效的避免梯度消失的问题,在imagenet数据集上取得了优异的结果.SE-Resnet50网络结构,如图4-1所示:图4-1 SE-Resnet50网络结构开发过程创建工程步骤一:安装完成后,点击 ”New Project” 创建新的项目,进入创建工程界面。选择Ascend App项目类别,然后就是常规的命名和路径修改,在CANN Version处点击change配置远程连接和远程CANN地址。图5-1-1 创建项目步骤二:点击CANN Version的Change后进入下界面进行相关配置,点击远程连接配置的最右侧添加按钮。图5-1-2 远程连接配置步骤三:在定义SSH 配置、保存远程服务器的连接配置后返回Remote CANN Setting界面,继续配置CANN location。加载完后再点击Finish即可完成远程环境配置。图5-1-3 配置CANN location 步骤四:完成远程连接设置后,点击next会进到模板选择界面,由于我们是推理任务,此时我们选择MindX SDK Project(Python),再点击Finish。MindX SDK(昇腾行业SDK),提供面向不同行业使能的开发套件,简化了使用昇腾芯片推理业务开发的过程。SDK提供了以昇腾硬件功能为基础的功能插件,用户可以通过拼接功能插件,快速构建推理业务,也可以开发自定义功能插件。图5-1-4 MindX SDK Project(Python)代码开发代码地址:cid:link_2SDK相关工程目录结构:代码介绍:acc.py:求精度代码,在得到sdk推理结果之后会运行acc.py来求精度,具体使用会在本章节运行测试部分详细展示.data_to_bin.py:数据预处理代码,会将数据集中图片转换为二进制形式保存在路径中,具体使用会在本章节数据准备部分详细展示infer.py:里面包含了Sdk_Api这个类,其中主要使用到的函数为图5-2-1 将cv形式输入转换为sdk输入图5-2-2 得到输出结果config.py:已经写好的配置文件,运行时不需要改动Se_resnet50_ms_test.pipeline:pipeline配置文件,运行时需要修改其中的om文件路径,具体会在运行测试部分详细说明.main.py:推理时所运行的文件,会将所有经过预处理之后的二进制文件通过图5-2-1、5-2-2所示函数,得到推理结果.数据准备及模型准备数据集使用的是imagenet,在infer/sdk/目录下先创建一个文件夹“./dataset”,将910上经过数据预处理的图片保存为二进制放入,具体操作如下:在910服务器上执行文件data_to_bin.py图5-3-1 data_to_bin.py配置参数在文件中将数据集路径如图5-3-1所示改为实际路径之后,运行python data_to_bin.py.运行之后./dataset中会生成images与target两个文件夹,里面分别为图片经过预处理之后保存的二进制文件以及每个图片对应的lebel.图5-3-2 生成的images与target的二进制文件在准备好二进制文件后在910上导出onnx模型文件,保存到infer/sdk目录下。具体操作如下:按照图5-3-3所示位置修改pth路径信息,之后运行python pthtar2onnx.py图5-3-3修改pth路径信息图5-3-4 生成onnx文件运行之后会生成图5-3-4所示onnx文件.模型转换功能介绍用户使用torch框架训练好的第三方模型,在导出onnx模型后,可通过ATC工具将其转换为昇腾AI处理器支持的离线模型(*.om文件),模型转换过程中可以实现算子调度的优化、权重数据重排、内存使用优化等,可以脱离设备完成模型的预处理,详细架构如图5-4-1所示。图5-4-1 ATC工具功能架构在本项目中,要将pytorch框架下训练好的模型(*.onnx文件),转换为昇腾AI处理器支持的离线模型(*.om文件),具体步骤如下:步骤1 点击Ascend > Model Converter,进入模型转换界面,参数配置如图5-4-2所示,若没有CANN Machine,请参见第六章第一节CANN安装。图5-4-2 模型转换界面1各参数解释如下表所示:CANN MachineCANN的远程服务器Model File*.onnx文件的路径(可以在本地,也可以在服务器上)Model Name生成的om模型名字Output Path生成的om模型保存在本地的路径步骤2 点击Next进入图5-4-3界面,该项目数据不需要预处理,直接点击Next,进入图5-4-4界面,再点击Finish开始模型转换。图5-4-3 模型转换界面2图5-4-4 模型转换界面3步骤3 等待出现如图5-4-5所示的提示,模型转换成功图5-4-5模型转换成功运行测试步骤1 修改“sdk/config/SE-resnet50.pipeline”中的参数,具体操作如图5-5-1所示;图5-5-1 修改pipeline中*.om文件路径步骤2 在MindStudio工程界面,依次选择“Run > Edit Configurations...”,进入运行配置页面。选择“Ascend App > 工程名”配置应用工程运行参数,图5-5-2为配置示例。配置完成后,单击“Apply”保存运行配置,单击“OK”,关闭运行配置窗口。图5-5-2 工程推理工程运行参数配置在本工程中,推理时运行文件选择main.py,运行参数为--img_path [LR_path] --dataset_name images --pipeline_path [pipeline_path] python3 main.py --img_path "/home/data/xd_mindx/csl/val/" --dataset_name images --pipeline_path "/home/data/xd_mindx/csl/infer/sdk/config/SE-resnet50_test.pipeline"参数解释如下表:参数解释我的设置img_path推理图片路径./val/images/pipeline_pathPipeline文件路径./config/Se_resnet50_ms_test.pipelineinfer_result_dir推理结果保存路径./infer_result/images/images/步骤3 点击运行,出现如图5-5-3所示提示,即为运行成功,infer_result文件夹中即为推理结果,保存为二进制形式。图5-5-3推理操作过程步骤4 配置后处理运行程序,在MindStudio工程界面,依次选择“Run > Edit Configurations...”,进入运行配置页面,如图5-5-4所示,点击“+”,后选择Python(后处理可以直接在本地运行),如图5-5-5所示。图5-5-4运行配置界面图5-5-5 运行后处理相关配置Script path运行文件路径Parameters运行时的参数如图5-5-5所示,运行文件为acc.py:步骤5 点击运行,出现如图5-5-6所示提示,即为运行成功。图5-5-6 运行后处理程序步骤6 结果分析,如图5-5-6所示,已经达到了标准精度。 遇见的问题在使用MindStudio时,遇到问题,可以登陆MindStudio昇腾论坛进行互动,提出问题,会有专家老师为你解答。模型转换时,没有CANN Machine图6-1 CANN管理界面解决方案:按以下步骤,重新安装CANN Machine步骤1 点击File>Settings>Appearance & Behavior > System Settings > CANN,进入CANN管理界面,如图6-1所示:步骤2 点击Change CANN,进入Remote CANN Setting界面,如图6-2所示重新安装CANN,点击Finish,安装CANN。6-2 Remote CANN Setting界面图6-3 安装CANN完成参数解释如下表:Remote Connection远程服务器IPRemote CANN location远程服务器中CANN路径步骤3 完成CANN安装,点击OK,重启MindStudio,如图6-3所示。MindStudio导入应用工程后,提示“No Python interpreter configured for the module”解决方案:步骤1 在顶部菜单栏中选择File > Project Structure,在Project Structure窗口中,点击Platform Settings > SDKs,点击上方的“+”添加Python SDK,从本地环境中导入Python,如图6-4所示。图6-4 导入Python SDK步骤2 点击Project Settings > Project,选择上一步添加的Python SDK,如图6-5所示。图6-5 设置Project SDK步骤3 点击Project Settings > Modules,选中“MyApp”,点击“+”后选择Python,为Python Interpreter选择上述添加的Python SDK。点击OK完成应用工程Python SDK配置,如图6-6所示。图6-6 选择Python SDK