• [技术干货] 与PaaS产品一起成长的故事:J市JJ银行合规模型银行一体化应用平台实战“术”-软件包迁移2
          上回谈到合规模型使用了外采的软件包,有部分软件包是国外厂商开发的,在国内鲲鹏平台上从没有编译运行过。这些软件包需要先分析出软件包清单和迁移准备。      软件包清单通过扫描,发现合规模型有15个软件包需要迁移,迁移准备期间需要做镜像。这个镜像包括SWR文件和软件依赖包,这两部分构成同一个Docker镜像,进行一次迁移。15个软件包就打包15个镜像。      打包好镜像后还有一个工序,就是进行硬件平台调试。为了平台测试,提前规划了测试指标和测试参数选择。      软件包主要是合规模型的核心功能调用,因此就上回提到的五个核心场景,分别定义了测试指标。从合同识别功能分析,每张图片识别不超过秒级;合同自动识别涉及文本比对,需要查数据库,因此不超过分钟级;合同内容风险识别,根据标注的条数而定,标注需要靠模型辅助,由于风险点浩如烟海,因此风险点标注是毫秒级;合同外规内化,涉及另一个模型调用,内外规搜索,也不超过分钟级;最后合同模版自动生成,这是一个合成的工作,因此各种测试指标都通过后,才能进入这个环节,不超过分钟级。        定义了测试指标后,还有一个测试参数选择的问题。平台节点只有一个,单机配置鲲鹏平台,双卡710,相当于0.8A100的计算能力,CPU是麒麟。        在实验室,测试数据一般达到7T左右,但是为了测试效率,只能输入1T测试,不然计算能力承载不起模型运算。
  • [案例共创] J市JJ银行合规模型银行一体化应用平台实战“术”-软件包迁移2
            上回谈到合规模型使用了外采的软件包,有部分软件包是国外厂商开发的,在国内鲲鹏平台上从没有编译运行过。这些软件包需要先分析出软件包清单和迁移准备。        软件包清单通过扫描,发现合规模型有15个软件包需要迁移,迁移准备期间需要做镜像。这个镜像包括SWR文件和软件依赖包,这两部分构成同一个Docker镜像,进行一次迁移。15个软件包就打包15个镜像。        打包好镜像后还有一个工序,就是进行硬件平台调试。为了平台测试,提前规划了测试指标和测试参数选择。         软件包主要是合规模型的核心功能调用,因此就上回提到的五个核心场景,分别定义了测试指标。         从合同识别功能分析,每张图片识别不超过秒级;合同自动识别涉及文本比对,需要查数据库,因此不超过分钟级;合同内容风险识别,根据标注的条数而定,标注需要靠模型辅助,由于风险点浩如烟海,因此风险点标注是毫秒级;合同外规内化,涉及另一个模型调用,内外规搜索,也不超过分钟级;最后合同模版自动生成,这是一个合成的工作,因此各种测试指标都通过后,才能进入这个环节,不超过分钟级。        定义了测试指标后,还有一个测试参数选择的问题。平台节点只有一个,单机配置鲲鹏平台,双卡710,相当于0.8A100的计算能力,CPU是麒麟。        在实验室,测试数据一般达到7T左右,但是为了测试效率,只能输入1T测试,不然计算能力承载不起模型运算。
  • [技术交流] J市JJ银行合规模型一体化应用实战“术”分享-合规模型软件包迁移
           上回在鲲鹏平台上搭建了合规模型的代码和SO库,同时利用port advisoring工具进行依赖库扫描并建仓。除此之外,在测试节点上还有测试要完成。这是整体迁移的部分,合规模型依赖软件包。       这些软件包从而何来,为何存在于合规模型?      要说明这个问题,要从合规模型的业务场景说起。合规模型是用于JJ银行法审合同阶段,由于智能法审功能需要依赖专家经验,尤其这几个环节:合同识别、合同比对、合同关联审核、合同模版生成。合同识别是对这类合同进行自动判别,是文本语义分析环节。得到合同文本内容后,需要对合同历史版本进行比对,分析差异。接着对评审点进行审核,这是对评审点词条进行核对,如果评审点内容跟法务库里的词条产生冲突或不符,则产生合同异常信息。如果没有异常信息,对这类合同生成一个合同模版并留白。      在这一系列动作之前,还有打标签的环节。      这些业务场景如此复杂,证明了智能法审的功能比如牵涉很多功能点,处理多模态数据,比如图片、扫描件、电子文档、影印件........这些数据处理,会引入功能繁杂的软件依赖包。      例如合同比对,当时曾测试了两种方案,采用MICROS的插件,这是专门针对office软件的插件,比对效果非常好,就是目前MICROS软件里的比对功能专业插件,但缺点是不能定制改写,只适合office系列软件文档。随着GCH要求,银行逐步采用wps等办公软件,这个插件不兼容。      如何将这些插件软件包进行鲲鹏迁移,我们下次接着聊。
  • [问题求助] Exagear运行Unixbench子项某些参数时提示找不到libc
    Unixbench子项excel执行出错退出,单独执行子项其默认参数类似于cd unixbench-5.1.3UB_BINDIR=./pgms ./pgms/execl 30默认参数30 会执行失败,调低参数就可以运行,具体可运行参数不固定exgear版本4.0.1包版本3124guestos:ubuntu-2004unixbench版本:5.1.3
  • [案例分享] 服务化架构-应用现状与需求调研
    本文档包含以下四部分:1、XX应用系统架构和关联关系调研模板2、XX应用系统资源详细清单调研模板3、应用上云迁移调研访谈提纲和调研表汇总4、项目调研总结模板注:本文档全部或部份内容仅用于本迁移项目,供客户授权的华为工程师和客户内部授权人员参考,严禁用于其他任何用途或交与第三方。
  • [问题求助] NAS本地怎么挂载
    使用公网迁移(rclone工具)按照这个文章操作,mount -t nfs -o vers=3,timeo=600,noresvport,nolock 本地NAS挂载地址 /mnt/src 这一步挂载一直超时失败,SFS可以挂载成功,请问下NAS本地挂载地址是指啥
  • 迁移
    一、数据迁移方式公有云服务:1、 可以使用公有云数据快递服务DES服务,是面向TB到数百TB级别数据上云的数据服务2、 若涉及数据库迁移部分,则可采用DRS3、异构数据库迁移,使用数据库和应用迁移服务UGO技术层工具流:1、 利用企业级存储hyperreplication+hyperMetro(复制+双活)+lun拷贝等特性2、 利用容灾数据复制工作(如Ereplication)3、oracle用ORACLE Golden Gate/MS Data Guard(DG)二、数据层、平台层、应用层迁移数据层迁移若采用工具流: 1、利用企业级存储hyperreplication+hyperMetro(复制+双活)+lun拷贝+eRplication等;公有云服务:1、可以使用公有云数据快递DES服务(数据快递服务(Data Express Service, DES)是面向TB到数百TB级数据上云的传输服务);平台层迁移若采用工具流: Oracle Golden/Data guard/Always On/数据库自带迁移工具等;若采用公有云服务:DRS(偏同构数据库)+UGO(偏异构数据库)应用层迁移工具流:eBackup/Rainbow等服务流:SMS主机迁移服务三、EVS、SFS、OBS迁移1、EVS公有云服务:1. 可以使用公有云数据快递DES服务(数据快递服务(Data Express Service,DES)是面向TB到数百TB级数据上云的传输服务)2. 若涉及到数据库迁移部分,则可采用DRS(数据复制服务)3、SMS主机迁移技术层工具流:1. 利用企业级存储hyperreplication+hyperMetro(复制+双活)+lun拷贝等特性2. 利用容灾数据复制工具(如Ereplication等)2、SFShttps://support.huaweicloud.com/bestpractice-sfs/sfs_03_0006.html1、通过mount方式挂载访问SFS Turbo,将本地NAS存储中的数据迁移至SFS Turbo。通过云专线迁移(rclone工具)、通过云专线迁移(rsync工具)。2、法打通网络直接挂载,可以通过公网访问华为云ECS绑定的EIP,也可进行传输迁移。使用公网迁移(rclone工具)。3、英方工具I2NAS3、OBScid:link_0https://support.huaweicloud.com/bestpractice-obs/obs_05_0220.html搬迁本地数据至OBS:OBS工具、CDM、DES、DES Teleport、云专线迁移第三方云厂商数据至OBS:OMS、CDM、镜像回源OBS之间数据迁移(跨帐号、跨区域以及同区域内数据迁移):OMS离线迁移:通过上传OBS四、各个迁移服务的区别https://support.huaweicloud.com/cdm_faq/cdm_01_0255.html#cdm_01_0255__section37162116176五、MYSQL、SQL Server、Oracle迁移1、MysqlMysql dump、DRSMysql dump步骤: 1.使用mysqldump导出自建数据库的数据2.将导出的两个文件上传到ECS实例上3.将导出的文件导入到目标RDS中4.导入成功后登录RDS实例数据库中查看数据是否正常。DRS:https://support.huaweicloud.com/bestpractice-drs/drs_02_0008.html2、SQL ServerSQL Server导入导出功能、DRS备份迁移SQL Server导入导出步骤:1.登录控制台,选择“数据库 > 云数据库 RDS”“实例管理”页面,选择目标实例,单击实例名称,进入实例的“基本信息”页签。2.在“基本信息”页签下单击“绑定”,在弹出框选择对应的弹性IP。3.在本地安装SQL Server客户端管理工具,通过弹性IP进行连接4.通过SQL Server自带的脚本生成工具,生成ECS上的数据库结构脚本5.在SSMS客户端中打开生成的脚本SQL文件,连接到RDS对应实例上。6.完成以上步骤后通过SQL Server自带的导入导出功能完成数据迁移。DRS备份迁移步骤:https://support.huaweicloud.com/backupmig-drs/drs_02_0009.html3、ORACLE采用工具流至云下或云上自建oracle:Oracle Golden Gate/Data guard/Always On/数据库自带迁移工具等;采用公有云服务迁移至云数据库GaussDB:UGO+DRS 采用公有云服务迁移至云数据仓库DEW:CDM(云数据迁移)、备份迁移迁移到裸金属上自建ORACLE:Golden Gate、Data Guard、Always on迁移到PostgreSql:CDM,UGO+DRSGolden Gate步骤:• 利用抽取进程(Extract Process)在源端数据库中读取Online Redo Log或者Archive Log,然后进行解析,只提取其中数据的变化信息,比如DML操作——增、删、改操作• 将抽取的信息转换为GoldenGate自定义的中间格式存放在队列文件(trail file)中• 再利用传输进程将队列文件(trail file)通过TCP/IP传送到目标系统。• 目标端有一个进程叫Server Collector,这个进程接受了从源端传输过来的数据变化信息• 把信息缓存到GoldenGate 队列文件(trail file)当中,等待目标端的复制进程读取数据。• GoldenGate 复制进程(replicat process)从队列文件(trail file)中读取数据变化信息,并创建对应的SQL语句,通过数据库的本地接口执行,提交到目标端数据库,提交成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成。UGO+DRS步骤:https://support.huaweicloud.com/bestpractice-ugo/ugo_06_0002.htmlCDM迁移步骤:https://support.huaweicloud.com/usermanual-cdm/cdm_01_0332.html六、迁移流程套话迁移分为迁移前调研、迁移上云评估、迁移方案制定、迁移方案测试(验证方案的正确性及可实施性,工具选择验证等)、迁移分级分布实施(先迁普通业务再迁核心业务)、迁移验收测试、迁移维保等阶段展开。1.迁移前作信息收集+风险点评估 信息收集:软硬件版本、规格、参数、性能容量、兼容性等参数收集; 风险评估:对系统软硬件环境进行评估是否适合迁移及迁移风险点。2.迁移方案制定 根据业务实际场景,确定迁移方式、迁移工具、迁移团队、分工界面、迁移时间、回退方案等关键点,形成具体的迁移方案和实施步骤。 其中迁移方式可根据实际的迁移场景,分为P2P/P2V/V2P/V2V。3.迁移预实施+整体逐批逐层实施 根据迁移方案预实施少量节点,对于重要业务提前进行应急预案演练,及时发现问题修改方案,确保迁移的顺利性;预实施完成后,分批次(业务系统最后)、分层次(数据层最后)进行系统整体迁移。4.迁移后业务测试+数据检验 对于迁移业务进行业务拉起和连通性测试,对系统网络质量和数据完整度等方面进行验证。5.迁移现场保障+后期维保 迁移完成后需留场进行业务保障,后续业务在维保期继续关注运行状态。6.项目验收七、在线迁移、离线迁移在线迁移:在系统不停机的情况下,将服务器或虚拟机上的系统、服务程序等从自建机房(IDC)或云平台等源环境迁移同步至云上,方便实现企业上云、跨云平台迁移、跨账号/区域迁移或部署混合云等业务需求。在线迁移无需制作镜像,直接在源端服务器运行迁移工具,即可将源端服务器迁移至指定的腾讯云云服务器。在线迁移服务:DRS实时迁移、SMS、OMS离线迁移:离线迁移需要先将源端服务器的系统盘或数据盘制作成镜像,再将镜像迁移至您指定的云服务器或云硬盘。(1)离线实例迁移:将系统盘镜像(若需同时迁移实例已挂载的数据盘,则可将系统盘镜像和数据盘镜像)迁入至指定的云服务器。(2)离线数据迁移:将数据盘镜像迁入至指定的云硬盘。离线迁移方法:DRS备份迁移、镜像导入到OBS再恢复、DES数据快递服务
  • [技术干货] 知识蒸馏相关技术【模型蒸馏、数据蒸馏】以ERNIE-Tiny为例
    1.任务简介基于ERNIE预训练模型效果上达到业界领先,但是由于模型比较大,预测性能可能无法满足上线需求。 直接使用ERNIE-Tiny系列轻量模型fine-tune,效果可能不够理想。如果采用数据蒸馏策略,又需要提供海量未标注数据,可能并不具备客观条件。 因此,本专题采用主流的知识蒸馏的方案来压缩模型,在满足用户预测性能、预测效果的需求同时,不依赖海量未标注数据,提升开发效率。 文心提供多种不同大小的基于字粒度的ERNIE-Tiny学生模型,满足不同用户的需求。注:知识蒸馏(KD)是将复杂模型(teacher)中的dark knowledge迁移到简单模型(student)中去,teacher具有强大的能力和表现,而student则更为紧凑。通过知识蒸馏,希望student能尽可能逼近亦或是超过teacher,从而用更少的复杂度来获得类似的预测效果。1.1 模型蒸馏原理知识蒸馏是一种模型压缩常见方法,指的是在teacher-student框架中,将复杂、学习能力强的网络(teacher)学到的特征表示"知识"蒸馏出来,传递给参数量小、学习能力弱的网络(student)。 在训练过程中,往往以最优化训练集的准确率作为训练目标,但真实目标其实应该是最优化模型的泛化能力。显然如果能直接以提升模型的泛化能力为目标进行训练是最好的,但这需要正确的关于泛化能力的信息,而这些信息通常不可用。如果我们使用由大型模型产生的所有类概率作为训练小模型的目标,就可以让小模型得到不输大模型的性能。这种把大模型的知识迁移到小模型的方式就是蒸馏。基本原理可参考Hinton经典论文:cid:link_11.2 ERNIE-Tiny 模型蒸馏模型蒸馏原理可参考论文 ERNIE-Tiny : A Progressive Distillation Framework for Pretrained Transformer Compression 2021。不同于原论文的实现,为了和开发套件中的通用蒸馏学生模型保持一致,我们将蒸馏loss替换为Attention矩阵的KQ loss和 VV loss,原理可参考论文 MiniLM: Deep Self-Attention Distillation for Task-Agnostic Compression of Pre-Trained Transformers 2020 和 MiniLMv2: Multi-Head Self-Attention Relation Distillation for Compressing Pretrained Transformers 2021。实验表明通用蒸馏阶段和任务蒸馏阶段的蒸馏loss不匹配时,学生模型的效果会受到影响。BERT 等预训练语言模型 (PLM) 采用了一种训练范式,首先在一般数据中预训练模型,然后在特定任务数据上微调模型,最近取得了巨大成功。然而,PLM 因其庞大的参数而臭名昭著,并且难以部署在现实生活中的应用程序中。知识蒸馏通过在一组数据上将知识从大老师转移到小得多的学生来解决这个问题。我们认为选择三个关键组成部分,即教师、训练数据和学习目标,对于蒸馏的有效性至关重要。因此,我们提出了一个四阶段渐进式蒸馏框架 ERNIE-Tiny 来压缩 PLM,它将三个组件从一般级别逐渐变化到特定任务级别。具体来说,第一阶段,General Distillation,在预训练的老师、一般数据和潜在蒸馏损失的指导下进行蒸馏。然后,General-Enhanced Distillation 将教师模型从预训练教师转变为微调教师。之后,Task-Adaptive Distillation 将训练数据从一般数据转移到特定于任务的数据。最后,Task-Specific Distillation 在最后阶段增加了两个额外的损失,即 Soft-Label 和 Hard-Label 损失。实证结果证明了我们的框架的有效性和所带来的泛化增益 。实验表明 4 层 ERNIE-Tiny 在 GLUE 基准测试的基础上保持其 12 层教师 BERT 的 98.0% 以上的性能,超过最先进的 (SOTA) 1.0% 的 GLUE 分数相同数量的参数。此外,ERNIE-Tiny 在五个中文 NLP 任务上实现了新的压缩 SOTA,比 BERT 基础的精度高 0.4%,参数减少 7.5 倍,推理速度加快 9.4 倍。预训练的语言模型(例如,BERT (Devlin et al., 2018) 及其变体)在各种 NLP 任务中取得了显着的成功。然而,这些模型通常包含数亿个参数,由于延迟和容量限制,这给现实应用中的微调和在线服务带来了挑战。在这项工作中,我们提出了一种简单有效的方法来压缩基于大型 Transformer (Vaswani et al., 2017) 的预训练模型,称为深度自注意力蒸馏。小模型(学生)通过深度模仿大模型(老师)的自注意力模块进行训练,该模块在 Transformer 网络中起着至关重要的作用。具体来说,我们建议提炼出教师最后一个 Transformer 层的自注意力模块,这对学生来说既有效又灵活。此外,除了现有作品中使用的注意力分布(即查询和键的缩放点积)之外,我们还引入了自我注意模块中值之间的缩放点积作为新的深度自我注意知识. 此外,我们表明,引入教师助理(Mirzadeh 等人,2019 年)也有助于提炼大型预训练 Transformer 模型。实验结果表明,我们的单语模型在不同参数大小的学生模型中优于最先进的基线。特别是,它使用 50% 的 Transformer 参数和教师模型的计算在 SQuAD 2.0 和几个 GLUE 基准测试任务上保持了 99% 以上的准确率。我们还在将深度自注意力蒸馏应用于多语言预训练模型方面获得了竞争性结果。我们仅使用自注意力关系蒸馏来对预训练的 Transformer 进行任务不可知的压缩,从而在 MiniLM (Wang et al., 2020) 中推广深度自注意力蒸馏。特别是,我们将多头自注意力关系定义为每个自注意力模块内的查询、键和值向量对之间的缩放点积。然后我们利用上述关系知识来训练学生模型。除了简单统一的原则外,更有利的是,学生的注意力头数没有限制,而之前的大多数工作都必须保证教师和学生之间的头数相同。此外,细粒度的自注意力关系倾向于充分利用 Transformer 学习到的交互知识。此外,我们彻底检查了教师模型的层选择策略,而不是像 MiniLM 中那样仅仅依赖最后一层。我们对压缩单语和多语预训练模型进行了广泛的实验。实验结果表明,我们从基础规模和大型教师(BERT、RoBERTa 和 XLM-R)中提取的模型优于最先进的模型。二阶段蒸馏:通用蒸馏(General Distillation,GD):在预训练阶段训练,使用大规模无监督的数据, 帮助学生网络学习到尚未微调的教师网络中的知识,有利于提高泛化能力。为方便用户使用,我们提供了多种尺寸的通用蒸馏学生模型,可用的通用蒸馏学生模型可参考文档:通用模型 - ERNIE3.0 Tiny。任务蒸馏(Task-specific Distillation,TD):使用具体任务的数据,学习到更多任务相关的具体知识。如果已提供的通用蒸馏学生模型尺寸符合需求,用户可以主要关注接下来的任务蒸馏过程。1.3任务蒸馏步骤FT阶段:基于ERNIE 3.0 Large蒸馏模型fine-tune得到教师模型,注意这里用到的教师模型和ERNIE 3.0 Large是两个不同的模型;GED阶段(可选):使用fine-tuned教师模型和通用数据继续用通用蒸馏的方式蒸馏学生模型,进一步提升学生模型的效果;a. 热启动fine-tuned的教师模型和通用学生模型。其中,通用的学生模型由文心平台提供,从bos上下载。TD1阶段:蒸馏中间层a.只对学生模型的最后一层进行蒸馏,将学生模型transformer的attention层的k-q矩阵和v-v矩阵与教师模型的对应矩阵做KLloss,可参考 :MiniLMV2。b.热启动fine-tuned的教师模型和GED阶段得到的学生模型。其中,通用的学生模型由文心平台提供,从bos上下载,下载链接所在文档:通用模型ERNIE3.0 Tiny,或参考预置的下载脚本:c. 反向传播阶段只更新学生模型参数,教师模型参数不更新;TD2阶段:蒸馏预测层,产出最终的学生模型。a. 热启动fine-tuned的教师模型和TD1阶段训练的学生模型;b. loss包括两部分: 1) pred_loss:软标签,学生模型的预测层输出与教师模型的预测层输出的交叉熵; 2) student_ce_loss:硬标签,学生模型的预测层输出与真实label的交叉熵;c. pred_loss与student_ce_loss之和作为最终loss,进行反向传播;d. 反向传播阶段只更新学生模型参数,教师模型参数不更新;注:关于GED阶段使用的通用数据:开发套件中的通用数据是由开源项目 cid:link_0 中的中文维基百科语料(wiki2019zh)经过预处理得到。该数据只用于demo展示,实际使用时替换为业务无标注数据效果提升更明显。2. 常见问题问题1:怎么修改学生模型的层数?上面提供了多种不同的学生模型,但每个学生模型的层数、hidden size等都是固定的,如果想更改,需要在哪些地方更改?文心提供了三种不同结构的预训练学生模型,如果修改层数、hidden size等,会导致预训练学生模型参数无法加载,在此情况下,蒸馏出来的学生模型效果无法保证,建议用户还是使用文心提供的预训练模型,不更改模型结构;如果用户认为更改学生模型的结构非常有必要,需要对文心做以下改动:修改TD1阶段json配置文件的pre_train_model配置项,删除预训练学生模型的加载,只保留微调后的教师模型"pre_train_model": [ # 热启动fine-tune的teacher模型 { "name": "finetuned_teacher_model", "params_path": "./output/cls_ernie_3.0_large_ft/save_checkpoints/checkpoints_step_6000" } ]将json文件中的"student_embedding"替换为自定义的学生模型"student_embedding": { "config_path": "../../models_hub/ernie_3.0_tiny_ch_dir/ernie_config.json" },再次强调,上述修改后,由于无法加载预训练学生模型,蒸馏出来的学生模型效果无法保证。(用户训练数据量到百万样本以上可以考虑尝试一下)3.数据蒸馏任务3.1 简介在ERNIE强大的语义理解能力背后,是需要同样强大的算力才能支撑起如此大规模模型的训练和预测。很多工业应用场景对性能要求较高,若不能有效压缩则无法实际应用。因此,我们基于数据蒸馏技术构建了数据蒸馏系统。其原理是通过数据作为桥梁,将ERNIE模型的知识迁移至小模型,以达到损失很小的效果却能达到上千倍的预测速度提升的效果。目录结构 数据蒸馏任务位于 wenxin_appzoo/tasks/data_distillation├── data │ ├── dev_data │ ├── dict │ ├── download_data.sh │ ├── predict_data │ ├── test_data │ └── train_data ├── distill │ └── chnsenticorp │ ├── student │ └── teacher ├── examples │ ├── cls_bow_ch.json │ ├── cls_cnn_ch.json │ ├── cls_ernie_fc_ch_infer.json │ └── cls_ernie_fc_ch.json ├── inference │ ├── custom_inference.py │ ├── __init__.py ├── model │ ├── base_cls.py │ ├── bow_classification.py │ ├── cnn_classification.py │ ├── ernie_classification.py │ ├── __init__.py ├── run_distill.sh ├── run_infer.py ├── run_trainer.py └── trainer ├── custom_dynamic_trainer.py ├── __init__.py3.2 数据准备目前采用三种数据增强策略策略,对于不用的任务可以特定的比例混合。三种数据增强策略包括:(1)添加噪声:对原始样本中的词,以一定的概率(如0.1)替换为”UNK”标签(2)同词性词替换:对原始样本中的所有词,以一定的概率(如0.1)替换为本数据集中随机一个同词性的词(3)N-sampling:从原始样本中,随机选取位置截取长度为m的片段作为新的样本,其中片段的长度m为0到原始样本长度之间的随机值数据增强策略可参考数据增强,我们已准备好了采用上述3种增强策略制作的chnsenticorp的增强数据。3.3 离线蒸馏使用预置的ERNIE 2.0 base模型cd wenxin_appzoo/models_hub bash download_ernie_2.0_base_ch.sh下载预置的原始数据以及增强数据。cd wenxin_appzoo/tasks/data_distillation/distill bash download_data.sh运行以下命令,开始数据蒸馏cd wenxin_appzoo/tasks/data_distillation bash run_distill.sh3.3.1蒸馏过程说明run_distill.sh脚本会进行前述的三步:在任务数据上Fine-tune; 加载Fine-tune好的模型对增强数据进行打分; 使用Student模型进行训练。脚本采用hard-label蒸馏,在第二步中将会直接预测出ERNIE标注的label。run_distill.sh脚本涉及教师和学生模型的json文件,其中:./examples/cls_ernie_fc_ch.json负责教师模型的finetune, ./examples/cls_ernie_fc_ch_infer.json 负责教师模型的预测。 ./examples/cls_cnn_ch.json,负责学生模型的训练。事先构造好的增强数据放在./distill/chnsenticorp/student/unsup_train_aug在脚本的第二步中,使用 ./examples/cls_ernie_fc_ch_infer.json 进行预测:脚本从标准输入获取明文输入,并将打分输出到标准输出。用这种方式对数据增强后的无监督训练预料进行标注。最终的标注结果放在 ./distill/chnsenticorp/student/train/part.1文件中。标注结果包含两列, 第一列为明文,第二列为标注label。在第三步开始student模型的训练,其训练数据放在 distill/chnsenticorp/student/train/ 中,part.0 为原监督数据 part.1 为 ERNIE 标注数据。注:如果用户已经拥有了无监督数据,则可以将无监督数据放入distill/chnsenticorp/student/unsup_train_aug 即可。
  • [推理] 使用mindsporehub 加载模型报错
    通过mindspore hub加载模型,执行模型的示例代码报错:[CRITICAL] ME(10840:139643021289280,MainProcess):2022-11-22-23:43:08.889.499 [mindspore/train/serialization.py:112] Failed to combine the net and the parameters for param dense.weight.Traceback (most recent call last):File "/home/beansprouts/Documents/ws_python/DocImgDirectionReg/res50.py", line 8, innetwork = mshub.load(model)File "/home/beansprouts/Documents/ws_python/DocImgDirectionReg/venv/lib/python3.8/site-packages/mindspore_hub/load.py", line 224, in loadload_param_into_net(net, param_dict)File "/home/beansprouts/Documents/ws_python/DocImgDirectionReg/venv/lib/python3.8/site-packages/mindspore/train/serialization.py", line 698, in load_param_into_net_update_param(param, new_param, strict_load)File "/home/beansprouts/Documents/ws_python/DocImgDirectionReg/venv/lib/python3.8/site-packages/mindspore/train/serialization.py", line 118, in _update_paramraise RuntimeError(msg)RuntimeError: For 'load_param_into_net', dense.weight in the argument 'net' should have the same shape as dense.weight in the argument 'parameter_dict'. But got its shape (10, 1280) in the argument 'net' and shape (1000, 1280) in the argument 'parameter_dict'.May you need to check whether the checkpoint you loaded is correct or the batch size and so on in the 'net' and 'parameter_dict' are same.python3.8.10mindspore 1.9.0mindspore hub 1.9.0代码如下:import mindspore_hub as mshubfrom mindspore import contextcontext.set_context(mode=context.GRAPH_MODE,device_target="CPU")model = "mindspore/1.9/mobilenetv2_imagenet2012"network = mshub.load(model)network.set_train(False)1.我该如何调整?2.总是来论坛问,麻烦。有没有什么地方可以获取更多信息?
  • [应用实践] 【迁移学习】基于ResNet34网络讲解迁移学习过程
    迁移学习什么是迁移学习迁移学习(Transfer Learning)是深度学习中十分强大的理念之一,它利用数据、任务或模型之间的相似性,将在旧的任务学习或训练好的模型,应用于新的任务中这样一个过程。两个任务的输入属于同一性质:要么是图像、要么同时语音或其他。简单来说,当你需要训练一个新的模型的时候,找到同类型的模型,使用其已经训练好的参数,这样你就不需要从头开始训练你的新模型。为什么要使用迁移学习一、当拥有大量的足够多的的数据量时,可以不需要使用迁移学习,深度学习很容易从海量数据中学习到泛化能力很高的模型。但是当训练数据集较小时,在少量的训练样本上精度极高,但是泛化效果差,即当使用非训练数据时,推理效果极差。二、降低训练成本,基于MindSpore训练模型时,从头开始训练一个卷积网络通常需要较长时间且依赖于强大的GPU或Ascend计算资源。基于ResNet34网络的迁移学习过程实例实例背景本次的迁移学习实例是将ResNet34网络模型从GPU训练环境迁移到CPU训练环境,所用数据集从ImageNet2012数据集变为flower_photos数据集,数据集数量变小,考虑到数据集数量问题和CPU的运算能力问题,故使用迁移学习进行训练,此外,因为是同网络模型且都是进行图像分类任务,在GPU上基于ImageNet2012数据集训练的模型参数会十分适配CPU环境下的分类模型,极大的减小训练难度和减少训练时间。ResNet34网络介绍残差神经网络(ResNet)由微软研究院何凯明等五位华人提出,通过ResNet单元,成功训练152层神经网络,赢得了ILSVRC2015冠军。ResNet前五项的误差率为3.57%,参数量低于VGGNet,因此效果非常显著。传统的卷积网络或全连接网络或多或少存在信息丢失的问题,还会造成梯度消失或爆炸,导致深度网络训练失败,ResNet则在一定程度上解决了这个问题。通过将输入信息传递给输出,确保信息完整性。整个网络只需要学习输入和输出的差异部分,简化了学习目标和难度。ResNet的结构大幅提高了神经网络训练的速度,并且大大提高了模型的准确率。正因如此,ResNet十分受欢迎。ResNet34是网络层数为34的ResNet网络。论文:Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun."Deep Residual Learning for Image Recognition"迁移学习训练过程本实例中,因为所用网络和训练任务类型相同,又因为MindSpore上在不同平台训练需修改的代码部分就一句,所以GPU模型训练的代码部分有很高的复用性,需修改的部分是数据集处理和模型最后的全连接层。一、获取参考实现代码基于MindSpore的所有模型案例均开源,本案例代码获取语句:git clone https://gitee.com/mindspore/models.gitResNet34网络模型路径:\models\official\cv\resnet注:由于本项目已结项,目录中存在迁移学习脚本,可供参考。二、获取GPU环境训练的模型参数cid:link_5cid:link_7将下载的ckpt文件保存至\models\official\cv\resnet中。三、获取数据集并处理数据集使用flower_photos数据集(下载链接:cid:link_4),其中包含5类花的图片:633张雏菊图片、898张蒲公英图片、641张玫瑰图片、699张向日葵图片和799张郁金香图片。将所需数据集下载后按照3:1的比例将数据集划分为训练集和验证集。数据集保存在\models\official\cv\resnet中并解压,运行数据集处理脚本data_split.py,将数据集处理为训练所用的目录结构。四、微调训练编写迁移训练脚本,这是迁移学习最重要的部分,体现了迁移学习的核心思想,即将一个训练好的网络模型参数迁移到另一个网络模型中使用。具体来说,首先,构建与被迁移模型同样的网络模型,并加载其参数;然后修改模型最后的全连接层适配本任务中的分类任务,对于多分类任务即SoftMax层,这步完成之后,除了修改的全连接层部分参数为初始随机的以外,其他层均为加载后的参数并将其冻结不再随着后续的训练改变;最后,使用处理完的模型对新的数据集进行训练。整个过程称为微调。注:微调脚本可在GPU训练脚本train.py的基础上进行修改,参考fine_tune.py。五、推理验证在本实例中,经过迁移学习得到的CPU环境下的模型在精度上达到了GPU环境下的训练效果,降低了该模型对于算力的要求,并且极大在程度上降低了训练时间和训练成本,体现了迁移学习的强大之处。代码:cid:link_3
  • [模型训练] 【MindSpore模型训练】【兰州大学423实验室】GhostNet-CPU模型迁移训练流程
    GhostNet-CPU模型迁移训练流程概述GhostNet由华为诺亚方舟实验室在2020年提出,该论文提供了一个全新的Ghost模块,旨在通过廉价操作生成更多的特征图。基于一组原始的特征图,作者应用一系列线性变换,以很小的代价生成许多能从原始特征发掘所需信息的“幻影”特征图(Ghost feature maps)。该Ghost模块即插即用,通过堆叠Ghost模块得出Ghost bottleneck,进而搭建轻量级神经网络——GhostNet。在ImageNet分类任务,GhostNet在相似计算量情况下Top-1正确率达75.7%,高于MobileNetV3的75.2%。该架构可以在同样精度下,速度和计算量均少于SOTA算法。深度卷积神经网络通常引用由大量卷积组成的卷积神经网络,导致大量的计算成本。尽管有工作做出改善,如MobileNet和ShuffleNet引入了深度卷积或混洗操作,以使用较小的卷积核来构建有效的CNN,但是引入的1x1卷积依然会产生一定的计算量。基于此,GhostNet将相似的特征图通过cheap transformation操作得到。Ghost意思是相似的特征图,犹如另一个的幽灵,可以通过简单的线性变换得到。相比于传统的卷积,GhostNet分两步走,首先GhostNet采用正常的卷积计算,得到channel较少的特征图,然后利用cheap operation得到更多的特征图,然后将不同的特征图concat到一起,组合成新的output。准备环节迁移数据集处理首先数据集使用flower_photos数据集,其中包含5类花的图片:633张雏菊图片、898张蒲公英图片、641张玫瑰图片、699张向日葵图片和799张郁金香图片。将所需数据集下载后按照3:1的比例将数据集划分为训练集和验证集。预训练模型获取获取预训练模型“ghostnet_1x_pets.ckpt”、“ghostnet_nose_1x_pets.ckpt”以及“ghostnet600M_pets.ckpt”文件。拉取代码文件将原代码从代码仓拉取并运行查看效果。程序开发原代码文件为Ascend实现的工程文件,其中包含较多的GPU或Ascend算子,首先确保相关算子CPU实现的适配性,若不适配,寻找替代功能算子实现操作,若无替代算子则自行开发算子以实现所需功能。在此项目中CPU训练的相关算子,均可支持。故继续完成迁移代码的开发。迁移训练代码流程包括定义超参数、数据集接口、导入预训练模型、重写Dense层、学习率定义、损失函数定义、优化器的定义、回调函数定义、模型连接和模型训练等操作。在此过程中发现的一处难点是对网络模型的非全连接层冻结操作,以加快迁移训练的完成的速度。但对此预训练模型的网络层冻结操作后,发现损失值难以下降,精度难于达到要求,故此项目迁移训练未对网络层冻结,结果达到精度,但代价是训练时间增加。因此使用GPU设备参与训练迁移网络与调试工作,最终完成网络模型的迁移。微调迁移训练程序import os import argparse import ast from mindspore import context from mindspore import nn from mindspore import Tensor from mindspore.train.model import Model from mindspore.train.loss_scale_manager import FixedLossScaleManager from mindspore.train.callback import ModelCheckpoint, CheckpointConfig, LossMonitor, TimeMonitor from mindspore.train.serialization import load_checkpoint from mindspore.common import dtype as mstype from mindspore.common import set_seed from mindspore.nn.optim.momentum import Momentum from mindspore.communication.management import init, get_rank from mindspore.context import ParallelMode from src.lr_generator import get_lr from src.CrossEntropySmooth import CrossEntropySmooth from src.dataset import create_dataset from src.config import config from src.ghostnet import ghostnet_1x, ghostnet_nose_1x from src.ghostnet600 import ghostnet_600m from src.dense import init_weight parser = argparse.ArgumentParser(description='GhostNet') parser.add_argument('--num_classes', type=int, default=5, help='Classes number') parser.add_argument('--device_target', type=str, default='CPU', help='Device platform') parser.add_argument('--save_checkpoint_path1', type=str, default='./ckpt/', help='Save path of ckpt file') parser.add_argument('--data_url', type=str, default='./dataset/', help='Dataset path') parser.add_argument('--run_distribute', type=ast.literal_eval, default=False, help='Run distribute') parser.add_argument('--pre_trained', type=str, default='./pre_ckpt/ghostnet_1x_pets.ckpt', help='Pretrained checkpoint path') parser.add_argument('--rank', type=int, default=0, help='local rank of distributed') parser.add_argument('--is_save_on_master', type=int, default=1, help='save ckpt on master or all rank') args_opt = parser.parse_args() set_seed(1) if __name__ == '__main__': # init context context.set_context(mode=context.GRAPH_MODE, device_target=args_opt.device_target, save_graphs=False) if args_opt.run_distribute: device_id = int(os.getenv('DEVICE_ID')) rank_size = int(os.environ.get("RANK_SIZE", 1)) print(rank_size) device_num = rank_size context.set_context(device_id=device_id) context.set_auto_parallel_context(device_num=device_num, parallel_mode=ParallelMode.DATA_PARALLEL, gradients_mean=True) init() args_opt.rank = get_rank() # select for master rank save ckpt or all rank save, compatible for model parallel args_opt.rank_save_ckpt_flag = 0 if args_opt.is_save_on_master: if args_opt.rank == 0: args_opt.rank_save_ckpt_flag = 1 else: args_opt.rank_save_ckpt_flag = 1 # define net if 'ghostnet_1x_pets.ckpt' in args_opt.pre_trained: net = ghostnet_1x(num_classes=args_opt.num_classes) elif 'ghostnet_nose_1x_pets.ckpt' in args_opt.pre_trained: net = ghostnet_nose_1x(num_classes=args_opt.num_classes) elif 'ghostnet600M_pets.ckpt' in args_opt.pre_trained: net = ghostnet_600m(num_classes=args_opt.num_classes) net.to_float(mstype.float16) for _, cell in net.cells_and_names(): if isinstance(cell, nn.Dense): cell.to_float(mstype.float32) local_data_path = args_opt.data_url print('Download data:') dataset = create_dataset(dataset_path=local_data_path, do_train=True, batch_size=config.batch_size, num_parallel_workers=None) step_size = dataset.get_dataset_size() print('steps:', step_size) # init weight ckpt_param_dict = load_checkpoint(args_opt.pre_trained) init_weight(net=net, param_dict=ckpt_param_dict) # init lr lr = get_lr(lr_init=config.lr_init, lr_end=config.lr_end, lr_max=config.lr_max, warmup_epochs=config.warmup_epochs, total_epochs=config.epoch_size, steps_per_epoch=step_size) lr = Tensor(lr) if not config.use_label_smooth: config.label_smooth_factor = 0.0 loss = CrossEntropySmooth(sparse=True, reduction="mean", smooth_factor=config.label_smooth_factor, num_classes=args_opt.num_classes) opt = Momentum(net.trainable_params(), lr, config.momentum, loss_scale=config.loss_scale, weight_decay=config.weight_decay) loss_scale = FixedLossScaleManager(config.loss_scale, drop_overflow_update=False) model = Model(net, loss_fn=loss, optimizer=opt, loss_scale_manager=loss_scale, metrics={'top_1_accuracy', 'top_5_accuracy'}, amp_level="O3", keep_batchnorm_fp32=False) # define callbacks time_cb = TimeMonitor(data_size=step_size) loss_cb = LossMonitor() cb = [time_cb, loss_cb] if config.save_checkpoint: if args_opt.rank_save_ckpt_flag: config_ck = CheckpointConfig(save_checkpoint_steps=config.save_checkpoint_epochs * step_size, keep_checkpoint_max=config.keep_checkpoint_max) if 'ghostnet_1x_pets.ckpt' in args_opt.pre_trained: ckpt_cb = ModelCheckpoint(prefix="ghostnet_1x", directory=args_opt.save_checkpoint_path1, config=config_ck) elif 'ghostnet_nose_1x_pets.ckpt' in args_opt.pre_trained: ckpt_cb = ModelCheckpoint(prefix="ghostnet_nose_1x", directory=args_opt.save_checkpoint_path1, config=config_ck) elif 'ghostnet600M_pets.ckpt' in args_opt.pre_trained: ckpt_cb = ModelCheckpoint(prefix="ghostnet600M", directory=args_opt.save_checkpoint_path1, config=config_ck) cb += [ckpt_cb] # train model model.train(config.epoch_size, dataset, callbacks=cb, sink_size=dataset.get_dataset_size())迁移训练对每个预训练权重文件迁移,因为有三个ckpt预训练文件,故执行迁移训练三个网络。 执行python fine_tune.py --pre_trained ./pre_ckpt/ghostnet_1x_pets.ckpt,得到ghostnet_1x的网络训练损失值如下(部分)# ghostnet_1x迁移训练结果 epoch: 1 step: 21, loss is 1.0636098384857178 Train epoch time: 295952.507 ms, per step time: 14092.977 ms epoch: 2 step: 21, loss is 1.007066011428833 Train epoch time: 20480.770 ms, per step time: 975.275 ms epoch: 3 step: 21, loss is 0.9204861521720886 Train epoch time: 20673.888 ms, per step time: 984.471 ms ... epoch: 498 step: 21, loss is 0.5347862839698792 Train epoch time: 19795.049 ms, per step time: 942.621 ms epoch: 499 step: 21, loss is 0.49817660450935364 Train epoch time: 19959.692 ms, per step time: 950.462 ms epoch: 500 step: 21, loss is 0.5028425455093384 Train epoch time: 20185.629 ms, per step time: 961.220 ms执行python fine_tune.py --pre_trained ./pre_ckpt/ghostnet_nose_1x_pets.ckpt,得到ghostnet_1x的网络训练损失值如下(部分)# ghostnet_nose_1x迁移训练结果 epoch: 1 step: 21, loss is 1.1746268272399902 Train epoch time: 94845.916 ms, per step time: 4516.472 ms epoch: 2 step: 21, loss is 1.0321934223175049 Train epoch time: 37248.247 ms, per step time: 1773.726 ms epoch: 3 step: 21, loss is 0.9764260053634644 Train epoch time: 37365.344 ms, per step time: 1779.302 ms ... epoch: 498 step: 21, loss is 0.5118361711502075 Train epoch time: 36716.475 ms, per step time: 1748.404 ms epoch: 499 step: 21, loss is 0.5035715103149414 Train epoch time: 37642.484 ms, per step time: 1792.499 ms epoch: 500 step: 21, loss is 0.49066391587257385 Train epoch time: 36474.781 ms, per step time: 1736.894 ms执行python fine_tune.py --pre_trained ./pre_ckpt/ghostnet600M_pets.ckpt,得到ghostnet_1x的网络训练损失值如下(部分)# ghostnet_600m迁移训练结果 epoch: 1 step: 21, loss is 1.2935304641723633 Train epoch time: 296802.766 ms, per step time: 14133.465 ms epoch: 2 step: 21, loss is 1.356112003326416 Train epoch time: 44871.251 ms, per step time: 2136.726 ms epoch: 3 step: 21, loss is 1.1128544807434082 Train epoch time: 45124.813 ms, per step time: 2148.801 ms ... epoch: 498 step: 21, loss is 0.4896056652069092 Train epoch time: 45314.303 ms, per step time: 2157.824 ms epoch: 499 step: 21, loss is 0.5079032182693481 Train epoch time: 45675.234 ms, per step time: 2175.011 ms epoch: 500 step: 21, loss is 0.5031487345695496 Train epoch time: 45935.200 ms, per step time: 2187.390 ms推理对训练得到的权重文件,使用验证集推理,查看效果精度。推理对计算机资源消耗较少,使用CPU即可。设置好ckpt文件路径,分别执行推理文件。ghostnet_1x网络推理:python eval.py --device_target CPU --checkpoint_path ./ckpt/ghostnet_1x_3-500_21.ckptghostnet_nose_1x网络推理:python eval.py --device_target CPU --checkpoint_path ./ckpt/ghostnet_nose_1x-500_21.ckptghostnet_600mx网络推理:python eval.py --device_target CPU --checkpoint_path ./ckpt/ghostnet600m_1-500_21.ckpt推理结果Ghostnet_1x网络:result: {'top_5_accuracy': 1.0, 'top_1_accuracy': 0.9207589285714286} ckpt= ./ckpt/ghostnet_1x_3-500_21.ckptghostnet_nose_1x网络:result: {'top_1_accuracy': 0.9252232142857143, 'top_5_accuracy': 1.0} ckpt= ./ckpt/ghostnet_nose_1x-500_21.ckptghostnet_600m网络:result: {'top_1_accuracy': 0.9308035714285714, 'top_5_accuracy': 1.0} ckpt= ./ckpt/ghostnet_600m_1-500_21.ckpt总结从推理结果可以看到推理的数据集top1精度均在92%以上,说明分类识别效果极佳,这体现出了网络分类识别效果的优良性能,网络能准确的提却不同的特征信息对图片精准分类。 GhostNet减少了深度神经网络的计算成本,用一种更高效的神经网络结构--新型Ghost模块将原始卷积层分为两部分,首先使用较少的卷积核来生成原始特征图,再进一步使用较为简单的变换操作以高效的产生更多幻影特征图。此网络提出了一个即插即用的模块,能够将原始模型转换为更紧凑的模型,同时保持相似的性能。此外,在效率和准确性方面,新模块构建的GhostNet优于许多轻量级神经网络。代码链接cid:link_0引用Han K, Wang Y, Tian Q, et al. Ghostnet: More features from cheap operations[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2020: 1580-1589.
  • [其他] 3D重建算法综述(2)
    基于消费级RGB-D相机相机可以基于主动式、被动式不同原理,优点在于基于这些设备的算法更具备实用性。近年来,也有不少研究直接基于消费级的RGB-D相机进行三维重建,如在微软的Kinect V1、V2产品上,取得了不错的效果。最早,由帝国理工大学的Newcombe等人于2011年提出的Kinect Fusion开启了RGB相机实时三维重建的序幕。此后有 Dynamic Fusion和Bundle Fusion等算法。这些方法它们各自有着各自的优点和缺点,同样有各自所适用的应用范围。以上为想要入门基于深度学习进行三维重建领域的同学简要介绍了这些方法,如需要深入了解,请仔细阅读相关文献,SfM和多视图几何等经典算法作为入门三维重建领域的基础永远都不会过时。 文章摘自小白学视觉
  • [交流分享] 湘江鲲鹏内部DFX交流宣讲
    近日湘江鲲鹏在内部组织了一次DFX内部交流宣讲会,邀请相关部门(研发,测试,结构,工程等)同事参加,总共有35位同事现场参加了本次宣讲会,主要是为了让大家多了解DFX内容,DFX涉及到哪些方面,DFX的一些基本概念和原则,同时鼓励大家积极上到DFX论坛去浏览和学习DFX的相关知识,对于工作中涉及的DFX问题或者有相关分享在论坛上发帖求助!
  • [分享交流] 我们的“迁移学习Transfer Learning”学习 
          在机器学习、深度学习和数据挖掘的大多数任务中,我们都会假设 training 和 inference 时,采用的数据服从相同的分布(distribution)、来源于相同的特征空间(feature space)。但在现实应用中,这个假设很难成立,往往遇到一些问题:      1、带标记的训练样本数量有限。比如,处理 A 领域(target domain)的分类问题时,缺少足够的训练样本。同时,与 A 领域相关的 B(source domain)领域,拥有大量的训练样本,但 B 领域与 A 领域处于不同的特征空间或样本服从不同的分布。      2、数据分布会发生变化。数据分布与时间、地点或其他动态因素相关,随着动态因素的变化,数据分布会发生变化,以前收集的数据已经过时,需要重新收集数据,重建模型。      这时,知识迁移(knowledge transfer)是一个不错的选择,即把 B 领域中的知识迁移到 A 领域中来,提高 A 领域分类效果,不需要花大量时间去标注 A 领域数据。迁移学习,做为一种新的学习范式,被提出用于解决这个问题。  学习的目的: 1.深入了解神经网络的组成、训练和实现,掌握深度空间特征分布等关键概念; 2.掌握迁移学习的思想与基本形式,了解传统迁移学习的基本方法,对比各种方法的优缺点; 3.握深度迁移学习的思想与组成模块,学习深度迁移学习的各种方法; 4.掌握深度迁移学习的网络结构设计、目标函数设计的前沿方法,了解迁移学习在PDA、Source-Free DA上的应用; 5.掌握深度迁移学习在语义分割、目标检测、行人重识别等任务中的应用,学习图像/视频风格迁移方法,了解风格迁移在实际生活中的应用; 6.掌握小样本学习、Transformer等前沿方法和基本思想,了解小样本学习、Transformer等在实际场景下的应用; 7.通过实操掌握图片视频风格迁移,自动驾驶中的跨域语义分割,目标检测。  学习的课程信息以及目标: 一、机器学习简介与经典机器学习算法 1.什么是机器学习? 2.机器学习框架与基本组成 3.机器学习的训练步骤 4.机器学习问题的分类 5.经典机器学习算法介绍 目标:机器学习是人工智能的重要技术之一,详细了解机器学习的原理、机制和方法,为学习深度学习与迁移学习打下坚实的基础。 二、深度学习简介与经典网络结构介绍 1.神经网络简介 2.神经网络组件简介 3.神经网络训练方法 4.卷积神经网络介绍 5.经典网络结构介绍 目标:深入了解神经网络的组成、训练和实现,掌握深度空间特征分布等关键概念,为深度迁移学习奠定知识基础。 三、迁移学习基础知识 1.迁移学习绪论 2.基于样本的迁移学习 3.基于特征的迁移学习 4.基于分类器适配的迁移学习 目标:掌握迁移学习的思想与基本形式,了解传统迁移学习的基本方法,对比各种方法的优缺点,掌握迁移学习的适用范围。 四、深度迁移学习 1.深度迁移学习概述 2.基于距离函数的深度迁移学习 3.基于对抗网络的深度迁移学习 4.深度异构迁移学习方法介绍 5.深度领域泛化学习介绍 目标:掌握深度迁移学习的思想与组成模块,学习深度迁移学习的各种方法,对比各种方法的优缺点,掌握深度迁移学习的适用范围。 五、迁移学习前沿方法介绍 1.深度迁移网络结构设计 2.深度迁移学习目标函数设计 3.全新场景下的迁移学习 目标:掌握深度迁移学习的网络结构设计、目标函数设计的前沿方法,了解迁移学习在PDA、Source-Free DA上的应用。 六、迁移学习前沿应用 1.迁移学习在语义分割中的应用 2.迁移学习在目标检测中的应用 3.迁移学习在行人重识别中的应用 4.图片与视频风格迁移 目标:掌握深度迁移学习在语义分割、目标检测、行人重识别等任务中的应用,学习图像/视频风格迁移方法,了解风格迁移在实际生活中的应用。 七、小样本学习、Transformer等前沿方法与应用 1.小样本学习概念与基本方法介绍 2.小样本学习应用 3.Transformer概念与基本方法介绍 4.Transformer在图像领域的应用 目标:掌握小样本学习、Transformer等前沿方法和基本思想,了解小样本学习、Transformer等在实际场景下的应用。 八、实验实操之实操环境搭建 1. 硬件准备:GPU显存11GB以上 2. 软件准备:Linux操作系统(Ubuntu16.04以上),显卡驱动安装(512.54),CUDA Toolkit(10.1)和cuDNN加速库(7.6.4),VS Code编辑器安装,Jupyter Notebook 3. 编程语言和框架:Python3.8.5、torch==1..07、torchvision==0.8.2、mmcv-full==1.3.7、opencv-python==4.4.0、matplotlib==3.4.2、numpy==1.19.2、Pillow==8.3.1、scikit-learn==1.0.2 4. 数据集准备:Office-31、IRVI、GTA5、Cityscapes、Foggy cityscapes等 注:硬件准备由主办方提供云服务器 九、实验实操之深度迁移学习实践 1.掌握PyTorch中的基本原理和编程思想。 2.理解在一个新的场景或数据集下,何时以及如何进行迁移学习。 3.利用PyTorch加载数据、搭建模型、训练网络以及进行网络微调操作。 4.给定迁移场景,利用daib库和生成对抗技术独立完成图像分类中的领域适配。 5.迁移效果的可视化,利用机器学习库scikit-learn中的t-SNE对迁移过后的高维数据进行可视化。 十、实验实操之图片与视频风格迁移实践 1.掌握基于生成对抗网络的风格迁移技术。 2.图像/视频风格迁移网络的搭建,重点掌握编码器和解码器的内在逻辑和不同损失函数的运用。 3.实践红外视频转换到可见光视频的风格迁移。 十一、实验实操之自动驾驶中的跨域语义分割实践 1.掌握语义分割发展现状及代表性工作,如FCN,DeepLab系列等。 2.了解常用的语义分割评价指标(PA、mPA、mIoU、FWIoU)和常见数据集(PASCAL VOC2012,ADE20K、BDD100K、Cityscapes、GTA5、Dark Zurich)。 3.语义分割工具箱MMSegmentaion的认识和使用。 4.设计一个分割模型能够从仿真环境中得到的数据迁移到真实场景下产生的数据。 十二、实验实操之目标检测实践 1.掌握目标检测算法的基本框架以及目标检测中的经典模型,如R-CNN系列的两阶段检测模型和YOLO系列的单阶段检测模型。 2.掌握目标检测模型的评测指标(IOU和mAP)、标准评测数据集(Pascal VOC,MS COCO和Cityscapes)以及检测模型中的一些训练技巧,如数据增强、多尺度训练/测试、预测框微调/投票法、在线难例挖掘、软化非极大抑制、RoI对齐和集成。 3.实践基于Transformer的端到端目标检测框架的搭建,并在新的数据集上与基于CNN的网络进行迁移性能的对比。 
  • [分享交流]   关于迁移学习核心技术开发与应用的进修计划
    新一代人工智能重大科技项目,聚焦基础理论和关键共性技术的前瞻布局,包括研究大数据智能、跨媒体感知计算、混合增强智能、群体智能、自主协同控制与决策等理论,研究知识计算引擎与知识服务技术、跨媒体分析推理技术、群体智能关键技术、混合增强智能新架构与新技术、自主无人控制技术等,开源共享人工智能基础理论和共性技术。”随着人工智能的发展,越来越多的机器学习应用场景的出现,现有表现比较好的监督学习需要大量的标注数据,标注数据是一项枯燥无味且花费巨大的任务,所以迁移学习受到越来越多的关注。迁移学习专注于存储已有问题的解决模型,并将其利用在其他不同但相关问题上。比如说,用来辨识汽车的知识(或者是模型)也可以被用来提升识别卡车的能力。  我们的目标  1.深入了解神经网络的组成、训练和实现,掌握深度空间特征分布等关键概念;  2.掌握迁移学习的思想与基本形式,了解传统迁移学习的基本方法,对比各种方法的优缺点;  3.握深度迁移学习的思想与组成模块,学习深度迁移学习的各种方法;  4.掌握深度迁移学习的网络结构设计、目标函数设计的前沿方法,了解迁移学习在PDA、Source-Free DA上的应用;  5.掌握深度迁移学习在语义分割、目标检测、行人重识别等任务中的应用,学习图像/视频风格迁移方法,了解风格迁移在实际生活中的应用;  6.掌握小样本学习、Transformer等前沿方法和基本思想,了解小样本学习、Transformer等在实际场景下的应用;  7.通过实操掌握图片视频风格迁移,自动驾驶中的跨域语义分割,目标检测。  大纲计划  一、机器学习简介与经典机器学习算法介绍  二、深度学习简介与经典网络结构介绍  三、迁移学习基础  四、深度迁移学习介绍  五、迁移学习前沿方法介绍  六、迁移学习前沿应用  七、小样本学习、Transformer等前沿方法与应用  八、实验实操之实操环境搭建  九、实验实操之深度迁移学习实践  十、实验实操之图片与视频风格迁移实践  十一、实验实操之自动驾驶中的跨域语义分割实践  十二、实验实操之目标检测实践