• ATC 模型转换不支持input_format:RGB888_U8
    toolkit版本:Ascend-cann-toolkit_6.10.t01spc030b070_linux.x86_64.run转换命令:atc  --model=./yolov3.prototxt --weight=./yolov3.caffemodel --framework=0 --output=yolov3 --soc_version=SS928V100  --insert_op_conf=./aipp_bgr.cfgaipp配置文件如下图:报错信息:
  • [问题求助] 如何在Ascend310上使用Mindspore lite进行yolov5的C++推理
    如何在Ascend310上使用Mindspore lite进行yolov5的C++推理
  • [其他] 浅谈深度学习
    前言当今计算机科技领域中,深度学习是最具有影响力的技术之一。这篇文章将介绍深度学习是什么,它的应用领域,以及为什么它如此重要。简介深度学习是一种机器学习技术,它使用大量人工神经网络来模拟人类大脑的工作方式。这些神经网络可以自动从数据中学习模式,并根据这些模式进行预测和分类。深度学习技术已经在多个领域取得了巨大的成功,包括图像识别、语音识别、自然语言处理和机器人控制等。工作原 理深度学习的工作原理如下:首先,它会收集大量数据,并将其存储在训练集中。然后,深度学习模型会对训练集中的数据进行特征提取,以便更好地适应不同的数据类型。最后,深度学习模型会根据训练集的数据特征,对新的数据进行分类或预测。应用在图像识别领域,深度学习技术可以自动识别图像中的物体、人脸和交通信号等。这是因为深度学习模型可以从图像中提取特征,例如颜色、纹理和形状等。然后,这些特征可以被用于识别物体或人脸等。在语音识别领域,深度学习技术可以自动识别语音中的词语和句子。这是因为深度学习模型可以从语音信号中提取特征,例如音高、音强和时序等。然后,这些特征可以被用于识别语音中的单词和句子。在自然语言处理领域,深度学习技术可以自动理解语言的结构和含义。这是因为深度学习模型可以从文本中提取特征,例如词汇、语法结构和语义等。然后,这些特征可以被用于理解文本的含义和结构。在机器人控制领域,深度学习技术可以帮助机器人识别和理解环境,并进行自主决策。这是因为深度学习模型可以从图像和语音信号中提取特征,以便识别和理解环境。然后,这些特征可以被用于控制机器人的运动和操作。深度学习技术的成功离不开它的底层算法。深度学习的底层算法主要是神经网络。神经网络是由多个神经元组成的复杂数学模型,它可以自动从数据中学习模式。每个神经元都可以接收多个输入,并通过非线性函数将它们转换为输出。多个神经元的组合可以产生复杂的输出,从而实现多种功能。神经网络的输入和输出通常是数字,但在某些情况下,它们也可以表示向量或矩阵。深度学习模型通常由多个层组成,每层都会提取出不同层次的特征。最外层的层通常负责输出预测结果,而内部的层则负责提取更高层次的特征。深度学习模型的训练通常需要大量的数据和计算资源,但一旦训练完成,它们就可以用于预测和处理各种类型的数据。深度学习技术已经广泛应用于各个领域,例如计算机视觉、自然语言处理、语音识别、机器人控制等。在这些应用中,深度学习模型可以自动从数据中学习模式,并根据这些模式进行预测和分类。由于其高效性和准确性,深度学习技术正在成为越来越多领域的主流技术。然而,深度学习技术也存在一些挑战和问题。例如,深度学习模型的训练需要大量的数据和计算资源,而且通常需要大量的时间和人力来完成。此外,深度学习模型的精度和稳定性也需要更多的研究和改进。总结总之,深度学习技术是一种非常重要和有影响力的机器学习技术。它已经在多个领域取得了巨大的成功,并已经成为人们日常生活中不可或缺的一部分。随着技术的不断发展,深度学习技术将会在更多的领域得到应用,并产生更大的影响。
  • [其他] 浅谈强化学习基本模型和原理
    强化学习是从动物学习、参数扰动自适应控制等理论发展而来,其基本原理是:如果Agent的某个行为策略导致环境正的奖赏(强化信号),那么Agent以后产生这个行为策略的趋势便会加强。Agent的目标是在每个离散状态发现最优策略以使期望的折扣奖赏和最大。强化学习强化学习把学习看作试探评价过程,Agent选择一个动作用于环境,环境接受该动作后状态发生变化,同时产生一个强化信号(奖或惩)反馈给Agent,Agent根据强化信号和环境当前状态再选择下一个动作,选择的原则是使受到正强化(奖)的概率增大。选择的动作不仅影响立即强化值,而且影响环境下一时刻的状态及最终的强化值。强化学习不同于连接主义学习中的监督学习,主要表现在强化信号上,强化学习中由环境提供的强化信号是Agent对所产生动作的好坏作一种评价(通常为标量信号),而不是告诉Agent如何去产生正确的动作。由于外部环境提供了很少的信息,Agent必须靠自身的经历进行学习。通过这种方式,Agent在行动一一评价的环境中获得知识,改进行动方案以适应环境。强化学习系统学习的目标是动态地调整参数,以达到强化信号最大。若已知r/A梯度信息,则可直接可以使用监督学习算法。因为强化信号r与Agent产生的动作A没有明确的函数形式描述,所以梯度信息r/A无法得到。因此,在强化学习系统中,需要某种随机单元,使用这种随机单元,Agent在可能动作空间中进行搜索并发现正确的动作。
  • [其他] 浅谈深度学习模型压缩
    常见的模型压缩方法有以下几种:    模型蒸馏 Distillation,使用大模型的学到的知识训练小模型,从而让小模型具有大模型的泛化能力    量化 Quantization,降低大模型的精度,减小模型    剪枝 Pruning,去掉模型中作用比较小的连接    参数共享,共享网络中部分参数,降低模型参数数量    teacher-student模型    teacher-student模型是迁移学习的一种,迁移学习也就是将一个模型的性能迁移到另一个模型上,对于教师网络往往是一个更加复杂的网络,具有非常好的性能和泛化能力,可以用这个网络来作为一个soft target来指导另外一个更加简单的学生网络来学习,使得更加简单、参数运算量更少的学生模型也能够具有和教师网络相近的性能   知识蒸馏作为前端压缩比较热门的一种压缩技术,其核心思想是通过学习的方法,将庞大复杂的模型迁移到一个精简的小模型上,尽量保持原有模型的特征和精度。这两个模型就类似于老师和学生两个角色,大的模型是老师,精简的模型是学生,通过一定的学习方法尽量继承大模型的特征,而这些学习方法就是研究人员正在研究的蒸馏算法。2014 年,Jimmy 等人认为 Softmax 层含有更为丰富的监督信息,可以作为网络中知识的有效概括。2016 年,Luo 等人提出可以使用Softmax 前一层的输出来指导小模型的训练,可以取得很好的分类效果,其精度甚至超过大模型。但蒸馏因为指导训练的方法较难确定,一直没有得到广泛应用。后端压缩中常用的模型压缩方法是参数量化,其核心思想是从权重中归纳出若干“代表”,由这些“代表”来表示某一类权重,将这些代表储存在码本(Codebook)当中,原始权重矩阵只需在码本中索引所需要的代表就可以,这样会大大降低储存的开销。2014 年,Gong 等人提出将 K 均值聚类算法(K-Means clustering algorithm,K-Means)应用于模型量化,可以使模型大小和准确率之间得到很好的平衡,在比较先进的卷积神经网络(Convolutional Neural Networks, CNN)上可以实现 16-24倍的网路压缩,精度只有 1%的损失。同样基于 K-Means 的思想,Han 等人采用了标量量化的方法,令 K 值等于 4,对所有的权重进行聚类,并储存在码本当中,原始权重只记录码本的索引,这样可以使模型储存空间降低,同时针对精度损失的问题,他们借鉴了剪枝的微调思想,最后对量化后的模型进行微调,使精度有所回升。目前还有一种比较主流且集成好的量化方案就是 TensorRT,TensorRT 是由NVIDIA 公司开发的一个高性能加速工具包,它可以实现将原来 32 位浮点类型的卷积操作替换成 16 位浮点类型的卷积操作或 8 位整数类型的卷积操作,使计算量大大减小,从而降低模型大小,提升推理速度。 后端压缩还有一项重要技术就是模型剪枝,被广泛的应用于神经网络算法的后处理当中,可以有效降低模型大小,减少参数冗余。早在 1990 年,Yann 等人就提出采用二阶导数对网络复杂性和测试误差之间做过一个平衡,通过删除不重要的权重,使模型测试效果达到最优。之后,Babak 等人的剪枝算法也证明了其思想的正确性,但是此类方法多是基于二阶梯度来判断权重的重要程度,所以压缩的程度比较小,无法实现大数量级别的压缩。
  • [其他问题] notebook训练模型,关闭终端(没关闭botebook)后,如何再次打开原终端,查看训练输出进度?
    如题,notebook训练模型,关闭终端后(没关闭botebook),如何再次打开原终端界面,查看训练输出进度?
  • [问题求助] 在Atlas200DK上运行强化学习算法
    想在Atlas200DK上运行强化学习算法,但之前没这么用过,请问有什么技术支持或者开发案例可供入门吗?
  • [其他] 浅谈生成对抗网络
    生成对抗网络深度学习在很多领域的都取得了突破性进展,但大家似乎发现了这样的一个现实,即深度学习取得突破性进展的工作基本都是判别模型相关的。2014 年 Goodfellow 等人启发自博弈论中的二人零和博 弈 ,开创性地提出了生成对抗网络 (GAN)。生成对抗网络包含一个生成模型和一个判别模型。其中,生成模型负责捕捉样本数据的分布,而判别模型一般情况下是一个二分类器,判别输入是真实数据还是生成的样本。这个模型的优化过程是一个“二元极小极大博弈”问题 ,训练时固定其中一方(判别网络或生成网络),更新另一个模型的参数,交替迭代,最终,生成模型能够估测出样本数据的分布。生成对抗网络的出现对无监督学习,图片生成的研究起到极大的促进作用。生成对抗网络已经从最初的图片生成,被拓展到计算机视觉的各个领域,如图像分割、视频预测、风格迁移等。深度卷积生成对抗网络深度卷积生成网络(DCGAN)将卷积神经网络(CNN) [4]  引入到了生成模型和判别模型当中,使得生成性能有了质的提升,以至于后来很多工作都在该网络的基础上进行改进。该网络结构的几个设计要点为:1)将卷积网络中的池化层用相应步长的卷积层代替;2)在生成模型和判别模型中都使用了批归一化层;3)去掉了网络中的全连接层;4)在生成模型中采用Re LU激活函数;5)在判别模型中采用Leaky Re LU激活函数。其生成模型结构图如图3所示。深度卷积生成网络相对于一般的生成对抗网络而言具有更强大的生成能力,同时训练起来更加稳定、容易,生成样本更加多样化等优点。深度卷积生成网络生成的图片足以以假乱真,但缺点是生成图像分辨率比较低(64 * 64),这也是现阶段各种生成对抗网络及其变体所具有的共同问题,因此,如何生成高质量、高分辨率图像将会是一个热门研究方向。半监督生成对抗网络半监督生成对抗网络(SGAN)的判别模型不仅仅判断图像的来源(由 G 生成或者来自训练数据)同时判断图像的类别,这样使得判别模型具有更强的判别能力,其网络结构图。另一方面,输入网络的类别信息也在一定程度上提高了生成模型生成图片的质量,因此半监督生成抗网络的性能要比普通的生成对抗网络的性能略好一些。生成对抗网络的应用图像分割图像分割是指将图像的中的内容根据不同的语义分割开来。绝大多数分割的方法是将图像的每个像素进行分类,这样就忽略了空间一致性这个重要信息。生成对抗网络做图像分割时,生成模型被图像像素分类的网络替换,判别模型用于判断是网络的分类产生的分割图(Class predictions)还是标准的分分割图(Ground truth)。视频预测视频预测是根据当前的几帧视频预测接下来的一帧或者多帧视频。一般常用的做法是用最小二乘回归视频帧的逐个像素值,这样做的一个问题就是生成视频帧存在动作模糊(Motion blur)。一种采用生成对抗网络的做法是,将现有视频帧改变不同尺寸 输入生成模型 G ,让 其 输 出 接 下 来 的 真 值 帧(Ground truth frame)。图6给出了生成对抗网络应用于视频预测时生成网络部分示意图。判别模型和一般生成对抗网络相同,即判断视频帧是生成的还是训练数据原有的风格迁移风格迁移是指将目标图像的风格迁移到源图像当中,使得源图像保留内容的同时具有目标图像的风格,比如将卡通人物的风格迁移到真实人脸图像使其成为卡通头像。生成对抗网络用于图像风格迁移时其特点有3个:1)将源图像输入生成网络后,生成网络输出目标图像风格的图片;2)生成图像和源图像特征相同(或者说保持内容);3)当把目标图像输入生成网络后,生成网络仍然输出目标图像(相当于单位映射)。
  • [其他] 浅学R-CNN目标检测上的算法
    R-CNN的全称是Region-CNN,是第一个成功将深度学习应用到目标检测上的算法。R-CNN基于卷积神经网络(CNN),线性回归,和支持向量机(SVM)等算法,实现目标检测技术。R-CNN的全称是Region-CNN,它可以说是第一个成功将深度学习应用到目标检测上的算法。传统的目标检测方法大多以图像识别为基础。 一般可以在图片上使用穷举法选出所有物体可能出现的区域框,对这些区域框提取特征并使用图像识别方法分类, 得到所有分类成功的区域后,通过非极大值抑制(Non-maximumsuppression)输出结果。R-CNN遵循传统目标检测的思路,同样采用提取框,对每个框提取特征、图像分类、 非极大值抑制四个步骤进行目标检测。只不过在提取特征这一步,将传统的特征(如 SIFT、HOG 特征等)换成了深度卷积网络提取的特征。R-CNN 体框架如图1所示。对于一张图片,R-CNN基于selective search方法大约生成2000个候选区域,然后每个候选区域被resize成固定大小,并送入一个CNN模型中,最后得到一个特征向量。然后这个特征向量被送入一个多类别SVM分类器中,预测出候选区域中所含物体的属于每个类的概率值。每个类别训练一个SVM分类器,从特征向量中推断其属于该类别的概率大小。为了提升定位准确性,R-CNN最后又训练了一个边界框回归模型,通过边框回归模型对框的准确位置进行修正。
  • [MindX SDK] Overlap-Recovery重叠文本还原设计案例
    MindX SDK-Overlap-Recovery重叠文本还原参考设计1 介绍本开发样例使用自研算法完成重叠文本的还原任务,供用户参考。 本系统基于昇腾Ascend310卡。本仓库是重叠文本识别任务(Overlap-CRNN)的上游任务,即完成对重叠文本还原并输出文本实例的mask。1.1 支持的产品本系统采用Ascend 310作为实验验证的推理硬件平台,训练硬件平台支持Ascend和GPU。1.2 支持的版本推理代码支持的版本为MindX SDK 3.0RC3,Ascend-CANN-toolkit 6.0.RC1。1.3 软件方案介绍软件方案主要为文本还原的系统,子系统功能具体描述请参考 表1.1 系统方案各子系统功能描述。重叠文本还原子系统可以实现还原重叠文本并得到各个文本实例的mask,本方案选择使用基于分割的算法并提出一种重叠区域感知的模块来恢复出重叠文本实例。系统方案中各模块功能如表1.2 所示。表1.1 系统方案各子系统功能描述:序号子系统功能描述1重叠文本还原子系统重叠文本还原子系统将得到重叠文本实例的mask的结果,之后将结果送入到下游的文字识别模型进行文字识别。表1.2 系统方案中各模块功能:序号子系统功能描述1输入图像将图像(JPG/PNG格式)通过Pillow库读入。2图像解码通过Pillow第三方库对图像解码。3图像放缩模型的输入为固定尺寸,所以需要对输入图片进行等比例放缩。4文字还原在图像放缩后,将缓存区数据送入文字还原模型。本方案选用自研算法进行文本还原5结果可视化通过Pillow库可视化单张图像的预测的文本实例mask。1.4 代码目录结构与说明eg:本sample工程名称为Overlap-Recovery,工程根目录如下图所示:├── train #训练代码的文件夹 ├── inference #推理代码的文件夹其中,Overlap-Recovery/train工程目录如下图所示,训练部分代码下载链接。├── eval.py #精度测试 ├── train.py #模型训练主函数 ├── export.py #将ckpt模型导出为onnx格式的模型 ├── __init__.py ├── src #模型源码及相关辅助函数 │ ├── __init__.py │ ├── dataset #数据集加载、预处理等相关函数 │ │ ├── __init__.py │ │ ├── base_dataset.py #dataset类的基类 │ │ ├── build_dataset.py #提供接口构造dataset对象 │ │ ├── data_process.py #数据预处理相关函数 │ │ ├── real_dataset.py #用于测试数据的dataset类 │ │ ├── synth_dataset.py #用于训练数据的dataset类 │ │ ├── utils.py #dataset构造所需的辅助函数 │ ├── deoccluder #去重叠算法相关代码 │ │ ├── __init__.py │ │ ├── deoccluder_r50.py #模型主结构代码 │ │ ├── fpn_neck.py # FPN模块代码 │ │ ├── resnet.py # resnet-50 backbone代码 │ │ ├── utils.py # 辅助函数 │ │ ├── rpn # kernel初始化相关 │ │ │ ├── __init__.py │ │ │ ├── kernel_head.py # kernel初始化相关函数 │ │ │ ├── positional_encoding.py # 位置编码函数 │ │ │ ├── semantic_fpn_warpper.py # 语义fpn编码 │ │ ├── roi # kernel更新相关 │ │ │ ├── __init__.py │ │ │ ├── custom_kernel_iter_head.py # kernel迭代函数 │ │ │ ├── custom_kernel_update_head.py # kernel更新函数 │ │ │ ├── kernel_update_head.py # kernel更新函数基类 │ │ │ ├── kernel_updator.py # kernel更新辅助函数 │ │ ├── custom_cells # 算法组件 │ │ │ ├── __init__.py │ │ │ ├── custom_assigner.py # 标签分配函数 │ │ │ ├── custom_blocks.py # 自定义模块 │ │ │ ├── custom_losses.py # 自定义损失函数 │ │ │ ├── custom_match_cost.py # 自定义匹配代价评估函数 │ │ │ ├── custom_operations.py # 自定义算子 │ │ │ ├── custom_samplers.py # 自定义采样函数 │ ├── model_utils # 模型训练相关代码 │ │ ├── __init__.py │ │ ├── device_adapter.py │ │ ├── local_adapter.py │ │ ├── moxing_adapter.py │ │ ├── configs # 配置文件函数 │ │ │ ├── __init__.py │ │ │ ├── config_base.py │ │ │ ├── config_model.py │ ├── utils # 将pytorch权重转为mindspore权重 │ │ └── pth2ckpt.py ├── scripts # scripts文件 │ ├── convert_resnet.sh # 将pytorch的resnet权重转为mindspore权重 │ └── train.sh # 训练指令 ├── resource_utils # 转换pytorch权重所需的相关材料 │ └──resnet50_dict.json其中,Overlap-Recovery/inference工程目录如下图所示:├── eval.py #精度测试 ├── eval_utils.py #指标计算的辅助函数 ├── load_ann.py #加载测试集 ├── load_img_data.py #加载图片数据 ├── ominfer.py #单张图片推理 ├── preprocess_utils.py #加载图片做预处理的辅助函数 ├── README.md ├── models #不同类型的模型文件 │ ├── best_iou.onnx │ └── best_iou.ckpt │ └── best_iou.om ├── dataset #测试数据集 │ ├── img │ └── annotation.json1.5 技术实现流程图实现流程图如下图所示:1.6 特性及适用场景本案例中的还原模型适用于常规图像的文本,并可以返回测试图像的文本区域的IOU指标。本模型在以下几种情况还原效果良好:图像中文字清晰可见、排版工整、字符大小适中等。在以下几种情况去噪效果不太好:图像中文字模糊、排版随意、字符较小等。1.7 代码地址本项目的代码地址为:cid:link_22 环境依赖下面列出环境依赖软件和版本。推荐系统为ubuntu 18.04或centos 7.6。2.1 训练环境训练支持Ascend和GPU硬件。其中GPU环境下依赖的软件和版本如下表:软件名称版本CUDA11.1ubuntu18.04.1 LTSpython3.9.2MindSpore1.9.0opencv-python4.6.0.66numpy1.23.1pillow9.1.0mmcv0.2.14loguru0.2.14tqdm4.64.1imagesize1.4.1terminaltables3.1.10其中Ascend环境下依赖的软件和版本如下表:软件名称版本Ascend-CANN-toolkit6.0.RC1ubuntu18.04.1 LTSpython3.9.2MindSpore1.9.0opencv-python4.6.0.66numpy1.23.1pillow9.1.0mmcv0.2.14loguru0.2.14tqdm4.64.1imagesize1.4.1terminaltables3.1.102.2 推理环境推理环境依赖软件和版本如下表:软件名称版本MindX SDK3.0RC3Ascend-CANN-toolkit6.0.RC1ubuntu18.04.1 LTSpython3.9.2cv24.5.5.64numpy1.23.1pillow9.1.0mmcv-full1.7.0在运行推理项目前,需要设置环境变量:环境变量介绍. ${sdk_path}/set_env.sh . ${ascend_toolkit_path}/set_env.sh3 模型训练步骤0 下载训练部分的源码放置到Overlap-Recovery/train文件夹下。步骤1 从pytorch官方下载resnet-50预训练权重 ,并利用脚本转换成mindspore支持的格式# 准备好logs保存路径 mkdir train/logs # 运行转换脚本 sh train/scripts/convert_resnet.sh PATH-TO-PYTORCH-WEIGHT PATH-TO-MINDSPORE-WEIGHT步骤2 修改训练相关的配置参数在train/src/model_utils/config_base.py中,完成下述参数的修改:a) 设置训练设备类型:设置103行的device_target选择在GPU或者Ascend设备上训练。b) 修改105行mindrecord_dir为预期的log输出和模型保存路径。c) 修改预训练backbone路径:将107行的pretrained_r50改为步骤1中转换后的backbone权重路径。# 用于训练的设备 ['GPU', 'Ascend'] device_target='GPU', # 训练时的log文件和权重的保存路径 mindrecord_dir='path-for-saving-logs-and-files', # 预训练backbone的权重路径 pretrained_r50='path-to-pretrained-model',d) 修改数据集路径:参考测试数据的格式准备好训练数据,修改synth_data_root和real_data_root参数为训练集、测试集的根目录。# 39行的训练集的根目录 SYNTH_DATA_ROOT = "root-directory-to-train-data" # 41行的测试集的根目录 REAL_DATA_ROOT = "root-directory-to-test-data"e) 修改训练的epoch数量: 将94行的total_epoch根据训练集数据量调整为合适的数值。在本案例中total_epoch设置为了60,但训练数据量较大,所以在训练到第2个epoch时性能就满足要求,也可以提前终止训练。步骤3 按照2.1节环境依赖要求配置好训练所需运行环境后,执行如下命令启动模型训练。python train/train.py注:在Ascend上如需指定特定设备序号,可在训练命令前加上DEVICE_ID=X。在GPU上如需指定特定设备序号,可在训练命令前加上CUDA_VISIBLE_DEVICES=X。步骤4 使用训练好的mindspore模型直接推理修改train/src/model_utils/config_base.py中112行checkpoint_path参数为要测评的checkpoint的路径,执行如下命令推理。python train/eval.py4 模型转换通过第三节的训练后得到ckpt模型文件,在项目运行前需要先将ckpt文件通过 export.py 转换成ONNX模型文件,然后在本代码仓下通过ATC将ONNX转换成om模型,其中ckpt->onnx的转换在训练环境下进行(参考第2.1节所述),onnx->om的转换在推理环境下进行(参考第2.2节所述)。模型转换工具(ATC)相关介绍如下:ATC介绍具体步骤如下:准备好训练得到的ckpt模型文件,放至服务器上Overlap-Recovery/train/models文件夹下,环境同训练环境相同(硬件包含CPU,参考第2.1节所述)。进入Overlap-Recovery/train文件夹下,修改export.py文件中ckpt_file_path和file_name参数为自己的路径,执行如下命令完成ckpt->onnx的模型转换:cd train python export.py将生成的ONNX模型转移到推理服务器,放至在Overlap-Recovery/inference/models路径下,环境同推理环境相同(硬件为Ascend 310,参考第2.2节述所)。进入推理服务器执行如下命令(修改onnx_model_path和output_model_path参数为自己的路径)完成onnx->om的模型转换:cd inference/models atc --model=[onnx_model_path] --framework=5 --output=[output_model_path] --soc_version=Ascend310 --input_shape="img:1,3,768,768" --precision_mode=force_fp32执行该命令会在当前目录下生成项目需要的模型文件[output_model].om。执行后终端输出为:ATC start working now, please wait for a moment. ATC run success, welcome to the next use.表示命令执行成功。相关模型的下载链接如下:models.zip。 将模型按照提供的文件夹目录放至即可。5 模型推理当已有模型的om文件,保存在Overlap-Recovery/inference/models/下,推理所需环境如第2.2节所述。示例步骤如下:步骤1 将任意一张待预测的图片存到当前目录下(./Overlap-Recovery/inference),文件名修改为test。步骤2 按照第4节模型转换获取om模型,放置在Overlap-Recovery/inference/models/路径下。若未自行转换模型,使用的是仓库提供的模型,则无需修改相关文件,否则修改ominfer.py中相关配置,将model_path对象的路径改成实际的om模型的路径;img_prefix和img_name对象的路径改成实际的测试图片的路径;save_path对象设置成需要保存可视化图像的路径。步骤3 在命令行输入 如下命令运行单张图片模型推理:cd inference python ominfer.py步骤4 运行结束输出test文件夹,预测的mask可视化结果保存在test文件夹下。6 测试精度步骤1 在Overlap-Recovery/inference/dataset/路径下准备相同格式的数据集(已提供测试用的数据集,按照文件目录放至即可:dataset.zip)步骤2 在命令行输入 如下命令运行精度测试:cd inference python eval.py模型在测试集上的精度达标,最终模型的的精度为87.0%,满足精度要求(≥80%)。
  • [应用开发] 如何升级CANN
    我用的硬件是MDC300,用的CANN版本是Ascend-cann-toolkit_5.0.mdc300_linux-x86_64.run,在onnx转om过程中出现算子不支持的情况,是否升级在最新版本,算子就可以支持,如何升级最新版本呢?
  • [问题求助] 如何升级CANN
    现在用的是MDC300平台,安装的cann版本是Ascend-cann-toolkit_5.0.mdc300_linux-x86_64.run,但是在onnnx转om文件时,用到了不支持的算子,如何解决不支持的算子呢?如果升级cann,需要卸载原来的cann吗?如何升级cann呢?
  • [技术干货] 如何全面掌握图机器学习?最新《图学习》全面综述
    图学习旨在学习现实世界中常见的复杂节点关系和图的拓扑结构,如社交网络、学术网络和电子商务网络等。这些关系使得图数据与传统的表格数据不同,其中节点依赖于非欧氏空间,包含了丰富的信息。图学习从图论发展到图数据挖掘,现在被赋予表示学习的能力,使其在各种场景中取得了出色的性能,甚至包括文本、图像、化学和生物。由于在现实世界中的广泛应用前景,图学习已经成为机器学习中一个热门且有前景的领域。近年来,已有成千上万的研究成果被提出用于解决图学习中的各种问题,引起了学术界越来越多的关注,因此对已有的有价值的研究成果进行综述变得至关重要。尽管一些研究人员已经注意到这种现象,并完成了关于图学习的令人印象深刻的调研。然而,由于图学习的快速扩展,它们未能以更合乎逻辑的方式将相关目标、方法和应用联系起来,并涵盖当前丰富的场景和具有挑战性的问题。1. 引言图学习旨在对图进行建模,图是一种广泛存在于真实场景中的非欧氏数据,与以往机器学习中的数据结构有很大不同,如社交网络[1]、[2]、[3],学术网络[4]、[5]、[6],电子商务网络[7]、[8]、[9],企业知识图谱[10]、[11]、[12]等。挖掘图中节点间复杂连接关系和拓扑结构中蕴含的丰富信息,对于图上的许多任务和应用具有重要意义。此外,传统应用也可以转换为图数据(如计算机视觉[13]、[14]、[15]、语言模型[16]、[17]、[18]、物理[19]、[20]和化学[21]、[22])。重点假设不同实体之间存在许多未直接观察到的潜在联系。这使得图学习不仅是一种处理自然图结构的方法,而且是一种思考各种问题的方式。由于图学习具有广阔的应用前景,因此在国内外引起了广泛的关注。尽管之前关于图的理论工作帮助人们理解图上的各种字符,并提供了基本的分析框架。这些工作通常集中在较小的模拟图上,这限制了它们在真实场景中的应用,特别是当图上存在复杂的关系和结构时。尽管在这一领域已经有了一些显著而详细的调查。目前还缺乏一个综合的、将相关的目标、方法和应用联系起来,形成一个有机的、逻辑的综述。此外,每年在顶级会议上都有数百篇关于图学习的研究,并且数量还在高速增长。由于其发展迅速,缺乏涵盖最新趋势和挑战的全面调研。图2按时间顺序展示了有影响力的图学习方法。这些方法主要分为3类(图挖掘方法、图表示方法和深度图学习方法)。在图学习早期,大多数方法集中于图的字符[1]或利用图的结构信息在小图[25]、[26]上完成一些下游任务。图表示学习目前占据主流地位,可归纳为图嵌入方法和图神经网络方法两大类。这两类方法都旨在学习节点、边或图的语义表示。前者直接优化嵌入,可以减少图结构信息的损失;后者利用深度神经网络,在图上建模信息传递过程。如图3所示,在本综述中,我们从图学习目标的角度提供了一个直观的分类法。根据图的元素(即节点、边和图结构)对以前对图的工作进行排序。基于这种逻辑,综述了图上的相关方法和任务。展示了图学习在现实世界中的各种应用上的出色性能。最后,提出了图学习的发展趋势和挑战,以期进一步推动该领域的研究。本综述的主要贡献总结如下。提供了一个新的分类法,以调查以前关于数据、模型和任务的研究。总结了当前图学习在现实世界中的应用。提出了图学习的当前趋势和挑战。本文的其余部分组织如下。第2节从数据、模型和任务3个角度,基于节点、边和图结构对已有工作进行了直观的分类。第3节展示了用于图学习的主要方法和当前的研究趋势。第四部分总结了该方法在实际中的应用。第5节提出了当今图学习面临的挑战。2 方法在本节中,我们将当前的模型分为两大类(即传统模型和图神经网络)。传统模型可以进一步分为3类(即矩阵分解模型、基于随机游走的模型和基于自编码器的模型)。首先回顾了传统模型,其中一些仍然活跃或与GNN相结合,并给出了当前模型的许多启示。在大多数场景下,与传统模型相比,GNN表现出更高的表达能力和出色的性能。本文将GNN归纳为两个方面。3 应用介绍当前图学习在现实世界中的主要应用,包括传统的机器学习场景,如推荐系统、自然语言处理、计算机视觉和金融科技,以及科学场景中的新兴应用,如化学、生物、物理和数学。最后,总结了图学习中流行的数据集。
  • [经验分享] 使用MindStudio进行MindX SDK 财务票据OCR 开发
    一、任务介绍1.1任务描述在本系统中,目的是基于MindX SDK,在昇腾平台上,开发端到端财务票据OCR识别的参考设计,实现对财务票据中的文本信息进行OCR识别的功能,达到功能要求。视频演示过程:【使用MindStudio进行MindX SDK 财务票据OCR 开发】https://www.bilibili.com/video/BV1644y1m7Qe/?share_source=copy_web&vd_source=2a40c54eb5f208ef5b1c3cb38321c4121.2 任务目标样例输入:财务票据jpg图片样例输出:框出主要文本信息并标记文本内容以及票据类型的jpg图片1.3 环境信息开发环境:Windows 10 + MindStudio 5.0.RC2昇腾芯片:Ascend 310服务器环境依赖软件和版本如下表:软件名称版本Ubantu18.04.1 LTSMindX SDK2.0.4Python3.9.2CANN5.1RC2二、模型介绍本文开发选用了ResNet-50模型实现财务数据分类,通过DB模型实现端到端文本框识别、采用CRNN模型进行抠图以及框内文本内容识别。财务数据识别流程图如下图所示: 票据识别的SDK流程图如下图所示:2.1 票据分类本文开发选用了ResNet-50模型对图片进行分类。ResNet-50模型相关文件可在此处下载: cid:link_2ResNet是ImageNet竞赛中分类问题效果比较好的网络,它引入了残差学习的概念,通过增加直连通道来保护信息的完整性,解决信息丢失、梯度消失、梯度爆炸等问题,让很深的网络也得以训练。ResNet有不同的网络层数,常用的有18-layer、34-layer、50-layer、101-layer、152-layer。支持的特性包括:1、分布式并行训练;2、混合精度训练。2.2 文本框识别本文开发选用db模型对图片进行文本框识别。论文连接:cid:link_11模型相关文件链接:cid:link_3DBNet是基于分割的文本检测算法,算法将可微分二值化模块引入了分割模型,使得分割模型能够通过自适应的阈值进行二值化。经过验证,该方案不仅简化了后处理过程而且提升了文本检测的效果。相较于其他文本检测模型,DBNet在效果和性能上都有比较大的优势,是当前常用的文本检测算法。DB文本检测模型可以分为三个部分:Backbone网络,负责提取图像的特征;FPN网络,特征金子塔结构增强特征;Head网络,计算文本区域概率图。其模型结构如下图所示:2.3 文本内容识别本文使用CRNN模型对文本内容进行识别。CRNN模型相关文件可在此处下载:cid:link_4CRNN是一种基于图像序列识别的神经网络及其在场景文本识别中的应用,本文研究了场景文本识别问题,这是基于图像序列识别中最重要和最具挑战性的任务之一。提出了一种新的神经网络体系结构,将特征提取、序列建模和转录集成到一个统一的框架中。与以前的场景文本识别系统相比,所提出的体系结构具有四个独特的特性:它是端到端可训练的,与大多数现有算法相比,这些算法的组件是单独训练和调整的。它自然地处理任意长度的序列,不涉及字符分割或水平尺度归一化。它不局限于任何预定义的词典,在无词典和基于词典的场景文本识别任务中都取得了显著的性能。它生成了一个有效但小得多的模型,这对于现实世界的应用场景更实用。三、MindStuido介绍与安装MindStudio的具体安装步骤以及详细功能介绍可参考用户手册。3.1 MindStudio简介可提供再AI开发所需的一站式开发环境,支持模型开发、算子开发以及应用开发三个主流程中的开发任务。依靠模型可视化、算力测试、IDE本地仿真调试等功能。MindStudio可以单独安装在Windows上。在安装MindStudio前需要在Linux服务器上安装部署好Ascend-cann-toolkit开发套件包,之后在Windows上安装MindStudio,安装完成后通过配置远程连接的方式建立MindStudio所在的Windows服务器与Ascend-cann-toolkit开发套件包所在的Linux服务器的连接,实现全流程开发功。本文开发采用的就是将MindStudio安装在Windows服务器上时,Windows服务器为本地环境,Linux服务器为远端环境。3.2 MindStudio安装步骤1 : 通过MindStudio下载链接,下载Windows系统的安装包,下载完成后点击下载的安装包安装MindStudio。双击下载好的软件安装包进行安装。步骤2:双击安装包,进入安装界面,单击“Next”。步骤3:在下图安装界面,用户根据需要勾选安装选项后,单击“Next”。其中Create Desktop Shortcut:勾选“MindStudio”,创建桌面快捷方式。Update PATH Variable(restart needed):将MindStudio的启动文件路径加入环境变量PATH中,可从系统命令行直接启动MindStudio。如果勾选此项,MindStudio安装配置完成后会重启操作系统。Update Context Menu:勾选“Add "Open Folder as Project"”后,右键单击文件夹,可以作为MindStudio工程打开。Create Associations:默认不勾选。步骤4:选择MindStudio默认安装路径下的启动菜单文件夹,单击“Install”步骤5:开始安装MindStudio,完成后单击“Next”。步骤6:完成MindStudio安装配置,单击“Finish”。以上安装完成后,启动MindStudio,进入导入设置界面,这里选择的是Do not import settings不导入设置。选择该选项,则创建新的配置文件,默认为该选项。如果没有报错信息且能正常进入欢迎界面,则表示MindStudio安装成功。3.3 MindStudio环境搭建进入欢迎界面后,从欢迎界面打开Remote CANN Setting窗口的图文内容:Customize-》All Settings-》Appearance & Behavior-》System Settings-》CANN点击Remote Connection后面的添加图标点击左上角的“➕”,然后填写服务器连接的相关信息,测试成功后点击OK。点击Remote CANN location后面的文件图标,打开远端服务器目录树,选择CANN安装路径,点击OK,点击Finish开始同步。在欢迎界面点击Plugins,在插件市场搜索并安装如下插件工具。Grep ConsolePylintPython Community Edition在欢迎界面依次点击Customize-》All Settings-》Appearance & Behavior-》System Settings-》MindX SDK打开管理界面。点击“Install SDK”,导入远程MindX SDK。以上步骤全部完成且没有报错信息,表示MindStudio开发环境已成功搭建。3.4 MindStudio新建工程在 Projects 标签下点击“New Project”创建一个新的工程。选择 MindX SDK Project (Python),点击“Finish”。点击File->Project Structure点击“SDKs”,点击加号,点击“Add Python SDK”点击Interpreter后的按钮选择python版本(一般系统会自动检索,如果有多个python版本请手动选择正确的)。填好后点击OK。点击“Project”,选择创建的 SDK。点击 “Modules”->“Dependence”,选择创建的 SDK,点击“OK”。File ->Settings ->Tools ->Deployment,点击Mappings,根据下图操作顺序设置远程映射路径。点击“Tools”-> “Deployment”->“Automatic Upload”。进入远程服务器项目所在目录,两端文件已同步完成开发完成后完整的工程结构如下所示:四、模型转换MindStudio模型转换工具的详细使用和参数说明可参考MindStudio用户手册--模型转换。4.1 Resnet模型转换可以通过在菜单栏选择“Ascend > Model Converter” 进入模型转换界面。​打开模型转换页面,在“Model Information”页签中配置Model File,可以选择远端或本地的模型文件,点击“OK”以后会自动解析模型并自动填充如图相关信息。添加input Node, 参数值为“1,3,224,224”,TYPE选择UINT8。设置模型名称、om 模型生成目录、点击“Next”。进入“Data Preprocessing”数据预处理的配置页,开启Load Aipp Configuration,选择对应的配置文件。配置文件如下所示:最终的数据预处理参数如下,点击“Next”。检查生成的atc命令,确认无误后点击“Finish”。模型转换成功后,如下图所示:4.2 DB模型转换可以通过在菜单栏选择“Ascend > Model Converter” 进入模型转换界面。打开模型转换页面,在“Model Information”页签中配置Model File,可以选择远端或本地的模型文件,点击“OK”以后会自动解析模型并自动填充如图相关信息。添加input Node, --input_shape="x:1,3,-1,-1",TYPE选择FP32。dynamic_image_size="1216,1280;1280,1216;1120,1280;1280,1120;1024,1280;1280,1024;928,1280;1280,928;832,1280;1280,832;736,1280;1280,736;704,1280;1280,704;672,1280;1280,672;640,1280;1280,640;608,1280;1280,608;576,1280;1280,576;544,1280;1280,544;512,1280;1280,512;480,1280;1280,480;448,1280;1280,448"。点击Next。 点击“Next”。进入“Advanced Options Preview”高级选项配置页,在Additional Arguments添加转换参数。Command Preview展示了模型转换使用的atc参数预览数。配置文件如下所示:模型转换成功后,如下图所示:4.3 CRNN模型转换可以通过在菜单栏选择“Ascend > Model Converter” 进入模型转换界面。打开模型转换页面,在“Model Information”页签中配置Model File,可以选择远端或本地的模型文件,点击“OK”以后会自动解析模型并自动填充如图相关信息。input Node参数值为input_shape="x:1,3,48,320",Type选择UINT8。点击“Next”。进入“Data Preprocessing”数据预处理的配置页,开启Load Aipp Configuration,选择对应的配置文件。配置文件如下所示:最终的数据预处理参数如下,点击“Next”。进入“Advanced Options Preview”高级选项配置页, 其中Command Preview展示了模型转换使用的atc参数预览数。确认无误后点击“Finish”。模型转换成功后,如下图所示五、项目开发5.1 pipeline流程编排MindX SDK实现功能的最小粒度是插件,每一个插件实现特定的功能,如图片解码、图片缩放等。将这些插件按照合理的顺序编排,实现相应的功能。这个配置文件叫做pipeline,以JSON格式编写,用户必须指定业务流名称、元件名称和插件名称,并根据需要,补充元件属性和下游元件名称信息。本文实现所使用的插件和工作流程如下:(1)输入类型可以是图片数据(jpg图片序列)(2)调用MindX SDK提供的图像解码接口mxpi_imagedecoder,解码后获取图像数据(3)进行图像尺寸大小变换,调用MindX SDK提供的图像尺寸大小变换接口mxpi_imageresize插件(4)首先进行票据类别识别,调用MindX_SDK的mxpi_tensorinfer接口,将尺寸变换后的图像数据输入Resnet训练模型,完成图片所属票据类别的识别(5)根据所属票据类别,结合DBNet模型方法进行文本框识别,并进行文本框缺失判断(6)检测后处理,调用MindX SDK提供的模型推理插件mxpi_tensorinfer,然后调用MindX SDK提供的插件mxpi_objectpostprocessor,将结果组装成json字符串传给下一个插件(7)抠图,调用MindX_SDK的mxpi_imagecrop插件,将各个文本框分别抠出并标记(8)对框内文本进行识别,然后将结构化信息写入文本文件中。文本文件与图片名保持一致。序号插件功能描述图像解码调用MindX SDK的 mxpi_imagedecoder图像缩放调用MindX SDK的mxpi_imageresize分类识别使用已经训练好的Resnet模型,对图像进行票据分类。插件:mxpi_tensorinfer分类后处理mxpi_classpostprocessor文本框识别使用已经训练好的DBNet模型,对检测出图像中的所有文本框信息。插件:mxpi_tensorinfer检测后处理mxpi_textobjectpostprocessor抠图调用MindX SDK的抠图插件mxpi_imagecrop文字识别使用已经训练好的CRNN模型,对单个文本框进行文字识别。插件:mxpi_tensorinfer文本生成后处理mxpi_textgenerationpostprocessor结构化输出进行后处理插件的开发,将票据类别、文本框分类及文字信息结构化输出到图片同名的文本文件中MindStudio中可以进行可视化流程编排。在顶部菜单栏中选择“Ascend-》MindX SDK Pipeline”,打开空白的pipeline绘制界面,可以在左方插件库中选中所需的插件,并进行插入插件、修改参数等操作。点击Save As进行保存。保存之后可以通过代码进行修改。可在test.pipeline文件中配置所需的模型路径与模型后处理插件路径。next和dataSource制定了各个元件之间的连接关系,om模型地址需要放在推理插件里面,推理插件输出结果不一定可以可视化,所以需要后处理元件对推理插件进行处理输出。最终pipeline可视化如下:5.2 主程序开发由于目前MindStudio连接远程python服务器的功能正在开发中,目前仅支持使用MindStudio实现python项目两端代码同步,项目运行依然需要在服务器上实现。pipeline在脚本main.py内部。获取输入图片文件名与路径将识别的文本内容添加到方框左上方。创建并初始化流管理对象;读取pipeline文件。创建流以及输入对象,输入类型为图片数据(jpg图片序列)。获取输出,并打印结果。判断并标记输入票据的类型保存框出票据的主要文本信息并标记文本内容以及票据类型的jpg图片在./ouput文件夹下。以及最后销毁流。将测试图片放在inputs文件夹中,运行main.py等待运行成功后,MindStudio会自动同步远程项目,但是若是自动同步失败或者没有运行,可以点击菜单栏中的Tools>Deployment>Download,下载服务器里的项目,应当包含模型的输出。待执行完毕可在./outputs目录下查看结果六、模型精度验证测试数据可在此处下载,将下载的数据解压到eval_data目录下。定义获取测试数据的文件名、标签如下:定义计算iou函数以及字符串计数函数如下定义精度函数如下:创建并初始化流管理对象, 读取pipeline。创建流。其中type_acc为分类精度,acc为识别端到端精度。在远程项目目录下执行python3 eval.py可得精度结果如下所示,其中acc为db+crnn端到端精度,type_acc为resnet50精度。七、总结本文主要介绍使用 MindStudio 全流程开发工具链,在昇腾平台上,开发端到端财务票据OCR识别的参考设计,实现对财务票据中的文本信息进行OCR识别的功能,达到功能要求。在开发过程中碰到了很多问题,除了参考 MindStudio用户手册,社区帖子也提供了很多解决问题的思路。建议在开发过程中遇到问题可查看社区相关经验分享。社区地址如下:cid:link_9实现参考链接cid:link_10。参考文档:cid:link_7八、FAQCANN配置失败:Permission denied报错原因与解决方法:原先的CANN安装再root权限的用户下,普通用户没有权限。我们需要重新下载普通用户下,然后导入普通用户的路径。模型转换时,无法导入python module报错原因与解决方法:未配置python的环境变量。打开~/.bashrc文件,添加环境变量。
  • [技术干货] 目标检测算法套件使用Demo
    目标检测算法套件使用指导本Notebook通过引导用户导入数据集、选择模型、训练并可视化推理,快速完成COCO数据集目标检测任务。Step0 安装依赖包!pip install ipywidgets==7.7.1 !pip install pillow==9.1.1 !pip install pandas==1.3.4Step1 加载算法、样例数据集与预训练模型完成模型的微调和探索经典的目标检测方法主要包括单阶段(YOLO、RetinaNet等)和多阶段算法(Faster RCNN、Cascade RCNN等),本案例以fcos算法模型为例,fcos算法属于anchor free的一阶段目标检测算法,具有训练速度快、超参数少等特点。本小节以"mmdetection:fcos/fcos_r50_caffe_fpn_gn-head_1x_coco"模型为例,演示如何下载预训练模型。1. 选择预训练模型#@title Install pretrained model from ma_cau.apis import EnvManager env = EnvManager() env.init_env() # initialize environment algo_name = "mmdetection" #@param {type:"string", dropdown} model_name = "mmdetection:fcos/fcos_r50_caffe_fpn_gn-head_1x_coco" #@param {type:"string", dropdown} dataset_name = "coco2017_sample" #@param {type:"string"}# 安装算法套件,首次安装时可能需要restart kernel用以使用更新后的依赖包 env.install(mode="algorithm", asset_name=algo_name, version="2.17.0")首次安装完套件需要restart kernel,重启后重新执行第一个cell,然后就可以直接执行下面一个cell,不需要再执行安装算法套件步骤def restart_kernel(): import os status = input("Restart Kernel【只需要在第一次安装算法套件时才需要重启kernel,重启后重新执行第一个cell】[y/n(default)]: ") or "n" if status.lower() == "y": os._exit(00) restart_kernel() # 安装样例数据集,数据集会下载到./{project_dir}/data/raw/ env.install(mode="dataset", asset_name=dataset_name) # 从AI Gallery下载 coco2017_sample 数据集 # 安装预训练模型,模型会下载到./{project_dir}/model_zoo/ env.install(mode="model", asset_name=model_name) # 从openmmlab网站下载预训练模型2. 构建数据集DataBlock对象DataBlock支持自动统计数据集信息,比如目标、尺寸等信息,帮助用户更好的理解数据集,同时还可以动态查看每一个batch经过pipeline之后的输入图像,确保数据增强的正确性。detblock.plot_dataset_stats() 可以绘制数据集的统计信息,图像的显示大小可以由figsize参数控制; detblock.print_dataset_stats() 能够打印出具体的统计信息数值; datablock.show_batch() 可以动态展示内存中的经过增强后的图片信息,可以通过rows(显示行数)和figsize(显示大小)来控制输出。DetDataBlock主要接收如下入参:env: EnvManager对象batch_size: 批处理大小 data_type: 数据集类型,目前只支持“coco”,其他数据集格式可以通过CocoConverter进行转换 data_root: 数据集路径 seed:随机数种子,和数据集batch加载顺序相关 num_classes:类别数 categories:类别信息列表,默认为None表示使用所有类别,否则只加载对应类别 train_img_prefix:训练集图片路径,相对于data_root train_ann_file:训练集标注文件路径,相对于data_root val_img_prefix:验证集集图片路径,相对于data_root,可缺省 val_ann_file:验证集标注文件路径,相对于data_root,可缺省 test_img_prefix:测试集图片路径,相对于data_root,可缺省 test_ann_file:测试集标注文件路径,相对于data_root,可缺省 model_name:模型名称#@title Build DataBlock from ma_cau.apis import DetDataBlock num_classes = 80 #@param {type:"integer"} data_root = "./data/raw/coco2017_sample" #@param {type:"string"} train_img_prefix = "val2017" #@param {type:"string"} train_ann_file = "annotations/instances_val2017.json" #@param {type:"string"} val_img_prefix = "val2017" #@param {type:"string"} val_ann_file = "annotations/instances_val2017.json" #@param {type:"string"} batch_size = 4 #@param {type:"slider", min:1, max:10, step:1} db = DetDataBlock(env, batch_size=batch_size, data_root=data_root, seed=0, num_classes=num_classes, train_img_prefix=train_img_prefix, train_ann_file=train_ann_file, val_img_prefix=val_img_prefix, val_ann_file=val_ann_file, model_name=model_name ) 2.1 可视化数据集plotter = db.show_batch(rows=2, figsize=(14, 8))next(plotter)2.2 绘制数据集分布图db.plot_dataset_stats(figsize=(14, 8))2.3 打印数据集分布结果db.print_dataset_stats()3. 构建模型Model对象Model主要接收如下入参:env: EnvManager对象 model_name:模型名称 num_classes:类别数 checkpoint:预训练模型文件路径,默认为None(随机初始化网络权重) load_default_backbone: 是否加载预训练backbone,默认为False。当指定checkpoint参数后,该参数可设置为False请手动选择一个路径,加载预训练模型,如"model_zoo/mmdetection/2.17.0/fcos/fcos_r50_caffe_fpn_gn-head_1x_coco-821213aa.pth"import os from ipyfilechooser import FileChooser from ipywidgets import Layout fc = FileChooser(path=os.getcwd(), layout=Layout(width="1000px")) display(fc)# Build Model from ma_cau.apis import Model ckpt_path = os.path.join(fc.selected_path, fc.selected_filename) fcos_model = Model(env, model_name=model_name, num_classes=num_classes, checkpoint=ckpt_path)4. 构建学习器Learner对象Learner主要接收如下入参model: model对象 datablock: datablock对象 work_dir: 训练输出路径 optimizer: 训练优化器,默认为SGD momentum: 动量 pretrained_model: 预训练模型路径,当构建Model时指定该参数后,此参数可忽略 warmup_policy: warm up策略,如cosine warmup_iters: warm up 步数, 默认为500 epoch_based_eval_interval: 每完成n个epoch训练后进行一次模型评估,用于检测等任务 iter_based_eval_interval: 每完成n个iteration训练后进行一次模型评估,用于分割等任务 save_ckpt_interval: 保存模型的间隔 no_validate: 训练中不进行评估操作,默认为False log_params: 字典类型参数,训练日志类型,默认以表格形式输出训练和评估日志,具体参数如下 log_type: 输出日志类型,默认为table table_highlight_method: 当log_type为table时,对训练结果的高亮方法,默认为best,即高亮最好的训练结果 log_interval: 训练输出间隔,每完成n个训练迭代输出日志 launcher: 分布式作业启动类型,当前暂不支持执行代码如下:from ma_cau.apis import Learner output_path = 'output' log_interval = 11 epoch_based_eval_interval = 1 log_params = { 'log_type': ['graph', 'table'], 'table_highlight_method':'best', 'log_interval':log_interval } learner = Learner(fcos_model, db, output_path, log_params=log_params, epoch_based_eval_interval=epoch_based_eval_interval)learner.fit:model: model对象 datablock: datablock对象 work_dir: 训练输出路径 optimizer: 训练优化器,默认为SGD momentum: 动量 pretrained_model: 预训练模型路径,当构建Model时指定该参数后,此参数可忽略 warmup_policy: warm up策略,如cosine warmup_iters: warm up 步数, 默认为500 epoch_based_eval_interval: 每完成n个epoch训练后进行一次模型评估,用于检测等任务 iter_based_eval_interval: 每完成n个iteration训练后进行一次模型评估,用于分割等任务 save_ckpt_interval: 保存模型的间隔 no_validate: 训练中不进行评估操作,默认为False log_params: 字典类型参数,训练日志类型,默认以表格形式输出训练和评估日志,具体参数如下 log_type: 输出日志类型,默认为table table_highlight_method: 当log_type为table时,对训练结果的高亮方法,默认为best,即高亮最好的训练结果 log_interval: 训练输出间隔,每完成n个训练迭代输出日志 launcher: 分布式作业启动类型,当前暂不支持本步骤主要演示训练过程的loss值可视化功能,1 epoch 训练耗时约12分钟,训练1分钟后即可提前手动停止#@title Fit parameters weight_decay = 0.0005 #@param {type:"number"} max_epochs = 1 #@param {type:"slider", min:0, max:20, step:1} lr = 0.001 #@param {type:"slider", min:0.001, max:0.1, step:0.001} learner.fit(lr=lr, max_epochs=max_epochs, weight_decay=weight_decay, gpu_ids=[0])Step3 模型评估1. 评估验证集learner.validate: 用于模型评估,具体参数如下data: 指定评估的数据集,只接受datablock类型的对象, 默认为None, 如果使用默认值则会使用已经定义好并传入Model中的datablock中的验证数据集进行评估 gpu_collect: 是否使用GPU进行评估,默认为True checkpoint: 评估时使用的模型权重路径, 默认为None。当传入有效路径时,该处优先级最高。没有传入参数时,会按完成训练后的模型权重高于Model中指定的checpoint的优先级加载模型权重。如果均未指定checpoint且没有进行训练,则默认使用随机初始化的权重进行评估# learner.validate() # 这步耗时较长,可跳过2. 图片推理learner.predict: 用于模型推理,具体参数如下img_path: 指定需要推理的图片路径 model: 指定用于推理的模型,默认为None, 不填写该参数则默认使用Learner中的Model进行推理 checkpoint: 推理时使用的模型权重路径, 默认为None。当传入有效路径时,该处优先级最高。没有传入参数时,会按完成训练后的模型权重高于Model中指定的checpoint的优先级加载模型权重。如果均未指定checpoint且没有进行训练,则默认使用随机初始化的权重进行推理 device: 推理时的设备类型,默认为'cpu',即使用cpu进行推理 score_thr: 模型logits判别阈值,默认为0.3 save_dir: 推理后的文件保存路径,默认为None手动选择一张图片进行推理,比如"./data/raw/coco2017_sample/val2017/000000000139.jpg"img_fc = FileChooser(path=os.getcwd(), layout=Layout(width="1000px")) display(img_fc)# 模型推理 result = learner.predict(os.path.join(img_fc.selected_path, img_fc.selected_filename))Step4 交互式推理本算法套件支持动态交互式推理方式,您可以通过鼠标勾选需要推理的图片、视频,并且可以选择不同的iou和score参数进行动态比较。测试图片路径:default_ma_cau_project/data/raw/coco2017_sample/val2017/测试视频路径:default_ma_cau_project/algorithms/mmdetection/algorithm/demo/demo.mp4VisDetPlatform主要接收如下几个参数: learner: Learner对象,主要用于在线实时推理; stage:推理图片所属的数据集类别,"train"、"val"、"test"; ann_json: 标注文件路径,主要用于离线展示 det_file: 验证输出的检测结果文件路径,主要用于离线展示 det_box_color:实际检测框颜色 gt_box_color:GT检测框颜色 without_gt:是否只查看数据集标注 classes:关注的类别列表 mask_palette:mask蒙版颜色列表,如果不设置,则使用随机颜色 infer_param: 推理相关参数,如不指定则使用配置文件默认参数,与推理速度相关,主要包含 1. nms_pre:nms操作前生成的bbox数量 2. max_per_img:每张图片最大目标数 3. img_scale:图像resize尺寸from ma_cau.apis import VisDetPlatform infer_param = {"nms_pre": 200, "max_per_img": 20, "img_scale": (800, 600)} VisDetPlatform(learner, infer_param=infer_param, stage="val", det_box_color=(0, 0, 255))如果您不清楚交互式推理的用法,请查看下方视频