• [主机迁移服务] 业务上云迁移流程
    迁移流程包括:前期客户调研、信息收集、迁移风险评估>制定迁移计划、迁移方案>迁移预实施(迁移工具测试、方案测试)>迁移实施>迁移后业务验证、数据校验>现场保障、运维交接>项目验收业务迁移实施顺序:基础服务--开放测试系统--办公系统--IT管理系统--业务系统迁移前作信息收集+风险容量评估(软硬件版本、规格、参数、性能容量、兼容性+迁移风险点等作信息收集)迁移方案制定(确定迁移方式、迁移工具、迁移团队、迁移时间、回退方案等)      迁移方式:P2P/P2V/V2P/V2V(根据客户实际场景决定)迁移预实施+整体逐步逐层实施(利用迁移方案预实施少量节点---分批次(业务系统最后)+分层次(数据层最后)进行整体迁移)迁移后业务测试+数据检验(对于迁移业务进行业务拉起和连通性测试+网络质量+数据完整度等)迁移现场保障+后期维保(迁移完成后需留场进行业务保障-后续业务在维保期继续关注)项目验收三大层次迁移工具或服务选择:数据层迁移若采用工具流:可使用HyperReplication/HyperMetro/LUN COPY/ eRplication…若采用公有云服务:可使用DES数据快递服务;平台层(数据库迁移为例)若采用工具流;Oracle Golden Gate/Data guard/Always On/数据库自带迁移工具等若采用公有云服务:DRS(偏同构数据库)+UGO(偏异构数据库-可翻译为GaussDB统一命令)应用层工具流:eBackup/Rainbow等…服务流:SMS主机迁移服务
  • [问题求助] 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.
  • [赋能培训] 【视频回顾】GDE直播公开课 · 第十三期:AI模型预训练技术前瞻——作为迁移学习的应用,预训练大模型又该如何举一反三?
    ❤ AI系列往期直播回顾:【GDE直播公开课·第七期】低门槛AI开发模式:ModelFoundry【GDE直播公开课 · 第十一期】AI如何举一反三——迁移学习技术洞察❤视频回顾videovideovideo❤ 精选问答序号问题回复1大模型在业务上的实践效果怎样,能不能举个例子?以NLP领域中文纠错举例,我们采用MacBERT大模型,在开源的数据集上做了纠错预训练任务(训练1-epoch大约15小时),再在业务数据上做了微调,最后纠错准确率从原来的75%提高到90%,性能大幅提升。2预训练模型的基础训练数据来源渠道有哪些?有什么标准和要求?主要来源是业界开源的数据集,目前开源数据集的规模已经很大,完全适用于科学研究。当然如果是针对特定领域,还是需要通过相关合作来获取,或从网络查找对应词条来收集。本身预训练的目的就是节约标注成本,因此数据而言只要和业务数据类型保证一致即可,当然在此基础上做一些数据处理、清洗、去噪等也是可以的。3这么多预训练方法,我们应该在什么场景下用哪个?还是具体问题具体分析,首先看业务需求的侧重点,如果不考虑资源成本,只追求准确率等性能,那可以选择尝试那些更大的模型;如果资源受限,比如端侧业务,那需要选择更轻量化的模型。4运营商业务结构化数据,后期是否可以尝试大模型?结构化数据的大模型在学术界其实一直有在研究,不过还未有大规模应用,还是需要有更多的突破点。5预训练小模型有前途吗?在大模型快速发展以来,基于预训练小模型的迁移学习一直都是AI领域的中坚力量。这两者是并存关系,在某些领域小模型甚至更优。比如人脸识别领域,对推理时延的实时性要求非常高,这是小模型天然的优势所在。6请问地址补全用的预训练模型是什么?就是基本的BERT-base模型。7构建神经网络模型结构,初始状态下如何确定backbone结构?还是遵循从简到难的过程,可以先尝试经典的ResNet等网络结构,再对比一些transformer-based网络结构,如ViT、Swin-transformer等。8会有细分领域的大模型么?细分领域或者说垂直领域的大模型一直都有,比如电商领域大模型E-BERT、金融领域大模型FinBERT等。9如果用现有的大模型,训练特定的语料,比如中医病历,能否直接给出诊断呢?病历诊断这种生成类任务,目前还有很大的发展空间。个人认为可以作为辅助诊断,暂时还不能用来做直接诊断。10NLP大模型在哪些领域有应用?跨语言应用是NLP大模型最好的发挥场景之一,因为存在样本量很少的语言,比如跨语言机器翻译、跨语言文本分类等;同时NLP大模型在基于知识图谱的推荐、检索、问答等都有很好的应用。另外生成类任务也是NLP大模型发力的方向,能够实现智能创作、人机交互等应用。11请问跨模态的大模型,除了艺术设计类(封面、艺术品等)的文生图还有其他的可落地场景吗?个人看法,要实现强人工智能,跨模态是必须的。就目前而言,如电商领域的图文检索、自动驾驶中的人机交互、语音助手等都是可落地的场景。12想要了解CV大模型在现实生活中具体的应用场景有哪些?人脸识别算不算CV大模型中的场景,他在大模型中是怎么训练数据和提高识别的精度的?业内人脸识别技术应用现状和优劣势是什么,是不是都要用到AI和大模型的能力?人脸识别用了预训练的技术(比如对比学习范式,在无标注情况下怎么学习人脸),但目前不算大模型的场景,因为其对检测速度要求非常高,输出表征向量维度越小越好,不太合适大模型,小模型效果就已经很好很有效。活动说明1.有效盖楼:留言“报名”+“截图”、参与提问/建议或微信朋友圈点赞截图的,均可参与盖楼;2.无效盖楼:复制别人的提问、建议等,以及其他不符合要求的灌水信息皆为无效盖楼。注意:同一用户盖楼不能连续超过3楼,总楼层数不能超过10楼。超过盖楼数将视为无效盖楼。无效盖楼且踩中获奖楼层,也将视为无效,奖品不予发放,该楼层奖项轮空;3.盖楼总数及微信朋友圈点赞量取值仅限活动期间内,即2022年9月15日至9月27日24:00,其余时间不纳入计算范围;4.为保证活动有序进行,一经发现有作弊行为,将取消奖励资格;5.所有获奖用户,请于获奖后3日内完成实名认证,否则视为放弃奖励;6.请务必使用个人账号参与活动。本次活动如一个实名认证对应多个账号,只有一个账号可领取奖励;一个实名认证账号只能对应一个收件人,如同一账号填写多个不同收件人或不同账号填写同一收件人,均不予发放奖励;(举例说明:具备同一证件号(比如身份证号/护照ID/海外驾照ID/企业唯一识别号等)、同一手机号、同一设备、同一IP地址等,均视为同一实名用户)7.所有参加本活动的用户,均视为认可并同意遵守华为云社区的用户协议及隐私政策;8.GDE数智平台可能需要根据活动的实际举办情况对活动规则进行变更;若有变更,将以活动页面告知等方式及时通知;9.活动结束后将在活动帖和【GDE直播交流群】微信群中公布获奖名单,奖品配送范围为中国大陆地区,部分地区或因疫情原因延迟配送;10.GDE数智平台拥有活动解释权。中奖公示(已提供地址的中奖人员,奖品将陆续发出;未提供地址的,请留意私信,工作人员将联系获取地址,请在2022年10月21日前提供地址,过时视为自动放弃礼品)请各位中奖者微信添加:华为GDE官方小助手(gdezhushou),回复:GDE直播公开课提供邮寄地址,不添加不能获奖哦~小助手微信二维码报名有奖楼层昵称奖品5乌龟哥哥GDE定制鼠标垫13linghz666GDE定制鼠标垫20DragonCurryGDE定制鼠标垫27linghz666重复,每人仅一次获盖楼奖34Hello DiggerGDE定制鼠标垫探讨有奖昵称优秀提问奖品Hello DiggerNLP大模型在哪些领域有应用?GDE定制帆布袋madqfrog请问老师跨模态的大模型,除了艺术设计类(封面、艺术品等)的文生图还有其他的可落地场景么?GDE定制帆布袋分享有奖排名昵称奖品1linghz666GDE定制防晒伞2上帝之眼GDE定制防晒伞3乌龟哥哥GDE定制防晒伞直播互动奖轮次昵称奖品第一轮王*GDE定制玩偶第一轮李*宇GDE定制玩偶第一轮黄*国GDE定制玩偶第二轮王*GDE定制T恤视频号幸运福袋幸运福袋昵称奖品1A服装鞋子GDE定制防晒伞2LpcGDE定制防晒伞3Tayu Jonathan 明泽GDE定制防晒伞
  • [其他] 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的网络进行迁移性能的对比。 
  • [技术干货] 【CANN训练营】2022第二季新手班作业3详解(ResNet50更换为ResNet101)
    【CANN训练营】2022第二季新手班作业3详解(ResNet50更换为ResNet101)作业题目如下:基于 Caffe ResNet-50 网络实现图片分类(仅推理)样例,更换为 ResNet-101 分类模型。更换同类模型时,由于模型的输入、输出相似,所以源码基本可以复用,只需更换模型即可。详细解答如下:第一步:进入如下网址下载ATC Resnet101(FP16)模型https://www.hiascend.com/zh/software/modelzoo/models/detail/1/8bbb7c17dfa94408ab46ea0073fec355第二步:解压后将里面的resnet101_tf.pb上传至:样例目录/caffe_model 下第三步:将resnet101的pb模型转换为om模型利用如下atc命令将pb模型转换为om模型atc --model=caffe_model/resnet101_tf.pb --framework=3 --output=model/resnet101_tf --output_type=FP32 --soc_version=Ascend310 --input_shape="input:1,224,224,3" --log=info注意:此代码与如下ResNet101使用文档中的atc转换代码不同,主要缺少了--insert_op_conf=resnet101_tf_aipp.cfg。因为在我们的转换中不需要用到这个文件,如果用了反而会出现图片格式大小不匹配的问题。atc --model=resnet101_tf.pb --framework=3 --output=resnet101_tf_aipp --output_type=FP32 --soc_version=Ascend310 --input_shape="input:1,224,224,3" --log=info --insert_op_conf=resnet101_tf_aipp.cfg第四步:进入:样例目录/script打开:transferPic.py ,修改python脚本的代码目的也是为了适配图片格式大小的问题。将float16改为float32这里我之前卡了很久才弄好....第五步:进行jpg转bin的转换进入:样例目录/data注意:这里要先将原来的bin文件删除,否则会出现文件重名的情况然后执行代码:python3 ../script/transferPic.py第六步:修改加载模型的代码为了使得后续运行的是ResNet101模型,需要修改相应代码。否则运行的还是ResNet50进入:样例目录/src打开:sample_process.cpp 文件 ,将ResNet50.om改为 resnet101_tf.om第七步:重新make依次执行如下代码:cd ../build/intermediates/host/make第八步:重新执行依次执行如下代码:cd ../../../out./main之后就能看到成功运行的提示可以看到虽然运行成功但是这个精度就不太一样了。
  • [分享交流]   关于迁移学习核心技术开发与应用的进修计划
    新一代人工智能重大科技项目,聚焦基础理论和关键共性技术的前瞻布局,包括研究大数据智能、跨媒体感知计算、混合增强智能、群体智能、自主协同控制与决策等理论,研究知识计算引擎与知识服务技术、跨媒体分析推理技术、群体智能关键技术、混合增强智能新架构与新技术、自主无人控制技术等,开源共享人工智能基础理论和共性技术。”随着人工智能的发展,越来越多的机器学习应用场景的出现,现有表现比较好的监督学习需要大量的标注数据,标注数据是一项枯燥无味且花费巨大的任务,所以迁移学习受到越来越多的关注。迁移学习专注于存储已有问题的解决模型,并将其利用在其他不同但相关问题上。比如说,用来辨识汽车的知识(或者是模型)也可以被用来提升识别卡车的能力。  我们的目标  1.深入了解神经网络的组成、训练和实现,掌握深度空间特征分布等关键概念;  2.掌握迁移学习的思想与基本形式,了解传统迁移学习的基本方法,对比各种方法的优缺点;  3.握深度迁移学习的思想与组成模块,学习深度迁移学习的各种方法;  4.掌握深度迁移学习的网络结构设计、目标函数设计的前沿方法,了解迁移学习在PDA、Source-Free DA上的应用;  5.掌握深度迁移学习在语义分割、目标检测、行人重识别等任务中的应用,学习图像/视频风格迁移方法,了解风格迁移在实际生活中的应用;  6.掌握小样本学习、Transformer等前沿方法和基本思想,了解小样本学习、Transformer等在实际场景下的应用;  7.通过实操掌握图片视频风格迁移,自动驾驶中的跨域语义分割,目标检测。  大纲计划  一、机器学习简介与经典机器学习算法介绍  二、深度学习简介与经典网络结构介绍  三、迁移学习基础  四、深度迁移学习介绍  五、迁移学习前沿方法介绍  六、迁移学习前沿应用  七、小样本学习、Transformer等前沿方法与应用  八、实验实操之实操环境搭建  九、实验实操之深度迁移学习实践  十、实验实操之图片与视频风格迁移实践  十一、实验实操之自动驾驶中的跨域语义分割实践  十二、实验实操之目标检测实践 
  • [热门活动] 关于迁移学习核心技术开发与应用的进修计划书
    2022年08月19日 — 2022年08月22日我们的目标1.深入了解神经网络的组成、训练和实现,掌握深度空间特征分布等关键概念;2.掌握迁移学习的思想与基本形式,了解传统迁移学习的基本方法,对比各种方法的优缺点;3.握深度迁移学习的思想与组成模块,学习深度迁移学习的各种方法;4.掌握深度迁移学习的网络结构设计、目标函数设计的前沿方法,了解迁移学习在PDA、Source-Free DA上的应用;5.掌握深度迁移学习在语义分割、目标检测、行人重识别等任务中的应用,学习图像/视频风格迁移方法,了解风格迁移在实际生活中的应用;6.掌握小样本学习、Transformer等前沿方法和基本思想,了解小样本学习、Transformer等在实际场景下的应用;7.通过实操掌握图片视频风格迁移,自动驾驶中的跨域语义分割,目标检测。大纲计划一、机器学习简介与经典机器学习算法介绍二、深度学习简介与经典网络结构介绍三、迁移学习基础四、深度迁移学习介绍五、迁移学习前沿方法介绍六、迁移学习前沿应用七、小样本学习、Transformer等前沿方法与应用八、实验实操之实操环境搭建九、实验实操之深度迁移学习实践十、实验实操之图片与视频风格迁移实践十一、实验实操之自动驾驶中的跨域语义分割实践十二、实验实操之目标检测实践
  • [赋能培训] 【视频回顾】GDE直播公开课 · 第十一期:AI如何举一反三——迁移学习技术洞察
    ❤ AI系列往期直播回顾:【GDE直播公开课·第七期】低门槛AI开发模式:ModelFoundry❤ 直播视频回顾videovideovideovideovideovideovideovideovideo❤ 精选问答序号问题回复1AI建模后训练需要多久才能提高准确率?训练时间与所用模型、数据等紧密相关,一般视情况而定。2AI、机器学习、深度学习的关系?这三者是一种包含关系。人工智能是其中最广阔的概念,包含了多种研究学派和研究方向。机器学习是人工智能的子集,笼统来说机器学习主要研究从数据中学习的相关方法。而深度学习又是机器学习的子集,主要指使用了深度神经网络的机器学习方法。3同构和异构怎么定义?异构迁移也是映射到同一特征空间吗?同构和异构的主要区别是,源域和目标域的特征空间是否有交叉重合。目前异构迁移学习大部分是在不同的特征空间之间迁移知识。同时,异构迁移中也往往是进行特征对齐,将源域和目标域映射到同一特征空间上。4既然有了源域数据,如何决定是用迁移学习还是直接用源域数据训练?迁移学习主要目的是解决目标域问题,而源域与目标域是有差别的,直接用源域在目标域效果不太好。5想尝试迁移学习的话,有没有什么好上手的例子?一方面,可以参考相关文献中的MNIST、USPS手写识别数据集,ImageNet、COCO图像类数据集等多种公开数据集;另一方面可以参考阿里和百度的开源工具EasyTransfer和AutoDL-Transfer等。6请问预训练模型加入Adapter层时,down-project和up-project的作用是什么?主要目的是降低Adapter模块的参数数量。7基于特征的迁移学习方法为什么有些也使用了冻结-微调,是不是与基于模型的方法类似?神经网络确实有一定二义性,网络是一个模型,同时又是用来提取特征的。8迁移学习对机子的性能要求高吗?普通电脑能进行训练吗?要看什么场景,如果是传统机器学习,样本量不大是可以的;另外像图像分类、文本分类这些简单的也可以用cpu跑。9通过对直播中迁移学习的介绍,我看见利用到了数据和模型,而且迁移学习在自然语言处理方面有应用场景,那么我想请问老师,在利用数据的方面是否需要像建模比赛那样对数据进行处理(比如:缺失值的填充等),在利用模型方面是否需要像建模比赛一样不断的对模型进行优化以取得最理想的一个结果是的,迁移学习仍然需要对于数据进行必要的数据处理(特征工程)等工作,以提升源域到目标域迁移的性能;同时,模型训练时的一些超参也需要合理的调整,以取得更好的结果。10迁移学习与机器学习关系是什么?与迁移学习在一个层面的其他学习技术有哪些?机器学习包含的范围更广,而迁移学习是众多机器学习方法中的一种。但迁移学习与机器学习中传统的有监督、无监督学习、强化学习等都有所不同,它更强调将源域的模型和知识迁移到目标域中。与迁移学习类似或者相关的机器学习技术还有元学习、多任务学习、增量学习和小样本学习等。分享背景:迁移学习旨在利用数据、任务和模型之间的相似性,将已学习到的模型、知识等应用于新的领域,达到事半功倍的效果。在计算机视觉、自然语言处理、语音识别等方面上迁移学习都具有广泛应用。活动说明:1.有效盖楼:留言“报名”或参与提问/建议或回复暗号的,均可参与盖楼。报名和提问可在同一楼层,也可在不同楼层。盖楼截止时间:8月11日 24:00;2.无效盖楼:复制别人的提问、建议等,以及其他不符合要求的灌水信息皆为无效盖楼。注意:同一用户盖楼不能连续超过3楼,总楼层数不能超过10楼。超过盖楼数将视为无效盖楼;3.无效盖楼且踩中获奖楼层,也将视为无效,奖品不予发放,该楼层奖项轮空;4.楼层总数取值仅限活动期间内,即2022年8月1日至8月11日所盖楼层,其余时间楼层无效;5.鼓励自主撰写建议,复制、改写他人内容将不纳入评选,同样的内容以首发为准;6.为保证活动有序进行,一经发现有作弊行为,将取消奖励资格;7.请务必使用个人账号参与活动;8.所有获奖用户,请于获奖后3日内完成实名认证,否则视为放弃奖励;9.本次活动如一个实名认证对应多个账号,只有一个账号可领取奖励;一个实名认证账号只能对应一个收件人,如同一账号填写多个不同收件人或不同账号填写同一收件人,均不予发放奖励;(举例说明:具备同一证件号(比如身份证号/护照ID/海外驾照ID/企业唯一识别号等)、同一手机号、同一设备、同一IP地址等,均视为同一实名用户)10.所有参加本活动的用户,均视为认可并同意遵守华为云社区的用户协议及隐私政策;11.GDE数智平台可能需要根据活动的实际举办情况对活动规则进行变更;若有变更,将以活动页面告知等方式及时通知;12.活动结束后将在活动帖和【GDE直播交流群】微信群中公布获奖名单,奖品配送范围为中国大陆地区,部分地区或因疫情原因延迟配送;13.GDE数智平台拥有活动解释权。中奖公示(已提供地址的中奖人员,奖品将陆续发出;未提供地址的,请留意私信,工作人员将联系获取地址,请在2022年8月31日前提供地址,过时视为自动放弃礼品)请各位中奖者微信添加:华为GDE官方小助手(gdezhushou),回复:GDE直播公开课提供邮寄地址,不添加不能获奖哦~小助手微信二维码报名有奖楼层昵称奖品16yd_231481371GDE定制鼠标垫38yd_234511385GDE定制鼠标垫59DragonCurryGDE定制鼠标垫81madqfrogGDE定制鼠标垫103相信光的奥特王小懒GDE定制鼠标垫探讨有奖昵称优秀提问奖品相信光的奥特王小懒通过对直播中迁移学习的介绍,我看见利用到了数据和模型,而且迁移学习在自然语言处理方面有应用场景,那么我想请问老师,在利用数据的方面是否需要像建模比赛那样对数据进行处理(比如:缺失值的填充等),在利用模型方面是否需要像建模比赛一样不断的对模型进行优化以取得最理想的一个结果?帆布袋HB1688迁移学习与机器学习关系是什么?与迁移学习在一个层面的其他学习技术有哪些?帆布袋组队有奖小组暗号发送人数组长奖品AI学习12suifeng1324GDE定制大礼包举一反三5cauxiaoweiGDE定制大礼包暗号4OpenRunGDE定制大礼包*获奖小组由组长领取礼包自行分发,小组名单以回帖的为准直播口令奖排名昵称奖品1user_beifengGDE定制玩偶2匿名用户GDE定制玩偶3madqfrogGDE定制玩偶暖场互动奖互动昵称奖品第一轮聚***酯GDE定制冰箱贴第二轮赤*GDE定制防晒伞第三轮Y***LGDE定制玩偶