关于深度学习:神经网络压缩方法模型量化的概念简介

在过来的十年中,深度学习在解决许多以前被认为无奈解决的问题方面施展了重要作用,并且在某些工作上的准确性也与人类程度相当甚至超过了人类程度。如下图所示,更深的网络具备更高的准确度,这一点也被宽泛承受并且证实。 应用更深层次的网络模型谋求人类级别的准确性会带来一系列挑战,例如: 更长的推理工夫更高的计算要求更长的训练工夫高计算量的深度模型须要较长训练工夫,对于线下训练还是能够承受的,因为训练通常进行一次或以固定的工夫距离进行,但在高吞吐量生产环境中进行线上部署变得极其艰难。在这种状况下模型压缩技术变得至关重要,因为压缩可能在不影响准确性的状况下缩小宏大模型的占用空间。这篇介绍性文章将探讨可用于优化重型深度神经网络模型的不同技术。 模型压缩办法目前用于古代深度学习的模型压缩的支流办法有三个: 基于量化的办法:量化波及应用较低精度的数据类型来存储模型权重和执行计算(例如:8 位整数而不是 32 位浮点数)。 模型剪枝:模型修剪波及革除对模型性能的奉献较小的神经元或某些神经元之间的连贯。剪枝之所以无效是因为深度神经网络实质上是稠密的,正如 Frankle 等人在他们的论文 The Lottery Ticket Hypothesis:Finding Sparse, Trainable Neural Networks 中所形容的那样。 常识蒸馏:这种办法训练一个小模型来模仿更大、更精确的预训练模型的软标签。 软标签容许学生模型很好地泛化,因为软标签代表了更高级别的形象和对不同类别相似性的了解,而不是峰值的独热编码表示。 在以下局部中,咱们具体介绍模型量化,这是最宽泛应用的模型压缩模式。 什么是量化?依据定义,量化是将值从大汇合映射到较小汇合的过程,其指标是在转换中具备起码的信息损失。这个过程被广泛应用于各个领域,包含信号处理、数据压缩、信号转换等等。 量化利用于间断模拟信号,通过采样和四舍五入到最靠近的可示意量化值将它们转换为离散数字信号 浮点数示意 1985 年创立的 IEEE 754 规范是古代计算机中浮点值二进制示意的技术标准。依据 IEEE 754,定义了可用于示意浮点数的级别,范畴从 16 位(半精度)到 256 位(八位精度)。浮点数的示意包含三个局部:符号位、无效数(小数)和指数位。 这些二进制模式的值被连接起来以示意内存中的数字。下图形容了 32 位精度浮点数的示意: 对于离散整数示意,咱们最多能够应用 n 位示意 2^n 个不同的数字。应用浮点表示法使咱们可能在数轴上示意更大范畴的数字,如下图所示: 还须要留神的是 不同精度的浮点数应用不同的位来示意指数位和无效位,因而所示意的范畴也有所不同。下表显示了数据类型 FP32、FP16 和 INT8 示意的范畴和最小值。 量化操作 可示意范畴的方差对不同数据类型中固定值的示意是有影响的。以的数值为例,该值随示意它的不同数据类型而变动。 从表中能够显著看出,将数字从较高精度的数据类型间接转换为较低精度的数据类型可能会导致值的示意误差。这些误差称为量化误差。在深度神经网络中呈现此类误差可能造成重大的结果的,因而将模型间接类型转换为较低的精度并非易事。咱们将在本节探讨最小化此类误差的办法。 实践上咱们能够应用 n 位示意最多 2^n 个不同的值。因为鸽巢原理(pigeonhole principle,狄利克雷抽屉原理),由较高精度数据类型示意的整个范畴映射到较低精度数据类型必然会减少量化误差。然而如果咱们晓得要先验转换的散布的常识,那么它能被用来最小化误差吗? 从FP32到INT8 的代表性映射 ...

December 20, 2021 · 1 min · jiezi

关于深度学习:阅读和实现深度学习的论文初学者指南

可能应用代码实现最新的论文对于数据科学家来说是一项极具竞争力的技能。 如果想理解黑匣子外部产生了么,进步创造力或成为第一个将最新科学研究带入业务的开发人员 这篇文章应该能够帮到你。 咱们将探讨如何抉择一篇“好”的论文作为开始,这对于初学者来说会比拟容易;本文中将概述典型的论文构造以及重要信息的地位;并提供无关如何解决和实现论文的分步阐明,并分享在遇到困难时可能有所帮忙的链接。 从哪儿开始?如果你想让你的学习顺利无压力的开始,应该找一篇“好”的论文。作为终点倡议抉择一篇形容你相熟概念的并且被援用度高的论文。 高援用率的旧论文通常解释了十分根本的概念,这些概念也是最近钻研的根底,这些基础知识会更好的帮你了解最新的论文。然而要记住对于深度学习,2016 年之前的论文曾经过期了。援用量高的论文意味着许多其余科学家可能了解并应用该办法,也侧面阐明了该办法是可反复的。要找出特定论文的援用次数,能够在 Google Scholar 中搜寻它。援用次数超过 1000 次的论文被认为是高被引论文。 最初,较旧的论文形容了更简略的概念,这对初学者来说是一个很大的劣势。 论文构造:疏忽什么,读什么典型的深度学习论文具备以下构造: AbstractIntroductionRelated WorkApproach in DetailsExperimentsConclusionReferences 摘要Abstract:论文的整体内容摘要,它很短。重点介绍为什么这种办法比以前的办法更好,以及它的新鲜之处。摘要会公布在会议日程表和在线归档(如 Arxiv)中,它们的惟一目标是压服你浏览这篇特定的论文。如果你曾经抉择了一篇论文来浏览,能够随便跳过摘要,然而如果你打算进行论文的创作,这个局部是你论文“营销”的要害。 引言Introduction:是重要的必读局部。它提供了论文中提到办法的高级概述。通常它不是太技术性并且十分“用户敌对”,因而如果浏览的时候请先浏览这部分,因为能够让咱们在深入研究算法细节之前先热身。 相干工作Related Work:所有科学论文(以及深度学习)都是相干的,因为每一项发现都建设在之前数十项甚至数百项钻研工作的根底之上。相干工作概述是每篇论文的必填局部。作者必须确保他们的工作是相干的,并且解决了以前论文中的重要的问题的同时不会反复其余钻研人员之前所做的工作。这是学术界的一个重要局部——但对咱们(从业者)来说不是,所以如果常识浏览和实现论文能够跳过,然而如果编写改良改论文实现的办法的新论文,这里肯定要看。(或者有时你可能正在寻找该畛域的其余根本论文/概念来浏览,这里也能够给你新的思路) 具体办法Approach in Details:这是论文中最简单和最具挑战性的局部,也是最重要的局部(肯定要浏览!)。不要冀望过高,也不要冀望通过一次浏览就理解所有内容。因为这是在编码时一次又一次仔细阅读了解的局部,所以咱们的“乐趣”就从这里开始。 不要胆怯简单的公式,在大多数状况下,它们解释了基本概念。这就是钻研人员以他们的模式“开的玩笑”。对于论文的实现咱们甚至不必关注他们,当然如果你想改良论文,这些简单的公式还是须要用的。看不懂也没关系多看看论文,用不了多久你就会习惯了。 在浏览论文时,必须获取可能须要的所有信息,例如:数据预处理技术、具体的神经网络架构、损失函数、训练技巧和后处理。如果浏览了几次都不太明确也没关系,前面我会通知你怎么做。 试验Experiments:这一节充斥了图表、表格和图像。通常它蕴含无关数据集、训练和指标评估的详细信息,以及对模型在各种超参数下的体现以及与其余论文中的最新办法进行比拟的回顾。如果论文是对于计算机视觉的,也会有模型预测的可视化。这部分能够抉择感兴趣局部浏览。 论断Conclusion:是对论文的总结,有时蕴含作者对将来钻研的想法。小学作文中老师都说过要扣题对吧,这部分就是要与后面的摘要和引言响应。所以跳过它没什么问题。 参考文献References:学术界有一个严格的规定:如果钻研人员应用属于其他人的想法,他/她必须增加对原始作品的援用。当论文中曾经解释了这些参考文献中的概念或只是不重要时,能够跳过大多数此类参考文献。然而有时作者可能会说:“咱们应用了论文 [2] 中形容的模型架构,只批改了最初一层的激活”。在这种状况下,您须要找到并浏览论文 [2] 以齐全了解该办法。 当初——是时候浏览论文了。在接下来的 30 分钟里,你应该高度专一,因为你正潜入一个有挑战性并且令人兴奋新世界。 去哪里寻求帮忙?对许多人来说,“实现论文”意味着“疾速浏览论文,而后在互联网上寻找现成的实现”(paperwithcode:说的对)。这是确实是最简略的办法,但不是无益的办法。我强烈建议你从头开始,不要马上寻找现成的解决方案。至多本人做些事件因为那才是对你的技能进步的要害。 即便你是一个齐全初学者,总有一些事件你能够做: 下载数据集,钻研它,对数据集做EDA,写一个数据加载器等等。这是一项简略而又容易的工作,但一旦实现它,你就会有信念并帮忙你继续前进: 开始编写模型架构,简化或跳过你不了解的局部。例如这里有一个奇怪的权重初始化器(跳过它,应用通用甚至默认的那个)。以前从未应用过PReLU激活(那就先用ReLU)。你当初的指标是创立一个可训练的模型把流程跑通(有输出,有输入,能够进行训练),而不是要训练出论文的模型或体现更好的模型。在论文中有一个自定义的损失:用一个相似的损失替换它。对优化器、数据裁减、后处理进行同样的解决——简化或跳过。这样你最终会失去一个原型。你甚至能够应用这个原型跑通残缺的流程,看看它如何工作-兴许后果不会那么蹩脚 下一步就是填补缺口,修复工作不好的局部。再次浏览论文认真了解你之前漏掉的概念。如果你被卡住了也不要怄气。因为你曾经有原型了,这是一个很大的提高你曾经学到了很多。你甚至能够给论文的作者写信,因为在学术界大部分的论文作者还是十分的友善的。 感觉齐全卡住了?那就进行总结一下具体是哪里的问题,有重点的进步相干的常识。在下一篇论文,你会写得更好,因为这是一个学习的过程。文章的开始倡议选一篇被高度援用的论文。当初你就能感触到益处了。风行的论文在互联网上有几十种实现,(paperwithcode:我又来了),这里举荐paper With Code的起因是它蕴含了可能所有风行论文的代码实现。这些有的实现是官网的,有的来自像你我这样的钻研人员。例如,word2vec在PyTorch和Tensorflow中有67个paper With Code实现。 您能够复制粘贴,但肯定要花工夫来了解代码。 最初总结抉择一篇被高度援用的旧论文。仔细阅读它并试着获取尽可能多的信息——数据筹备、模型架构、损失函数和训练细节。如果你不明确所有的事件,不要焦急通过跳过和简化你不了解的概念来创立一个原型。如果你的原型与论文中的办法相去甚远也没关系,然而要试着本人改良草稿。在互联网上寻找文章和代码。复制粘贴,但要浏览和了解。反复一篇新论文。而后感触第二次的感觉是如许的顺利真正的学习产生在步骤2-5上,所以你在这里花的工夫越多,你学得就越快。好运! 作者:Olga Chernytska

December 19, 2021 · 1 min · jiezi

关于深度学习:北京讲座报名12月26日与深度学习大牛共赋技术之约

深度学习给学术界和业界带来了弱小的技术革新,其中,如何进步深度学习的效率和性能,是学术界和业界广泛关怀的问题。如何减速神经网络训练?如何更疾速的实现深度学习的部署?本次分享,将带来学术界和业界的最新进展! 本次分享邀请了曾刷新IMAGENET 记录的新加坡国立大学传授尤洋,为咱们带来减速神经网络训练的最新钻研。其发表论文《Imagenet training in minutes》所提出的办法刷新了ImageNet训练速度的世界纪录。 他是LAMB优化器的提出者,曾胜利将预训练一遍BERT的工夫,从本来的三天三夜一举缩短到一个多小时。从UC伯克利作为优良博士毕业后,退出新加坡国立大学负责校长青年传授,持续深耕高性能计算畛域。2021年,他还被选入福布斯30岁以下精英榜 (亚洲)。 他将为咱们疾速大规模神经网络训练在学术界的最新研究进展,从高性能计算、并行算法角度进行切入,介绍大规模深度学习训练算法的分布式优化,以及在AAAI发表的最新研究进展! 本次分享还将邀请一线大厂的演讲嘉宾,分享深度学习在业界的最佳实际!本次分享将次要包含AI/ML工程化在云端的有机联合,基于PyTorch+深度学习云平台实现大规模的算力晋升,基于海量的数据实现疾速的模型训练和部署,实现最高效稳固地实现从搭建框架、训练模型,到部署模型的整个生命周期。 本次分享还将带来亚马逊云科技的最新深度学习前沿利用!一站式的PyTorch的深度学习云平台,高性能的人工智能算法集,以及最新的利用停顿。或乏味或科技,业界的前沿利用停顿,等你来撩! 这是一场学术和业界的盛宴,快来报名加入吧! 工夫地点 2021年12月26日北京海淀区西直门南大街甲56号创伴空间 礼品专区 线下的流动,除了干货满满的分享内容,必定少不了精彩的茶歇和诚意满满的周边礼品!咱们心愿大家的相聚不仅仅是深度的技术交换,更能结交更多气味相投的敌人,一起碰撞出更加精彩的火花。 除此之外,现场加入互动抽奖,还有机会取得 User Group 连帽衫一件 还在等什么,快快扫描下方二维码退出咱们吧~ 撰写人:欣欣技术内容:培艺

December 16, 2021 · 1 min · jiezi

关于深度学习:恒源云LLD-内部数据指导的标签去噪方法ACL-2022

文章起源 | 恒源云社区(恒源云,专一 AI 行业的共享算力平台) 原文地址 | LLD: 外部数据领导的标签去噪办法 原文作者 | Mathor 大佬发文太勤快,再不搬运,我本人都不好意思了,所以明天给大家带来新的内容啦~ 注释开始:很多数据集中的标签都存在谬误,即使它们是由人来标注的,谬误标签的存在会给模型训练带来某些负面影响。目前缓解这种影响有诸如删除谬误标签、升高其权重等办法。ACL2022有一篇名为《A Light Label Denoising Method with the Internal Data Guidance》的投稿提出了一种基于样本外部领导的办法解决这个问题 先前有钻研表明同一类别的样本在实质上是类似和相干的,不同类别的样本存在显著差别。在文本分类工作中,两个有着类似内容的句子应该被预测为同一个类别,然而理论状况并不总是这样。当训练数据面临肯定水平的噪声时,这个问题可能会更加重大,因为模型只收到标签的领导/监督。这就自然而然提出了一个问题:除了标签之外,咱们是否从训练样本之间的关系寻求领导? 以文本分类数据为例,有\( n \)个样本的数据集能够被定义为 其中,\( y_i\in {c_1, c_2,…,c_m} \)示意共有\( m \)类 CONTEXTUAL REPRESENTATION咱们首先须要一个指标判断两个句子是否类似。目前有两大类文本类似度计算方法,第一种是基于传统的符号表征,例如编辑间隔、Jaccard Similarity Coeffieient以及Earth Mover’s Distance;第二种是将文本映射为浓密的向量,而后计算它们的向量类似度。第一种办法过于依赖token的外表信息,第二种办法须要应用内部数据对模型进行预训练,而这个内部数据和咱们的工作数据可能不是同一畛域的。因而作者基于Postive Pointwise Mutual Information (PPMI)提出了一个新的上下文表征办法 首先,咱们用一个长度为2的滑动窗口统计数据集中所有token的共现矩阵\( C \)。\( C_{w_i, w_j} \)示意前一个词是\( w_i \) ,后一个词是\( w_j \)呈现的次数,而后咱们计算\( C \)的PPMI矩阵\( E \): 其中,\( P(w_i), P(w_j), P(w_i, w_j) \)别离是从共现矩阵\( C \)中计算失去的。最终,向量\( E_{w_{i}} \)是词\( w_i \)的示意 ...

December 16, 2021 · 1 min · jiezi

关于深度学习:开启深度强化学习之路Deep-QNetworks简介和代码示例

强化学习是机器学习畛域的热门子项。因为 OpenAI 和 AlphaGo 等公司的最新冲破,强化学习引起了游戏行业许多人的留神。咱们明天以Hill Climb Racing这款经典的游戏来介绍DQN的整个概念,Hill Climb Racing须要玩家在不同的地形上驾驶不同的车辆,驾驶间隔越长得分越高。 在本篇文章中将通过这个游戏的示例来介绍 Deep Q-Networks 的整个概念,然而因为没有环境所以咱们会将其分解成2个独立指标别离实现。如果已经接触过此类游戏,你可能曾经察看到游戏的两个次要指标:1、不要碰撞,2、放弃后退。 咱们将这两个指标分解成咱们的须要的做动作:1、保持平衡,2、爬坡,当然还有一些附加项,例如吃分获取处分,然而这个并不是咱们的次要指标。 在咱们深刻解决这些问题之前,首先介绍一下解强化学习和DQN的基础知识。 咱们先疾速介绍一下什么是强化学习,在这种学习中行为主体对环境所做的口头会依据其后果失去处分。处分会影响主体(代理、智能体)将来的行为。 无利的口头,更多的处分(踊跃的)。不利的口头,较少的处分或者惩办(在某些状况下是负面的)。 Deep Q-Learning 算法是深度强化学习的外围概念之一。神经网络将输出状态映射到(动作,Q 值)对。 动作Action:代理执行的对环境进行后续更改的流动。环境Environment:模型工作的整个状态空间。处分Rewards:为模型提供的每个动作的反馈。Q 值Q-value:预计的最优将来值。Q-Learning 和 Deep Q-Networks 是无模型算法,因为它们不创立环境转换函数的模型。 因为 DQN 是一种无模型算法,咱们将构建一个与问题中提到的环境兼容的代理。 class Agent: def __init__(self, state_size, action_size): self.state_size = state_size self.action_size = action_size self.memory = deque(maxlen=2000) self.gamma = 0.95 self.epsilon = 1.0 self.epsilon_decay = 0.995 self.epsilon_min = 0.01 self.learning_rate = 0.001 self.model = self._create_model() def _create_model(self): model = Sequential() model.add(Dense(24, input_dim=self.state_size, activation='relu')) model.add(Dense(24, activation='relu')) model.add(Dense(self.action_size, activation='linear')) model.compile(loss='mse', optimizer=Adam(lr=self.learning_rate)) return model def remember(self, state, action, reward, next_state, done): self.memory.append((state, action, reward, next_state, done)) def act(self, state): if np.random.rand() <= self.epsilon: return random.randrange(self.action_size) act_values = self.model.predict(state) return np.argmax(act_values[0]) def train(self, batch_size= 32): minibatch = random.sample(self.memory, batch_size) for state, action, reward, next_state, done in minibatch: if not done: target = reward + self.gamma*np.amax(self.model.predict(next_state)[0]) else: target = reward target_f = self.model.predict(state) target_f[0][action] = target self.model.fit(state, target_f, epochs=1, verbose=0) if self.epsilon > self.epsilon_min: self.epsilon *= self.epsilon_decay def load(self, name): self.model.load_weights(name) def save(self, name): self.model.save_weights(name)在这里咱们应用了一个小型网络(带有两个暗藏层)。输出大小是指状态的数量,输入大小对应于动作空间的数量。 ...

December 16, 2021 · 2 min · jiezi

关于深度学习:在人均配备升降桌的公司工作是一种怎样的体验

最近 LigaAI 的大新闻就是咱们搬家了! 尽管在哪里办公看似不太重要。但对于咱们团队的小伙伴们来说,来到暂驻的众创空间搬进“本人的地盘”,像是一部分现实正在被实现。 宽阔舒服、窗明几净只是最低要求……在 LigaAI 即便是办公职场,也要有满满的极客精力。 总而言之,要好。好到足以把大家从冬日的被窝里挖出来,聚到一起。口说无凭,还得上图……上面让咱们来逐个介绍: 电动升降机 被何同学视频带火的双电机主动升降桌在 LigaAI 人手一张!自带高度记忆和久坐揭示性能,坐累了站一会儿,不论你喜爱坐着思考还是站着敲代码,都能够找到最舒服的高度。身材才是反动的成本嘛~ 人体工学椅 人均标配的还有享誉开发者圈子的出名国货之光:西昊人体工程学座椅。头枕、手托、腰托统统可调,甚至还有脚托能够反对半躺着工作。坐着难受,能力写出看着难受的代码嘛~  超贊視野 全落地窗的休息区&会议室,有着鸟瞰沙河西公园全景的绝佳视线。多少防蓝光眼镜,都不如这一片盎然绿意更能放松双眼和情绪。那句话怎么说来着:好的情绪,是胜利的一半。 隔音采光双一流的会议室 既能够和搭档们一起探讨下一期需要,也能让须要宁静角落的共事专一工作。思路凌乱的时候,就到休息区来点茶水零食,撸撸花草、摸摸鱼(是真鱼),聊几句闲天……兴许下一个 big idea 就会在这里诞生~ 除了舒服的办公环境,一个极客团队里必定少不了最受开发者喜爱的: 黑客马拉松 尽管 LigaAI 还不到一岁半,不过首届外部黑客马拉松 LigaAI Hackathon 2021 曾经拉开序幕。三天工夫、全员参加、有限脑洞…是时候展示真正的技术了!各位看官无妨期待咱们下周的 Demo Day 吧! 说了这么多,从环境抉择、桌椅装备到 Hackathon week,其间贯通如一的理念是:在 LigaAI 咱们真的置信,工作能够是一件高兴而有成就感的事件。 作为一款智能研发治理平台,LigaAI 的愿景是以全新的形式赋能每个团队。第一步,咱们正在自我赋能:为小伙伴们提供更舒心的工作环境、更智能的合作工具。 咱们是开发者咱们懂得开发者咱们正在赋能更多开发者 咱们是抱有极客精力和理想主义的一群人。LigaAI 的团队中没有人会是螺丝钉,每个人都不懈翻新、谋求极致、敢为人先。 咱们尊重和器重每一个个体。咱们置信专一,专一思考、专一发明。咱们置信技术,置信眼前这一行代码,会是一份终将为世界带来扭转的事业。如果你也如此置信,欢送退出LigaAI,一起发明属于极客的将来查看在招职位

December 14, 2021 · 1 min · jiezi

关于深度学习:牛顿冷却定律

牛顿冷却定理形容的是在环境初始温度下,物体天然冷却过程中,物体的温度随工夫变动的数学模型,用公式示意如下: $$\frac{dT(t)}{d(t)} = -k(T(t)-H)$$ 其中H为环境温度,k为常数系数,公式形容的物理意义能够表述为:物体的温度的一阶导和物体与环境温度的温差之比为一常数。这意味着和环境温差约大,物体降温越速度快。 对下面的微分方程求解,失去物体的温度模型: $$T(t) = H+(T(t_0)-H)e^{-k(t-t_0)}$$ 即以后温度和初始温度,环境温度都有关系。 在搜寻,举荐等算法中,常常须要计算一些视频,新闻,商品的新鲜度,热度等随着某个变量衰减的权重。线性衰减等办法往往没有区分度,这时应用牛顿冷却定律来建模会比拟好。 比方,一个新公布的短视频心愿给予肯定的排序加权,使其有机会透出,那么加权系数能够设定为工夫的牛顿冷却函数。设衰减系数为T(t),H取为0, \( T(t_0), \)取为1,即初始加权系数定位1,其后随着工夫衰减。 $$T(t) = e^{-k(t-t_0)}$$ 至于k的取值,假如初始加权为1,60分钟后心愿加权系数为0.4,则: \( 0.4=e^{-60k}, \)可求解失去 k=0.0153,后续计算衰减系数就可用k和公式间接计算。 至于热度,可定义为点击pv的函数。

December 14, 2021 · 1 min · jiezi

关于深度学习:恒源云CV领域之几何变化

文章起源 | 恒源云社区 原文地址 | 几何变动 原文作者 | instter 1 图像缩放缩放是对图像的大小进行调整,即便图像放大或放大。API cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR)参数: src : 输出图像dsize: 相对尺寸,间接指定调整后图像的大小fx,fy: 绝对尺寸,将dsize设置为None,而后将fx和fy设置为比例因子即可interpolation:插值办法 示例 import cv2 as cv# 1. 读取图片img1 = cv.imread("./image/dog.jpeg")# 2.图像缩放# 2.1 相对尺寸rows,cols = img1.shape[:2]res = cv.resize(img1,(2*cols,2*rows),interpolation=cv.INTER_CUBIC)# 2.2 绝对尺寸res1 = cv.resize(img1,None,fx=0.5,fy=0.5)# 3 图像显示# 3.1 应用opencv显示图像(不举荐)cv.imshow("orignal",img1)cv.imshow("enlarge",res)cv.imshow("shrink)",res1)cv.waitKey(0)# 3.2 应用matplotlib显示图像fig,axes=plt.subplots(nrows=1,ncols=3,figsize=(10,8),dpi=100)axes[0].imshow(res[:,:,::-1])axes[0].set_title("相对尺度(放大)")axes[1].imshow(img1[:,:,::-1])axes[1].set_title("原图")axes[2].imshow(res1[:,:,::-1])axes[2].set_title("绝对尺度(放大)")plt.show() 2 图像平移图像平移将图像依照指定方向和间隔,挪动到相应的地位。 API cv.warpAffine(img,M,dsize)参数: img: 输出图像M: 2*∗3挪动矩阵对于(x,y)处的像素点,要把它挪动到处时,M矩阵应如下设置: 留神:将M设置为np.float32类型的Numpy数组。 dsize: 输入图像的大小留神:输入图像的大小,它应该是(宽度,高度)的模式。请记住,width=列数,height=行数。 示例需要是将图像的像素点挪动(50,100)的间隔:import numpy as npimport cv2 as cvimport matplotlib.pyplot as plt# 1. 读取图像img1 = cv.imread("./image/image2.jpg")# 2. 图像平移rows,cols = img1.shape[:2]M = M = np.float32([[1,0,100],[0,1,50]])# 平移矩阵dst = cv.warpAffine(img1,M,(cols,rows))# 3. 图像显示fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=100)axes[0].imshow(img1[:,:,::-1])axes[0].set_title("原图")axes[1].imshow(dst[:,:,::-1])axes[1].set_title("平移后后果")plt.show() ...

December 13, 2021 · 2 min · jiezi

关于深度学习:使用transformers库微调Bert进行文本分类

最近尝试利用HuggingFace的transformers库在pytorch下进行Bert文本分类的微调,找了很多中文blog,次要是对数据的解决这块没有比拟具体的阐明,不晓得怎么解决dataset的格局,因而在这里做一下记录。 依赖包pytorchtransformersscikit-learn预训练模型加载预训练模型加载这块HuggingFace在transformers库中封装得十分好,没什么太多要讲的: args.pretrain 这里填写模型名称或者你本人筹备好的预训练模型,各种预训练模型能够从https://huggingface.co/models查找和下载,须要蕴含三个文件(config.json、vocab.txt、pytorch_model.bin)。此处以Bert为例,筹备bert-base-chinese模型,args.pretrain 为寄存模型三个文件的门路。 因为上游工作是文本分类工作,因而model应用transformer.BertForSequenceClassification,也能够依据须要抉择其余模型。 from from transformers import BertForSequenceClassification, BertTokenizerFasttokenizer = BertTokenizerFast.from_pretrained(args.pretrain)model = BertForSequenceClassification.from_pretrained(args.pretrain, num_labels=2, output_hidden_states=False)模型微调模型微调这里应用transformers封装好的Trainer模块,参数含意基本上都比拟高深莫测,这里设置了早停、依据precision加载最佳模型。值得注意的是在模型保留时会保留多个checkpoint,因而evaluation_strategy、save_total_limit要设置一下免得保留过程中爆硬盘,Bert一个checkpoint保留下来差不多要1GB…… from transformers import Trainer, TrainingArguments, EarlyStoppingCallbackfrom sklearn.metrics import classification_report, precision_score, \ recall_score, f1_score, accuracy_score, precision_recall_fscore_supportdef compute_metrics(pred): labels = pred.label_ids preds = pred.predictions.argmax(-1) precision, recall, f1, _ = precision_recall_fscore_support(labels, preds, average='binary') acc = accuracy_score(labels, preds) return { 'accuracy': acc, 'f1': f1, 'precision': precision, 'recall': recall }training_args = TrainingArguments( output_dir=args.save_path, # 存储后果文件的目录 overwrite_output_dir=True, num_train_epochs=args.epoch, per_device_train_batch_size=args.batch_size, per_device_eval_batch_size=args.batch_size, learning_rate=1e-5, eval_steps=500, load_best_model_at_end=True, metric_for_best_model="precision", # 最初载入最优模型的评判规范,这里选用precision最高的那个模型参数 weight_decay=0.01, warmup_steps=500, evaluation_strategy="steps", # 这里设置每100个batch做一次评估,也能够为“epoch”,也就是每个epoch进行一次 logging_strategy="steps", save_strategy='steps', logging_steps=100, save_total_limit=3, seed=2021, logging_dir=args.logging_dir # 存储logs的目录 )trainer = Trainer( model=model, args=training_args, train_dataset=train_set, eval_dataset=valid_set, tokenizer=tokenizer, compute_metrics=compute_metrics, callbacks=[EarlyStoppingCallback(early_stopping_patience=3)], # 早停Callback )数据预处理终于要说一下数据预处理阶段了,为什么最先进行的操作要放在最初讲呢?因为读者敌人可能也发现了,transformers封装得十分好,以至于整个pipeline中须要进行自定义的就是数据预处理这块。其实也非常简单,你须要在创立 Trainer的时候传入train_dataset和 eval_dataset,这两个数据集的类型都是torch.utils.data.Dataset,PyTorch的 Dataset 解决详见另一篇文章。那么这里须要对 __getitem__办法进行一些批改,使其返回一个dict,外面有蕴含Bert输出所需的元素。 ...

December 11, 2021 · 1 min · jiezi

关于深度学习:数字化时代新机遇外引流量内建平台

无论是线上的公域还是线下的公域,只做公域都会举步维艰。 淘品牌怎么了?韩都衣舍、茵曼、裂帛、御泥坊、阿芙精油、膜法世家,从2015年优衣库在双十一流动期间胜利争夺韩都衣舍的头等宝座之后,你会发现这些本来耳熟能详的名字逐步隐没在双十一的各大榜单中。 即使被大学作为胜利案例解说的韩都衣舍,也在2020年的双11跌出前十榜单。并且,同年IPO也被终止。往年5月,广发证券发布公告称:因为韩都衣舍拟调整资本运作形式及工夫安顿,经协商一致决定终止上市辅导。 在往年的双十一战场上,今日景色有限的淘品牌,更是沦落“无人问津”。 一、淘品牌:成于淘宝、败于淘宝现在,直播间逐步成为双十一剁手的外围场景,而往年双十一直播的相干数据显示,淘品牌们仿佛面临着更加危险的场面。 咱们能够看到,李佳琦直播间的品牌榜单中,欧莱雅稳坐头把交椅,首日预售234万+件,其次是天然堂、逐本、相宜本草、欧诗漫……没有一个是淘品牌。 薇娅直播间销售品类笼罩更全面,玉泽、欧莱雅、玉兰油、Colorkey、ubras、李子柒等品牌居前列,同样不见淘品牌踪影。取而代之的是新国货和国际品牌。而且即便是淘品牌自播,仿佛也未见什么水花溅起。 淘品牌成于淘宝,但也困于淘宝。 随着公域流量越来越贵,追随平台成长起来的它们,人造生存于互联网流量之中,重大依赖平台流量。所有的淘品牌,即使进行过屡次线下扩店触达,其线下渠道的营销依然处于薄弱环节。 从头至尾,淘品牌只能被公域流量所操控。 而随着互联网进入存量时代,阿里天猫成为各大品牌抢夺的重要战场。国际品牌、新品牌的强势来袭,瓜分掉仅存的平台红利之后,面对越来越贵的获客老本,淘品牌们即使早曾经感知到本人的命运,却总是找不到正确的前途。 而淘品牌茵曼品牌创始人的话,兴许是对现在淘品牌最好的解答:“淘品牌也好、互联网品牌也好,不走线下,死只是迟早的问题。” 二、实体冲击:时代趋势下的商业大洗牌线下的商业租金是在为地位买单,地位好坏的实质是流量的多少。线下企业的租金实质上是购买公域流量的老本。而这些线下的企业又是另一番惨淡现象。 国内出名的银泰商业,疫情期间,敞开了50%的线下门店。无印良品的美国子公司,因为新冠病毒大风行造成的影响,曾经依据破产法第11章申请破产爱护。 而已经的批发巨头苏宁,往年更是被深国内和鲲鹏资本正式接盘。苏宁为何走到了明天这一步,苏宁易购副董事长孙为民感叹:“咱们是零售商,和广告商进行竞争,资本市场上咱们通过市盈率进行估值,他们依据用户数估值,这种仗打得很累。” 总结起因,苏宁面对线上业务,只是想着获取销售利润,却并没有实现足够的用户增长。尽管从2010年,苏宁就发表开始“互联网转型”,2018年更是实现线上收益大于线下收益的成绩,但其商业布局让人看得目迷五色,最终的后果便是线上线下接连得胜。 苏宁今后将何去何从,预计也正向孙为民思考的那样:“借助十年来互联网转型积攒的能力,倒退本地在线互联,本地互联网的经营。” 即使是苏宁这样的体量,玩不转也会把本人玩的惨淡开场。所以,单纯去做公域这条路,并不是一条通往罗马的路线。 三、公域私域的新玩儿法:外引流量、内建平台那些重大依赖线上流量、线下门店流量的企业尽管举步维艰。但那些构建了“外引流量,内建平台”的用户精细化经营体系的批发企业,通过公域引流做大规模,通过私域经营进步复购、进步利润,走出了一条:“公域做规模,私域做利润”的坎坷不平。 完满日记:交融私域公域,成就国货之光完满日记自2017年3月诞生,仅用了两年工夫,就在2019年成为第一个登上天猫双十一彩妆榜首的国货品牌。并创下了多个第一:眼影品类销售额第一;唇釉品类销售额第一;睫毛膏品类销售额第一;眼线品类销售额第一。这样亮眼的业绩,着实惊呆了所有人。而完满日记是怎么做到的呢? 从2018年开始,小红书平台下面,铺天盖地的都是完满日记产品种草笔记,性价比之王、设计绝绝子、明星同款……,通过头部主播发声+腰尾部主播流传的组合,完满日记在小红书上迅速建立了国货之光的品牌形象,搜寻曝光量暴涨12倍。 而后,借助KOL+KOC的种草组合,全新的流量驱动模式,完满日记迅速出圈。 同时,完满日记在公域流量上,简直是全渠道的触达流传。各大支流平台的成果广告、开屏广告投放不遗余力。并且,在直播这一全新赛道上,也是长期与头部主播单干,各平台KOL和明星带货的数量也是颇为可观。 这些帮忙完满日记实现了十分好的公域引流,迅速地做大了用户规模,但如果仅仅这样是实现不了盈利的。完满日记的私域营销做得更加杰出。 完满日记在品牌塑造起来之后,其全网粉丝量超过了2500万,私域中更是有着500万的忠诚客户。官网公众号简直篇篇10万+,配合社群及朋友圈,在数字化平台上对私域用户进行了继续的营销,加强了用户黏性,进步了用户的复购率和流传率,为完满日记带来了丰富的回报。 通过公域塑造品牌,流传商品实现了很好的引流,而后借助私域营销进步转化率、进步复购率、进步转介绍率。完满日记把公域和私域完满地联合起来,无效地实现了本身品牌的疾速倒退和销量晋升。 母婴连锁门店之王:将私域保护做到极致而将线下门店和私域营销,两者相交融,做到极致的母婴连锁门店孩子王,往年十月份胜利上市。并且在招股书上重点论述了孩子王的私域营销。孩子王以“商品+服务+社交”的经营模式,在4万亿的母婴市场之中,胜利播种4200万会员,构建出一个成熟的母婴生态平台。并通过构建私域的数字化平台,将用户数字化,服务数字化,营销数字化,通过这些数字化动作,不仅仅是实现了超高的转化率,超猛的复购率,还让企业依靠用户数据做出更迷信的决策,这些决策让孩子王实现了产品的疾速翻新,实现了服务体验的显著晋升。 而这些,毫无疑问进一步地减速了孩子王销售规模的增长和利润的进步。 孩子王的胜利,向所有人证实公域流量越来越贵的互联网时代,私域营销的数字化平台的搭建是有如许的重要,它将是企业间接领有的、可反复、低成本甚至收费触达的用户次要窗口。 而将来,公域与私域相交融的“外引流量、内建平台”的打法,将成为一个大的趋势。不去公域“外引流量”,则企业很难做大规模;不在私域“内建平台”,则很难进步利润。因而将来的企业必然要走,“外引流量,内建平台”的这一营销新模式。

December 10, 2021 · 1 min · jiezi

关于深度学习:SIMILAR现实场景中基于子模块信息度量的主动学习

在过来几年中,被动学习 (AL) 策略已被证实可用于升高标签老本。然而当波及事实世界的数据集时,以后的办法成果并不现实,事实世界的些数据集存在缺点和许多特色,使得从中学习具备更大挑战性: 真实世界的数据集场景:(a) 罕见类:数字 5 和 8 很少见;(b) 冗余:数字 0 和 1 是冗余的;© 散布外 (OOD):数字分类中的字母 A、R、B、F。 首先,事实世界的数据集是不均衡的有些类别十分常见。这种不均衡的一些例子来自医学成像畛域;例如,在癌症成像数据集中,癌细胞的图像通常比它们的良性对应物更常见。另一个例子是在主动驾驶汽车畛域,咱们心愿精确地检测所有物体。然而因为某些状况下的某些对象是常见的,像下图中光明中的行人,个别模型常常无奈检测和分类罕见类别。 左:Realistic 数据集中的罕见类 右:Uber主动驾驶汽车在亚利桑那州坦佩市产生车祸 其次,事实世界的数据有很多冗余。这种冗余在通过从视频中采样帧创立的数据集中更为突出(高速公路上行驶的汽车的镜头或监控摄像头的镜头)。 事实中冗余的数据——来自主动驾驶汽车(KITTI 数据集)的镜头的帧样本 第三,有散布外(OOD)数据是很常见的,其中一些未标记的数据与手头的工作无关。例如,在医学成像畛域,数据集中的一些x射线图像并不是失常获取失去的数据,从而导致散布不平均。 该论文的工作是解决以下问题: 是否能够有实用于宽泛事实场景的繁多并且对立的被动学习框架来训练机器学习模型?论文提出了SIMILAR(一个对立的被动学习框架),并且说能够作为后面探讨的许多事实场景的一站式解决方案。该框架的次要思维是通过适当抉择一个查问集Q和一个公有集p,利用子模块信息测量度(SIM:submodular information measures)之间的关系,论文中说其统一性来自于子模块条件互信息(SCMI:submodular conditional mutual informatio)丰盛的建模能力。咱们从SCMI中失去了子模块互信息(SMI:submodular mutual informatio)和子模块条件增益(SCG:submodular conditional gain)公式,并将它们利用于不同的事实场景中。 上图为通过Q和P抉择SIM及其在事实场景中的利用关系 论文中的模型最初应用线性层取得标签来示意每个数据点,将每个数据点的假如标签值示意分类的最大概率。为了实例化基于SIM的函数,应用从被动学习以后轮次取得模型的梯度来计算一个类似度核。最初利用贪婪策略对子模块函数进行优化,取得须要(可用于)标记的未标记数据的子集。一旦这些子集标记实现,咱们将其增加到标记的训练数据集中,并持续进行下一次迭代。 在下面的数字分类的实在数据集场景示例中,咱们能够利用如下的SIMILAR框架。 适当抉择查问集和条件集: a) 通过优化SMI函数,以R蕴含5,8作为查问,找到常见数字5,8∈U; b) 通过优化f(A|L),从U中选取不同的样本,这些样本在以后标记集 L 中也不同(这里咱们要防止数字0,1∈U,因为它们都存在于L中); c) 通过优化I_f(A;I|O)在U中抉择数字(散布内的),防止字母(散布外的),其中 I 是到目前为止在被动学习中抉择的散布内标记点,O 是散布外点 。 依据测试,在CIFAR-10、MNIST和ImageNet等几种图像分类工作中,SIMILAR算法的性能显著优于现有的被动学习算法,在罕见类状况下的性能达到≈5% - 18%,在散布外数据状况下的性能达到≈5% - 10%。 CIFAR-10罕见类上,SMI函数(特地是LOGDETMI, FLQMI)的体现比其余基线高出10%以上。 OOD数据的未标记集。i) SCMI函数始终优于基线5% - 10%,ii) SCMI还优于相应的SMI ...

December 10, 2021 · 1 min · jiezi

关于深度学习:恒源云功能更新实例日志上线操作一目了然

文章起源 | 恒源云社区 原文地址 | 实例日志 新性能一:操作记录大家期盼已久的实例日志,终于上线了! 开关机、重启、镜像还原、初始化实例等操作,都能够在【实例治理】下的【操作记录】查看,再也无需通过账单回溯啦~在【操作记录】下,清晰显示了每个实例操作的工夫、内容、操作人等,助力大家掌控节奏,晋升训练的效率呢。 新性能二:镜像互动【镜像市场】除了提供镜像的分享和下载,为了激励大家互相交换,让优质的镜像被更多人应用,大家在逛市场时,能够对镜像进行【点赞】啦~ 同时,若想购买的镜像较多,收费50g不够用,大家能够先【珍藏】镜像,后续在【我的珍藏】里,进一步查看,理论须要时再进行购买,可能节俭不少空间呢! 新性能三:高校解决方案平台训练用户中,很大部分来自于各个高校,对此,平台专门为高校用户定制了算力解决方案——【高校解决方案】。 通过私有云/公有云的模式,为高校解决人工智能算力的问题,帮忙高校更好地发展教育科研工作~

December 8, 2021 · 1 min · jiezi

关于深度学习:恒源云语音识别与语义处理领域之-NAG-优化器

文章起源 | 恒源云社区(专一人工智能/深度学习云 GPU 服务器训练平台,官网体验网址:恒源智享云) 原文地址 | NAG优化器 原文作者 | 角灰 社区人才济济,小编明天又发现一个宝藏版主‘角灰’。 小编是个爱分享的人,看见好文章好作者怎能管制住不分享给大家呢?所以,接下来跟着小编我,一起疾速浏览一下文章内容吧! 注释开始最近在看fairseq源码时发现NAG优化器 (Nesterov Accelerate gradient)的实现与torch自带的有些许不一样,于是打算查下材料理解分明。 先回顾下Momentm,该梯度降落法引入动量的概念,应用对历史梯度进行滑动指数加权均匀,最早的梯度衰减的最快,对以后更新影响小;反之,越靠近以后的梯度对更新的影响越大,公式为:其中Vt、gt、g(t)别离代表t时刻的速度、梯度、模型参数,是动量系数,lr是学习率。该办法的思维是对网络参数进行平滑解决,让梯度的摆动幅度不要太大。 NAG相似Momentum,它们都是利用历史梯度来更新参数,区别在于,NAG先利用Vt,对t进行局部更新失去t+Vt,而后利用梯度g(t+Vt)更新失去t+1,其公式如下所示:此处是学习率。下图对Momentum和NAG作了形象解释:Momentum应用以后地位A处的速度Vt和梯度g(t)间接更新到目的地C;而NAG从A点先沿着惯性方向走一小步到B,此处距C很靠近了, 再利用B处的梯度g(t+Vt)更新到C。 论文中认为这样能够疾速更新V,使得Nag比momentum更稳固,且更适宜于大学习率的场景。除此之外,如果Nag用Vt更新到B点较差时,因为B点梯度g(t+Vt)比momentum的g(t)更大,因而Nag能更快往回修改到起始点A。 言归正传,这是torch.optim.SGD的公式和代码[1]:这是fairseq.optim.nag的公式和代码[2]:能够看出两者实际上还是有些不同,而Fairseq的nag实际上和论文的公式基本一致,[3]中有推导:其中的就是本文的动量系数,先对t+Vt做了代换失去t’后,最初将t’当成待更新的参数t,也就是每次更新的始终是t+Vt,对于这个的解释见下图及[4]:总之,nag优化器能减速收敛,且应用很大的学习率也很稳固,难怪fairseq外面ConvS2S能应用0.5的学习率。 [1]torch sgd[2]fairseq nag[3]深度学习中优化办法[4]CS231n Convolutional Neural Networks for Visual Recognition

December 8, 2021 · 1 min · jiezi

关于深度学习:恒源云opencv论文笔记

文章起源 | 恒源云社区 原文地址 | opencv 原文作者 | instter 不逛不晓得,一逛有惊喜!哈哈哈哈哈,顺手一翻,就看见一位版主在社区发的新论文笔记,开屏就是颜值暴击啊啊啊,就冲着这份暴击,我也得不辞辛苦的搬运进去给大家伙瞅一瞅,接下来,和小编一起观赏精彩内容吧! 注释开始一、opencv简介1 图像的起源1.1 图像是什么图像是人类视觉的根底,是天然风物的主观反映,是人类意识世界和人类自身的重要源泉。“图”是物体反射或透射光的散布,“像“是人的视觉零碎所承受的图在人脑中所形版的印象或意识,照片、绘画、剪贴画、地图、书法作品、手写汉学、传真、卫星云图、影视画面、X光片、脑电图、心电图等都是图像。—姚敏. 数字图像处理:机械工业出版社,2014年。1.2 模仿图像和数字图像图像起源于1826年前后法国科学家Joseph Nicéphore Niépce创造的第一张可永恒保留的照片,属于模仿图像。==模仿图像又称间断图像==,它通过某种物理量(如光、电等)的强弱变动来记录图像亮度信息,所以是间断变换的。模拟信号的特点是容易受烦扰,现在曾经根本全面被数字图像代替。 在第一次世界大战后,1921年美国科学家创造了Bartlane System,并从伦敦传到纽约传输了第一幅数字图像,==其亮度用离散数值示意==,将图片编码成5个灰度级,如下图所示,通过海底电缆进行传输。在发送端图片被编码并应用打孔带记录,通过零碎传输后在接管方应用非凡的打印机复原成图像。1950年左右,计算机被创造,数字图像处理学科正式诞生。模仿图像和数字图像的比照,咱们能够看一下: 2 数字图像的示意2.1 位数计算机采纳0/1编码的零碎,数字图像也是利用0/1来记录信息,咱们平时接触的图像都是8位数图像,蕴含0~255灰度,其中0,代表最黑,1,示意最白。人眼对灰度更敏感一些,在16位到32位之间。 2.2 图像的分类二值图像:一幅二值图像的二维矩阵仅由0、1两个值形成,“0”代表彩色,“1”代红色。因为每一像素(矩阵中每一元素)取值仅有0、1两种可能,所以计算机中二值图像的数据类型通常为1个二进制位。二值图像通常用于文字、线条图的扫描辨认(OCR)和掩膜图像的存储。 灰度图:每个像素只有一个采样色彩的图像,这类图像通常显示为从最暗彩色到最亮的红色的灰度,只管实践上这个采样能够任何色彩的不同深浅,甚至能够是不同亮度上的不同色彩。灰度图像与黑白图像不同,在计算机图像畛域中黑白图像只有彩色与红色两种色彩;然而,灰度图像在彩色与红色之间还有许多级的色彩深度。灰度图像常常是在单个电磁波频谱如可见光内测量每个像素的亮度失去的,用于显示的灰度图像通常用每个采样像素8位的非线性尺度来保留,这样能够有256级灰度(如果用16位,则有65536级)。 黑白图:每个像素通常是由红(R)、绿(G)、蓝(B)三个重量来示意的,重量介于(0,255)。RGB图像与索引图像一样都能够用来示意彩色图像。与索引图像一样,它别离用红(R)、绿(G)、蓝(B)三原色的组合来示意每个像素的色彩。但与索引图像不同的是,RGB图像每一个像素的色彩值(由RGB三原色示意)间接寄存在图像矩阵中,因为每一像素的色彩需由R、G、B三个重量来示意,M、N别离示意图像的行列数,三个M x N的二维矩阵别离示意各个像素的R、G、B三个色彩重量。RGB图像的数据类型个别为8位无符号整形,通常用于示意和寄存真彩色图像。 3 OPENCV-PYTHONOpenCV-Python是一个Python绑定库,旨在解决计算机视觉问题。 Python是一种由Guido van Rossum开发的通用编程语言,它很快就变得十分风行,次要是因为它的简略性和代码可读性。它使程序员可能用更少的代码行表达思想,而不会升高可读性。 与C / C++等语言相比,Python速度较慢。也就是说,Python能够应用C / C++轻松扩大,这使咱们能够在C / C++中编写计算密集型代码,并创立可用作Python模块的Python包装器。这给咱们带来了两个益处:首先,代码与原始C / C++代码一样快(因为它是在后盾工作的理论C++代码),其次,在Python中编写代码比应用C / C++更容易。OpenCV-Python是原始OpenCV C++实现的Python包装器。 OpenCV-Python应用Numpy,这是一个高度优化的数据库操作库,具备MATLAB格调的语法。所有OpenCV数组构造都转换为Numpy数组。这也使得与应用Numpy的其余库(如SciPy和Matplotlib)集成更容易。 3.1 OpenCV部署办法装置OpenCV之前须要先装置numpy, matplotlib。 创立Python虚拟环境cv, 在cv中装置即可。 先装置OpenCV-Python, 因为一些经典的算法被申请了版权,新版本有很大的限度,所以选用3.4.3以下的版本 pip install opencv-python==3.4.2.17当初能够测试下是否装置胜利,运行以下代码无报错则阐明装置胜利。 import cv2# 读一个图片并进行显示(图片门路需本人指定)lena=cv2.imread("1.jpg")cv2.imshow("image",lena)cv2.waitKey(0)如果咱们要利用SIFT和SURF等进行特征提取时,还须要装置: pip install opencv-contrib-python==3.4.2.173.2 OPENCV的模块下图列出了OpenCV中蕴含的各个模块: 其中core、highgui、imgproc是最根底的模块,该课程次要是围绕这几个模块开展的,别离介绍如下: core模块实现了最外围的数据结构及其根本运算,如绘图函数、数组操作相干函数等。highgui模块实现了视频与图像的读取、显示、存储等接口。imgproc模块实现了图像处理的根底办法,包含图像滤波、图像的几何变换、平滑、阈值宰割、形态学解决、边缘检测、指标检测、静止剖析和对象跟踪等。对于图像处理其余更高层次的方向及利用,OpenCV也有相干的模块实现 features2d模块用于提取图像特色以及特色匹配,nonfree模块实现了一些专利算法,如sift特色。objdetect模块实现了一些指标检测的性能,经典的基于Haar、LBP特色的人脸检测,基于HOG的行人、汽车等指标检测,分类器应用Cascade Classification(级联分类)和Latent SVM等。stitching模块实现了图像拼接性能。FLANN模块(Fast Library for Approximate Nearest Neighbors),蕴含疾速近似最近邻搜寻FLANN 和聚类Clustering算法。ml模块机器学习模块(SVM,决策树,Boosting等等)。photo模块蕴含图像修复和图像去噪两局部。video模块针对视频解决,如背景拆散,前景检测、对象跟踪等。calib3d模块即Calibration(校准)3D,这个模块次要是相机校准和三维重建相干的内容。蕴含了根本的多视角几何算法,单个平面摄像头标定,物体姿势预计,平面相似性算法,3D信息的重建等等。G-API模块蕴含超高效的图像处理pipeline引擎二、opencv基本操作1 图像的IO操作这里咱们会给大家介绍如何读取图像,如何显示图像和如何保留图像。 ...

December 3, 2021 · 2 min · jiezi

关于深度学习:恒源云CIFAR10数据集实战构建ResNet18神经网络

文章起源 | 恒源云社区 原文地址 | 数据集实战 原文作者 | Mathor 实不相瞒,小编我对平台社区内的大佬Mathor很崇拜!这不,明天又来给大家分享大佬论文笔记了,连忙看看接下来的内容是否有你们须要的知识点吧! 注释开始:如果不理解ResNet的同学能够先看我的这篇博客ResNet论文浏览 首先实现一个Residual Block import torchfrom torch import nnfrom torch.nn import functional as Fclass ResBlk(nn.Module): def __init__(self, ch_in, ch_out, stride=1): super(ResBlk, self).__init__() self.conv1 = nn.Conv2d(ch_in, ch_out, kernel_size=3, stride=stride, padding=1) self.bn1 = nn.BatchNorm2d(ch_out) self.conv2 = nn.Conv2d(ch_out, ch_out, kernel_size=3, stride=1, padding=1) self.bn2 = nn.BatchNorm2d(ch_out) if ch_out == ch_in: self.extra = nn.Sequential() else: self.extra = nn.Sequential( # 1×1的卷积作用是批改输出x的channel # [b, ch_in, h, w] => [b, ch_out, h, w] nn.Conv2d(ch_in, ch_out, kernel_size=1, stride=stride), nn.BatchNorm2d(ch_out), ) def forward(self, x): out = F.relu(self.bn1(self.conv1(x))) out = self.bn2(self.conv2(out)) # short cut out = self.extra(x) + out out = F.relu(out) return outBlock中进行了正则化解决,以使train过程更快更稳固。同时要思考,如果两元素的ch_in和ch_out不匹配,进行加法时会报错,因而须要判断一下,如果不想等,就用1×1的卷积调整一下 ...

December 2, 2021 · 4 min · jiezi

关于深度学习:恒源云分享一个技巧CV训练时容易忽视的数据标签问题

文章起源 | 恒源云社区 原文地址 | 数据标签问题 明天小编逛了一下社区,发现有位小伙伴分享的一个CV训练小技巧很有点内容,所以,小编立马快马加鞭的搬运过去给有趣味的小伙伴们看一看。 以下内容是原文内容:在训练检测模型时,面对万以上量级的数据,可能很多敌人只是随机抽样个几千张图看一下,而并不会仔细检查每一张图片anno是否正确。这时候可能会漠视一种常见的标签错位问题,本文将简要介绍该问题,心愿对大家有所帮忙。 这种问题个别呈现在手机拍摄的图片中,表象是:当你用PIL库读取图像时,会发现有些图像与检测框错位,直观上如果将图片旋转90 or 180 or 270度,正好能够和标签框对应上。 如果你的训练集有大量这种图,很可能导致训练后果不佳。 造成这种景象的起因是手机拍摄的图片很多都带了exif信息,其中蕴含了摄像头旋转角度信息。如果你用windows自带的看图软件关上图片,会发现图片会被旋转。opencv加载图片也是如此,会依据exif信息主动旋转(90、180、270度)。 同理,如果标注数据的工具读取该图片的时候依据exif信息做了旋转,eg:labelme,那么anno显然对应于旋转后的图片。 然而PIL库加载图片并不会主动解决exif信息,而很多开源模型在加载数据集时采纳的都是PIL库,从而影响训练成果。为了避免出现标签错位问题,通常有如下几种办法:1、所以应用pil读图须要留神该问题。尽量用cv2读取,切实要用pil,先cv2读取再转成pil。2、对pil读取的图片做exif信息查看 (在此之前img不能够调用convert(‘RGB’)操作,会失落exif信息。 def apply_exif_orientation(image, file): try: exif = image._getexif() except AttributeError: exif = None if exif is None: return image exif = { PIL.ExifTags.TAGS[k]: v for k, v in exif.items() if k in PIL.ExifTags.TAGS } orientation = exif.get('Orientation', None) if orientation == 1: # do nothing return image elif orientation == 2: # left-to-right mirror print('left-to-right mirror : {}'.format(file)) return PIL.ImageOps.mirror(image) elif orientation == 3: # rotate 180 print('rotate 180 : {}'.format(file)) return image.transpose(PIL.Image.ROTATE_180) elif orientation == 4: # top-to-bottom mirror print('top-to-bottom mirror : {}'.format(file)) return PIL.ImageOps.flip(image) elif orientation == 5: # top-to-left mirror print('top-to-left mirror : {}'.format(file)) return PIL.ImageOps.mirror(image.transpose(PIL.Image.ROTATE_270)) elif orientation == 6: # rotate 270 print('rotate 270 : {}'.format(file)) return image.transpose(PIL.Image.ROTATE_270) elif orientation == 7: # top-to-right mirror print('top-to-right mirror : {}'.format(file)) return PIL.ImageOps.mirror(image.transpose(PIL.Image.ROTATE_90)) elif orientation == 8: # rotate 90 print('rotate 90 : {}'.format(file)) return image.transpose(PIL.Image.ROTATE_90) else: return image3、对立用cv2等库对图片进行解决,去掉exif信息。而后再将图片交给标注团队进行打标。 ...

December 2, 2021 · 1 min · jiezi

关于深度学习:PixPro自监督论文解读

PixPro是第一个通过像素级比照学习来进行特色示意学习 上图是整个算法流程图,接下来进行具体解析 前向流传input是输出图像,维度尺寸是(b, c, h, w) augmentation:通过对同一张input进行随机大小、地位裁剪并缩放到对立大小224*224,并基于肯定概率下进行随机程度翻转、color distortion、高斯含糊和solarization操作,最初生成两张不同视图view #1和view #2,大小都是(b, c, 224, 224) backbone+projection:view #1和view #2别离送入两个网络分支,高低两分支中都含有雷同构造的backbone+projection模块,其中backbone模块应用了Resnet,输入最初一层特色图,大小为(b, c1, 7, 7)。 projection模块是一个conv1*1+BN+Relu+conv1*1构造,先进行升维,再降维到256大小,这样就失去了两个输入大小为(b, 256, 7, 7)的特色$x$和$x^{,}$,projection模块代码如下: class MLP2d(nn.Module): def __init__(self, in_dim, inner_dim=4096, out_dim=256): super(MLP2d, self).__init__() self.linear1 = conv1x1(in_dim, inner_dim) self.bn1 = nn.BatchNorm2d(inner_dim) self.relu1 = nn.ReLU(inplace=True) self.linear2 = conv1x1(inner_dim, out_dim) def forward(self, x): x = self.linear1(x) x = self.bn1(x) x = self.relu1(x) x = self.linear2(x) return x def conv1x1(in_planes, out_planes): """1x1 convolution""" return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=1, padding=0, bias=True)PPM:是一个自注意力模块,针对(b, 256, 7, 7)的输出特色图$x$ ...

November 29, 2021 · 3 min · jiezi

关于深度学习:恒源云训练一个专门捣乱的模型

文章起源 | 恒源云社区(专一人工智能/深度学习云 GPU 服务器训练平台,官网体验网址:https://gpushare.com/center/) 原文地址 | https://bbs.gpushare.com/topi... 原文作者 | Mathor 三位韩国人在EMNLP 2021 Findings上发表了一篇论文,名为Devil’s Advocate: Novel Boosting Ensemble Method from Psychological Findings for Text Classification,其中Devil’s Advocate有一部同名电影,翻译过去叫「魔鬼代言人」,他们次要挑战的是传统模型交融的办法,例如硬投票(Hard-Voting)、软投票(Soft Voting)、Bagging等。源码在HwiyeolJo/DevilsAdvocate 在群体决策过程中,大部分人会依据既定思维进行思考,而Devil’s Advocate是指那些提出的意见与大多数人不统一的那个人,Devil’s Advocate的存在能够激发群体的头脑风暴,突破固化思维。以上内容参考维基百科恶魔的代言人 ENSEMBLES在具体解说作者的办法前,先简略过一下常见的模型交融办法 Soft Voting软投票是对不同模型的预测分数进行加权均匀,例如有一个三分类问题,第一个模型对某个样本的预测概率为[0.2,0.1,0.7];第二个模型对该样本的预测概率为[0.2,0.6,0.2];第三个模型对该样本的预测概率为[0.1,0.7,0.2],假如三个模型的投票权重均为\( \frac{1}{3}\)则该样本最终的预测概率为所以最终这个样本被预测为第2类。不过事实上很多时候模型有好有坏,所以咱们的权重不肯定是均匀的,对于模型比拟厉害的模型,咱们会给他比拟大的话语权(投票权重) Hard Voting硬投票能够看作是软投票的一个变种,还是以下面三个模型预测的概率分布为例。第一个模型预测样本为第2类,第二、三个模型都认为样本是第2类,依据多数遵从少数准则,该样本就被认为是第2类 BaggingBagging办法的核心思想是「专制」。首先从训练集中有放回地随机采样一些样本,采样n次,训练出n个弱模型,利用这n个模型采纳投票的形式失去分类后果,如果是回归问题则是计算模型输入的均值作为最初的后果 BoostingBoosting的核心思想是「筛选精英」。Boosting与Bagging最实质的区别在于它对弱模型不是统一看待的,而是通过不停的考验和筛选来挑出「精英」,而后给精英更多的投票权,体现不好的模型则给较少的投票权 PROPOSED METHOD: DEVIL’S ADVOCATETraining Norm and DevAdv models无论你是用什么办法做模型交融,至多都须要2个以上的模型。作者提出的办法至多须要3个模型,这些模型会被分成两个营垒:Normal models 、Devil’s Advocate model (DevAdv) 首先咱们应用传统的Cross Entropy Loss训练\( Norm _n \)模型其中,\( Y_{Norm_n}\)是\( Norm _n \)模型的预测值,\( \mathbf{Y}_{\text{true}}\)是实在标签。与训练模型相同的是,咱们须要随机生成与实在标签不相交的谬误标签来训练DevAdv模型(不相交指的是没有任何一个样本的谬误标签和实在标签雷同),生成的谬误标签为\( Y_{false} \),DevAdv模型的损失函数定义如下:因为DevAdv模型是用谬误标签训练进去的,所以该模型充当了「魔鬼代言人」的角色,不批准其余模型的预测散布。特地地,咱们能够通过查看\( arg\min(Y_{DevAdv}) \)是否为实在标签来评估DevAdv模型的性能 留神下面的函数是\( \arg \min \),不是\( \arg \max \),因为\( \arg \max \)求很显著预测后果大部分是\( Y_{false} \),但如果实在类别被预测的概率为最小,即通过\( \arg \min \)取到,咱们就认为DevAdv十分会捣鬼Group Discussion: Fine-tuning我看到这个题目的时候感觉很奇怪,这又不是预训练模型,怎么会有Fine-tuning阶段?认真看了他们的代码之后才明确,他这个名字起的不好,不应该叫Fine-tuning,应该叫为Discussing或者Ensembles,即模型交融阶段。具体来说,之前咱们曾经把所有的模型都训练一遍了,接下来咱们须要把DevAdv引入进来再训练一遍\( Norm _n \)模型。特地地,以后阶段只会更新\( Norm _n \)模型的参数,DevAdv模型的参数不会进行更新 ...

November 25, 2021 · 1 min · jiezi

关于深度学习:恒源云云GPU服务器如何使用VSCode

文章起源 | 恒源云社区(专一人工智能/深度学习云 GPU 服务器训练平台,十一月宠粉流动 ing,官网体验网址:https://gpushare.com/ ) 原文地址 | https://gpushare.com/docs/best_practices/vscode/ VSCodeVSCode 是微软开发的一款跨平台代码编辑器,收费、开源并且反对扩大插件。应用 Remote 插件能够连贯到近程服务器上进行开发。 装置扩大侧边栏点击 扩大 标签,搜寻 Remote - SSH 插件点击装置。如果须要应用中文界面,再装置 Chinese (Simplified) 插件,重启后可显示中文。 增加近程主机装置扩大后在侧边栏点击 近程资源管理器 标签,点击加号按钮增加近程主机。 在 我的实例 中点击复制登陆指令。将复制的登陆指令粘贴,输出 「Enter」。近程主机信息会保留在本地配置文件中,抉择第 1 个配置文件实现增加。 连贯近程主机增加实现后在 近程资源管理器 中显示刚增加的近程主机。点击在新窗口中关上连贯的按钮。在新弹出的窗口中抉择 Linux 零碎。提醒主机密钥指纹,抉择 Continue。在 我的实例 中点击复制登陆密码。将复制的登陆密码粘贴,输出 「Enter」。胜利连贯后点击 资源管理器 标签会显示已连贯到近程。同时左下角提醒已连贯的近程主机名称。 提醒如果连贯提醒“试图写入的管道不存在”,可能是 Windows 自带的 SSH 问题。能够通过装置 Git,而后在 VSCode 首选项 - 设置中搜寻 remote.SSH.path,填写 C:\Program Files\Git\usr\bin\ssh.exe 让 VSCode 应用 Git 提供的 SSH 客户端。应用近程主机点击左下角的问题图标,再点击 终端 标签。关上的终端主动登录到近程服务器。应用 mkdir example 创立一个文件夹用于编写代码。点击关上 关上文件夹,抉择刚刚创立的 example 文件夹,点击确定。关上后资源管理器中显示的是近程主机的文件,能够在当前工作区创立编辑代码。在终端窗口中执行命令运行代码。当应用实现须要退出时,点击左下角蓝色 SSH 主机名。抉择 敞开近程连贯。VSCode 官网文档:Remote Development using SSH

November 24, 2021 · 1 min · jiezi

关于深度学习:恒源云长尾分布的多标签文本分类平衡方法论文学习笔记

文章起源 | 恒源云社区(专一人工智能/深度学习云GPU服务器训练平台,官网体验网址:https://gpushare.com/center/) 原文地址 | https://bbs.gpushare.com/topi... 原文作者 | Mathor 长尾散布各位必定并不生疏,指的是少数几个类别却有大量样本,而大部分类别都只有大量样本的状况,如下图所示 通常咱们探讨长尾散布或者是文本分类的时候只思考单标签,即一个样本只对应一个标签,但实际上多标签在理论利用中也十分常见,例如个人爱好的汇合一共有6个元素:静止、游览、读书、工作、睡觉、美食,个别状况下,一个人的喜好有这其中的一个或多个,这就是典型的多标签分类工作 EMNLP2021上有一篇名为Balancing Methods for Multi-label Text Classification with Long-Tailed Class Distribution的论文具体探讨了各种均衡损失函数对于多标签分类问题的成果,从最后的BCE Loss到Focal Loss等,感觉这篇文章更像是均衡损失函数的综述。源码在Roche/BalancedLossNLP LOSS FUNCTIONS在NLP畛域,二值化穿插熵损失(Binary Cross Entropy Loss)常被用来解决多标签文本分类问题,给定一个含有N个样本的训练集,其中,C是类别数量,假如模型对于某个样本的输入为,则BCE损失的定义如下:其中,,对于多标签分类问题来说咱们须要将模型的输入值压缩到[0,1]之间,所以须要用到sigmoid函数 本来单标签问题,实在值相当于一个onehot向量,而对于多标签来说,实在值相当于一个onehot向量中多了一些1,例如[0,1,0,1],示意该样本同时是第1类和第3类这种奢侈的BCE非常容易收到标签不均衡的影响,因为头部样本比拟多,可能所有头部样本的损失总和为100,尾部所有样本的损失加起来都不超过10。上面,咱们介绍三种代替办法解决多标签文本分类中长尾数据的类别不平衡问题。这些均衡办法次要思维是从新加权BCE,使常见的样本-标签对失去正当的"关注" Focal Loss (FL)通过在BCE上乘一个可调整的聚焦参数,Focal Loss将更高的损失权重放在"难分类"的样本上,这些样本对其实在值的预测概率很低。对于多标签分类工作,Focal Loss定义如下:实际上论文对于Focal Loss的介绍只有这么多,如果想理解Focal Loss更具体的参数介绍,能够看我的这篇文章Focal Loss详解 Class-balanced focal loss (CB)通过预计无效样本数,CB Loss进一步从新加权Focal Loss以捕获数据的边际递加效应,缩小了头部样本的冗余信息。对于多标签工作,咱们首先计算出每品种别的频率,那么对于每个类别来说,都有其均衡项其中,管制着无效样本数量的增长速度,损失函数变为 Distribution-balanced loss (DB)通过整合再均衡权重以及头部样本容忍正则化(negative tolerant regularization, NTR),Distribution-balanced Loss首先缩小了标签共现的冗余信息(这在多标签分类的状况下是很要害的),而后对"容易分类的"样本(头部样本)调配较低的权重 首先,为了从新均衡权重,在单标签的状况下,一个样本能够通过采样概率来加权,然而在多标签的状况下,如果采纳同样的策略,一个具备多标签的样本会被适度采样,概率是。因而,咱们须要联合两者从新均衡权重咱们能够将上述权重变得更润滑一些(有界)此时,的值域为。rebalanced-FL (R-FL) 损失函数为而后,NTR对同一标签头部和尾部样本进行不同的解决,引入一个比例因子和一个外在的特定类别偏差以升高尾部类别的阈值,防止适度克制对于尾部样本来说,;对于头部样本来说,。能够在训练开始时最小化损失函数来预计,其比例系数为\kappa,类别先验信息,则最终,通过整合再均衡权重以及NTR,Distribution-balanced Loss为 RESULT作者试验的两个数据集如下应用的模型为SVM,比照不同损失函数的成果 集体总结这篇论文,翻新了但又没翻新,所有的损失函数都是他人提出来的,本人的工作只是在多标签数据集上跑了一遍做了个比照。最初,纯爱兵士示意很淦

November 23, 2021 · 1 min · jiezi

关于深度学习:循环神经网络

为什么须要循环神经网络\( CNN \)的数据表示能力曾经十分强悍了,然而世界是简单的,对于很多数据,如文本,语音,视频,机器翻译等,数据的输出程序十分重要,而卷积是不在乎文本程序的。循环神经网络的每个输出会与它之前或之后的输出存在关联。 RNN $$h_t = \sigma(W_{ih}x_t + b_{ih} + W_{hh}h_{t-1} +b_{hh}) $$ 长处是有肯定的记忆能力,然而随着递归次数的减少,会呈现权重指数级爆炸或者隐没的问题,从而难以捕获长时间的关联,并且导致\( RNN \)的收敛艰难,因而引出\( LSTM \)。 LSTM计算过程如下,MARKDOWN罕用公式键入语法 $$\begin{aligned}i_t &= \sigma(W_{ii}x_t + b_{ii}+W_{hi}h_{t-1}+b_{hi}) \\f_t &= \sigma(W_{if}x_t + b_{if}+W_{hf}h_{t-1}+b_{hf}) \\g_t &= \tanh(W_{ig}x_t + b_{ig}+W_{hg}h_{t-1}+b_{hg}) \\o_t &= \sigma(W_{io}x_t + b_{io}+W_{ho}h_{t-1}+b_{ho}) \\c_t &= f_t{\times}c_{t-1} + i_t{\times}g_t \\h_t &= c_t{\times}\tanh(o_t) \end{aligned}$$ \( i_t,f_t,g_t,o_t \)别离是输出门、忘记门、抉择门、和输入门。\( LSTM \)在信息处理方面次要分为三个阶段: 忘记阶段。这个阶段次要是对上一个结点传递进来的输出进行选择性遗记,会“忘记不重要的,记住重要的”。即通过\( f_t \)的值来管制上一状态\( c_{t-1} \)中那些须要记住,哪些须要忘记。抉择记忆阶段。这个阶段将输出\( X_t \)有抉择的进行“记忆”。哪些重要则着重记忆,哪些不重要的则缩小记录。以后单元的输出内容\( i_t \)是计算失去的,能够通过\( g_t \)进行有抉择的输入.输入阶段。这个阶段将决定哪些会被当成以后状态的输入。次要通过\( o_t \)进行管制,并且要对\( c_t \)应用\( tanh \)函数进行缩放。 ...

November 23, 2021 · 1 min · jiezi

关于深度学习:触碰心灵的话

一、不开心时,做个深呼吸,不过是蹩脚的一天而已,又不是蹩脚一辈子。 二、情绪就像衣服,脏了就拿去洗洗,晒晒阳光天然就会蔓延开来,阳光那么好何必自寻烦恼。 三、在这个滥情的年代,一声“敬爱的”充其量也就是个你好,一句“下次请你吃饭”顶多算个谢谢,何必太认真。 四、每个人都会累,没人能为你承当所有的伤悲,人总有那么一段时间要学会本人长大。 五、生存不是林黛玉,不会因为难过而风情万种。 六、随着年龄的增长,咱们更加发现,或者咱们并不是失去了一些人,而是更加懂得到底谁才是最重要的人。 七、懒于解释,也无谓是否做个坏蛋,活得不尽纯正,至多要过得干净利落。 八、天空没有停不了的阴雨,只有放不下的回顾;人生没有过不去的经验,只有走不出的本人。没必要总是抱怨本人,致力了、珍惜了、心安理得就好! 九、没必要刻意遇见谁,也不急于遇见谁,更不勉强留住谁,所有顺其自然,最好的本人留给值得珍惜的人。 十、变心是本能,虔诚是抉择,很开心你能来,不遗憾你走开,不能相濡以沫,那就相忘于江湖,从此,一别两宽,各生欢喜。 十一、那些曾经来到的人,不要见,不再贱。与其被感情捆绑住本人,患得患失眷恋旧情,不如趁着年老,致力挣钱,好好生存。 十二、起初,咱们揣着糊涂装明确。起初,咱们揣着明确装糊涂。并不是咱们违心活得不明不白。只是,好多事件,一使劲,就会戳穿,一戳穿,就会失去。成人的世界,总是这么软弱。 十三、遇见的人多了,你才会明确哪些人值得用生命去珍惜,哪些人只适宜绕道而行。 十四、生命,就是一场不留余地的盛放。心安,便是活着的最美妙状态。平淡是生存的主线,精彩是人生的装点。且宁静,且放低,且自在,不张扬,也不颓丧,这就是生存。 十五、我并不期待人生能够过得很顺利,但我心愿碰到人生难关的时候,本人能够是它的对手。 十六、不要总想着有人能与咱们并肩前行,因为大多数人都只是擦肩而过,“成长”的路上,咱们始终单独行走。 十七、没有谁离不开谁,离不开的只有影子。没有谁放不下谁,放不下的只是心结。 十八、多花一些工夫理解本人,少花一些工夫在应酬别人身上。因为最初,可能给你提供最无利帮忙的人,除了你本人,没有他人。 十九、无论你遇见谁,他都是你生命该呈现的人,绝非偶尔,他肯定会教会你一些什么。 二十、世界能够无聊,但你要乏味,生存可能不如意,但你要过得有诗意。 二十一、你必须给你本人安全感,如果钱能给你安全感,就致力去赚钱。如果被爱能给你安全感,那就致力变成一个值得被爱的人。 二十二、拾掇起情绪,持续走吧,错过花,你将播种雨,错过这一个,你才会遇到下一个。 二十三、你还年老,又如此凶恶,值得领有更好的,筹备好本人,肯定会有人爱,你要等。 二十四、有一天,蓦然回首,你会发现,那些有数让你解体的时刻,你都挺过去了,一个人,其实也能够很好。 二十五、任何打击都不应该成为你腐化的借口,你扭转不了这个世界,但你能够扭转本人。 二十六、你纵情的糟践本人,疼爱的是爱你的人,那个让你变成这样的人是不会内疚的,说不定还在背地讥笑你,讥刺你,所以,麻烦把眼泪收一收,不要丢人现眼。 二十七、不沉迷于空想,不茫然于将来,走明天的路,过当下的生存。

November 21, 2021 · 1 min · jiezi

关于深度学习:如何设计一个高内聚低耦合的模块MegEngine-中自定义-Op-系统的实践经验

作者:褚超群 | 旷视科技 MegEngine 架构师背景介绍在算法钻研的过程中,算法同学们可能常常会尝试定义各种新的神经网络层(neural network layer),比方 Layer Norm,Deformable Conv 等。为了实现这些层以进行试验,算法同学能够应用神经网络框架或者 numpy 中提供的根底操作(如张量/标量的加减乘除等)去组合出所需的层的性能。然而这通常会造成这些层的性能断崖式的上涨,大大影响了算法同学们尝试新算法的效率。所以很多状况下,算法同学们会抉择为本人定义的层实现高性能的 kernel,并心愿能够将之集成入框架作为框架中的 Op(Operator) 应用。 然而在个别状况下,算法同学必须要对框架自身非常理解,才能够灵便自在的将咱们的 kernel 接入框架中去应用。但这并不是一件简略的事,神经网络框架作为一个规模宏大的零碎,其构造之简单远超常规的软件我的项目。为了保障这样的机器学习零碎的可维护性以及可拓展性,零碎中往往会做各种各样的档次,模块设计,并对各种概念(比方 Op)进行形象,各个档次各个模块间的交互又非常复杂。 以 MegEngine 中的 Op 零碎为例,图 1 中展现 Op 这一最根本的概念在 MegEngine 中不同层的各种形象。 图 1:MegEngine 中不同档次的 Operator 的形象 在底层的 MegDNN 算子库中,Op 被形象成了 MegDNNOpr 类,其中封装了各个 Op 在 x86,nvidia gpu 等硬件平台上的具体 kernel 实现以及相干硬件的 context 治理。在动态图(graph runtime)中,Op 被形象成了 OpNode 类,其次要目标并非是用于计算而是图优化,故而这个数据结构的设计上又有了相当多这方面的考量。在动态图(imperative runtime)中,Op 又会被形象为 OpDef 类,配合动态图解释器进行工作的调度。在 python 中,Op 会被封装成 functional 和 module,这才是合乎个别算法同学认知的 Op。而从 python 中执行一个操作时,这些 Op 会逐层向下调用,别离在每一层实现一部分工作,直到最初才调用了 MegDNN 算子库中具体的 kernel。这个过程中,任何一个档次的 Op 概念都是缺一不可的。其实不只是 Op,包含 Tensor 在内的很多其余概念,在 MegEngine 零碎中都存在着相似的多种形象。学习理解这样的一个框架设计须要破费大量的工夫和精力,这个代价往往是算法同学难以承受的。 ...

November 18, 2021 · 5 min · jiezi

关于深度学习:恒源云-基于梯度的-NLP-对抗攻击方法

文章起源 | 恒源云社区(专一人工智能/深度学习云GPU服务器训练平台,官网体验网址:gpushare.com/ ) 原文地址 | https://bbs.gpushare.com/topic/707/%E5%9F%BA%E4%BA%8E%E6%A2%AF%E5%BA%A6%E7%9A%84nlp%E5%AF%B9%E6%8A%97%E6%94%BB%E5%87%BB%E6%96%B9%E6%B3%95?_=1637048101498 原文作者 | Mathor 前言:Facebook提出了一种NLP通用的攻打办法,而且能够通过梯度优化,论文发表在EMNLP2021,名为Gradient-based Adversarial Attacks against Text Transformers,源码在facebookresearch/text-adversarial-attack BACKGROUND咱们首先定义模型\( h:\mathcal{X}\to \mathcal{Y} \),其中\( \mathcal{X} \)和\( \mathcal{Y} \)别离是输入输出集。设测试样本\( \mathbf{x}\in \mathcal{X} \)被模型正确预测为标签\( y \),则有\( y=h(\mathbf{x})\in \mathcal{Y} \)。如果一个与\( \mathbf{x} \)有限靠近的反抗样本\( \mathbf{x}^{\prime} \) 使得\( h(\mathbf{x}^{\prime})\neq y \),则\( \mathbf{x}^{\prime} \)是一个好的反抗样本。咱们能够通过定义函数\( \rho: \mathcal{X}\times \mathcal{X} \to \mathbb{R}_{\ge 0} \) 来量化\( \mathbf{x} \)和\( \mathbf{x}^{\prime} \)的靠近水平。设阈值\( \epsilon > 0 \),如果\( \rho (\mathbf{x},\mathbf{x}^{\prime})\leq \epsilon \),则认为反抗样本\( \mathbf{x}^{\prime} \) 与样本\( \mathbf{x} \)十分靠近 寻找反抗样本的过程通过被视为一个优化问题,例如对于分类问题来说,模型\( h \)输入一个logits向量\( \phi_h(\mathbf{x})\in \mathbb{R}^K \) ,使得\( y = \arg \max_k \phi_h(\mathbf{x})_k \) ,为了使得模型预测谬误,咱们能够将margin loss选作反抗损失: ...

November 17, 2021 · 2 min · jiezi

关于深度学习:恒源云云GPU服务器如何使用-TensorBoard

文章起源 | 恒源云社区(专一人工智能/深度学习云 GPU 服务器训练平台,官网体验网址:https://gpushare.com/docs/bes... 原文地址 | https://gpushare.com/docs/bes... TensorBoardTensorBoard 是用于提供机器学习工作流程期间所需的测量和可视化的工具。 它使您可能跟踪试验指标,例如损失和准确性,可视化模型图,将嵌入物投影到较低维度的空间等等。 创立一个镜像为 TensorFlow 2 的实例,当创立实例并启动后,能够在实例列表中点击链接关上 JupyterLab。运行 开始应用 TensorBoard 中的笔记本代码。 首先下载 get_started.ipynb 记事本文件。通过 JupyterLab 上传到服务器中。 双击文件关上记事本,在右方工作区能够看到记事本中的代码内容。 实例曾经提供了启动好的 TensorBoard,所以代码中有 2 处启动 tensorboard 的命令须要加 # 正文掉。 代码中有一段文本被标识为代码的谬误须要修改,点击下图中地位代码块后方的区域选中,在上方将代码批改为 Markdown。 在菜单中选择 运行 - 运行所有单元格,即运行全副代码。 期待全副单元格运行实现,右键生成的 logs 文件夹抉择剪切。 实例内 TensorBoard 读取的文件夹是 /tb_logs 文件夹,右键粘贴到此目录。 在实例列表中点击链接关上 TensorBoard。 正告⚠️局部新版本的 TensorBoard 在 Safari 浏览器下可能显示白屏,须要应用 Chrome 关上。 关上后能够看到方才运行代码后得出的后果。 在实际操作过程中,能够让程序间接输入后果到 /tb_logs 文件夹中。也能够在 /tb_logs 文件夹下建设一个软连贯指向理论训练的后果目录。

November 15, 2021 · 1 min · jiezi

关于深度学习:人工智能-deepface-换脸技术-学习

介绍 Deepface是一个轻量级的python人脸识别和人脸属性剖析(年龄、性别、情感和种族)框架。它是一种混合人脸识别框架缠绕状态的最先进的模型:VGG-Face,Google FaceNet,OpenFace,Facebook DeepFace,DeepID,ArcFace和Dlib。那些模型曾经达到并通过了人类程度的准确性。该库次要基于 TensorFlow 和 Keras。 环境筹备与装置 我的项目地址: https://github.com/serengil/d... pycharm环境下载: https://www.jetbrains.com/pyc... conda虚拟环境: https://www.anaconda.com/prod... 数据集: https://github.com/serengil/d...\_models/releases/download/v1.0/vgg\_face\_weights.h5 https://github.com/serengil/d...\_models/releases/download/v1.0/facial\_expression\_model\_weights.h5 https://github.com/serengil/d...\_models/releases/download/v1.0/age\_model\_weights.h5 https://github.com/serengil/d...\_models/releases/download/v1.0/gender\_model\_weights.h5 https://github.com/serengil/d...\_models/releases/download/v1.0/race\_model\_single\_batch.h5 创立我的项目 应用关上我的项目目录后,创立时应用conda的Python 3.9虚拟环境 装置pip依赖 创立实现后,在cmd中查看现有的虚拟环境,并进入刚刚创立的虚拟环境 conda env list activate pythonProject 进入环境后在进行装置pip所需依赖,并应用国内源进行装置实现下载减速 pip install deepface -i https://pypi.tuna.tsinghua.ed... 应用 面部验证 此性能验证同一人或不同人员的面部对。它冀望准确的图像门路作为输出。也欢送通过轻便或基于 64 编码的图像。 cd C:\Users\Administrator\PycharmProjects\pythonProject\tests\datasetfrom deepface import DeepFaceresult = DeepFace.verify(img1_path = "img1.jpg", img2_path = "img2.jpg")会主动下载数据集,若无奈下载数据集 能够提前下载好数据集,放入到 C:\Users\Administrator.deepface\weights\ 目录下 面部属性剖析 Deepface还装备了一个弱小的面部属性剖析模块,包含年龄,性别,面部表情(包含愤恨,恐怖,中性,悲伤,讨厌,高兴和惊喜)和种族(包含亚洲,白人,中东,印度,拉丁和彩色)预测。 from deepface import DeepFaceobj = DeepFace.analyze(img_path = "img4.jpg", actions = ['age', 'gender', 'race', 'emotion'])会主动下载数据集,若无奈下载数据集 ...

November 13, 2021 · 1 min · jiezi

关于深度学习:使用Plotly进行绘图的练习

先占个坑过两天来练习https://blog.csdn.net/weixin_...

November 10, 2021 · 1 min · jiezi

关于深度学习:恒源云云-GPU-服务器如何使用-Conda

文章起源 | 恒源云社区(专一人工智能/深度学习云GPU服务器训练平台,官网体验网址:https://gpushare.com/ 原文地址 | Conda - 恒源云用户文档 CondaConda 是包依赖和虚拟环境治理的工具,零碎镜像装置了 miniconda。 虚拟环境⚠️ 正告实例内磁盘空间有容量限度,因虚拟环境装置软件包须要容量较大,倡议将虚拟空间地位放到共享空间 /hy-nas (有共享存储机型) 或 /hy-tmp 本地盘下。# 查看所有虚拟环境conda env list# 创立 Python 3.9 的虚拟环境,地位为 /hy-tmp/myenvconda create -p /hy-tmp/myenv python=3.9# 激活虚拟环境conda activate /hy-tmp/myenv# 退出虚拟环境conda deactivate## 删除虚拟环境conda remove -p /hy-tmp/myenv --all 提醒登陆终端默认勾销了主动进入 base 环境,如果心愿登陆后间接进入 base 环境,须要执行 conda config --set auto_activate_base true。包治理 提醒装置如 PyTorch 等框架时请严格参考官方网站的装置阐明,同一个版本可能反对多种 CUDA 版本。RTX 3000 系列显卡仅反对 CUDA 11 及以上版本,须要留神指定 cudatoolkit 这个包的版本。在 /root/.condarc 中曾经配置了镜像源。留神装置 PyTorch 时不要在结尾指定 -c pytorch,如果指定了依然会从官网源下载。 # 激活虚拟环境conda activate /hy-tmp/myenv# 搜寻软件包conda search spacy# 装置软件包conda install spacy=2.3.5## 查看已装置好的包conda listJupyterLabJupyterLab 默认应用的是实例镜像中的零碎 Python。如果须要通过 Notebook 应用虚拟环境,须要在虚拟环境中装置 ipykernel。 ...

November 10, 2021 · 1 min · jiezi

关于深度学习:模型推理ncnn-模型转换及量化流程

 欢送关注我的公众号 [极智视界],回复001获取Google编程标准 O_o >_<  o_O O_o ~_~ o_O 本文介绍一下 ncnn 模型转换及量化流程,以 from_darknet yolov4 为例。   对于 ncnn 的 ubuntu 和 windows 装置办法能够参考我之前写的:《【嵌入式AI】ubuntu 装置 ncnn》、《【教训分享】win10 qmake 构建 ncnn vs 工程》。 1、模型转换./darknet2ncnn yolov4.cfg yolov4.weights yolov4.param yolov4.bin 1   开端 1 示意三个 yolo 分支合并,若为 0 示意三个 yolo 分支独立输入。 2、图优化./ncnnoptimize yolov4.param yolov4.bin yolov4-opt.param yolov4-opt.bin 03、int8 量化3.1 优化模型./ncnnoptimize yolov4.param yolov4.bin yolov4-opt.param yolov4-opt.bin 03.2 创立校准表find images/ -type f > imagelist.txt./ncnn2table yolov4-opt.param yolov4-opt.bin imagelist.txt yolov4.table mean=[104,117,123] norm=[0.017,0.017,0.017] shape=[224,224,3] pixel=BGR thread=8 method=kl3.3 量化模型./ncnn2int8 yolov4-opt.param yolov4-opt.bin yolov4-int8.param yolov4-int8.bin yolov4.table3.4 加载 int8 模型进行推理ncnn::Net yolov4;yolov4.load_param("yolov4-int8.param");yolov4.load_model("yolov4-int8.bin");...ncnn::Extractor ex = yolov4.create_extractor();ex.input("data", in);ex.extract("output", out);...  以上以很简洁的形式分享了一下 ncnn from_darknet 的模型转换及量化推理流程。心愿会对你的学习有一些帮忙。 ...

November 9, 2021 · 1 min · jiezi

关于深度学习:恒源云Child-Tuning-反向传播版的Dropout

文章起源 | 恒源云社区(专一人工智能/深度学习云GPU服务器训练平台,官网体验网址:gpushare.com/ ) 原文地址 |https://bbs.gpushare.com/topic/693/child-tuning-%E5%8F%8D%E5%90%91%E4%BC%A0%E6%92%AD%E7%89%88%E7%9A%84dropout?_=1636359613997 这篇文章次要是对EMNLP2021上的论文Raise a Child in Large Language Model: Towards Effective and Generalizable Fine-tuning进行解说。论文题目有些形象,然而用作者的话来说,这篇论文的思维能够归结为两个词:Child Tuning 尽管这篇文章次要针对NLP工作以及NLP相干的模型,但实际上我看完之后感觉这是一个通用的办法,CV畛域也能够应用。具体来说,目前预训练模型的参数十分大,在上游工作中,咱们只能用无限的训练集对模型进行微调,有一种螳臂当车的感觉,因而作者提出了一种新的微调办法——Child Tuning。如果用一句话概述其思维那就是:在反向流传过程中,咱们不必更新所有的参数,只更新某些参数即可,而这些被更新的参数所对应的网络结构,咱们叫做Child Network(子网络) 如上图所示,下面一行是失常的反向流传过程,其中 下标0不是指某一个参数,而是指第0个迭代过程,\(\eta\)是学习率。对于上面一行来说,\(w _0\)有一部分被MASK掉了,导致这外面的梯度为0 其中,\(M\)矩阵内的元素非0即1,\(\odot\)是矩阵内的元素做对应地位相乘。咱们能够用两步来概括Child Tuning的过程: 在预训练模型中发现并确认Child Network,并生成对应Weights的0-1 MASK反向流传计算完梯度后,仅对Child Network中的参数进行更新所以当初的问题是如何确认Child Network? HOW TO FIND CHILD NETWORK?实际上咱们并不需要真的找到Child Network,只有确定矩阵\(M\)即可。论文提供了两种算法用于生成矩阵\(M\),别离是工作无关算法Child_Tuning_F (F for Task-Free)以及与具体任务相干的算法Child_Tuning_D (D for Task-Drivern) Child_Tuning_F工作无关算法的意思是与你具体所做的具体任务没有关系,都能够应用这个算法,是一种通用的办法。具体来说,此时\(M\)是依据伯努利散布生成的 其中\(p_F\in [0,1]\)是一个超参数,他管制着Child Network的大小,如果\(p_F=1\),则Child Network就是原网络,此时Child Tuning就是Fine Tuning;如果\(p_F=0\),则没有任何参数会被更新。上面是我写的一个简略模仿的代码帮忙大家了解 import torchfrom torch.distributions.bernoulli import Bernoulligradient = torch.randn((3, 4)) # 这里用一个随机生成的矩阵来代表梯度p_F = 0.2gradient_mask = Bernoulli(gradient.new_full(size=gradien.size(), fill_value=p_F))gradient_mask = gradient_mask.sample() / p_F # 除以p_F是为了保障梯度的冀望不变print(gradient_mask)gradient *= gradient_maskprint(gradient)Bernoulli是一个类,生成的gradient_mask是一个对象,咱们须要调用这个对象的sample()办法能力失去一个矩阵。其中比拟重要的一点是尽管咱们失去了0-1 MASK,但咱们须要将这个MASK内所有的1扩充\(1/p_F\)倍以维持梯度的期望值 ...

November 8, 2021 · 2 min · jiezi

关于深度学习:恒源云-云-GPU-服务器如何使用-Tmux

文章起源 | 恒源云社区(专一人工智能/深度学习云GPU服务器训练平台,官网体验网址:https://gpushare.com/ ) 原文地址 |https://gpushare.com/docs/bes... TmuxTmux 是一款能够治理会话和分屏的终端复用器。在近程 SSH 断开后能够继续执行工作,从新连贯后再持续会话。也可能将过程放到后盾运行,须要时从新接管。为了避免 SSH 因网络断开造成的过程运行中断,举荐把所有须要长期运行的训练等工作都应用 Tmux 终端。 官网镜像中曾经装置了 tmux 工具,能够间接应用命令。首先创立一个会话。 执行命令 tmux 会创立一个编号为 0 的会话,再次创立会话的编号会向后排列。执行 tmux new -s <session-name> 能够创立一个自定义名称的会话。如创立一个名称为 session1 的会话: tmux new -s session1执行后进入到新创建的 session1 会话中,在底部会显示以后会话的信息。 进入会话后能够执行一些长时间运行的命令。当须要退出该会话,将会话放在后盾运行时。能够执行 tmux detach 命令,或应用快捷键 「^Ctrl」 + 「B」,再按 D 来退出会话。退出会话后底部会话信息会隐没,并提醒已从会话退出。 应用 tmux ls 命令能够查看以后所有的会话。 须要复原会话时,应用 tmux a -t <session-name>,从新进入之前的会话中,如进入方才名称为 session1 的会话: tmux a -t session1须要删除会话时。如果以后在会话当中,能够应用 「^Ctrl」 + 「D」 或执行 logout 退出 SSH 登陆,即终止以后会话。在不在会话中时能够执行下列命令来删除会话。 # 删除指定会话tmux kill-session -t session1# 删除所有会话tmux kill-server

November 5, 2021 · 1 min · jiezi

关于深度学习:恒源云CAN-借助数据分布提升分类性能

文章起源 | 恒源云社区(专一人工智能/深度学习GPU收费减速平台,官网体验网址:https://gpushare.com) 原文作者 | Mathor 原文地址 | https://gpushare.com/forum/topic/683/can-%E5%80%9F%E5%8A%A9%E6%95%B0%E6%8D%AE%E5%88%86%E5%B8%83%E6%8F%90%E5%8D%87%E5%88%86%E7%B1%BB%E6%80%A7%E8%83%BD?_=1635993190297 本文将介绍一种用于分类问题的后处理技巧(Trick),出自EMNLP 2021 Findings的一篇论文《When in Doubt: Improving Classification Performance with Alternating Normalization》。通过实测,CAN(Classification with Alternating Normalization)的确少数状况下能晋升多分类问题的成果(CV、NLP通用),而且简直没有减少预测老本,因为它仅仅只是对预测后果的从新归一化操作 CAN的思维乏味的是,其实CAN的思维十分奢侈,奢侈到咱们每个人简直都用过。具体来说,假如考试中有10道选择题,前9道你都比拟有信念,第10题齐全不会只能瞎蒙,然而你发现后面9题选A、B、C、D的比例是3:3:2:2,那么第10题在蒙的时候,你会不会更偏向于C和D?如果是更极其的状况,你发现后面9题选A、B、C的都有,但就是没有选D的,那你蒙第10题的时候,会不会更偏向于D? 回到分类工作上,假如当初有一个二分类问题,模型对于输出aaa给出的预测后果是\(p^{(a)}=[0.05,0.95]\),那么咱们就能够给出预测类别为1;接下来,对于输出bbb,模型给出的预测后果是\(p^{(b)}=[0.5,0.5]\),这种后果是最不确定的,咱们也不晓得应该输入哪个类别 然而,如果我通知你: 类别必然是0或1其中之一两个类别呈现的概率各为0.5在已知这两点「先验」信息的状况下,因为前一个样本的预测后果为1,那么基于奢侈的平均思维,咱们是否会更偏向于将后一个样本预测为0,以失去一个满足第二点「先验」的预测后果? 这些简略的例子背地,有着跟CAN同样的思维,其实就是用「先验散布」来校对「低置信度」的预测后果,使得新的预测后果的散布更靠近先验散布 TOP-K熵精确地说,CAN是针对低置信度预测后果的后处理伎俩,所以咱们首先要有一个掂量预测后果不确定性的指标。常见的度量是「熵」,对于\(p=[p_1,p_2,…,p_m]\) ,定义为 尽管熵是一个常见的抉择,但其实它得出的后果并不总是合乎咱们的直观了解。例如对于\(p^{(a)}=[0.5, 0.25,0.25]和p^{(b)}=[0.5,0.5,0]\),间接套用公式失去\(H(p^{(b)})H(p ^{(b)} )\),但如果让人主观去评估这两个概率分布,显然咱们会认为\(p^{(b)}比p^{(a)}\)更不确定,所以间接用熵还不够正当 主观地讲,熵值越大,示意这个零碎外部越不稳固。如果要与置信度分割起来,熵值越大,置信度越低一个简略的修改是只用前top-k个概率值来算熵,假如\(p_1,p_2,…,p_k\)是概率最高的\(k\)个值,那么 其中,\(\mathcal{T}\)是一个取向量最大的前k个值的操作\({R}^{m}\)→\({R}^{k}\)。咱们能够将式(2)带入式(1)开展得 其中,\(p~i= p_i / \sum\limits_{i=1}^k p_i\) 交替归一化(ALTERNATING NORMALIZATION)这一部分我先给出论文中的算法步骤形容,下一节我会手动模仿一遍计算过程 Step1 设列向量\(\mathbf{b}_0\in \mathbb{R}^m\)为输出样本\(x\)对应各类别的概率分布,\(m\)示意类别数。咱们生成一个\(n\)×\(m\)的概率矩阵\(A_0,A_0\)其实是\(n\)个置信度十分高的样本对各个类别的预测概率向量拼接而得,通过将\(A_0和\mathbf{b}_0\)进行拼接失去一个\((n+1)×m\)的矩阵 \(L_0\) Step2 第二步是一个迭代的过程,具体来说,首先对矩阵\(L_0\)进行列归一化(使得每列求和为1),而后进行行归一化(使得每行求和为1)。进行算法步骤前,先定义一个向量对角化操作: D(v)会将列向量\(\mathbf{v}\in \mathbb{R}^n\)转换为\(n×n\)的对角矩阵,对角线元素即本来的向量元素 列归一化 其中,参数\(\alpha \in \mathbb{N}^+\)管制着\(\mathbf{b}_0\)收敛到高置信度的速度(越大速度越快,默认取1);\(\mathbf{e}\in \mathbb{R}^{n+1}\)是全1的列向量。通过式(4)的变换后,矩阵\(S_d\in \mathbb{R}^{(n+1)\times m}\)是\(L_{d-1}\)矩阵的列归一化模式;\(\Lambda_S^{-1}\)是\(\Lambda_S\)的逆矩阵 行归一化 其中,\(\mathbf{e}\in \mathbb{R}^{m}\)依然是全1的列向量,只不过此时它的维度是mmm维的;矩阵\(L_d\in \mathbb{R}^{(n+1)\times m}\)是行归一化的(但\(L_d\)并不是具体某个矩阵的行归一化模式);\(\Lambda_q \in \mathbb{R}^{m\times m}\)是一个对角矩阵,对角线上的元素是各类别的散布占比 例如示意这是一个三分类问题,并且各个类别的比例为1:2:2Step3 Step2循环迭代ddd次后失去的矩阵\(L_d\): 其中,\(\mathbf{b}_d\)就是依据「先验散布」调整后的新的概率分布 ...

November 4, 2021 · 2 min · jiezi

关于深度学习:恒源云-功能更新镜像市场上线

大家平时租用 GPU 时,环境抉择是必不可少的,不论是勾选官网镜像,还是创立自定义镜像,所有的训练都须要在环境里进行~ 当然,如果官网镜像里,没有适合的,又懒得本人装置,“抄作业”无疑是个好方法,【镜像市场(戳我中转)】应运而生! 其实很好了解,【镜像市场】就是大家能够“交易”镜像的中央,当然,本着社区奉献的精力,目前都是收费分享和下载哟 如何分享我的镜像?大家登录后关上【控制台】,进入左侧导航栏【实例与数据】-【我的镜像(戳我中转)】 在【我创立的】镜像列表下,抉择你想分享的镜像,点击右侧【更多】-【公布到镜像市场】 而后,在弹出的窗口内,填写镜像相干信息,包含题目、集成软件、形容等,点击【提交审核】后,就能够间接上架了,届时,所有用户都能看到并下载你公布的镜像啦⚠️【重要提醒】镜像公布后,即刻上架,但同时,平台领有审核的权力,对于品质较差、违规犯法等不符合要求的内容,将会作下架或者限度解决,请大家敌对公布,独特保护镜像市场的谐和哦~ 如何下载别人的镜像?当然,如果镜像市场里,有你想下载的内容,点击【收费】,将进入详情页,可在下一步实现收费下载哦 在详情页,你能看到镜像的形容、大小等,点击【增加到我的镜像】,即可实现下载,留神哦,增加的镜像,将会占据你的【集体数据】空间,下载的同时,也要注意存储状况哈 增加后,将会有个弹窗,通知你已增加,你能够点击【去查看】,在【我的镜像】-【我购买的】镜像列表里,看到它哈~ 肿么样,分享/下载是不是都很简略,连忙体验一下新性能吧~ 当初就去【镜像市场(戳我中转)】康康!

November 3, 2021 · 1 min · jiezi

关于深度学习:未闻Prompt名论文学习笔记

文章起源 | 恒源云社区(专一人工智能/深度学习GPU收费减速平台,官网体验网址:https://gpushare.com) 原文作者 | Mathor 原文地址 | https://gpushare.com/forum/to... 集体感觉2021年NLP最火的两个idea,一个是比照学习(Contrastive Learning),另一个就是Prompt 浅谈我对 Prompt 的了解Prompt 说简略也简略,看了几篇论文以及博客后发现其实就是构建一个语言模版。然而细想起来又感觉简单,因为总感觉外面还有很多细节,因而本文就来从头梳理一下 Prompt(Prompt 很多中央会翻译成「范式」,然而「范式」这个词自身也不好了解,因而读者把他看作是「模板」即可) 明天我还与室友探讨预训练模型(例如 BERT)到底做了什么,我给出的答复是 预训练模型提供了一个十分好的初始化参数,这组参数在预训练任务上的体现十分好(预训练损失非常低),然而因为上游工作千奇百怪,咱们须要在这组参数的根底上进行 Fine-tune 以适应咱们的上游工作(使得上游工作的损失值非常低)下面这段话其实隐含了目前做 NLP 工作的大抵流程,即 "Pre-train, Fine-tune",而对咱们来说实际上大部分时候都是间接拿他人预训练好的模型做 Fine-tune,并没有 Pre-train 这一步 融入了 Prompt 的模式大抵能够演绎成 "Pre-train, Prompt, and Predict",在该模式中,上游工作被从新调整成相似预训练任务的模式。例如,通常的预训练任务有 MLM(Masked Language Model),在文本情感分类工作中,对于 "I love this movie" 这句输出,能够在前面加上 Prompt:"the movie is ___",组成如下这样一句话: I love this movie, the movie is ___而后让预训练模型用示意情感的答案(例如 "great"、"terrible" 等)做完形填空,最初再将该答案转换为情感分类的标签。这样一来,咱们就能够通过结构适合的「模板」,通过小样本数据集训练一个模型来解决各种各样的上游工作 留神,Prompt 设计的这种完形填空和 MLM 工作是有区别的,二者尽管都是都是词分类,然而候选集不同,MLM 的候选词是整个词库,不过如果是生成工作,那么 Prompt 和 MLM 的候选集就是一样的,都是整个词库如何构建 Prompt对于输出文本 \( x\) ,存在一个函数 \(f\)Prompt(x),将 \(x\) 转化成 \(x′\) 的模式,即 ...

November 3, 2021 · 4 min · jiezi

关于深度学习:Lab-Assignment

Lab Assignment 2: Main MemoriesObjectiveThe purpose of this assignment is to understand the functionality of main memories, and to getan insight into various trade-offs related to the design of systems with main memories with afocus on DRAMs.Helpful References• Lecture notes about main memories• MCSim paper is a helpful source for understanding the MCsim simulator used in Part B of thelab:Mirosanlou, Reza, et al. "MCsim: An Extensible DRAM Memory Controller Simulator." IEEEComputer Architecture Letters 19.2 (2020): 105-109.• MCXplore paper and documentation can be a good source for understanding various DRAMaddress patterns needed for Part A of the Labo Hassan, Mohamed, and Hiren Patel. "MCXplore: Automating the validation processof DRAM memory controller designs." IEEE Transactions on Computer-Aided Designof Integrated Circuits and Systems 37.5 (2017): 1050-1063.o https://gitlab.com/FanusLab/m...Part A: DRAM Traces [50 pts]• Write a C/C++ program that takes as input the following parameters:-w [address_width] -m [address_mapping] -n [num_requests] -p [address_pattern] -t [type_pattern]And generate a DRAM trace with the specified patterns. The trace should look likeAddress:type, where address is in hex and type is either R (for read) or W (for write).For example:0x12345680 R0x4cbd56c0 W0x35d46f00 R0x696fed40 W0x7876af80 R• DRAM Architecture: you have to match the structure of the “DDR3_2Gb_x8” in the MCsimsimulator to be able to also use your traces for PartB. Figure out the number of ranks,channels, banks, ..etc for this structure from MCsim.• Your program should be able to generate the following address and type patterns:o Address patterns:▪ Sequential▪ Random▪ All row hit▪ All row conflictso Type patterns:▪ All R▪ All W▪ Switching: R, W, R, W,..etc.• You should also consider the following mappings (where RW: Row, RNK: Rank, BNK: Bank,CL: Column):o RW-RNK-BNK-CLo RW-CL-RNK-BNKo RNK-BNK-CL-RWPart B: Simulating Off-chip Memory [50 pts]1) [10 pts] Use your tool from Part A to generate the following traces, where each trace shouldhave 10K requests and the address mapping should be rowcolumn (assume a single channeland single rank).• All Read, Sequential Trace• All Read, Random Trace• All Read, Conflict Trace• All Read, Hit Trace• Switching, Hit Trace2) Familiarize yourself with MCsim simulator. Start with getting MCSim from here:https://github.com/uwuser/MCsim and read the README file.3) [15 pts] Configure MCsim to use FR-FCFS and run all the 5 traces from step 1. Make sure thatthe address mapping in MCsim are set correctly. In MCsim the address mapping is determined inthe ini file where each segment is coded as follows: Rank[0], BankGroup[1], Bank[2],SubArray[3], Row[4], Col[5]. So, AddressMapping=425 means rowcolumn.Draw a graph that compares the execution time of all the five traces.4) [10 pts] Change the FR-FCFS ini file to use close-page policy and repeat the experiments andredraw the graph similar to part 3.5) [15 pts] Use the trace “All Read, Random Trace” to compare all the controller systems supportedby MCsim. Plot the results in a bar-chart. ...

October 31, 2021 · 3 min · jiezi

关于深度学习:卷积神经网络实现以及对卷积特征的可视化

版权申明:本文为博主原创文章,未经博主容许不得转载。 本文次要是实现了一个简略的卷积神经网络,并对卷积过程中的提取特色进行了可视化. 卷积神经网络最早是为了解决图像识别的问题,当初也用在工夫序列数据和文本数据处理当中,卷积神经网络对于数据特色的提取不必额定进行,在对网络的训练的过程当中,网络会主动提取次要的特色. 卷积神经网络间接用原始图像的全副像素作为输出,然而外部为非全连接结构.因为图像数据在空间上是有组织构造的,每一个像素在空间上和四周的像素是有关系的,和相距很远的像素基本上是没什么分割的,每个神经元只须要承受部分的像素作为输出,再将部分信息汇总就能失去全局信息. 权值共享和池化两个操作使网络模型的参数大幅的缩小,进步了模型的训练效率. 权值共享: 在卷积层中能够有多个卷积核,每个卷积核与原始图像进行卷积运算后会映射出一个新的2D图像,新图像的每个像素都来自同一个卷积核.这就是权值共享. 池化:降采样,对卷积(滤波)后,通过激活函数解决后的图像,保留像素块中灰度值最高的像素点(保留最次要的特色),比方进行 2X2的最大池化,把一个2x2的像素块降为1x1的像素块.# 卷积网络的训练数据为MNIST(28*28灰度单色图像)import tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltfrom tensorflow.examples.tutorials.mnist import input_data训练参数 train_epochs = 100 # 训练轮数batch_size = 100 # 随机进来数据大小display_step = 1 # 显示训练后果的距离learning_rate= 0.0001 # 学习效率drop_prob = 0.5 # 正则化,抛弃比例fch_nodes = 512 # 全连贯暗藏层神经元的个数网络结构 [外链图片转存失败,源站可能有防盗链机制,倡议将图片保留下来间接上传(img-GPwo1L58-1579072744365)(output_16_11.png)] 输出层为输出的灰度图像尺寸: -1 x 28 x 28 x 1 第一个卷积层,卷积核的大小,深度和数量 (5, 5, 1, 16)池化后的特色张量尺寸: -1 x 14 x 14 x 16第二个卷积层,卷积核的大小,深度和数量 (5, 5, 16, 32)池化后的特色张量尺寸: -1 x 7 x 7 x 32全连贯层权重矩阵 1568 x 512输入层与全连贯暗藏层之间, 512 x 10一些辅助函数 ...

October 29, 2021 · 6 min · jiezi

关于深度学习:预习上课复习达摩院类人学习新范式探索

简介: 预习时关注重点,上课时由易到难,温习时触类旁通,是否让机器也依照“预习-上课-温习”的学习范式进行学习呢? 达摩院对话智能(Conversational AI)团队对这个问题进行了钻研摸索,先将其用在了人机对话畛域,在国内出名多轮对话数据集MultiWoz上获得了最好后果。 作者 | 言枫起源 | 阿里技术公众号 预习时关注重点,上课时由易到难,温习时触类旁通,是否让机器也依照“预习-上课-温习”的学习范式进行学习呢? 达摩院对话智能(Conversational AI)团队对这个问题进行了钻研摸索,先将其用在了人机对话畛域,在国内出名多轮对话数据集MultiWoz上获得了最好后果。 目前对话零碎的各类钻研工作,大多还是集中在模型构造的翻新上,并依照传统的mini-batch形式进行有监督训练。然而,笔者所在团队通过最新钻研发现,这种传统训练形式并不是对话零碎的最优训练模式。受到人类在学习新常识时的学习范式的启发,咱们提出了“预习-上课-温习”的三阶段训练范式来晋升对话零碎的性能,该范式可能像人一样预习时关注重点,上课时由易到难,温习时触类旁通。具体来说,在预习阶段时,人个别会先理解重点概念、章节构造等信息,因而咱们对应地设计了带有构造偏置的预训练指标,让模型学会对话数据中的槽值关联信息;在上课阶段时,人会从简略内容开始学习再逐渐进阶到艰难局部,因而咱们应用了课程学习[1]的办法来训练对话模型;而在温习阶段时,人们通常是温故知新触类旁通,因而咱们专门设计了基于对话本体的数据加强办法,针对易错样例对模型进行增强训练。通过这样的优化框架,咱们最终在多轮对话数据集MultiWOZ2.1和 WOZ2.0上都获得了目前最好后果,相干工作被ACL21以4-4-4高分接管。 一 人类学习范式与机器学习范式在教育学中,针对人类学习的模式,不少学者提出“预习->上课->温习”的三阶段过程,是最为高效的学习范式之一[3]。预习时,因为没有老师进行领导,因而学生会利用已学常识和技能,通过观察章节题目、浏览段落文字、筹备课上问题等形式进行自主地学习,大抵理解课堂内容;进入到正式上课阶段时,学生会依据老师安顿好的课程从易到难进行学习,这种由浅入深的教学是人类数百年教育倒退总结出的最佳形式,可能让学生的常识承受效率最大化;在上完课后,学生该当及时地回顾所学的课程内容,温故知新,通过自我反思总结,找出仍旧没有把握的知识点,并筹备好和老师进一步沟通解答。 在人工智能的次要方向自然语言解决(Natural Language Processing,NLP)畛域中,目前大家广泛采纳的是“pre-train + fine-tune”的机器学习范式,即先失去大规模预训练语言模型,再基于该模型进行上游工作微调。这种机器学习范式过于简化,没有思考到人类学习范式中的重要个性,即:预习时关注重点,上课时由易到难,温习时触类旁通。因而,对于某个具体的NLP工作,咱们应该在构建训练指标时就将这些个性思考进来,通过设计出更具工作自身特点的新指标函数来模拟人类学习范式中的三阶段学习过程。 二 基于“预习-上课-温习”学习范式的多轮对话了解在本文中,咱们次要钻研工作型多轮对话零碎中的外围工作 -- 对话状态跟踪(Dialog State Tracking, DST),并心愿可能设计出多轮对话特有的“预习-上课-温习”三阶段学习范式以晋升DST 模型的成果。 1 对话状态追踪工作介绍首先, 咱们介绍一下工作型对话零碎和DST工作。 工作型对话零碎是通过人机对话实现某个特定工作的零碎,例如政务事务办理、满意度回访、订餐馆等。该零碎不仅能够答复用户问题,同时还能被动提问,疏导会话的无效进行,通过多轮对话实现特定工作。例如在一个餐馆查找场景中,一个典型的对话如下: 图2 工作型多轮对话示例 如图2所示,能够看到,在该对话中,机器人须要依据用户的不同的答复状况进行多轮的对话,最终收集残缺本人须要的信息后给出找到的后果。 对话状态跟踪(DST)是一个重要的对话了解工作,即给定整个对话历史,将用户表白的语义辨认成槽值对模式的对话标签。例如用户说 “我想要便宜的餐馆”,对应的DST语义标签就是 “价格=便宜”。 对话标签的汇合个别曾经预约义好,统称为对话本体(ontology)或者对话schema。 2 对话状态追踪工作难点在一些经典的学术对话数据集中,例如 MultiWOZ[4],CrossWOZ[5]等,DST 工作普遍存在以下3个挑战: 不同槽之间的取值存在指代关联。例如用户在前几轮交互曾经预约好了某家餐馆,在以后轮时,用户说 “我还想要该餐馆左近的一家酒店”,那么隐含地,酒店的area 槽值该当和餐馆的 area 槽值是统一的,这须要DST模型有能力辨认进去。 用户隐含承受零碎举荐。例如,当零碎举荐某家酒店时,用户针对举荐的后果的态度既能够是侧面的表白(that’s great),也能够是非侧面的表白(hold on please),对应的hotel-name 槽也就会填或不填。 实在用户表白丰盛多样,增大解析难度。例如,在DST工作中,每个槽有一个非凡的槽值叫 dontcare,用于示意用户对该槽可选取所有值,即没有特定值限度。在 MultiWOZ 数据集中,用户对于 dontcare 的表白多样性很大,非常考验模型的语言理解能力。 下图3是咱们利用目前最好的DST 模型 TripPy[10],在 MultiWOZ2.1数据集上进行谬误剖析失去的一个错因占比统计。除了标注谬误,后处理不当等额定因素,以上三类问题的占比达到约 42%,这须要更好的模型和计划来进行解决。 图3 MultiWoz 2.1 数据集DST谬误剖析(模型采纳TriPy) ...

October 29, 2021 · 2 min · jiezi

关于深度学习:互联网-创新创业-培育敢闯会创的青年生力军

好买网日前,第七届中国国内“互联网 ”大学生翻新守业大赛在江西南昌落下帷幕,赛事共吸引了来自国内外121个国家和地区4347所院校的956万人报名参赛。本届赛事首次增设产业命题赛道,共诞生50支决赛队伍。最终,来自华中科技大学的云图团队、华南理工大学的城联智图团队获产业命题赛道金奖。 其中,云图团队依靠于华为鲲鹏底层技术所选取的“鲲鹏BoostKit大数据Spark图算法优化”命题,实现了国内上首个面向并发图剖析工作的高性能图计算零碎,通过高效利用鲲鹏处理器的众核架构和硬件加速单元、适配欧拉开源操作系统,将传统的图计算性能实现倍级晋升。 城联智图团队则依靠于华为昇腾AI技术能力选取的“应用MindSpore设计和训练图像格调迁徙模型”命题,创新性的提出了一种高性能的图像格调迁徙算法,并给出了有现实意义的落地利用场景。 作为深入翻新守业教育改革的重要载体和平台,中国国内“互联网 ”大学生翻新守业大赛是覆盖面最大、影响最广的大学生翻新守业盛会。据教育部高等教育司司长吴岩介绍,“往年大赛新增了产业赛道,瞄准科技前沿和要害畛域,推动高校的智力、技术和我的项目资源与经济社会倒退需要严密对接。” 云图团队成员在承受赛后采访时示意,他们十分心愿做一款寰球当先的图计算零碎,推广给中国信息技术企业,将其落地于多个理论生产畛域,真正将科研做到面向世界科技前沿、面向经济主战场、面向国家重大需要和面向人民生命衰弱,通过鲲鹏BoostKit相干技术的反对和华为业余的赛事领导,实现从技术实践走向利用实际的过程。 在本届“互联网 ”大赛上,参赛团队通过基于鲲鹏、昇腾AI等技术利用,将行业利用与计算畛域实践根底落地,从而孵化出具备技术和商业双重价值的优质我的项目。好买网(www.goodmai.com)IT技术交易平台

October 27, 2021 · 1 min · jiezi

关于深度学习:恒源云训练指引

该指引分为三个步骤。 从本地上传压缩包到平台集体数据把平台集体数据下载到实例内进行训练与主动上传后果并关机操作流程大略如下: 本地上传集体数据在本地首先将训练的数据打成 zip、tar.gz 罕用格局的压缩包。而后本地下载并装置 oss 命令行工具,应用该工具将压缩包上传到平台的集体数据中。 在这里应用 Windows 零碎作为本地环境。如果是其余零碎能够参考 oss 命令行工具 进行装置。 下载 OSS (Windows) 可执行文件。下载实现后将 oss_windows_x86_64.exe 文件名改为 oss.exe。在 Windows 下关上 CMD (命令提示符) 或 PowerShell。 应用 cd 命令切换到 oss.exe 所在的目录,在这里 oss.exe 保留在了 D:\Download 下。在这里是应用 PowerShell 终端执行。 PS C:\Users\windows> cd D:\DownloadPS D:\Download>在这个目录下执行 .\oss 可执行该命令。上传前须要先进行登陆操作。登陆的账号为恒源云平台的账号名与明码,并非实例。账号名为手机号,如果是非中国大陆手机号码,须要加上带 + 的国家号。 # 执行 .\oss loginPS D:\Download> .\oss loginUsername:139********Password:***********139******** login successfully!登陆胜利后将进行传输文件的操作,将本地打成的压缩包上传到集体数据中。留神上传的文件扩展名仅反对常见的压缩包格局。在这里的压缩包的门路为 D:\Datasets\MNIST.zip。 # 执行 .\oss cp D:\Datasets\MNIST.zip oss://PS D:\Download> .\oss cp D:\Datasets\MNIST.zip oss://Start at 2021-10-22 06:21:48.2061924 +0000 UTC[-------------------------------------] 100.00% 52.34MB/s 76.55MB/76.55MB 1.53sUpload successfully, 76.55MB, n/a, D:\Datasets\MNIST.zip --> oss://MNIST.zip, cost [7020], status [200], request id [0000017CA6A9BE01901395D26CE9A228]上传胜利后在平台的集体数据页面能够查看到该文件。 ...

October 25, 2021 · 2 min · jiezi

关于深度学习:MegEngine-架构系列静态内存分析

作者:周瑞亮 | 旷视科技 MegEngine 架构师在正式进入本文前,先通过一组简略的比照来直观地感受一下,动态内存优化带来的内存占用上的晋升。别离对 1batch/128batch 的 vgg16/resnet50/mobilenetv2 模型,应用 tflite tools 失去 tflite 的峰值内存,与 megengine 内存优化前后的峰值内存进行比照: 从上图能够看出,通过动态内存优化,模型占用的内存空间显著减小。接下来,将为大家揭秘 MegEngine 深度学习框架的动态内存是如何治理优化的。 1、升高内存占用——为什么以及怎么做why 近几年深度学习都在蓬勃发展,并被利用于各行各业。随着业务场景对精度要求的一直进步,深度学习模型的规模也越来越大。 宽广的深度学习钻研人员无论是应用何种运算平台,内存的占用都是绕不开的话题:内存的占用量间接关系到可训练模型的规模,以及部署时的性能体现。鉴于内存的大小无限,内存治理成为深度学习零碎的重要研究课题。 how 内存治理是深度学习零碎的重要研究课题。针对这个问题外界曾经存在许多计划,典型计划如下: 模型压缩,例如量化办法、模型剪枝等。计算换内存:例如往期分享的 DTR 技术,抛弃计算成本绝对较低的值,并在反向流传时从新计算它们。通信换内存:将未应用的变量从以后运算设施的内存空间替换到其它内存空间,并在下次访问之前将它们替换回来,会产生通信和同步的开销。对顺序程序图中的数据流进行剖析,以容许重用内存。2、MegEngine 中动态内存治理MegEngine 中采纳了多种升高内存的解决方案,本次次要介绍的是 MegEngine 动态内存治理模块是如何利用顺序程序图中的数据流剖析,实现内存重用以达到升高内存占用的成果。MegEngine 的思路是在运行前计算失去所有的动态内存总共须要的内存池的大小,而后为每个动态内存申请指定其在内存池中的偏移地址,运行时应用曾经预先指定好的空间即可。所以,整个算法的外围在于如何获取总的内存池大小以及为每个动态内存申请调配偏移地址。该算法大抵能够分为三步: 获取原始数据流信息,从中解析失去动态内存的需要信息、依赖关系等。将动态内存的需要信息形象为 memory chunk,通过依赖关系对 memory chunk 进行初步优化,将繁琐的动态内存需要信息缩减为老练的 memory chunk。依照依赖关系对 memory chunk 的申请流程进行仿真实现,依据仿真后果失去总的内存池大小以及为每个 memory chunk 调配偏移地址。从上述三步能够看出 MegEngine 的动态内存 接下来具体拆解这三步的实现办法。 a、获取原始数据流信息MegEngine 会将图通过编译失去一个拓扑排序的算子执行序列,在运行时会依照算子的执行序列程序执行。通过这个算子序列,以及这些算子的输出/输入节点的信息,能够轻松地察看到在整个模型运行时,数据是如何被传输应用的。这便是一个残缺的顺序程序图的数据流信息。 b、建设最小内存治理单元 Memory Chunk依据顺序程序图的数据流信息,通过内存治理模块,建设最小内存治理单元 memory_chunk,失去它们的读/写依赖关系以及生命周期。 (1)遍历算子(opr)执行序列,并依据定义在算子中的办法来推断该算子输出(input)/输入 (output) 节点之间依赖关系,根据依赖关系,为每个输出/输入节点创立 memory chunk: (readonly 和 writable 地址关系示意图) 如上图所示,input0/output0 是读依赖,input1/output1 是写依赖,它们在地址上的映射关系如图中右侧所示,每个矩形对应于一个 memory chunk 的概念。memory chunk 之间的依赖关系以及创立规定如下: ...

October 22, 2021 · 2 min · jiezi

关于深度学习:rasteriogdal等库import-出现image-not-found的问题解决办法

MacBook在应用rasterio,gdal等库时,呈现了“image not found”的问题,如图: 解决办法:(1)用anaconda 从新出创立一个新环境,能够应用Navigator界面,也能够应用命令行:conda create -name 你的环境名 python=3(2)先装gdal :conda install -c conda-forge gdal留神: 装置完后先import 看看是否胜利,此时,间接import gdal 会呈现“no model named gdal”的谬误,正确的做法是:from osgeo import gdal (3)而后装置rasterioconda install -c conda-forge rasterio而后 import rasterio 测试一下,就解决这个问题:同时Python版本3.8

October 19, 2021 · 1 min · jiezi

关于深度学习:PaddlePaddle在-Serverless-架构上十几行代码实现-OCR-能力

飞桨 (PaddlePaddle) 以百度多年的深度学习技术钻研和业务利用为根底,是中国首个自主研发、性能齐备、 开源凋谢的产业级深度学习平台,集深度学习外围训练和推理框架、根底模型库、端到端开发套件和丰盛的工具组件于一体。 飞桨深度学习框架采纳基于编程逻辑的组网范式,对于一般开发者而言更容易上手,同时反对申明式和命令式编程,兼具开发的灵活性和高性能。另外飞桨不仅宽泛兼容第三方开源框架训练的模型部署,并且为不同的场景的生产环境提供了齐备的推理引擎。 包含实用于高性能服务器及云端推理的原生推理库 Paddle Inference,面向分布式、流水线生产环境下主动上云、A/B 测试等高阶性能的服务化推理框架 Paddle Serving,针对于挪动端、物联网场景的轻量化推理引擎 Paddle Lite,以及在浏览器、小程序等环境下应用的前端推理引擎 Paddle.js。同时,透过与不同场景下的支流硬件高度适配优化及异构计算的反对, 飞桨的推理性能也当先绝大部分的支流实现。 装置飞桨飞桨能够被认为是一个 Python 的依赖库,官网提供了 pip,conda,源码编译等多种装置办法。以 pip 装置办法为例,飞桨提供了 CPU 和 GPU 两个版本装置办法: CPU 版本装置办法:pip install paddlepaddleGPU 版本装置办法:pip install paddlepaddle-gpu实际:手写数字辨认工作MNIST 是十分有名的手写体数字辨认数据集,在无论是 Tensorflow 的官方网站还是 PaddlePaddle 的新手入门,都是通过它做实战解说,它由手写体数字的图片和绝对应的标签组成,如: MNIST 数据集分为训练图像和测试图像。训练图像 60000 张,测试图像 10000 张,每一个图片代表 0-9 中的一个数字,且图片大小均为 28*28 的矩阵。这一大节将会以 PaddlePaddle 官网提供的 MNIST 手写数字辨认工作为例,进行 PaddlePaddle 框架的根本学习。与其余深度学习工作一样,飞桨同样要通过以下四个步骤实现一个绝对残缺的深度学习工作: 数据集的筹备和加载;模型构建;模型训练;模型评估。 加载内置数据集飞桨框架内置了一些常见的数据集,在这个示例中,开发者能够加载飞桨框架的内置数据集,例如本案例所波及到的手写数字体数据集。这里加载两个数据集,一个用来训练模型,一个用来评估模型。 import paddle.vision.transforms as Ttransform = T.Normalize(mean=[127.5], std=[127.5], data_format='CHW')下载数据集train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)val_dataset =  paddle.vision.datasets.MNIST(mode='test', > transform=transform)模型搭建通过 Sequential 将一层一层的网络结构组建起来。留神,须要先对数据进行 Flatten 操作,将 [1, 28, 28] 形态的图片数据扭转形态为 [1, 784]。 ...

October 13, 2021 · 2 min · jiezi

关于深度学习:基于HarmonyOS分布式技术他们让绘画体验更为出色

绘画,是很多人的兴趣爱好,然而想要创作优良的作品并不容易。这不仅依赖于集体的灵光乍现,往往还须要别人合作及灵感的反对。目前市面上大多数绘画利用在单设施上的体验曾经足够优良,然而对跨设施交互的反对仍略显有余,这就导致创作者无奈让其他人独特参加其中。“HarmonyOS分布式技术让跨设施之间的操作体验如同在单设施上一样顺滑,使跨设施协同创作成为可能,这是咱们比其余绘画软件更具备劣势的起因。”这是《创想绘画》团队成员小七对HarmonyOS分布式个性的认识。 为了让作品的分享和多设施编辑更便捷,小七与团队其余成员基于HarmonyOS开发了这款利用。“《创想绘画》充分利用了HarmonyOS分布式能力,如近程启动FA、跨端流转和分布式文件系统等,这些个性带来多设施协同编辑等全新交互体验。”小七示意,“咱们在此基础上开发了跨端流转和近程分享,这两项性能能够为用户带来更杰出的绘画体验。” 理论应用中,HarmonyOS分布式技术带来的跨端流转和近程分享性能让人眼前一亮。“创作时设施快没电的状况下,咱们能够利用跨端流转性能将作品流转至另外一台手机或平板上,并在此基础上持续编辑,齐全不必放心断电导致的数据失落;近程分享性能则容许将作品分享给同账号的另外一台设施,而且不会受到间隔的束缚,两台设施能够独立编辑且不会被笼罩。”小七示意,“如果用电脑文件做类比的话,跨端流转就像是电脑文件的跨设施剪切,近程分享则更像是文件的近程传输,两端独立且互不烦扰。” HarmonyOS的分布式技术不仅给消费者带来杰出的用户体验,也让利用的开发体验事倍功半。“HarmonyOS一次开发、多端部署能力能够大幅简化利用的开发复杂度和工作量。”小七示意,“其独有的分布式模拟器让利用调试效率更高,也让利用的开发成本显著升高。” 自2021年4月《创想绘画》上架至华为利用市场以来,下载量曾经冲破6万次,并取得用户的统一好评。“将来,团队还将在此基础上继续优化改良并带来更多实用功能,包含但不限于更丰盛的笔刷、更多的图层以及云同步等。咱们也将基于HarmonyOS开发出更多好玩、好用的产品。”小七示意,“作为一款面向未来的分布式操作系统,其必将在万物互联的世界里蓬勃发展。咱们也将会看到更多离奇、乏味的产品,开发者和用户也将体验到HarmonyOS带来的新体验。” 因为对HarmonyOS的将来倒退充满信心,小七对将于10月22日-24日举办的华为开发者大会2021(Together)表白了本人的期待,“心愿往年的大会能够看到更欠缺的开发技术支持,并为咱们这些独立开发者带来更多的交换机会。同时我也心愿能够与大咖进行交换,让宽广HarmonyOS开发者群体迸发出新的思路。”

October 11, 2021 · 1 min · jiezi

关于深度学习:Vision-MLP之RaftMLP-Do-MLPbased-Models-Dream-of-Winning-Over-CV

RaftMLP: Do MLP-based Models Dream of Winning Over Computer Vision?原始文档:https://www.yuque.com/lart/pa... 从摘要了解论文For the past ten years, CNN has reigned supreme in the world of computer vision, but recently, Transformer is on the rise. However, the quadratic computational cost of self-attention has become a severe problem of practice. 这里指出了 self-attention 构造较高的计算成本。There has been much research on architectures without CNN and self-attention in this context. In particular, MLP-Mixer is a simple idea designed using MLPs and hit an accuracy comparable to the Vision Transformer. ...

October 10, 2021 · 3 min · jiezi

关于深度学习:Tensorflow-Lite-Model-Maker-物体检测篇笔记

tflite_object_detectionThe Model Maker library uses transfer learning to simplify the process of training a TensorFlow Lite model using a custom dataset. Retraining a TensorFlow Lite model with your own custom dataset reduces the amount of training data required and will shorten the training time.解读: 针对模型训练,目前比拟支流的形式都是基于迁徙学习来做的 You'll use the publicly available Salads dataset, which was created from the Open Images Dataset V4本次的指标检测,用到的数据集来自 Open Images Dataset V4 The Salads dataset is available at: gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csvIt contains 175 images for training, 25 images for validation, and 25 images for testing. The dataset has five classes: Salad, Seafood, Tomato, Baked goods, Cheese本次用到的数据集比拟小,训练集有 175张图片,验证集有 25张图片,测试集有 25张图片 ...

October 10, 2021 · 5 min · jiezi

关于深度学习:Vision-MLP之HireMLP-Vision-MLP-via-Hierarchical-Rearrangement

Hire-MLP: Vision MLP via Hierarchical Rearrangement原始文档:https://www.yuque.com/lart/pa... 这篇文章十分好读,没有简单的单词和句式,从头看到尾十分顺畅。十分喜爱这样的写作格调。 从摘要理解文章This paper presents Hire-MLP, a simple yet competitive vision MLP architecture via hierarchical rearrangement. 问题: 是什么?针对空间MLP的简化解决策略。为什么?分而治之,简化解决。如何做?将原有的无差别全局空间MLP替换为先部分解决后再对各个区域进行关联。Previous vision MLPs like MLP-Mixer are not flexible for various image sizes and are inefficient to capture spatial information by flattening the tokens. 本文的目标: 去除已经的MLP办法对于输出数据尺寸的依赖更无效的捕捉空间信息的形式Hire-MLP innovates the existing MLP-based models by proposing the idea of hierarchical rearrangement to aggregate the local and global spatial information while being versatile for downstream tasks. ...

October 10, 2021 · 2 min · jiezi

关于深度学习:想开发一个安全软件怎么搞

明天跟大家介绍一下,开发一个像360、QQ电脑管家这样的安全软件,有哪些核心技术,或者说哪些外围组件是必不可少的? 反病毒引擎首先,第一个必不可少的就是反病毒引擎。安全软件最早的外围也就是这个货色,它的目标就是检测一个文件是不是恶意软件。 反病毒引擎次要通过对文件进行动态剖析,辨认歹意文件的特色,与本人的病毒特色库进行匹配,来判断指标是否是歹意的。 这外面次要用到的技术有文件格式辨认、加壳脱壳技术、加密解密技术、可执行文件的反汇编、指令级的特色匹配、虚构执行、样本家族团伙基因判断、机器学习等等。 HOOK驱动安全软件的次要工作,就是要爱护咱们的电脑不受病毒、木马这些恶意软件的侵害,除了能通过动态剖析辨认已知的威逼,还要守住计算机的平安防线,避免被恶意软件攻破。 那如何防守呢? 安全软件须要感知计算机上产生的所有事件,这蕴含,每一个过程线程的创立、每一个文件的创立和读写、每一次网络连接的建设,甚至每一次零碎服务的调用。 安全软件是通过HOOK技术来做到这所有的。 安全软件应用内核驱动程序,劫持应用程序通向操作系统内核的要害入口,从而监控所有过程的行为。 简直每一个安全软件都有这么一个驱动程序,它外部有一套HOOK框架,提供编程接口给其余驱动程序调用,比方360中赫赫有名的hookport.sys。 主动防御驱动光有一个HOOK框架驱动不行,还得配套有一个主动防御驱动,负责实现具体的平安进攻。 应用层上个别会有一个主动防御过程,负责从安全软件云端服务器接管控制指令,下发最新的进攻规定,最新的特色库,比方拦挡哪些程序,拦挡哪些操作等等。 主动防御过程拉取到这些信息后,下发给内核空间的主动防御驱动程序,由它来具体执行对应的拦挡行为。 文件过滤驱动通过HOOK驱动来进行监控,有时候并不能齐全解决问题。有一些底层软件,能够绕过零碎API调用,这样一来HOOK驱动就监控不到了。 因而,安全软件个别还会配套有一个文件过滤驱动,通过文件系统提供的接口实现更底层的文件监控性能。 这一类驱动个别应用的技术有minifilter、sfilter等。 网络监控驱动和文件过滤驱动相似,对于网络同样须要一个更底层的驱动程序,来监控计算机中所有的网络连接,通过操作系统网络架构底层的接口,监控计算机进进出出所有的数据包,将网络通信状况齐全一目了然。 这一类驱动应用的技术有TDI、NDIS、WFP等。 沙箱驱动除了守护咱们的计算机,安全软件的另外次要工作还是剖析恶意程序。 后面提到的反病毒引擎次要是动态剖析,但动态剖析有肯定的局限性,很多时候程序的歹意须要运行当前才会裸露进去。因而,动态分析技术少不了。 尽管网络安全技术倒退了很多年,但动态分析用到的次要技术还是“沙箱剖析”。 所谓沙箱剖析,就是提供一个仿真的环境,把指标丢进去,让它跑起来,等到它暴露无遗,是不是歹意就能高深莫测。 因而,许多安全软件也会提供一个沙箱驱动,通过内核隔离,模拟出一个“平安”的执行环境,让指标在其中运行。 攻防驱动安全软件指标这么大,天然会招来很多恶意软件的攻打。除了恶意软件,有些安全软件相互为了争夺用户,也会互相攻击。 所以,安全软件必须增强本身的进攻。 后面提到的主动防御,属于正规军作战,也蕴含有爱护本人的能力,但面对同样是内核级的攻打对手,这一招根本就收效甚微了。 因而,安全软件个别还会有一个攻防驱动,通过各种伎俩和对手作战,爱护本人,这外面用到的技术就形形色色了。 总结总结一下,开发一款安全软件,次要有三方面的事件要做: 看完这篇文章,你有什么播种吗,写作不易,欢送动动手指转发分享。

October 8, 2021 · 1 min · jiezi

关于深度学习:ST300-Assessed

Week 15ST300 Assessed CourseworkBody Measurements1 QuestionThe data-set body.dat contains 21 body dimension measurements, togetherwith age, weight, height, and gender on 507 individuals. The 247 men and260 women were primarily individuals in their twenties and thirties, with ascattering of older men and women, all exercising several hours a week.The main aim is to explain how the height of an individual is related toother variables. Using R (other packages not allowed), obtain a satisfactorymodel for height in terms of the other variables. You should examine outliersand influential observations, and try transformations. You may also want totry variable selections using techniques learnt and used in your lectures andworkshops. Why is your model good? From your model, what can yousay about the relationship between the height and other body measurementsor characteristics of a particular individual? Which body measurement(s)are potentially more important in estimating a person’s height? Write asummary of your analysis with no more than 6 sides of A4 (includinggraphs and figures).Variable descriptions:Skeletal Measurements: (all in cm)biacromial Biacromial diameterpelvic.breadth Biiliac diameter, or "pelvic breadth"bitrochanteric Bitrochanteric diameter, in cmchest.depth Chest depth between spine and sternum at nipple level,mid-expirationchest.diam Chest diameter at nipple level, mid-expirationelbow.diam Elbow diameter, sum of two elbowswrist.diam Wrist diameter, sum of two wristsknee.diam Knee diameter, sum of two kneesankle.diam Ankle diameter, sum of two anklesFebruary 11, 2019 ST300 1Week 15Girth Measurements: (all in cm)shoulder.girth Shoulder girth over deltoid muscleschest.girth Chest girth, nipple line in males and just above breasttissue in females, mid-expirationwaist.girth Waist girth, narrowest part of torso below the rib cage,average of contracted and relaxed positionnavel.girth Navel (or "Abdominal") girth at umbilicus and iliac crest,iliac crest as a landmarkhip.girth Hip girth at level of bitrochanteric diameterthigh.girth Thigh girth below gluteal fold, average of right and leftgirthsbicep.girth Bicep girth, flexed, average of right and left girthsforearm.girth Forearm girth, extended, palm up, average of right andleft girthsknee.girth Knee girth over patella, slightly flexed position, averageof right and left girthscalf.girth Calf maximum girth, average of right and left girthsankle.girth Ankle minimum girth, average of right and left girthswrist.girth Wrist minimum girth, average of right and left girthsOther Measurements:age Age (years)weight Weight (kg)height Height (cm)gender Gender (1 - male, 0 - female)Note: Check all the covariates you are not familiar with before interpretingyour model. Note that some covariates are discrete, so that they can beinterpreted as factors. You are not taught about regression with a mixedof factors and continuous covariates (called ANCOVA), but using the lmfunction in R you can still get appropriate coefficients and anova functionwith sum of squares calculated etc. But remember your ultimate goal is tofind a simple model for interpretation.February 11, 2019 ST300 2Week 152 AssessmentThis question counts for 15% of the total mark for ST300. The work will besubject to checks for plagiarism.3 SubmissionYour work should be submitted anonymously under your candidatenumber. You can look up your candidate number in LSE for you.A printed copy of the project must be put in the project drop-boxin the waiting area of the 6th floor of Columbia House by 12:00pmon the 20th of March 2019. You must sign the plagiarism formand put it separately in the department office collection pointof such form. In addition, you must upload your project using thespecified Moodle link on the ST300 Moodle page by 12:00pm onthe 20th of March 2019. The Moodle upload link will stop workingafter that time and you will only be able to email me your project.Penalties will apply for late submission of either the printed or theelectronic version of your project (but will not be doubly-penalisedif both are not submitted on time). For the plagiarism form seethe link in Moodle before the links to the project.When the submission deadline has passed, a list of candidate numbersfor the work received will be put up on Moodle. Each studentmust check from that list that their work has been received, countingboth the electronic and the printed versions.Extensions to deadlines for coursework will only be given in fullydocumented serious extenuating circumstances. There will be 5nmarks deducted from the total possible 100 marks for this courseworkif either the hard copy or the electronic version is submittedbetween 24(n 1) and 24n hours from the stipulated deadline (includingworking days only).WX:codehelp ...

October 3, 2021 · 4 min · jiezi

关于深度学习:CS-100-Project

CS 100 Project Three – Spring 2019Project Overview: In this project, you will write a C program named sign.c to print out a big sign. The programwill read a formatting code followed by a message and then use a dot matrix font and the formatting code to printout a big sign that displays the message.The dot matrix font to be used for this project is from http://sunge.awardspace.com/g... and youcan download the font file named font5x7.h from Blackboard. The font file contains an array named Font5x7that shows how to print every printable character from ‘ ’ (the space, ASCII code=32) to ‘}’ (the right brace,ASCII code=125). We ignore the last two characters (-> and <-) in the font because they do not exist in the ASCIItable. The font does not include ‘~’ (the tilde, ASCII code=126), but you are assured that no tilde will appear in themessage.Each character in the font can be printed based on a 5x7 dot matrix. For example, for the capital A, its 5x7 dot matrixis shown below at the left. The value of 1 or 0 at each location determines whether something (usually a dot) shouldbe printed. There are 7 bits in each of the 5 columns. These 7 bits form an integer. Therefore, each dot matrix can berepresented by 5 integers. For example, for the capital A, these 5 integers are 1111110 (or 0x7E in hexadecimal),0010001 (or 0x11), 0010001 (0x11), 0010001 (0x11), and 1111110 (0x7E). In the font5x7.h file, each printablecharacter has a row of 5 integers in hexadecimal that represents its 5x7 dot matrix. For example, for the capital A,these 5 integers are 0x7E, 0x11, 0x11, 0x11, and 0x7E. In this project, for each printable character, you will print its5x7 dot matrix on a 8x8 matrix as shown below at the right. It means you will leave 3 blank columns between twocharacters horizontally and one blank row between two characters vertically. Instead of printing a dot, you will printa specified character based on the formatting code, to be explained later.0 1 1 1 01 0 0 0 1 1 0 0 0 11 0 0 0 11 1 1 1 11 0 0 0 11 0 0 0 17E 11 11 11 7E0 1 1 1 0 0 0 01 0 0 0 1 0 0 01 0 0 0 1 0 0 01 0 0 0 1 0 0 01 1 1 1 1 0 0 01 0 0 0 1 0 0 01 0 0 0 1 0 0 00 0 0 0 0 0 0 0The formatting code consists of two characters in their own line. The message consists of one or more lines. Eachline contains only printable ASCII characters listed in font5x7.h (i.e., from the space to the right brace) and it isterminated by a newline. The message is terminated with EOF (end-of-file).The first character of the formatting code specifies how many characters should be printed in each line of the sign,and it can be ‘C’, ‘W’ or ‘L’. If the first character of the formatting code is ‘C’, each line of the sign contains only one character. Theprogram shall print one space between two words in the output. (A word here is a sequence of non-whitespacecharacters that can be read in by scanf with the "%s" format.) Since you can print only one character ineach output line, you will print the space in its own line or simply print out a blank line. If the first character of the formatting code is ‘W’, each line of the sign contains only one word. If the first character of the formatting code is ‘L’, each line of the message will be printed directly as anoutput line in the sign. You can use the fgets function to read a line, and you can assume that each inputline will contain no more than 40 characters.The smallest thing you can print at this stage of the course is a single character using printf with the "%c" format.The second character of the formatting code specifies what character to print in lieu of the dot in the dot matrix. If the second character is a printable character other than ‘~’ (the tilde, ASCII code=126), you will printthat character when printing a dot in the dot matrix. For example, if the second character is ‘+’, the capitalA will be printed as shown below at the left. If the second character is ‘~’, you will use the character you are about to print in lieu of the dot. For example,if the second character is ‘~’, the capital A will be printed as shown below at the right. Note that the fontdefined in font5x7.h does not specify how to print ‘~’ (the tilde), and no ‘~’ will appear in the messageeither.Please see the sample executions at the end for more details on how the formatting coding works with the message.You can assume the formatting code and the message will always be valid as specified above. For ease of outputverification by you and the grader, please terminate each prompt with a newline. Since the message can containsmultiple lines, it is a good idea to test the program using input redirection. (Otherwise, the input echo and output willbe mixed together, and it is very hard to read them.) To do this, first use vim to create a data file, say test2.dat, andinsert a formatting code and a message, as shown below.W@ROLL TIDEROLL!Again please make sure every line including the last line ends with a newline. Once you have the test file test2.dat,you can test the program using./a.out < test2.datThree sample executions of the program are shown at the end of this document. Three test files (test1.dat, test2.dat,test3.dat) have been created and used in the sample executions.What You Need To Do Create a directory named project3 on your machine. Download font5x7.h into the project3directory, and create a file named sign.c in the project3 directory. In sign.c, write the code needed to solve the problem stated above. Make sure that your program:o Has a line of #include "font5x7.h" in the include block.o Has a header block of comments that includes your name and a brief overview of the program.? When you are ready to submit your project, compress your project3 directory into a single (compressed)zip file, project3.zip. See the Basics document on Blackboard if you don’t remember how to do it. Once you have a compressed zip file named project3.zip, submit that file to Blackboard.Project 3 is due at 5:00pm on Friday, February 22. Late projects are not accepted.This document including its associated files is for your own personal use only.You may not post this document or a portion of this document to a sitesuch as chegg.com without prior written authorization.A project shall be completed individually, with no sharing of code or solutions.All submissions will go through MOSS (Measure Of Software Similarity)for similarity check.The University of Alabama’s Code of Academic Conduct will be rigorously enforced.Three sample executions of the programtest1.dat test2.dat test3.datC+ ROLL TIDEW@ROLL TIDE ROLL!L~ROLL TIDE ROLL!./a.out < test1.datEnter formatting code:Enter message:./a.out < test2.datEnter formatting code:Enter message:./a.out < test3.datEnter formatting code:Enter message:RRRR OOO L L TTTTT III DDD EEEEER R O O L L T I D D ER R O O L L T I D D ERRRR O O L L T I D D EEEER R O O L L T I D D ER R O O L L T I D D ER R OOO LLLLL LLLLL T III DDD EEEEE RRRR OOO L L ! R R O O L L ! R R O O L L ! RRRR O O L L ! R R O O L L ! R R O O L L R R OOO LLLLL LLLLL !WX:codehelp ...

October 1, 2021 · 7 min · jiezi

关于深度学习:快进来这里有超高性价比的GPU资源

**霓为衣兮风为马,云之君兮纷纷来炼丹**9月26日,2021人工智能产业倒退翻新论坛暨《2021 年人工智能行业倒退蓝皮书》公布在上海隆重举行。人工智能迎来2.0时代。 后疫情时代,国内经济局势发生巨变,信息技术反动正影响着集体、国家以及全人类的命运,在数据体量、基础设施建设等方面具备的劣势,中国在人工智能畛域遇到了极大的倒退时机,在寰球信息技术反动的“前沿阵地”中有着无足轻重的地位,孟晚舟女士胜利回到祖国的怀抱,更加向世界证实了中国的倒退之势不可阻挡。 在人工智能引领将来的当下,各路英雄好汉、后起之秀早已跃跃欲试、厚积薄发,筹备投入科技反动的大潮中一展宏图。 人工智能技术,离不开数据、算法、算力,三者缺一不可。 数据,是人工智能产业的“煤炭”、“石油”,随着相干利用的一直落地,数据量呈现出爆炸式增长。 算法模型塑造出一套套解决方案的机制,从单个模型来看,参数数量和复杂程度都在几何级增长,尤其是自然语言解决等认知智能畛域的深度学习模型。 不论是数据还是算法,都须要算力的反对,而人工智能的迅速倒退,带来的数据激增,算法简单等问题,对算力提出了更高的要求,甚至成为了人工智能利用冲破的要害。 据调查,GPU提供了大部分的人工智能算力供应,成为训练和推理减速芯片的首选。 然而,目前国内市场上GPU资源获取门槛高,价格昂扬,各位胸怀大志的炼丹巨匠想要降级打怪,却苦于资源难找,在开始训练之前,就曾经破费了大量的工夫、精力和金钱。 当初,恒源智享云为各位炼丹师筹备了类型丰盛的显卡和便捷的数据存储服务,性价比高,应用灵便简便,进步深度学习训练体验。 超多机型能够抉择!价格也超级优惠~⬇️ 性价比超高!一张表来通知你,恒源智享云有如许优惠~⬇️间接上截图来比照⬇️ 这还不是最重要的,最重要的是超级好用哇‼️咱们最大水平减去了后期装置环境等繁琐步骤,用户一键注册,即可创立实例。 数据层面,恒源云提供了容量短缺的用户云盘,高效解决用户的数据管理问题,上传和下载更为便捷。另外,平台还筹备了丰盛的公共数据集,波及计算机视觉,自然语言解决等多个畛域,并不断更新。 您能够释怀抉择咱们,咱们的解决方案平安稳固,用户遇到任何应用问题,也可在第一工夫取得响应,平台背地的运维团队,24小时在线答疑,为所有用户的应用保驾护航。

September 30, 2021 · 1 min · jiezi

关于深度学习:新功能制霸信息量有点大

明天,有几个新上线的性能,不得不吹一下。 首先,数据下载又降级了,如果说FileZilla或Sftp是1.0,那Oss命令工具就是2.0,这次新推出的限免性能【解压数据集】,能够盲目认领3.0了~ 当然,习惯Linux命令操作的大佬,能够跳过,然而,像我一样的懒癌患者,或者平台小白,巴不得闭着眼睛就实现训练,真有必要理解一下。 如何找到它呢,就在【我的实例】-【实例治理】上方,现阶段收费体验,接下来,我将展现一下,如何应用这个性能。 点击【解压数据集】,继而抉择解压的对象,不论是【集体数据】里的数据压缩包,还是平台内置的【公共数据集】,都能够一键勾选! 免开机+免下载+免解压,间接帮你把数据搬回家~ 要留神的是,可勾选的压缩包,单个文件大小限度在50G以内,届时,数据文件将被解压到/hy-tmp目录下,随时取用即可。 开始解压后,你能够在浮窗看到进度,正在解压或者解压实现,并能查看所有的解压记录,不便大家回溯哦。 说到数据集,顺便提一下,为了帮忙大家快捷查找,平台[公共数据集]的入口,在首页导航栏就能看到啦。 目前曾经下载了近500个支流数据集,输出关键词即可搜寻,技术小哥哥每天都在吭哧吭哧下载中~ 当然,如果你想用的数据集,还未收录其中,欢送你来社区【[求数据集]版块,大声说出你的需要,附上可下载的链接,小哥哥就会马上安顿起来啦。 除了数据集相干的性能优化,实例登录相干,也为大家上新了[SSH密钥登录实例]性能,这个性能是干嘛的呢? 如果你习惯了各种SSH终端登录,但又烦于输出明码,应用密钥,就能够实现免明码登录啦,同时,还能进步服务器登录认证的安全性~ 首次应用这个性能,能够参考文档[密钥登录],从生成到增加,再到应用登录,一次搞定,从此轻松~ 另外,如果你最近登录了平台,是不是发现,挪动端应用(网页或者小程序)越来越晦涩了(求夸赞)。

September 28, 2021 · 1 min · jiezi

关于深度学习:如何用人工智能技术优化-WebRTC-产品内附具体方案

WebRTC(网页实时通信),作为一个反对网页浏览器进行实时语音或视频对话的开源技术,解决了互联网音视频通信的技术门槛问题,正逐步成为寰球规范。 过来十年间,在泛滥开发者的奉献之下,这项技术的利用场景越来越宽泛和丰盛。在人工智能时代,WebRTC 将走向何方?本文次要分享 WebRTC 与人工智能技术联合的相干方向及融云的翻新实际(加 融云寰球互联网通信云 服务号理解更多)。 WebRTC+人工智能,让声音更真切、视频更高清 人工智能技术在音频和视频方面的利用越来越来宽泛,在音频方面,人工智能技术次要用于噪声克制(noise suppression)、回声打消(echo removal)等;在视频方面,人工智能技术则更多用于虚构背景、视频超分辨率等。 AI语音降噪 语音降噪曾经有多年历史,最早常应用模仿电路降噪办法。随着数字电路的倒退,降噪算法代替传统模仿电路,大大晋升了语音降噪的品质。这些经典的算法都基于统计实践预计噪声,可能将稳态噪声打消得比拟洁净。对于非稳态噪声,如敲击键盘、桌子的声音,马路上车来车往的声音,经典算法就显得无能为力了。 AI 语音降噪应运而生,它基于大量语料,通过设计简单的算法,联合继续的训练学习而成,省去了繁琐而不置可否的调参过程。AI 语音降噪在解决非稳态噪声时有着人造劣势,它能辨认非稳态数据的特色,有针对性地升高非稳态乐音。 回声打消 回声是因为扬声器放进去的声音通过衰减和延时后又被麦克风收录产生的。咱们在发送音频时,要把不须要的回音从语音流两头去掉。WebRTC 的线性滤波器采纳频域分块的自适应解决,但并没有认真思考多人通话的问题,非线性回声打消局部采纳维纳滤波的办法。 联合人工智能技术,咱们能够基于深度学习办法,采纳语音拆散形式,通过精心设计的神经网络算法,间接打消线性回声和非线性回声。 虚构背景 虚构背景依靠于宰割技术,通过将图片中的前景宰割进去,对背景图片进行替换得以实现。次要利用场景包含直播、实时通信、互动娱乐,波及到的技术次要包含图像宰割和视频宰割。典型的实例如图 1 所示。 (图 1 上图彩色背景替换为下图紫色背景) 视频超分辨率 视频超分辨率是将高糊视频变清晰,在带宽受限、码率较低的状况下,传输较低质量的视频,而后通过图像超分辨率技术还原成高清视频,这一技术在 WebRTC 中具备重要意义。典型的图像如图 2 所示。在带宽无限的状况下,传输低分辨率的视频码流,仍然能够取得高分辨率的视频。 (图 2 原始低分辨率图像 vs 解决后的高分辨率图像) 融云的翻新实际 WebRTC 是一个开源技术栈,想真正在理论场景下做到极致,还须要进行大量的优化。融云联合本身的业务特点,对 WebRTC 音频解决和视频压缩局部源代码进行批改,用以实现基于深度学习的音频噪声克制和视频高效压缩。 音频解决 除了 WebRTC 原有的 AEC3、ANS 和 AGC 外,针对会议、教学等纯语音场景,融云退出了 AI 语音降噪模块,并对 AEC3 算法做了优化,大大提高音乐场景下的音质。 AI语音降噪:业界大都采纳时域和频域的 mask 办法,联合了传统算法和深度神经网络。通过深度神经网络预计信噪比,能够计算出不同频段的增益,转换到时域后,再次计算一个时域的增益,最初利用到时域上,能够最大限度打消噪声,保留语音。 因为深度学习语音降噪模型过多采纳 RNN (循环神经网络),所以语音完结一段时间内,模型仍然认为有人声存在,拖延时间太长以至于语音无奈掩蔽掉残余噪声,导致语音完结后短暂的噪声。融云在现有模型的根底上增加预测模块,依据语音幅度包络和 SNR 降落水平,提前预测到语音的完结,打消在语音完结时可能察觉到的残余噪声。 (图 3 优化前的乐音拖尾) ...

September 23, 2021 · 1 min · jiezi

关于深度学习:恒源云手把手教你如何终端登陆实例

以下分为两大部分:一、Windows 登陆实例二、macOS/Linux 登陆实例 Windows 登陆实例如何获取登陆信息?登陆信息在 我的实例 中的登陆指令,如登陆指令为:ssh -p 60001 root@i-1.gpushare.com 从中提取登陆的主机名、端口号和用户须要填写到 SSH 客户端中: 主机名端口用户i-1.gpushare.com60001rootWindows 能够应用 Xshell、PuTTY、MobaXterm 等 SSH 客户端连贯。 Xshell 教程下载(举荐同时装置 Xftp 不便上传下载数据):Xshell 7 (Free for Home/School) Xftp 7 (Free for Home/School) 关上会话窗口新建一个会话。 会话属性中 名称 能够任意填写,协定放弃默认 SSH。主机、端口号 填写实例的登陆信息。 切换到 用户名身份验证 标签页,用户名填写 root,明码在 我的实例 中复制。点击 确定 保留。 在 会话 中抉择刚创立好的会话,点击 连贯 进入实例。 macOS/Linux 登陆实例在 macOS/Linux 零碎中能够应用零碎自带的终端利用。 macOS 能够应用 iTerm2:iTerm2 在 我的实例 中复制登陆指令在终端中执行。提醒输出明码后复制实例登陆密码粘贴,输出明码不会在终端上显示,间接按 Enter 登陆。 密钥登陆应用密钥能够实现免明码登陆,同时进步服务器登陆认证安全性。 密钥是一对文件,分为公钥和私钥。私钥是保留在本地,公钥是放在实例中的。首先须要在本地生成一对密钥,而后将公钥增加到平台中。创立实例后公钥会主动增加,在本地可应用私钥间接登录实例。 生成密钥Windows 下能够应用 Xshell 客户端自带的密钥治理性能生成密钥对。 在菜单中选择 工具 - 用户密钥管理者。 ...

September 22, 2021 · 1 min · jiezi

关于深度学习:眼界大开-声临其境丨胡宜峰视频深度伪造检测技术在内容安全领域的探索与实践

导读:「眼界大开 声临其境」技术系列课第三期。网易易盾资深计算机视觉算法工程师胡宜峰带来了主题为《视频深度伪造检测技术在内容平安畛域的摸索与实际》技术分享。 讲师简介: 胡宜峰,网易易盾资深计算机视觉算法工程师,次要负责图像和视频 AI 算法在内容平安畛域的研发、落地和优化。在违禁、涉政、暴恐内容辨认、logo 辨认、图像检索、视频深度鉴伪等多个畛域有丰盛的研发和我的项目落地教训。 AI 技术利用的「双刃剑」效应AI 是近些年热度颇高的词汇,并实实在在地渗入了生存的方方面面,如:AI+平安、AI+交通、AI+医疗、AI+批发等。在诸多 AI 技术的成熟利用中,人脸技术又是其中最为广泛应用的技术之一,常见于智能安防、金融交易、公共交通等畛域,置信许多人都有过刷脸领取、刷脸入园的经验。 随着 AI 技术的蓬勃发展,AI 主动生成内容的程度获得了显著的进步。依靠文本、语音、图像、视频等载体,AI 主动生成技术被宽泛地用于模拟和伪造人类的想法、行为和特色。这在肯定水平上升高了人力等老本的耗费,为咱们的生存带来了便当和精力享受,AI 主动生成技术所带来的仿真数据和虚拟化内容肯定水平上能够为一些垂直畛域带来新的利用场景或者间接推动该畛域的技术提高。 然而事物具备两面性,科技倒退也存在着“双刃剑”效应。 人们在享受人脸技术带来便当体验的同时,也不可避免地受到人脸技术滥用所带来的危险和隐患。随着 AI 换脸、主动美颜、智能 P 图等技术和利用的风行,由 AI 主动生成技术引发的平安危险和“黑灰产”问题也一劳永逸,尤其是人脸相干技术,作为 AI 技术落地最为宽泛的场景之一,所面临的平安、伦理和道德的挑战愈发重大。AI 主动生成技术和人脸技术在视频载体上的联合,也就是咱们熟知的“视频深度伪造”,曾经成为 AI 技术被滥用的“重灾区”。 视频深度伪造技术视频深度伪造技术,从技术方向上看,伪造办法次要分为 4 种。其一是全人脸的生成,这种个别是用 GAN 相干的算法生成现实生活中本不存在的虚构人脸,常见于游戏等一些虚构场景。其二是 AI 换脸,将生存中理论存在的人脸进行相互替换,这类利用因为针对性强、娱乐成果好,经常能宽泛破圈流传,因而在学术界和工业界都是重点的外围钻研对象。换脸是目前利用最宽泛,也是潜在的隐患最大的视频深度伪造办法。其三是人脸属性的编程,次要蕴含发型、发色、眼睛、肤色等重要属性的编辑,常存在于一些自拍美颜美肤的 App 中。其四是表情扭转,赋予人脸喜怒哀乐等不同表情,或是将 A 的表情体现在 B 脸上。 从具体算法上看,次要是通过 GAN、自编码器、格调迁徙等办法来实现的,这外面也会波及一些比方关键点定位、对齐、宰割、交融等操作。 除了技术方向多、算法多,当初人脸伪造公开的数据集也比拟多。这在肯定水平上为视频深度鉴伪算法的翻新和迭代提供了数据撑持,促成了视频深度鉴伪算法的倒退。 然而,视频深度鉴伪是一个继续反抗的开集问题,仅通过公开数据上训练的模型,想要很好地解决这个问题其实不太事实。为了更好地解决此问题,须要更加零碎和全面的方案设计,这也是深度伪造检测这项业务的重点和难点。 视频深度伪造识别方法与难点作为对视频深度伪造的反抗,视频深度鉴伪的办法次要有以下几种:人工特色、CNN、CNN+人工特色、CRNN、transformer 等等,这些办法囊括了人脸伪造辨认最次要的方向,也形容了人脸伪造辨认的整体历程。 首先是人工特色,比方 eye blinking、head pose 等等,与实在人脸相比,人脸伪造或换脸必然会存在肯定的不统一,也就是咱们说的“伪造的痕迹”。基于这些统计层面上的痕迹去挖掘人工特色,是比拟传统和无效的办法。传统特色往往针对性比拟强,然而泛化能力有余,尤其是在攻打的视频做过比拟多后处理之后,传统特色的成果会大打折扣。所以当初一些钻研工作从传统特色+CNN 特色动手,围绕特色和分类器层面的交融角度发展,把人工特色作为 deep learning 特色的补充。当然这里所说的人工特色,是指通过统计层面的察看退出先验常识,非端到端学习的形式。 当然,随着 deep learning 的倒退,间接用 deep learning 进行端到端的人脸伪造辨认也是当初钻研的热点。基于 deep learning 的办法大多数是把人脸伪造辨认转换成一个“人脸检测+分类”的问题,通过人脸检测先检测到人脸的地位,做适当的 expand 再进行 crop,送到后续进行是否为人脸的二分类。这种形式比拟间接,流程绝对简略,同时因为人脸检测当初比拟成熟,个别不会是这个工作的难点所在,所以整个工作就转换成了一个人脸 patch 的分类问题。转换为分类问题后就能够更间接地连接一些成熟办法来解决人脸伪造辨认的问题,比方半监督学习、迁徙学习等等。 ...

September 16, 2021 · 1 min · jiezi

关于深度学习:3090编译Ocean可变形卷积-Compile-Ocean-DCN-on-3090

see https://github.com/Soarkey/tr...1.环境 / EnvironmentUbuntu 20Python 3.7CUDA 11.4PyTorch 1.9.0+cu1112.批改 / Modification找到lib/models/dcn/src/deform_conv.py文件, 将所有的AT_CHECK替换为TORCH_CHECK, 同时将所有的.view操作替换为.reshape操作, 之后从新执行编译python setup.py develop. Found file lib/models/dcn/src/deform_conv.py, replace all AT_CHECK and .view operations with TORCH_CHECK and .reshape, then recompile python setup.py develop. 3.可能碰到的问题及解决 / References> ValueError: Unknown CUDA arch (8.6) or GPU not supported解决 / Solution 将conda环境所在文件夹中的cpp_extension.py内容从: named_arches = collections.OrderedDict([ ('Kepler+Tesla', '3.7'), ('Kepler', '3.5+PTX'), ('Maxwell+Tegra', '5.3'), ('Maxwell', '5.0;5.2+PTX'), ('Pascal', '6.0;6.1+PTX'), ('Volta', '7.0+PTX'), ('Turing', '7.5+PTX'),])supported_arches = ['3.5', '3.7', '5.0', '5.2', '5.3', '6.0', '6.1', '6.2', '7.0', '7.2', '7.5']改为 ...

August 29, 2021 · 1 min · jiezi

关于深度学习:深度学习组件手动实现

卷积import numpy as npinput_data=[ [[1,0,1,2,1], [0,2,1,0,1], [1,1,0,2,0], [2,2,1,1,0], [2,0,1,2,0]], [[2,0,2,1,1], [0,1,0,0,2], [1,0,0,2,1], [1,1,2,1,0], [1,0,1,1,1]] ]weights_data=[ [[ 1, 0, 1], [-1, 1, 0], [ 0,-1, 0]], [[-1, 0, 1], [ 0, 0, 1], [ 1, 1, 1]] ]#fm:[h,w]#kernel:[k,k]#return rs:[h,w] def compute_conv(fm,kernel): [h,w]=fm.shape [k,_]=kernel.shape r=int(k/2) #定义边界填充0后的map padding_fm=np.zeros([h+2,w+2],np.float32) #保留计算结果 rs=np.zeros([h,w],np.float32) #将输出在指定该区域赋值,即除了4个边界后,剩下的区域 padding_fm[1:h+1,1:w+1]=fm #对每个点为核心的区域遍历 for i in range(1,h+1): for j in range(1,w+1): #取出以后点为核心的k*k区域 roi=padding_fm[i-r:i+r+1,j-r:j+r+1] #计算以后点的卷积,对k*k个点点乘后求和 rs[i-1][j-1]=np.sum(roi*kernel) return rs def my_conv2d(input,weights): [c,h,w]=input.shape [_,k,_]=weights.shape outputs=np.zeros([h,w],np.float32) #对每个feature map遍历,从而对每个feature map进行卷积 for i in range(c): #feature map==>[h,w] f_map=input[i] #kernel ==>[k,k] w=weights[i] rs =compute_conv(f_map,w) outputs=outputs+rs return outputsdef main(): #shape=[c,h,w] input = np.asarray(input_data,np.float32) #shape=[in_c,k,k] weights = np.asarray(weights_data,np.float32) rs=my_conv2d(input,weights) print(rs) if __name__=='__main__': main() 反卷积(反卷积=卷积+填充+裁剪)input_data=[ [[1,0,1], [0,2,1], [1,1,0]], [[2,0,2], [0,1,0], [1,0,0]], [[1,1,1], [2,2,0], [1,1,1]], [[1,1,2], [1,0,1], [0,2,2]] ]weights_data=[ [[[ 1, 0, 1], [-1, 1, 0], [ 0,-1, 0]], [[-1, 0, 1], [ 0, 0, 1], [ 1, 1, 1]], [[ 0, 1, 1], [ 2, 0, 1], [ 1, 2, 1]], [[ 1, 1, 1], [ 0, 2, 1], [ 1, 0, 1]]], [[[ 1, 0, 2], [-2, 1, 1], [ 1,-1, 0]], [[-1, 0, 1], [-1, 2, 1], [ 1, 1, 1]], [[ 0, 0, 0], [ 2, 2, 1], [ 1,-1, 1]], [[ 2, 1, 1], [ 0,-1, 1], [ 1, 1, 1]]] ]#依据输出map([h,w])和卷积核([k,k]),计算卷积后的feature mapimport numpy as npdef compute_conv(fm,kernel): [h,w]=fm.shape [k,_]=kernel.shape r=int(k/2) #定义边界填充0后的map padding_fm=np.zeros([h+2,w+2],np.float32) #保留计算结果 rs=np.zeros([h,w],np.float32) #将输出在指定该区域赋值,即除了4个边界后,剩下的区域 padding_fm[1:h+1,1:w+1]=fm #对每个点为核心的区域遍历 for i in range(1,h+1): for j in range(1,w+1): #取出以后点为核心的k*k区域 roi=padding_fm[i-r:i+r+1,j-r:j+r+1] #计算以后点的卷积,对k*k个点点乘后求和 rs[i-1][j-1]=np.sum(roi*kernel) return rs #填充0def fill_zeros(input): [c,h,w]=input.shape rs=np.zeros([c,h*2+1,w*2+1],np.float32) for i in range(c): for j in range(h): for k in range(w): rs[i,2*j+1,2*k+1]=input[i,j,k] return rsdef my_deconv(input,weights): #weights shape=[out_c,in_c,h,w] [out_c,in_c,h,w]=weights.shape out_h=h*2 out_w=w*2 rs=[] for i in range(out_c): w=weights[i] tmp=np.zeros([out_h,out_w],np.float32) for j in range(in_c): conv=compute_conv(input[j],w[j]) #留神裁剪,最初一行和最初一列去掉 tmp=tmp+conv[0:out_h,0:out_w] rs.append(tmp) return rs def main(): input=np.asarray(input_data,np.float32) input= fill_zeros(input) weights=np.asarray(weights_data,np.float32) deconv=my_deconv(input,weights) print(np.asarray(deconv))if __name__=='__main__': main()Dropoutimport numpy as npdef dropout(x, p, mode='train'): keep_prob = 1 - p if mode == 'train': x *= np.random.binomial(1, keep_prob, size=x.shape) else: x *= keep_prob return x---------------------test = np.random.binomial(5, 0.5, 10) #伯努利二项式散布print(test)输入:[1 5 5 2 4 2 3 3 2 3](一次抛5枚硬币,每枚硬币侧面朝上概率为0.5,做10次试验,求每次试验产生侧面朝上的硬币个数:)IOUdef IOU(x1,y1,X1,Y1,x2,y2,X2,Y2): xx=max(x1,x2) XX=min(X1,X2) yy=max(y1,y2) YY=min(Y1,Y2) m=max(0,XX-xx) n=max(0,YY-yy) jiao=m*n bing=(X1-x1+1)*(Y1-y1+1)+(X2-x2+1)*(Y2-y2+1)-jiao #+1避免为0 return jiao/bingNMSdef py_cpu_nms(dets, thresh): #首先数据赋值和计算对应矩形框的面积 #dets的数据格式是dets[[xmin,ymin,xmax,ymax,scores]....] x1 = dets[:,0] y1 = dets[:,1] x2 = dets[:,2] y2 = dets[:,3] areas = (y2-y1+1) * (x2-x1+1) scores = dets[:,4] print('areas ',areas) print('scores ',scores) #这边的keep用于寄存,NMS后残余的方框 keep = [] #取出分数从大到小排列的索引。.argsort()是从小到大排列,[::-1]是列表头和尾颠倒一下。 index = scores.argsort()[::-1] print(index) #下面这两句比方分数[0.72 0.8 0.92 0.72 0.81 0.9 ] # 对应的索引index[ 2 5 4 1 3 0 ]记住是取出索引,scores列表没变。 #index会剔除遍历过的方框,和合并过的方框。 while index.size >0: print(index.size) #取出第一个方框进行和其余方框比对,看有没有能够合并的 i = index[0] # every time the first is the biggst, and add it directly #因为咱们这边分数曾经按从大到小排列了。 #所以如果有合并存在,也是保留分数最高的这个,也就是咱们当初那个这个 #keep保留的是索引值,不是具体的分数。 keep.append(i) print(keep) print('x1',x1[i]) print(x1[index[1:]]) #计算交加的左上角和右下角 #这里要留神,比方x1[i]这个方框的左上角x和所有其余的方框的左上角x的 x11 = np.maximum(x1[i], x1[index[1:]]) # calculate the points of overlap y11 = np.maximum(y1[i], y1[index[1:]]) x22 = np.minimum(x2[i], x2[index[1:]]) y22 = np.minimum(y2[i], y2[index[1:]]) print(x11,y11,x22,y22) #这边要留神,如果两个方框相交,X22-X11和Y22-Y11是正的。 #如果两个方框不相交,X22-X11和Y22-Y11是负的,咱们把不相交的W和H设为0. w = np.maximum(0, x22-x11+1) h = np.maximum(0, y22-y11+1) #计算重叠面积就是下面说的交加面积。不相交因为W和H都是0,所以不相交面积为0 overlaps = w*h print('overlaps is',overlaps) #这个就是IOU公式(交并比)。 #得进去的ious是一个列表,外面领有以后方框和其余所有方框的IOU后果。 ious = overlaps / (areas[i]+areas[index[1:]] - overlaps) print('ious is',ious) #接下来是合并重叠度最大的方框,也就是合并ious中值大于thresh的方框 #咱们合并的操作就是把他们剔除,因为咱们合并这些方框只保留下分数最高的。 #咱们通过排序以后咱们操作的方框就是分数最高的,所以咱们剔除其余和以后重叠度最高的方框 #这里np.where(ious<=thresh)[0]是一个固定写法。 idx = np.where(ious<=thresh)[0] print(idx) #把留下来框在进行NMS操作 #这边留下的框是去除以后操作的框,和以后操作的框重叠度大于thresh的框 #每一次都会先去除以后操作框,所以索引的列表就会向前挪动移位,要还原就+1,向后挪动一位 index = index[idx+1] # because index start from 1 print(index) return keepBatchNormalizationdef Batchnorm_simple_for_train(x, gamma, beta, bn_param):"""param:x : 输出数据,设shape(B,L)param:gama : 缩放因子 param:beta : 平移因子 param:bn_param : batchnorm所须要的一些参数 eps : 靠近0的数,避免分母呈现0 momentum : 动量参数,个别为0.9, 0.99, 0.999 running_mean :滑动均匀的形式计算新的均值,训练时计算,为测试数据做筹备 running_var : 滑动均匀的形式计算新的方差,训练时计算,为测试数据做筹备""" running_mean = bn_param['running_mean'] #shape = [B] running_var = bn_param['running_var'] #shape = [B] momentun = bn_param['momentun'] #shape = [B] results = 0. # 建设一个新的变量 x_mean=x.mean(axis=0) # 计算x的均值 x_var=x.var(axis=0) # 计算方差 running_mean = momentum * running_mean + (1 - momentum) * x_mean running_var = momentum * running_var + (1 - momentum) * x_var x_normalized=(x - running_mean)/np.sqrt(running_var + eps) # 归一化 results = gamma * x_normalized + beta # 缩放平移 #记录新的值 bn_param['running_mean'] = running_mean bn_param['running_var'] = running_var return results , bn_paramdef Batchnorm_simple_for_test(x, gamma, beta, bn_param):"""param:x : 输出数据,设shape(B,L)param:gama : 缩放因子 param:beta : 平移因子 param:bn_param : batchnorm所须要的一些参数 eps : 靠近0的数,避免分母呈现0 momentum : 动量参数,个别为0.9, 0.99, 0.999 running_mean :滑动均匀的形式计算新的均值,训练时计算,为测试数据做筹备 running_var : 滑动均匀的形式计算新的方差,训练时计算,为测试数据做筹备""" running_mean = bn_param['running_mean'] #shape = [B] running_var = bn_param['running_var'] #shape = [B] results = 0. # 建设一个新的变量 x_normalized=(x-running_mean )/np.sqrt(running_var +eps) # 归一化 results = gamma * x_normalized + beta # 缩放平移 return results , bn_param

August 28, 2021 · 4 min · jiezi

关于深度学习:智能语音技术从哪儿来往何处去

近几年,语音辨认技术逐步走向成熟,越来越多的互联网公司及硬件厂商在布局智能语音的商业幅员。万物互联的浪潮势不可挡,智能语音技术在汽车、智能家居、教育等各个领域全面开花。 智能语音从何倒退至今?以后面临怎么的时机与挑战?将来又将倒退成什么样的状态?本次咱们访谈了OPPO资深语音架构师Elon,他将为咱们介绍智能语音技术的残缺倒退门路。 Q1:是否简略介绍一下语音技术的倒退历程呢?早在计算机创造之前,1920年便有了“Radio Rex”玩具狗这种晚期的语音辨认雏形,能够视为人类对智能语音技术的首次摸索;而真正意义上基于计算机的智能语音技术倒退最早可追溯至20世纪50年代,从1952年第一个语音识别系统Audrey诞生到当初已走过了近70个年头,晚期次要是贝尔实验室、伦敦学院等学术机构在做该方向的布局;到20世纪90年代前后,呈现了寰球首个非特定谈话人的大词汇量间断语音识别系统Sphinx,以及起初一度被学术届广泛应用的剑桥HTK等开源工具;过后中国高科技倒退打算863打算也启动,语音辨认作为智能计算机系统钻研的重要方向之一,被专门列为研究课题;20世纪末至21世纪初,是语音辨认疾速倒退、从学术界逐渐走向产业化的阶段,大略在2009年左右,深度学习在语音技术畛域发力,辨认成果获得了很大冲破;2011年苹果手机虚构助理Siri诞生,之后的10年工夫里,语音相干技术和团队开始从学术界走到工业界,不论是互联网公司还是传统硬件厂商,都开始布局智能语音技术,并逐渐落地了Alexa、Google Assistant、天猫精灵、小度小度、小爱同学等一系列家喻户晓的智能语音交互产品。纵观整个智能语音交互技术的倒退历程,从一开始只反对非常简单的指令辨认,到前面反对较为简单的话术了解,并在多场景、多设施上实现了大规模落地,逐渐缩短了用户与服务之间的中转门路;小布助手的前身Breeno也正是在这个大背景下于2018年12月诞生的。 Q2:语音技术在近几年蓬勃发展的起因是什么呢?首先,语音是人类人造的信息传播形式,机器通过辨认语音、了解其中的表白,更加快捷的满足用户需要,实质上就是在让人与智能设施之间的信息交换更加高效,尤其是对于驾车、家居等场景,语音技术能大幅晋升人机交互体验。此外,技术倒退与行业倒退高度相干。国内厂商之所以做智能音箱,更多受到了亚马逊做Alexa的影响,Alexa让国外用户感知到家居场景语音交互的便利性;国内的话,小爱同学及天猫精灵是先把产品做进去,让一部分用户用起来,进而扭转了这个行业,让更多入局者退出这个赛道,让更多用户感觉到智能音箱的便当。随着智能音箱的入户,以及更多家居设施反对了AIOT,用户能够通过智能音箱这个中枢去管制家里更多智能设施,就会越来越喜爱用智能交互产品,有点像马太效应,让用户因为一个产品感知到了便利性,并催生他们购买更多产品的时候,一个生态闭环就建设起来了,就会有越来越多用户违心用语音交互去管制设施,去获取服务。最初,随着智能助手使用率的一直晋升,线上数据规模不断扩大,咱们能够用更多实在数据去做更好模型的优化迭代,从而让成果变得更好。从算法技术的演进来看,过来10-20年基本上都是基于有标注数据做模型训练,比方要辨认一句话,须要先把很多句话的每一个字,每一句话都标注成文字,退出模型训练,通过有监督学习实现模型优化。当初,行业开始尝试无监督学习,Facebook曾经有科研成果证实,基于无标注的海量数据无监督学习也能很好地实现语音辨认模型训练。 Q3:不同厂商做智能语音的出发点是什么呢?国内的话有不少厂商在做,比如说小米、阿里和百度等,然而每家厂商做这个事件的出发点是不一样的。百度做智能语音其实是心愿通过小度将搜寻的产品状态从纯网页文本框搜寻变成联合语音交互的更天然的搜寻输出状态,通过小度音箱这个产品,收集一些用户信息,建设用户画像,而后给用户举荐一些原先只能通过网页搜寻举荐的内容。阿里做天猫精灵则是心愿占据家居场景的流量入口,实现AIoT生态建设的同时,把用户牵引至阿里生态里的虾米音乐、优酷、天猫、及饿了么等内容服务上。小米做智能音箱的出发点和这两家有显著不同,因为小米的出发点是通过“米家+小爱同学“构建小米万物互联的AIoT生态,笼罩智能生存的方方面面。OPPO做小布助手的出发点,则是心愿在手机硬件+软件产品根底上,通过小布助手的各种能力建设,让用户一直感知产品的“智慧、懂你”,同时打造公司的科技品牌,随着公司多设施生态的不断完善,最终实现万物互融战略目标。 Q4:以后语音技术面临的怎么的时机?我认为时机挺大的。首先,用户教育老本升高。以后,越来越多的用户是从Z世代进入的,这一代的人跟智能接触的更多,他们不像咱们父母那代或者咱们这一代是从一个无智能时代进入到智能时代,这些用户自身对语音交互或者AI类的交互有着人造的相熟感。此外,Z世代的人是间接就进入了数字世界,他对数字世界是十分相熟的,就像当初很小的一个小朋友都会拿着手机去触碰操作,很早就相熟了硬件产品里的一些虚构事物。另一方面,用户与智能产品的情感分割愈发严密。现实生活中,曾经有一些小朋友会因为手机中的游戏人物死去而悲伤很久,然而却很少因为身边某个人比拟惆怅的事件,或者身边某个实在的人的逝去而惆怅很久。这其实反映了一个问题,就是数字世界的很多货色曾经将人的感官株连了起来。那这个时候,我感觉智能助手在这方面有很大的时机,人们跟硬件产品中的虚拟世界越来越交融,也就是所谓的代入感加强,随着生存压力、社交压力的减少,其实他们也更心愿与虚构人物交换,而不违心去跟身边人进行更多的交换。在这种情境下,智能助手可能会变成越来越多用户想要去沟通和接触的一个虚构对象,而语音技术是其中最为要害的情感和信息纽带。 Q5:以后语音技术面临着什么样的窘境呢?首先,用户对隐衷泄露的放心加剧。用户在应用智能交互产品的同时,他也会逐步意识到隐衷问题。过来几年咱们会在各大平台看到用户质疑设施是不是在监听,比如说我跟你聊了个雨伞,后果早晨淘宝或者天猫就给我举荐雨伞。所以很多用户想利用语音更便捷的获取服务,然而同时他又胆怯设施被继续监听。我感觉这是整个行业都在面临的一个挑战,包含欧盟出台GDPR其实也都是为了爱护整个智能生态的隐衷数据安全。此外,用户对语音助手的冀望与技术实现能力之间有落差。语音助手的背地是服务,用户对于语音助手的冀望是一个真正的人,只是它是数字化的,所以用户对它的冀望永远是很高的。用户通常认为所谓智能就是无所不能,然而技术是有瓶颈的,这就意味着技术只能实现一些能力范畴内的事件。然而用户对于智能产品会有比拟刻薄的要求,他须要智能产品要会查天气,又要会聊天,情商智商都高。然而回到事实中。情商和智商都高的人是很少的。《黑客与画家》外面提到一个观点:每个产品最初长成的样子跟打造这个产品的那些人是类似的,因为它决定了这个产品的灵魂应该是什么样子。对于智能助手来说,它是靠工程师、产品经理和研发团队去做成的,比如说有100人的团队,那这100人的智商情商就决定了这个智能助手大抵会是什么样子。 Q6:将来智能语音的利用场景和状态会倒退成什么样?首先从用户感知层面,最晚期是满足用户基于文字的交互,逐步过渡到语音交互,当初及将来更多的过渡到多模态交互。在利用场景上,AIoT在智能家居上的利用越来越宽泛,用户能够通过语音管制整个家里的设施。还有就是智能驾驶,其实在16年的时候,阿里就跟斑马互联网汽车,包含上汽三家单干了一款智能汽车,在这款车上曾经搭载语音助手。像特斯拉,小鹏和蔚来这样一些新能源汽车,语音助手曾经成为这些汽车的标配,基本逻辑是在于在车载环境下,用户更加专一于驾驶平安。驾驶平安就意味着你在开车的时候不能去查看手机,专一地进行驾驶操作,那当你想在驾驶过程中听音乐或者打电话的时候,只能通过语音交互实现,让驾驶变得更加平安,同时让整个驾驶体验变得更好。当初每个车厂都在布局做这块,甚至成立了自研团队去打造本人的技术。此外,智能助手须要做到的是让用户与机器之间的交互门路变得更短。以前可能通过好几步,比方UI触控去获取服务。但当初,通过一句话就能够实现天气查问、打电话这些很简略的操作。然而目前的交互门路还不算短,因为当初的执行逻辑还是语音辨认先转成文字,而后文字去做用意了解,最初再到对话治理,之后咱们还要持续缩短这个门路,让机器能间接可能了解人说的话,不须要两头文字的转化。智能语音的终极状态,咱们冀望是能够脱离具体的产品状态,能够是齐全数字化的。所以我感觉OPPO公司策略里提到的万物互融还是挺有想象力的。到最初,其实你不关怀那个货色到底是一个手机,还是一个音箱,还是其余的智能设施,就站在用户的角度,他只关怀一件事就是当我须要什么服务的时候,我闭口谈话就行了,不须要通过其余第三方的输出媒介去实现一些比较复杂的操作。 Q7:如何对待当初语音助手纷纷进行生态化赋能?我感觉还是回到用户自身,不论是往生态化倒退还是某个场景去倒退都是在帮忙用户去解决在某个场景外面很外围的一些需要问题。比方AIoT在家居场景的倒退,会发现越来越多的设施,比如说传统的灯,空调都开始反对语音管制。背地的逻辑是心愿解决用户在家外面管制这些设施不不便的问题,而后让整个家变得更加智能。语音助手实质上还是服务触达的媒介,是用户获取服务时最天然的一种表达方式,它的倒退方向始终是为了解决用户的外围需要问题。 更多精彩内容,欢送关注[OPPO数智技术]公众号

August 24, 2021 · 1 min · jiezi

关于深度学习:pytorch的pth权重转化为tensorflow的ckpt文件

import tensorflow as tfimport torchdef convert(bin_path, ckptpath): with tf.Session() as sess: for var_name, value in torch.load(bin_path, map_location='cpu').items(): print(var_name) # 输入权重文件中的变量名 tf.Variable(initial_value=value, name=var_name) saver = tf.train.Saver() sess.run(tf.global_variables_initializer()) saver.save(sess, ckpt_path)bin_path = 'model.pth'ckpt_path = 'new_model.ckpt'convert(bin_path, ckpt_path)     

August 24, 2021 · 1 min · jiezi

关于深度学习:使用pytorchviz画出好看的Pytorch模型网络结构

在Pytorch中能够应用tensorboardX画出网络结构图,但总感觉不太好看。pytorchviz 仿佛是一个不错的抉择。 应用办法:from torchviz import make_dotfrom torch.autograd import Variablenet = Model()x = Variable(torch.randn(3,32,32))vis_graph = make_dot(net(x), params=dict(net.named_parameters()))vis_graph.directory = "Net_Structure" # 设置可视化文件的导出门路vis_graph.format = "png" # 如果不加这一句,生成的则是pdfvis_graph.view()如果单纯地pip install torchviz,会报以下谬误: graphviz.backend.ExecutableNotFound: failed to execute ['dot', '-Tpdf', '-O', 'Digraph.gv'], make sure the Graphviz executables are on your systems' PATH正确的办法: 下载package并解压到本地,例如D:/test . 我下载的是:这个Add D:\test\Graphviz\bin to User pathAdd D:\test\Graphviz\bin\dot.exe to System Path重启计算机再运行下面的程序后就会发现网络结构图会呈现在一个pdf或png中 https://zhuanlan.zhihu.com/p/220403674?utm_source=wechat_session https://stackoverflow.com/questions/35064304/runtimeerror-make-sure-the-graphviz-executables-are-on-your-systems-path-aft

August 24, 2021 · 1 min · jiezi

关于深度学习:pytorch模型转换为onnx并使用netron可视化

netron 是一个十分好用的网络结构可视化工具。 应用办法: pip install netronimport netronnetron.start('my.pth')然而netron对pytorch模型的反对还不成熟。本人试的成果是生成的模型图没有连线。 这里就有一个把 .pth 模型转化为 .onnx 模型。 Pytorch模型转onnximport torchfrom model import Modelold_net_path = 'lenet.pth'new_net_path = 'lenet.onnx'device = torch.device('cuda' if torch.cuda.is_available() else 'cpu' )# 导入模型net = Model().to(device)net.load_state_dict(torch.load(old_net_path, map_location=device))net.eval()input = torch.randn(1, 1, 30, 30).to(device) # BCHW 其中Batch必须为1,因为测试时个别为1,尺寸HW必须和训练时的尺寸统一torch.onnx.export(net, input, new_net_path, verbose=False)可视化onnx模型import netronnetron.start('lenet.onnx')效果图:

August 24, 2021 · 1 min · jiezi

关于深度学习:ubuntu20安装tensorRT

大体来说装置的办法有两种: 用run装置cuda, 用wheel装置 tensorrt,益处是能够本人选驱动的版本;(大多数人抉择的的办法,也是本文介绍的办法)如果想装置tensorRT的deb版本,cuda必须应用deb装置,然而cuda的deb版本装置的时候可能会笼罩你曾经装置的nvidia驱动。一、下载官网下载tar版本的文件。 trt官网只更新到了反对ubuntu18.04,然而这个版本是能够在ubuntu20.04上应用的。二、装置下载之后解压: tar -xzvf c-7.2.3.4.Ubuntu-18.04.x86_64-gnu.cuda-11.1.cudnn8.1.tar.gz失去tensorRT文件夹,进入其中的python目录,外面提供了多种版本的tensorrt可供装置。 倡议在虚拟环境中装置。 conda create -n name python=3.7.0留神:如果想要在python3.7中应用tensorRT,那么这里肯定要写3.7.0,否则可能报错,很坑。同理,想用3.6就写3.6.0创立完之后conda activate name进入新环境。开始装置。 这里就装置cp37的版本,应用命令: pip install tensorrt-7.2.3.4-cp37-none-linux_x86_64.whl 可能的报错: ERROR: tensorrt-7.2.3.4-cp37-none-linux_x86_64.whl is not a supported wheel on this platform起因:python版本不统一(就是刚刚说的问题)解决办法:确认anaconda环境中的python版本是否与要装置的tensorrt的python版本统一找不到.so.7文件起因:.so.7文件在解压完的源文件中的lib文件夹里,须要将它增加到环境变量中解决办法:1. 关上:sudo gedit ~/.bashrc2. 在最初增加: export LD_LIBRARY_PATH="/tensorRT解压门路/lib:$LD_LIBRARY_PATH"3. 刷新:source ~/.bashrc装置实现后进入python输出tensorRT即可验证tensorRT是否装置胜利 不报错即胜利. 接着进入tensorRT下的uff文件夹装置whl(tensorflow会用到) pip install uff-0.6.9-py2.py3-none-any.whl 至此,Ubuntu与TensorRT装置胜利! https://zhuanlan.zhihu.com/p/159591904

August 24, 2021 · 1 min · jiezi

关于深度学习:CNN-工作原理

1 人工神经网络1.1 神经元神经网络由大量的神经元相互连接而成。每个神经元承受线性组合的输出后,最开始只是简略的线性加权,起初给每个神经元加上了非线性的激活函数,从而进行非线性变换后输入。每两个神经元之间的连贯代表加权值,称之为权重(weight)。不同的权重和激活函数,则会导致神经网络不同的输入。 举个手写辨认的例子,给定一个未知数字,让神经网络辨认是什么数字。此时的神经网络的输出由一组被输出图像的像素所激活的输出神经元所定义。在通过非线性激活函数进行非线性变换后,神经元被激活而后被传递到其余神经元。反复这一过程,直到最初一个输入神经元被激活。从而辨认以后数字是什么字。 神经网络的每个神经元如下 根本wx + b的模式,其中 x1、x2示意输出向量 w1、w2为权重,几个输出则意味着有几个权重,即每个输出都被赋予一个权重 b为偏置bias g(z) 为激活函数 a 为输入 如果只是下面这样一说,预计以前没接触过的十有八九又必然迷糊了。事实上,上述简略模型能够追溯到20世纪50/60年代的感知器,能够把感知器了解为一个依据不同因素、以及各个因素的重要性水平而做决策的模型。 举个例子,这周末北京有一草莓音乐节,那去不去呢?决定你是否去有二个因素,这二个因素能够对应二个输出,别离用x1、x2示意。此外,这二个因素对做决策的影响水平不一样,各自的影响水平用权重w1、w2示意。一般来说,音乐节的演唱嘉宾会十分影响你去不去,唱得好的前提下 即使没人陪同都可忍受,但如果唱得不好还不如你下台唱呢。所以,咱们能够如下示意: x1:是否有喜爱的演唱嘉宾。x1 = 1 你喜爱这些嘉宾,x1 = 0 你不喜爱这些嘉宾。嘉宾因素的权重w1 = 7 x2:是否有人陪你同去。x2 = 1 有人陪你同去,x2 = 0 没人陪你同去。是否有人陪同的权重w2 = 3。 这样,咱们的决策模型便建设起来了:g(z) = g(w1x1 + w2x2 + b ),g示意激活函数,这里的b能够了解成 为更好达到目标而做调整的偏置项。 一开始为了简略,人们把激活函数定义成一个线性函数,即对于后果做一个线性变动,比方一个简略的线性激活函数是g(z) = z,输入都是输出的线性变换。起初理论利用中发现,线性激活函数太过局限,于是人们引入了非线性激活函数。 1.2 激活函数罕用的非线性激活函数有sigmoid、tanh、relu等等,前两者sigmoid/tanh比拟常见于全连贯层,后者relu常见于卷积层。这里先简要介绍下最根底的sigmoid函数(btw,在本博客中SVM那篇文章结尾有提过)。 sigmoid的函数表达式如下 其中z是一个线性组合,比方z能够等于:b + w1x1 + w2x2。通过代入很大的负数或很小的正数到g(z)函数中可知,其后果趋近于0或1。 因而,sigmoid函数g(z)的图形示意如下( 横轴示意定义域z,纵轴示意值域g(z) ): 也就是说,sigmoid函数的性能是相当于把一个实数压缩至0到1之间。当z是十分大的负数时,g(z)会趋近于1,而z是十分小的正数时,则g(z)会趋近于0。 压缩至0到1有何用处呢?用途是这样一来便能够把激活函数看作一种“分类的概率”,比方激活函数的输入为0.9的话便能够解释为90%的概率为正样本。 举个例子,如下图(图引自Stanford机器学习公开课) z = b + w1x1 + w2x2,其中b为偏置项 假设取-30,w1、w2都取为20 ...

August 16, 2021 · 1 min · jiezi

关于深度学习:论文解读目标检测算法Conformer

本文次要对指标检测算法Conformer进行讲述,本文逻辑构造和论文保持一致。论文:Conformer: Local Features Coupling Global Representations for Visual Recognition代码: https://github.com/pengzhilia... 摘要在卷积神经网络 (CNN) 中,卷积操作善于提取部分特色,但难以捕捉全局示意。在本文中,咱们提出了一种称为 Conformer 的混合网络结构,以利用卷积运算和自注意力机制来加强示意学习。 Conformer 源于特色耦合单元 (FCU),它以交互方式交融不同分辨率下的部分特色和全局示意。 Conformer 采纳并发构造,最大限度保留部分特色和全局表征。在 ImageNet 上的性能比transformer(DeiT-B)高 2.3%。 在 MSCOCO 上,它在对象检测和实例宰割方面的性能别离比 ResNet-101 高 3.7% 和 3.6%钻研背景卷积神经网络 (CNN)具备显着先进的计算机视觉工作,例如图像分类、对象检测和实例宰割。 这在很大水平上归功于卷积操作,它以分层的形式收集部分特色作为弱小的图像示意。 只管在部分特征提取方面具备劣势,但 CNN 难以捕获全局表征,这通常对高级计算机视觉工作至关重要。 一个直观的解决方案是扩充感触野,但这可能须要更密集但具备破坏性的池化操作。最近,transformer 架构 已被引入视觉工作。 ViT 办法 通过宰割每个图像成带有地位嵌入的patch来构建一个tokens,并利用级联transformer块来提取参数化向量作为视觉示意。 因为自注意力机制和多层感知器(MLP)构造,transformer反映了简单的空间变换和长距离特色依赖性,形成了全局示意。 可怜的是,察看到视觉transformer疏忽了部分特色细节,这升高了背景和前景之间的可分别性。 一些改良的视觉转换器提出了一个标记化模块或利用 CNN 特色图作为输出标记来捕捉特色相邻信息。 然而,对于如何将部分特色和全局示意准确地互相嵌入的问题依然存在。钻研现状在深度学习时代,CNN能够被视为具备不同接管场的部分特色的分层集成。 可怜的是,大多数 CNNs善于提取部分特色,但难以捕获全局线索。CNN: 为了缓解这种限度,一种解决方案是通过引入更深的架构和/或更多的池化操作来定义更大的感触野 。 空洞卷积办法 减少了采样步长,而可变形卷积 学习了采样地位。 SENet和 GENet 提出应用 global Avgpooling 来聚合全局上下文,而后用它来从新加权特色通道,而 CBAM 别离应用 global Maxpooling 和 global Avgpooling 在空间和通道维度上独立地细化特色。 ...

August 6, 2021 · 2 min · jiezi

关于深度学习:论文解读RepPoints

本文次要对指标检测算法RepPoints进行具体讲述,本文逻辑构造和论文保持一致,深入分析作者的钻研思路。论文:RepPoints: Point Set Representation for Object Detection代码: https://github.com/microsoft/... 摘要存在问题The bounding box is convenient to use but provides only a coarse localization of objects and leads to a correspondingly coarse extraction of object features作者认为目前指标检测算法次要是通过初步bounding box(如anchors, proposals)来提取框内特色进行最终分类和定位的,因为边框无奈提供指标形态信息,而且整个边框外部含有很多多余信息,以及边框定位不精确,这会导致提取的特色精度较差。 提出的办法we present RepPoints (representative points), a new finer representation of objects as a set of sample points useful for both localization and recognition. Given ground truth localization and recognition targets for training, RepPoints learn to automatically arrange themselves in a manner that bounds the spatial extent of an object and indicates semantically significant local areas. They furthermore do not require the use of anchors to sample a space of bounding box翻新点:作者应用一系列采样点取代了bounding box来提取指标特色,并进行分类和依据采样点生成矩形伪框来实现定位,通过采样点来抉择指标特色绝对bounding box更具代表性,更准确。而且采样点是通过神经网络定位和分类损失函数反向流传自行抉择的。 ...

August 6, 2021 · 1 min · jiezi

关于深度学习:深度学习中的分布式训练

1. 为什么须要分布式训练随着人工智能与深度学习的倒退,大规模和超大规模的模型越来越受到业界的推崇。以NLP行业为例,从最开始的Bert-base只有1亿左右的参数量,到千亿级别的GPT-3,再到往年6月公布的目前寰球最大预训练模型“悟道2.0”,参数规模达到惊人的1.75万亿,整个业界都由一种向更大模型倒退的趋势。面对如此宏大的模型,必然也须要宏大的数据量能力进行训练,如果没有分布式训练的大算力加持,一个Epoch可能就要训练到天荒地老。抛开业界淬炼超大模型的场景,对于一个AI行业的一般算法工程师,面对日常的工作,分布式训练也能够大大减速模型的训练、调参的节奏、以及版本的迭代更新,在工夫如此宝贵的当下,置信没有工程师会抗拒分布式训练带来的收益。因而,咱们明天就聊聊深度学习中对于分布式训练的那些事儿。 2. 分布式训练策略分布式训练策略依照并行形式不同,能够简略的分为数据并行和模型并行两种形式。 2.1 数据并行数据并行是指在不同的GPU上都copy保留一份模型的正本,而后将不同的数据调配到不同的GPU上进行计算,最初将所有GPU计算的后果进行合并,从而达到减速模型训练的目标。因为数据并行会波及到把不同GPU的计算结果进行合并而后再更新模型,依据跟新形式不同,又能够分为同步更新和异步更新。在数据并行中,每个GPU只计算一个batch中的一部分数据,同步更新指的就是在期待所有的GPU都计算实现之后,而后再对立合并和更新网络的权重,并播送到所有的GPU中,随后进行下一轮的计算。而异步跟新不同,异步更新中每个GPU在独立计算实现之后,都无需期待其余GPU,能够立刻更新整体权重,而后播送到其余GPU中,随后马上进入下一轮的计算。由此可见,同步更新须要期待所有的GPU都计算实现能力更新,如果集群中某一个GPU训练慢了,或者集群中的通信呈现抖动,都会影响到整个网络的训练速度,相似木桶效应,最短板决定了最大的容量。而异步更新因为不必期待其余GPU节点,因而总体训练速度会快一些,然而会有一个重大的梯度生效的问题。即在异步的状况下,每一个节点实现训练之后,都会马上去更新,这会造成其余节点当初的模型参数和这一轮训练前采纳的模型参数可能不统一,从而导致此时的梯度过期。因而,异步更新尽管快,然而因为梯度生效问题,模型往往会陷入到次优解中。 2.2 模型并行与数据并行不同,分布式训练中的模型并行是指将整个神经网络模型拆解散布到不同的GPU中,不同的GPU负责计算网络模型中的不同局部。这通常是在网络模型很大很大、单个GPU的显存曾经齐全装不下整体网络的状况下才会采纳。因为深度学习的模型通常蕴含很多层,层与层之间的运行有先后训练,前向流传和反向梯度计算的时候,后面的层和前面的层都会彼此依赖作为输入输出,因而这种串行的逻辑对减速造成了肯定的限度。然而相比起来,咱们也算能够通过模型并行的形式把一个超大模型训练起来,不然对于一个单GPU的话,超大模型是齐全没方法work的。因而,比照起来,模型并行因为各个GPU只加载了模型的一部分网络结构,存在肯定的依赖关系,造成了规模的伸缩性比拟差,不能随便的增减GPU的数量,因而在理论中使用的并不多。而数据并行的形式,因为各个GPU互相独立,不便GPU的扩缩容,同时减速成果好,因而在理论中使用较多,然而在某些时候,咱们也能够同时联合数据并行和模型并行两种形式。 3. 基于Pytorch的分布式训练方法在Pytorch中为咱们提供了两种多GPU的分布式训练计划:torch.nn.DataParallel(DP)和 torch.nn.parallel.Distributed Data Parallel(DDP)。 3.1 Data ParallelDP模式应用起来非常容易,只须要对单GPU的代码批改其中一行就能够运行了,因为DP模式采纳的是PS架构,存在负载不平衡问题,主卡往往会成为训练的瓶颈,因而训练速度会比DDP模式慢一些。而且DP只反对单机多卡的形式,个别一台机器只能装置最多8张卡,当咱们要训练特地大型的工作时,8卡就会显得特地吃紧,因而会有肯定的限度。 # use DataParallelif torch.cuda.device_count() > 1:    print("Let's use", torch.cuda.device_count(), "GPUs!")    model = torch.nn.DataParallel(model)model.to(device)3.2 DistributedDataParallel与DP模式不同,DDP模式自身是为多机多卡设计的,当然在单机多卡的状况下也能够应用。DDP采纳的是all-reduce架构,根本解决了PS架构中通信老本与GPU的数量线性相关的问题。尽管在单机多卡状况下,能够应用DP模式,然而应用DDP通常会比DP模式快一些,因而DDP模式也是官网举荐大家应用的形式。革新现有的代码应用DDP也十分不便,通过上面几个步骤就能够轻松搞定。 # 1. init backend nccltorch.distributed.init_process_group(backend='nccl')# 2. config gpulocal_rank = torch.distributed.get_rank()torch.cuda.set_device(local_rank)device = torch.device("cuda", local_rank)# 3. use DistributedSamplertraining_loader = DataLoader(training_set, batch_size=TRAIN_BATCH_SIZE, sampler=DistributedSampler(training_set))# 4. move model to gpumodel.to(device)# 5. use DistributedDataParallelif torch.cuda.device_count() > 1:    print("Let's use", torch.cuda.device_count(), "GPUs!")    model = DistributedDataParallel(model, device_ids=[local_rank], output_device=local_rank)3.3 Horovod除了Pytorch原生提供的DP和DDP形式以外,也有很多优良的由第三方提供的分布式训练工具,其中Horovod就是比拟罕用的一款。Horovod是Uber开源的跨平台分布式训练框架(horovod名字来源于俄罗斯一种民间舞蹈,舞者手拉手站成一个圆圈跳舞,类比了GPU设施之间的通信模式,如果该框架是中国人或者华人开发的话,我预计可能就叫“锅庄”了吧^-^),从名字能够看进去,Horovod采纳all-reduce架构来进步分布式设施的通信效率。同时,Horovod不仅反对Pytorch,也反对TensorFlow等其余深度学习框架。训练中如果想应用Horovod的话,其实对代码的改变也比拟少,如下所示。 import horovod.torch as hvd# 1. init horovodhvd.init()# 2. Pin GPU to be used to process local rank (one GPU per process)torch.cuda.set_device(hvd.local_rank())# 3. Partition dataset among workers using DistributedSamplertrain_sampler = DistributedSampler(training_set, num_replicas=hvd.size(), rank=hvd.rank())training_loader = DataLoader(training_set, batch_size=TRAIN_BATCH_SIZE, sampler=train_sampler)# 4. Add Horovod Distributed Optimizeroptimizer = hvd.DistributedOptimizer(optimizer, named_parameters=model.named_parameters())# 5. Horovod: broadcast parameters from rank 0 to all other processes.hvd.broadcast_parameters(model.state_dict(), root_rank=0)另外,字节跳动也开源了一款高性能的分布式深度学习训练框架BytePS(我的项目github地址:https://github.com/bytedance/...),该框架没有采纳热门的all-reduce,反而采纳了PS架构,通过利用额定的CPU资源作为Parameter Server等措施,晋升了通信性能,据说成果能够优于Horovod。而在几天之前,快手联结苏黎世理工也发表开源了一款分布式训练框架Bagua(八卦),Bagua专门针对分布式场景设计了特定的优化算法,实现了算法和零碎层面的联结优化,性能较同类晋升60%。感兴趣的同学也能够关注一下。我的项目github地址:https://github.com/BaguaSys/b... 4. 试验比照这里咱们比照了Pytorch原生的DP和DDP模式,同时也抉择了第三方插件Horovod进行比照。试验抉择了基于bert-base的预训练语言模型进行文本分类的工作。具体试验参数如下:GPU型号: V100, learning_rate: 2e-5, batch_size: 128, max_len: 128, epochs: 1, train_set_size: 48w因为DDP和Horovod都是采纳all-reduce架构,因而性能相当,可见Pytorch原生的DDP模式也曾经做得十分不错了。而DP相比其余模式性能就会差一些。因而在理论工作中,还是比拟举荐应用DDP或者Horovod进行分布式训练。 总结本文探讨了深度学习中模型并行和数据并行的分布式策略,并基于Pytorch框架介绍了原生的DP和DDP模式,以及第三方Horovod分布式训练框架。从前面的试验比照能够看出,平时工作中比拟举荐应用DDP或者Horovod的形式。分布式训练是深度学习中十分重要的一环,除了Horovod,其余各大厂商也相继开源了本人的分布式训练框架,比方BytePS、DeepSpeed、Bagua等等,这些框架的开源也将进一步推动这个畛域的倒退,为深度学习提供更优良的工具。 作者简介Hongyu OPPO高级NLP算法工程师次要从事NLP、常识图谱及相干畛域的工作 获取更多精彩内容,扫码关注[OPPO数智技术]公众号

August 3, 2021 · 1 min · jiezi

关于深度学习:新工具上线sdkmgr命令行助力流水线构建

【介绍】sdkmgr是HarmonyOS SDK管理工具,开发者可间接应用命令来查看、下载、卸载HarmonyOS SDK,其反对通过自动化构建脚本调用,举荐在流水线构建出包时应用。 【劣势】相较于DevEco Studio图形化界面下载HarmonyOS SDK的形式,sdkmgr具备两大劣势: 劣势一:可在无图形界面的状况下应用,举个例子,Linux环境服务器很多没有图形界面,个别没法通过DevEco Studio进行SDK治理,而sdkmgr能够在各种零碎下应用。 劣势二:通过应用sdkmgr,开发者可自动化构建脚本,无需手动生成hap包,主动在流水线上生成hap包。 【应用】sdkmgr指令名是sdkmgr,开发者可通过输出命令的形式,来查看、装置/更新和卸载多个HarmonyOS SDK组件。 sdkmgr具体操作步骤如下: ① 在HarmonyOS利用开发官网,获取sdkmgr的安装包并解压。 ② 解压后,关上命令行终端工具,如Cmd,Powershell等,进入到sdkmgr工具的bin目录。 ③ 确保网络失常的状况下,输出相干命令,执行查看/装置/更新/卸载等命令。 对于SDK组件执行查看/装置/更新/卸载等命令示例及应用场景,能够参照以下表格: 【结尾】自上线以来,DevEco Studio始终以开发者的开发体验为先,一次次的迭代降级,一次次提供便捷开发的工具,只为服务每一个你。将来,咱们将继续更新命令行工具(Command Line Tools),为大家带来更多高效开发体验,欢送大家点击【浏览原文】,获取sdkmgr命令行工具下载地址。 下载体验后,在公众号后盾写下你的应用体验,反馈及倡议,与咱们携手成长,齐步迈向万物互联的新时代!

July 30, 2021 · 1 min · jiezi

关于深度学习:Tensorflow-serving-with-docker

本次教程的目标是率领大家看下如何用 Docker 部署深度学习模型的 第一步咱们须要 pull 一个 docker image sudo docker pull tensorflow/serving 如上图所示,执行 pull 之后,咱们看到本地曾经存在 tensorflow/serving:latest 接下来咱们 clone 一个仓库 git clone https://github.com/tensorflow/serving 上图中的 saved_model_half_plus_two_cpu 就是咱们想要部署的模型 而后咱们能够间接运行以下命令实现部署 运行后果如下图所示,咱们能够看到 Exporting HTTP/REST API at:localhost:8501,那么就代表着部署胜利了 接下来咱们能够进行预测,返回的后果也能对的上

July 29, 2021 · 1 min · jiezi

关于深度学习:刷新50多个NLP任务基准并登顶SuperGLUE全球榜首百度ERNIE-30知识增强大模型显威力

近日,百度ERNIE降级到3.0,重磅公布常识加强的百亿参数大模型。该模型除了从海量文本数据中学习词汇、构造、语义等常识外,还从大规模常识图谱中学习。 ERNIE 3.0一举刷新54个中文NLP工作基准,其英文模型在国内权威的简单语言了解工作评测SuperGLUE上, 以超过人类程度0.8个百分点的问题登顶寰球榜首。ERNIE 3.0同时具备超强语言理解能力以及写小说、歌词、诗歌、对联等文学创作能力。 目前ERNIE 3.0已在百度文心官网凋谢,用户可体验ERNIE 3.0创作的不同模式的内容,实现更多有创意、有价值的利用。 论文链接:https://arxiv.org/pdf/2107.02...Demo链接:https://wenxin.baidu.com/wenx... ERNIE 3.0常识加强大模型:百亿级预训练中首次引入大规模常识近一年来,以GPT-3、Switch-Transformer为代表的大规模预训练模型,带来了人工智能畛域新的冲破,因为其弱小的通用性和卓越的迁徙能力,掀起了预训练模型往大规模参数化发展的浪潮。然而,现有的大规模预训练模型,次要依赖纯文本学习,不足大规模常识领导学习,模型能力存在局限。 ERNIE 3.0的研究者进一步开掘大规模预训练模型的后劲,基于深度学习平台飞桨的分布式训练技术劣势,首次在百亿级预训练模型中引入大规模常识图谱,提出了海量无监督文本与大规模常识图谱的平行预训练方法(Universal Knowledge-Text Prediction)。通过将大规模常识图谱的实体关系与大规模文本数据同时输出到预训练模型中进行联结掩码训练,促成了结构化常识和无构造文本之间的信息共享,大幅晋升了模型对于常识的记忆和推理能力。 (ERNIE 3.0中的文本与常识平行预训练) ERNIE 3.0对立预­训练框架:同时具备语言了解和语言生成能力百度研究者提出了将通用语义示意与工作语义示意相结合的模型框架,该框架交融自编码和自回归等不同的工作语义示意网络,既可同时解决语言了解和语言生成工作,还能做无标注数据的零样本学习(Zero-shot Learning)和有标注数据的微调训练(Fine-tuning)。此外,ERNIE 3.0在继续学习框架的根底上,减少了工作语义示意网络,减速模型进化。 (ERNIE 3.0框架) ERNIE3.0框架分为两层。第一层是通用语义示意网络,该网络学习数据中的根底和通用的常识。第二层是工作语义示意网络,该网络基于通用语义示意,学习工作相干的常识。不同工作语义示意网络可通过自编码构造或者自回归构造实现,并通过底层共享实现交互和加强。在学习过程中,工作语义示意网络只学习对应类别的预训练任务,而通用语义示意网络会学习所有的预训练任务。 ERNIE 3.0成果:一举刷新54个中文NLP工作基准百度研究者在54个中文自然语言解决公开数据集,蕴含情感剖析、观点抽取、浏览了解、文本摘要、对话生成、数学运算等工作上,全面验证评估了ERNIE 3.0的成果和通用能力。ERNIE 3.0均获得了以后最好成果,其中,在20多个不同类型的自然语言解决工作上获得了3%以上的显著晋升。 (ERNIE 3.0在Fine-tuning范式下的工作成果) 在理论利用中,往往不足标注数据,因而,百度研究者也测试了ERNIE 3.0在Zero-shot Learning(零样本学习)范式下的成果,ERNIE 3.0在大多数工作上绝对已有的中文大模型也获得了显著的成果晋升。 (ERNIE 3.0在零样本学习下的成果) ERNIE 3.0英文模型登顶SuperGLUE:超过人类程度0.8个百分点除了中文模型的惊艳成果,ERNIE 3.0英文模型在国内权威的简单语言了解工作评测SuperGLUE上超过谷歌的T5、OpenAI的GPT-3等大模型,以超过人类程度0.8个百分点的问题登顶寰球榜首。 SuperGLUE是由谷歌DeepMind、Facebook研究院、纽约大学、华盛顿大学等多个权威机构联结发­布的简单语言了解工作评测,旨在晋升常识推理、因果判断、上下文消歧、指代消解等简单工作的成果。 (ERNIE 3.0登顶SuperGLUE寰球榜首) 事实上,早在2019年12月,ERNIE就曾以9个工作均匀得分首次冲破90大关的问题登顶GLUE寰球榜首。这次ERNIE 3.0在SuperGLUE评测上夺冠,再次证实了ERNIE的弱小实力。 (ERNIE登顶GLUE寰球榜首) 写小说、写歌词、写古文:ERNIE 3.0文学创作与常识把握能力显著晋升ERNIE 3.0,在文学创作能力方面也有了显著晋升,能够通过对海量文本与常识的学习,无需专门训练,即可进行文学创作。 ERNIE 3.0对常识的把握,同样大幅晋升,通过常识图谱对模型进行加强,让模型具备更强的常识记忆和推理能力。 目前这些能力曾经凋谢体验,大家能够点击(Demo地址)亲自感触ERNIE 3.0的技术魅力。 文心ERNIE自2019年诞生至今,在语言了解、文本生成、跨模态语义了解等畛域获得一系列技术冲破,在公开权威语义评测中斩获了十余项世界冠军。2020年,文心荣获世界人工智能大会(WAIC)最高奖项SAIL奖。 目前,文心ERNIE已大规模利用于搜寻、信息流、智能音箱等互联网产品,并通过百度智能云输入到工业、能源、金融、通信、媒体、教育等各行各业,助力产业智能化降级。本次公布的ERNIE 3.0也将进一步晋升利用成果,发明更大的经济与社会价值。 想要体验ERNIE 3.0文学创作和常识把握能力的小伙伴,点击下方链接拜访Demo。 Demo链接:https://wenxin.baidu.com/wenx... 百度自然语言解决(Natural Language Processing,NLP)以『了解语言,领有智能,扭转世界』为使命,研发自然语言解决核心技术,打造当先的技术平台和翻新产品,服务寰球用户,让简单的世界更简略。

July 6, 2021 · 1 min · jiezi

关于深度学习:关于深度学习编译器这些知识你需要了解一下

摘要:深度学习编译器能够作为框架和硬件之间的公共组件和桥梁,最终心愿实现的指标是咱们只用开发一次,就可能为主动为任何设施生成最优代码。本文分享自华为云社区《深度学习编译器简介》,原文作者:luchangli 。 最近的十几年深度学习倒退十分迅速,业界呈现了很多深度学习算法开发框架。同时,因为深度学习具备广泛应用场景和对算力的微小需要,咱们须要将深度学习算法运行在各种通用和专用的硬件上,比方各种类型的CPU,GPU,TPU,NPU等。那么这就呈现了框架和硬件之间的组合爆炸,如图 1所示。比如说TensorFlow要反对GPU计算,就要把tensorflow外面的所有算子开发一个GPU版本,如果又要反对D芯片,又须要把每个算子开发一个D芯片的版本。这个过程无疑十分耗时耗力。 图 1 于此同时,咱们当初有十分多的算法网络,比如说YOLO, BERT, GPT等等。而这些算法网络是是由不同类型、不同shape,不同连贯关系的算子组成的。最终它们又运行在不同品种和型号的硬件下面。这就导致人工去为每个场景开发和实现最优算子老本很高。这里举了两个例子,如图 2所示,算子交融是一个常见的性能优化办法,在交融之前,每个算子计算前后都须要把数据从内存读到缓存,再从缓存写回到内存。而交融之后,能够防止算子之间内存读写从而进步性能。传统的做法就是人工去依据算子连贯关系开发交融算子,然而不同网络不同类别算子连贯关系简直不可能齐全枚举。另一个例子就是算子调优,算子实现过程有很多参数会影响性能,然而传统人工算子开发方式很难去表白和保护这些参数,并且对这些参数进行调优从而实现不同shape和硬件的最优性能。 图 2 深度学习编译器正是为了解决下面一系列问题而诞生的,它能够作为框架和硬件之间的公共组件和桥梁,最终心愿实现的指标是咱们只用开发一次,就可能为主动为任何设施生成最优代码。比方为CPU开发的算子能够简直原封不同的用于GPU和D芯片,从而显著降低成本。 这里简略介绍一下深度学习编译器的组成部分和性能,如图 3所示。首先它的前端是从不同的框架拿到计算图,并且应用这个High level IR的数据结构来示意,而后在这个阶段进行一系列图优化,比方常量折叠,算子交融,等价替换等。这里展现了一个等价替换的例子,原来计算图是这样的,咱们给它换一个计算形式,后果不变,然而性能可能更优。接着,对于计算图外面的每一个算子,采纳DSL一种畛域特定的语言来形容算子的计算过程和对算子进行优化。比方对算子进行tiling,多核,double-buffer等优化。因为算子的计算过程通常是用多重循环来实现的,比如说矩阵乘法是一个三重的循环。深度学习编译器能够很不便的对循环进行各种变换,并且对这些变换的参数进行调优,从而失去不同shape和硬件的最佳算子实现。最初,基于low level IR为不同硬件生成具体的代码。 图 3 最初介绍下业界已有的编译器我的项目。目前生态最欠缺,开源的,框架不依赖的我的项目首推TVM,曾经被很多公司所采纳。TVM流程如如图 3a所示,TVM能够导入各个框架的模型,例如TensorFlow pb,onnx,TorchScript等模型,对立用TVM称为Relay的High level IR进行示意。IR中每个算子采纳了Tensor expression的DSL来进行计算形容和调度。这个DSL采纳Einstein’s notation的形式进行算子的compute形容,算子compute个别体现为多重for循环。而后基于Halide思维应用schedule对这个多重for循环进行各种变换,例如循环合并,split,程序变换等等。最初,lower到low-level IR生成具体的device代码并进行推理。 这里再简略介绍下TVM具体如何生成最优的算子代码。下面介绍了算子须要进行compute形容,而后须要对compute对应的多重for循环进行调度变换,即schedule。TVM的算子生成和调优经验了3代倒退。第一代TVM/AutoTVM,这一代须要用户编写算子的compute和算子的schedule,AutoTVM与TVM的区别在于能够在schedule定义一些可变的参数,而后采纳例如遗传算法进行参数调优。例如把一个loop切分为2段,那么在哪里进行切分是能够进行优化的。第二代AutoScheduler (Ansor),这一代只须要用户开发算子ompute,Ansor外部主动依据一些规定进行调度变换。因为调度开发须要同时相熟TVM的表白机制和底层硬件原理,schedule开发往往具备很高的难度,因而Ansor能够显著升高开发人员工作量和开发难度,毛病就是Ansor调优工夫很长,往往须要1小时能力调优1个算子。以卷积网络为例,Ansor在局部场景能超过TensorFlow算子性能,间隔TensorRT实现有肯定差距。第三代Meta Schedule (AutoTensorIR)才处于起步阶段,预期会对调优速度和性能进行优化,临时还不可用,咱们刮目相待。 TVM的落地包含华为D芯片TBE算子开发工具,在TVM的根底上减少了D芯片的代码生成反对。TVM采纳了Halide计算+调度的路线,还有另外一种采纳polyhedral算法路线的编译器,比方Tensor Comprehensions,Tiramisu,华为自研的AKG等。这种办法跟Ansor一样,也只须要用户开发算子compute,无需开发schedule,因而对用户也较为敌对。其中AKG曾经用在了MindSpore的图算交融外面。其余的深度学习编译器还有TensorFlow的XLA、TensorRT等,大家可能曾经用过。 总之,深度学习编译器具备很多劣势。比方易于反对新硬件,防止反复开发,采纳一系列主动优化代替人工优化,能够实现极致性价比等。目前深度学习编译器也有一些有余,依然出于一个疾速倒退的状态。例如调优工夫长,对于简单的算子无奈无效生成,一个模型中深度学习编译器生成的算子能超过库调用的算子比例较低等,依然须要大家继续投入和优化。 点击关注,第一工夫理解华为云陈腐技术~

July 6, 2021 · 1 min · jiezi

关于深度学习:解决Darknet编译时报MSB3721错误

原文地址:https://blog.lanweihong.com/p... 谬误形容我在应用 VS 2015 编译 darknet 我的项目时报如下谬误: Github相干 issues: darknet build error MSB3721。 尝试解决1. 批改 darknet.vcxproj 文件中 Code Generation 的值,即 compute_75,sm_75 (未解决)按在网上找到解决办法 VS2015配置darknet我的项目时遇到MSB3721的解决办法 尝试解决。 批改 darknet.vcxproj 文件中的两处 Code Generation,将 compute_86,sm_86(网上说的compute_75,sm_75,我这里是 compute_86,sm_86) 批改为 compute_52,sm_52; 批改后残缺的值为 compute_30,sm_30;compute_52,sm_52。 这里的 compute_52,sm_52 是通过计算得进去的值,可能每个用户的显卡不一样,值也不一样,我的显卡是 GTX 1050Ti,这里用 "52",其余型号的显卡请查看英伟达的GPU算力表,地址是:https://developer.nvidia.com/... 。 在 VS 2015 的 "darknet 属性页" 窗口中,批改 Code Generation 的值为 compute_30,sm_30;compute_52,sm_52; 在 VS 2015 中从新生成 darknet,发现还是 生成失败,还是报 MSB 3721 谬误。2. 删除 Code Generation 中的 compute_75,sm_75(未解决)编辑 darknet.vcxproj,将 Code Generation 中的 compute_75,sm_75 删掉;同样的,在 VS 2015 的 "darknet 属性页" 窗口中,将 compute_75,sm_75 删掉;在 VS 2015 中从新生成 darknet,发现还是 生成失败,还是报 MSB 3721 谬误。3. 删除 Code Generation 选项(未解决)编辑 darknet.vcxproj 文件,删除 Code Generation 这项参数,留神的是删除后, darknet 会默认设置该参数值为 compute_52,sm_52,这个在从新生成 darknet 后代码输入中可看到。 ...

July 6, 2021 · 2 min · jiezi

关于深度学习:深度学习分类任务常用评估指标

摘要:这篇文章次要向大家介绍深度学习分类工作评估指标,次要内容包含根底利用、实用技巧、原理机制等方面,心愿对大家有所帮忙。本文分享自华为云社区《深度学习分类工作罕用评估指标》,原文作者:lutianfei 。 这篇文章次要向大家介绍深度学习分类工作评估指标,次要内容包含根底利用、实用技巧、原理机制等方面,心愿对大家有所帮忙。 分类模型混同矩阵sklearn实现: sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None)返回值:一个格式化的字符串,给出了分类后果的混同矩阵。参数:参考classification_report 。混同矩阵的内容如下,其中Cij示意实在标记为i然而预测为j的样本的数量。Confusion Matrix:[[5 0][3 2]]def calc_confusion_matrix(y_true: list, y_pred: list, show=True, save=False, figsize=(16, 16), verbose=False): """ 计算混同矩阵 :param y_true: :param y_pred: :param show: :param save: :param figsize: :param verbose: :return: """ confusion = confusion_matrix(y_true, y_pred) if verbose: print(confusion) if show: show_confusion_matrix(confusion, figsize=figsize, save=save) return confusiondef show_confusion_matrix(confusion, classes=MY_CLASSES, x_rot=-60, figsize=None, save=False): """ 绘制混同矩阵 :param confusion: :param classes: :param x_rot: :param figsize: :param save: :return: """ if figsize is not None: plt.rcParams['figure.figsize'] = figsize plt.imshow(confusion, cmap=plt.cm.YlOrRd) indices = range(len(confusion)) plt.xticks(indices, classes, rotation=x_rot, fontsize=12) plt.yticks(indices, classes, fontsize=12) plt.colorbar() plt.xlabel('y_pred') plt.ylabel('y_true') # 显示数据 for first_index in range(len(confusion)): for second_index in range(len(confusion[first_index])): plt.text(first_index, second_index, confusion[first_index][second_index]) if save: plt.savefig("./confusion_matrix.png") plt.show()混同矩阵是监督学习中的一种可视化工具,次要用于比拟分类后果和实例的实在信息。矩阵中的每一行代表实例的预测类别,每一列代表实例的实在类别。 ...

June 25, 2021 · 6 min · jiezi

关于深度学习:云管理平台建设这项功能必不可缺-↓

本文尝试从云治理平台的相干使用者角度,来看云治理平台的外围需要。 一、建设部门的外围需要:云治理和运维云治理平台的建设,个别都是由云资源的治理部门负责的,从部门人员本身的角度登程,会比拟看重各类资源的运维治理能力,比方多种云平台的对立治理、对非云资源的对立治理、资源疾速调配、监控、运维自动化等。二、管理者的外围需要:云经营云治理平台的建设,从管理者角度,要解决的外围问题是:清晰理解资源分配给了谁,应用状况如何,是否通过肯定的经营伎俩缩小老本等。三、云资源使用者的外围需要:云服务云治理平台的使用者,也就是各个做业务的部门,是云治理平台范畴和人数最大的用户。他们的外围需要是,须要的多种各类资源和服务是否疾速申请获取,应用过程中是否提供罕用的操作性能,操作又是否不便等等。 如上三类云治理平台的用户,云资源的使用者是云治理平台中人数最多的,对云治理平台是否推广胜利有着无足轻重的作用。同时云资源的使用者也是云治理平台的“外部用户”,对云治理平台建设是否胜利有着比拟强的话语权和评估权——“本人说好不是好,用户说好才是真的好”,因而这类客户的需要是须要高度重视的。 从企业云化的角度来说,云化的外围就是服务化,也就是实现各类资源的在线疾速供应,如果做了云化然而没有一个云服务门户来实现服务化,云化的价值就要大打折扣了。 在理论的我的项目中,因为云治理平台的性能范畴在行业内不足明确宽泛的共识,大家都依照本人的了解来对云治理平台提需要,云治理平台的初始需要会偏向于建设部门也就是资源运维人员的需要。直到平台上线后,外部用户的各种需要络绎不绝,才发现云服务能力才是重中之重,甚至因为平台在云服务侧的能力比拟弱导致云治理平台推动艰难。 所以,咱们强烈建议要高度重视云治理平台的云服务模块,将其建设成资源管理部门云能力的展现舞台和外部服务窗口。 那么,一个合格的云服务门户应该具备哪些特色呢? 云服务与云治理拆散。纳入“云治理”的资源只是云服务目录的一部分,“服务目录”能够来源于多个不同的资源和服务提供平台。所以云服务门户不能与云治理绑定,而是应该有肯定的独立性,尤其是用户体系、服务Portal页面应该与云治理是离开的; 良好的扩展性。易于接入各种IaaS、PaaS、运维等服务,并能够灵便扩大;流程、监控、报表等均可自在灵便定义;以适配企业逐渐云化和外部治理的逐渐优化过程; 对外部用户敌对,具备良好的可用性。须要基于用户应用场景有深刻的了解,好用易用,对于没有相干专业知识的外部用户异样重要。 灵便、无效的计量计费和剖析能力。能够无效撑持云经营,真正实现降低成本的指标,计量计费及剖析性能在混合云场景、团体云场景、行业云场景下会更加的重要。 总结:云服务门户是云化的重要标记,是云资源部门对外服务的窗口和能力的展现舞台,是云治理平台的建设是否胜利的重要标记和抓手,因而须要在云治理平台的建设中高度重视。 云服务门户是云治理平台中最重要的模块,甚至能够说没有之一。

June 25, 2021 · 1 min · jiezi

关于深度学习:生成式模型入门-GAN-与-VAE以假乱真的哲学

在图像处理中,比拟常见的工作有辨认、检测、追踪等,这些工作的模型通常在训练阶段通过参数估计学得如何提取输出图像的特色,并建设输出图像与输入之间的映射,在利用阶段之间提取输出图像的特色,以失去相应的后果。 但有这样一类非凡的模型,其参数估计的目标不是通过提取特色来建设输入输出之间的映射,而是学习训练数据的散布,从而模型在利用阶段可能生成与训练数据类似的图像,通常这些图像与实在图像极为类似,我愿称之为“以假乱真”的哲学,这类模型就是生成式模型。 基于特定散布进行数据生成,是近年来机器学习畛域钻研和落地,通常由由模型通过学习一组数据的散布,而后生成相似的数据。在机器学习畛域,支流的生成模型共有 4 类: 生成式反抗网络(Generative adversarial net, GAN)变分自编码器(variational autoencoder, VAE)变分自编码器(variational autoencoder, VAE)流模型(Flow-based model)这 4 类模型是基于不同的原理构建的,在本文中,我将介绍最常被用到的两类模型—— GAN 和 VAE。 生成反抗网络(GAN)生成式反抗网络(Generative adversarial net, GAN)是一种基于反抗学习的深度生成模型,最早由 Ian Goodfellow 在 《Generative Adversarial Nets》 提出,一经提出就成为了学术界钻研的热点,Ian Goodfellow 也因而被人称为“GANs 之父”(没错,就是那个写了花书的大佬 ヾ(≧▽≦*)o )。 GAN 的根本思维想必看过金庸小说的同学们都晓得,“老顽童”周伯通有一样异于常人的本事——左右互博,有了这样一门文治,一来只有本人一个人也能玩得不可开交,二来本人一个人就能切磋武艺。那是不是神经网络也能够通过这种形式来“修炼功夫”? 反抗学习就是基于这样的思维。 GAN 的思维很简略,总结起来就是以假乱真、互相反抗,而它的做法也是十分之简略粗犷,同时(或者说交替)训练两个网络,通过两个网络之间的博弈,从而达到互相促进的作用。 在 GAN 的整体框架中,用于训练的模型由两个网络组成,一个网络是生成器 G (generator),用于数据的生成;另一个网络是判断器 D(discriminator),用于对生成器生成的数据和训练数据进行虚实判断。就拿图像生成为例,在图像生成模型的训练过程中: G 是生成图像的网络,它承受一个随机的噪声 \(z\) ,并依据噪声生成图像,生成的图像记作 \(G(z)\) ,D 是一个判断网络,判断一张图像是不是“实在的”。它的输出参数是 \(x\) ,\(x\) 代表一张图像,输入 \(D(x)\) 代表 \(x\) 为实在图片的概率,如果为 \(1\),就代表 \(100\%\) 是实在的图片,而输入为 \(0\),就代表不可能是实在的图像。在训练过程中,生成器和判断器就像是两个互相博弈的人,生成网络 G 的指标就是尽量生成实在的图像去坑骗判断网络 D,而 D 的指标就是尽量把 G 生成的图片和实在的图片别离开来。通过互相反抗,生成网络的生成能力和判断网络的判断能力将越来越强,最终当模型收敛时,咱们将失去一个生成成果较好的生成器。 ...

June 17, 2021 · 2 min · jiezi

关于深度学习:如何解决回归任务数据不均衡的问题

摘要:现有的解决不均衡数据/长尾散布的办法绝大多数都是针对分类问题,而回归问题中呈现的数据不平衡问题确极少被钻研。本文分享自华为云社区《如何解决回归工作数据不平衡的问题?》,原文作者:PG13。 现有的解决不均衡数据/长尾散布的办法绝大多数都是针对分类问题,而回归问题中呈现的数据不平衡问题确极少被钻研。然而,事实很多的工业预测场景都是须要解决回归的问题,也就是波及到间断的,甚至是有限多的目标值,如何解决回归问题中呈现的数据不平衡问题呢?ICML2021一篇被接管为Long oral presentation的论文:Delving into Deep Imbalanced Regression,推广了传统不平衡分类问题的范式,将数据不均衡问题从离散值域推广到了间断值域,并提出了两种解决深度不平衡回归问题的办法。 次要的奉献是三个方面:1)提出了一个深度不平衡回归(Deep Imbalanced Regression, DIR)工作,定义为从具备间断指标的不均衡数据中学习,并能泛化到整个指标范畴;2)提出了两种解决DIR的新办法,标签散布平滑(label distribution smoothing, LDS)和特色散布平滑(feature distribution smoothing, FDS),来解决具备间断指标的不均衡数据的学习问题;3)建设了5个新的DIR数据集,包含了CV、NLP、healthcare上的不均衡回归工作,致力于帮忙将来在不均衡数据上的钻研。 数据不均衡问题背景事实世界的数据通常不会每个类别都具备现实的均匀分布,而是呈现出长尾的偏斜散布,其中某些目标值的观测值显著较少,这对于深度学习模型有较大的挑战。传统的解决办法能够分为基于数据和基于模型两种:基于数据的解决方案无非对多数群体进行过采样和对少数群体进行下采样,比方SMOTE算法;基于模型的解决方案包含对损失函数的重加权(re-weighting)或利用相干的学习技巧,如迁徙学习、元学习、两阶段训练等。 然而现有的数据不均衡解决方案,次要是针对具备categorical index的目标值,也就是离散的类别标签数据。其目标值属于不同的类别,并且具备严格的硬边界,不同类别之间没有重叠。事实世界很多的预测场景可能波及到间断目标值的标签数据。比方,依据人脸视觉图片预测年龄,年龄便是一个间断的目标值,并且在指标范畴内可能会高度失衡。在工业畛域中,也会产生相似的问题,比方在水泥畛域,水泥熟料的品质,个别都是间断的目标值;在配煤畛域,焦炭的热强指标也是间断的目标值。这些利用中须要预测的指标变量往往存在许多罕见和极其值。在间断域的不均衡问题在线性模型和深度模型中都是存在的,在深度模型中甚至更为严重,这是因为深度学习模型的预测往往都是over-confident的,会导致这种不均衡问题被重大的放大。 因而,这篇文章定义了深度不均衡回归问题(DIR),即从具备间断目标值的不均衡数据中学习,同时须要解决某些指标区域的潜在的确数据,并使最终模型可能泛化到整个反对所有目标值的范畴上。 不均衡回归问题的挑战解决DIR问题的三个挑战如下: 对于间断的目标值(标签),不同目标值之间的硬边界不再存在,无奈间接采纳不均衡分类的解决办法。间断标签实质上阐明在不同的目标值之间的间隔是有意义的。这些目标值间接通知了哪些数据之间相隔更近,领导咱们该如何了解这个间断区间上的数据不平衡的水平。对于DIR,某些目标值可能基本没有数据,这为对目标值做extrapolation和interpolation提供了需要。解决办法一:标签散布平滑(LDS)首先通过一个例子展现一下当数据呈现不平衡的时候,分类和回归问题之间的区别。作者在两个不同的数据集:(1)CIFAR-100,一个100类的图像分类数据集;(2)IMDB-WIKI,一个用于依据人像估算年龄(回归)的图像数据集,进行了比拟。通过采样解决来模仿数据不均衡,保障两个数据集具备完全相同的标签密度散布,如下图所示: 而后,别离在两个数据集上训练一个ResNet-50模型,并画出它们的测试误差的散布。从图中能够看出,在不均衡的分类数据集CIFAR-100上,测试误差的散布与标签密度的散布是高度负相关的,这很好了解,因为领有更多样本的类别更容易学好。然而,间断标签空间的IMDB-WIKI的测试误差散布更加平滑,且不再与标签密度散布很好地相干。这阐明了对于间断标签,其教训标签密度并不能精确地反映模型所看到的不平衡。这是因为相临标签的数据样本之间是相干的,相互依赖的。 标签散布平滑:基于这些发现,作者提出了一种在统计学习畛域中的核密度估计(LDS)办法,给定间断的教训标签密度散布,LDS应用了一个对称核函数k,用教训密度散布与之卷积,失去一个kernel-smoothed的无效标签密度散布,用来直观体现邻近标签的数据样本具备的信息重叠问题,通过LDS计算出的无效标签密度散布后果与误差散布的相关性明显增强。有了LDS预计出的无效标签密度,就能够用解决类别不均衡问题的办法,间接利用于解决DIR问题。比方,最简略地一种make sence形式是利用重加权的办法,通过将损失函数乘以每个目标值的LDS预计标签密度的倒数来对其进行加权。 解决办法二:特色散布平滑(FDS)如果模型预测失常且数据是平衡的,那么label相近的samples,它们对应的feature的统计信息应该也是彼此靠近的。这里作者也举了一个实例验证了这个直觉。作者同样应用对IMDB-WIKI上训练的ResNet-50模型。次要focus在模型学习到的特色空间,不是标签空间。咱们关注的最小年龄差是1岁,因而咱们将标签空间分为了等距离的区间,将具备雷同指标区间的因素分到同一组。而后,针对每个区间中的数据计算其相应的特色统计量(均值、方差)。特色的统计量之间的相似性可视化为如下图: 红色区间代表anchor区间,计算这个anchor label与其余所有label的特色统计量(即均值、方差)的余弦类似度。此外,不同色彩区域(紫色,黄色,粉红色)示意不同的数据密度。从图中能够失去两个论断: anchor label和其邻近的区间的特色统计量是高度类似的。而anchor label = 30 刚好是在训练数据量十分多的区域。这阐明了,当有足够多的数据时,特色的统计量在邻近点是类似的。此外,在数据量很少的区域,如0-6岁的年龄范畴,与30岁年龄段的特色统计量高度类似。这种不合理的相似性是因为数据不平衡造成的。因为,0-6岁的数据很少,该范畴的特色会从具备最大数据量的范畴继承其先验。特色散布平滑:受到这些启发,作者提出了特色散布平滑(FDS)。FDS是对特色空间进行散布的平滑,实质上是在邻近的区间之间传递特色的统计信息。此过程的次要作用是去校准特色散布的潜在的有偏差的预计,尤其是对那些样本很少的目标值而言。 具体来说,有一个模型,f代表一个encoder将输出数据映射到隐层的特色,g作为一个predictor来输入间断的预测目标值。FDS会首先预计每个区间特色的统计信息。这里用特色的协方差代替方差,来反映特色z外部元素之间的关系。给定特色统计量,再次应用对称核函数k来smooth特色均值和协方差的散布,这样能够拿到统计信息的平滑版本。利用预计和平滑统计量,遵循规范的whitening and re-coloring过程来校准每个输出样本的特色示意。那么整个FDS过程能够通过在最终特色图之后插入一个特色的校准层,实现将FDS集成到深度网络中。最初,在每个epoch采纳了动量更新,来取得对训练过程中特色统计信息的一个更稳固和更精确的预计。 基准DIR数据集IMDB-WIKI-DIR(vision, age):基于IMDB-WIKI数据集,从蕴含人面部的图像来推断预计相应的年龄。AgeDB-DIR(vision, age):基于AgeDB数据集,同样是依据输出图像进行年龄预计。NYUD2-DIR(vision, depth):基于NYU2数据集,用于构建depth estimation的DIR工作。STS-B-DIR(NLP, test similarity score):基于STS-B数据集,工作是推断两个输出句子之间的语义文本的类似度得分。SHHS-DIR(Healthcare, health condition score):基于SHHS数据集,该工作是推断一个人的总体衰弱评分。具体的试验能够查看该论文,这里附上论文原文以及代码地址: [论文]:https://arxiv.org/abs/2102.09554 [代码]:https://github.com/YyzHarry/i... 点击关注,第一工夫理解华为云陈腐技术~

June 11, 2021 · 1 min · jiezi

关于深度学习:飞桨前沿升级顶级开源项目产教融合育人WAVE-SUMMIT论坛内容先睹为快

WAVE SUMMIT 2021深度学习开发者峰会将于5月20日正式开启,峰会上不仅将分享飞桨最新的技术升级,行业专家、出名高校学者、顶级开源我的项目发起人等也齐聚一堂,共话产业利用、人才培养、开源趋势。 除了精彩十足的主论坛之外,本次峰会还设置了5大平行论坛,主题笼罩飞桨框架最新降级个性、寰球出名开源我的项目分享、产业智能化实际案例、智能硬件生态、产教交融人才培养等。开发者们可依据本人的趣味抉择自在参加,以便获取更业余、深度的分享内容,纵情开展交换互动。 五大平行论坛到底有哪些干货?30+场主题分享又有哪些亮点?让咱们先睹为快! 【飞桨降级 前沿翻新】论坛 2016 年,飞桨PaddlePaddle正式开源,百度以多年的深度学习技术钻研和业务利用为根底,打造了中国首个自主研发、性能齐备、开源凋谢的产业级深度学习平台,让企业和开发者都防止反复“造轮子”,晋升开发效率与体验、推动AI技术在各行业里的理论落地利用。 在【飞桨降级 前沿翻新】论坛现场,飞桨团队将带你体验飞桨PaddlePaddle2.0重磅公布的新个性和重点降级套件,一起见证见证“生物计算:PaddleHelix 1.0”正式版的公布,以及量子计算“量桨”的降级。 飞桨分布式训练技术引领三代参数服务器架构,并且近期推出了多维混合并行技术 ,反对超大规模语言模型训练。百度主任架构师将会现场为大家深刻解析飞桨分布式训练技术,以及该技术在主播举荐,文心ERNIE等业务场景的利用。 自2014年提出以来,生成反抗网络的关注度出现指数型增长。开发者们能够现场体验PaddleGAN在老视频修复、脸部动作迁徙、唇形动作驱动、人脸卡通画的案例展现,理解PaddleGAN最新个性,进入PaddleGAN的魔法世界。 开课以来,百度飞桨技术公开课始终以技术解析与利用实战并存的独特劣势广受好评。在该平行论坛上,领有2W+学员的【零根底实际深度学习打卡营】也将首次举办结营典礼,开发者们能够和百度卓越架构师、飞桨产品负责人面对面交换,解答学习过程中的纳闷。 【开源凋谢 共创将来】论坛 凋敝的开源社区离不开优良的开源我的项目,飞桨在继续推动与业界优良开源我的项目的单干。开源凋谢论坛邀请寰球多个出名开源我的项目的技术负责人畅所欲言,独特摸索AI技术畛域的开源凋谢之道。 训练失去优质的深度学习模型之后,只有部署到生产环境中能力真正展现出模型及算法的价值。因而,如何在不同硬件环境中充分发挥硬件算力,多框架模型如何在工业生产环境中同时应用,Java的开发者如何将C++/Python开发的程序与本人的数据库利用整合等问题都非常要害。这场平行论坛邀请了 Tengine、Triton、DJL、Adlik等开源我的项目技术负责人,共话部署落地過程中的各种鲜为人知的秘诀,走顺深度学习的最初一公里。 中国AI技术在出海时有会遇到哪些艰难?开源我的项目如何发展壮大、吸引寰球的开发者退出?一个国际化的开源公司是如何打造的?Jina AI 创始人兼 CEO 肖涵也将在流动上与大家分享他对中国AI技术凋谢和国际化的深刻理解。 除此之外,来自DeePMD-kit的科学家将会分享机器学习与根底科研之间的穿插碰撞交融,FATE社区带来基于飞桨的机器学习生态实现横向视觉联邦以及OpenVINO部署减速、BentoML一站式部署机器学习模型、Milvus 搭建举荐零碎、Volcano落地实际等精彩内容。 【产教交融 人才共育】论坛 多年来,百度始终以“领头雁”身姿引领中国深度学习核心技术研发的同时,也继续赋能和引领人工智能科技教育倒退,为AI人才培养提供短缺能源。“新工科建设重点在人才,而人才培养的要害是师资。”该平行论坛邀请了清华大学、大连理工大学、吉林大学、中国农业大学及飞桨教育生态经营负责人共话人工智能时代下的产研单干、人才培养。 2018年,清华成立了跨学科的人工智能研究院,摸索AI翻新守业教育。2019年,清华大学根底工业训练核心设立人工智能翻新守业辅修业余,并于2020年设立人工智能翻新守业能力晋升证书我的项目。在平行论坛中,清华大学根底工业训练核心人工智能实验室主任周晋老师将分享人工智能翻新守业教育的“清华教训”,摸索新时代背景下的人才教育。 而作为第一批申报获批人工智能业余的高校之一,大连理工大学的AI人才培养经验了方向模块课程、新增业余方向、成立新业余三个阶段。王宇新老师将分享大连理工作为百度AI翻新实际基地,在师资培训、比赛、协同育人我的项目等方面和百度通力合作的教训。 吉林大学的玄玉波老师将分享教学过程以设计思维为外围的我的项目式造就,是如何培养新的翻新创业项目,并造就面向新兴产业造就工程能力强、创新能力强、具备国内竞争力的新工科人才。中国农业大学的赵明老师将介绍与百度进行深度单干、通过产学育人单干晋升《人工智能》课程建设品质的教学教训。 除此之外,本次WAVE SUMMIT峰会的平行论坛还有哪些意想不到的亮点?今天咱们将持续为大家介绍【产业护航 聚力共振】及【智能核芯 生态共赢】论坛的精彩内容。峰会倒计时3天,期待各位开发者的关注与参加!! 分论坛互动礼品 飞桨(PaddlePaddle)以百度多年的深度学习技术钻研和业务利用为根底,是中国首个开源凋谢、技术当先、性能齐备的产业级深度学习平台,包含飞桨开源平台和飞桨企业版。飞桨开源平台蕴含外围框架、根底模型库、端到端开发套件与工具组件,继续开源外围能力,为产业、学术、科研翻新提供根底底座。飞桨企业版基于飞桨开源平台,针对企业级需要加强了相应个性,蕴含零门槛AI开发平台EasyDL和全功能AI开发平台BML。EasyDL次要面向中小企业,提供零门槛、预置丰盛网络和模型、便捷高效的开发平台;BML是为大型企业提供的性能全面、可灵便定制和被深度集成的开发平台。

May 19, 2021 · 1 min · jiezi

关于深度学习:深度学习ssh远程连接断开之后怎样让模型继续训练

参考文章 采纳screen命令 screen -S name #创立一个窗口,并且为这个窗口命名screen -S yolo当你执行完以上命令后,就会主动跳入名为yolo的窗口,在这个窗口里执行相应操作 当不想呆在这个窗口时,能够通过快捷键Ctrl+a+D断开这个窗口的连贯而回到连贯会话界面 screen ls #能够查看已创立的所有窗口如果想看其中一个窗口工作的执行状态,能够通过如下指令 screen -r ssd #从新连贯到yolo窗口,显示其运行过程如果想间接进行某个窗口工作的运行,能够间接通过杀死id的形式 kill ssd #终止ssd窗口对应工作的运行,同时杀死该窗口

May 16, 2021 · 1 min · jiezi

关于深度学习:全国大学生物联网设计竞赛华为杯巡回技术讲座八校联动HarmonyOS与校园开发者面对面

2021年3月,全国大学生物联网设计比赛(华为杯)正式发表开赛,首次退出的HarmonyOS赛道引起了泛滥高校师生的关注。 为了更好的赋能校园开发者,比赛组委会打算开启8场全国巡回技术讲座,心愿通过华为专家对赛题的分析以及技术解读,帮忙校园师生把握HarmonyOS技术、疾速备战。同时在线下技术讲座中为师生筹备了丰盛的实际案例和现场的技术支持,能够在现场进行疾速实操。 目前,大赛的线下巡回技术讲座曾经走过了四川大学、上海交通大学、武汉大学等四站,每场都座无虚席,吸引了泛滥校园开发者积极参与并与讲师交换开发教训。 在首战启航的上海交通大学现场,大赛组委会秘书长王东老师为现场师生进行了2021年物联网设计大赛的整体介绍,同时分享了往届比赛中的开发技巧。 在技术讲座中华为HarmonyOS架构师张鑫深入浅出的为现场师生解读了HarmonyOS的理念和设计,不仅带着同学们回味了操作系统一路走来的风风雨雨,更是在赋能的同时将参加HarmonyOS设计开发的心路历程作为教训与现场同学分享。 华为HarmonyOS高级生态经理李红前为在场师生分析了本次大赛的赛题,介绍以后HarmonyOS提供的丰盛案例,演示Codelabs,同时激励同学们退出HarmonyOS生态奉献本人的开发案例。 华为HarmonyOS资深工程师王傲携手开发套件搭档,手把手率领现场师生通过华为开发工具HUAWEI DevEco Device Tool实现了一次智能硬件开发,同时承诺对于将来报名HarmonyOS赛队的师生,组委会会提供开发套件及技术支持,帮忙师生在大赛中产出具备翻新意义的作品。 在全国大学生物联网设计比赛(华为杯)武汉大学站的流动最初,专家为到场的参会学生进行了抽奖,并示意在大赛中将助力优良校园开发者,疾速实现商业闭环。 看到这其余地区的小伙伴是不是曾经开始焦急,不必放心,5月21日在西安交通大学咱们与各位师生不见不散,大家无妨刮目相待!

May 15, 2021 · 1 min · jiezi

关于深度学习:专访思泉软件专注低代码开发平台开发助力企业一体化智慧化管理

在疫情黑天鹅的影响之下,2020年,国内线上商务迎来突破性倒退。在衣食住行步入互联网模式之后,教育、办公也在这一年里失去阶段性的成长。其中最为典型的代表莫过于飘洋过海,行至日本的线上办公管理程序钉钉。2020年12月,钉钉发表推出了一款低代码利用开发平台,让有数人深刻理解到这种低门槛、低代码甚至无代码的企业治理平台开发方式。 低代码利用开发平台是指一种无需编码就能够疾速生成应用程序的开发平台。低代码开发平台的弱小之处在于,容许终端用户应用易于了解的可视化工具开发本人的应用程序,而不是传统的编写代码形式。对于大型企业来讲,低代码疾速开发平台作为一种新型的开发工具,它的呈现,不仅能够升高IT团队培训、技术部署的初始老本,还能够简化开发过程,缩短开发周期,进步开发效率,节俭开发成本。 作为优质的管理系统开发方式,低代码利用开发平台为各种类型的企业提供了一个自主开发、性能可进行自在调整的可能性,在数字化转型的时代,及时为企业进行一体化、智慧化的治理形式带来根底技术的反对。 只管许多人直到2020年末才理解到低代码利用开发平台,但实际上这种软件开发平台的研发早在多年前就曾经开始。2008年,曾经成立4年,并始终专一于OA、CRM等软件研发、征询、施行的企业——思泉软件,正式开启了低代码利用开发平台的研发。 汇聚了专业人才,在十几年的技术积淀下,思泉软件成为国内首家将OA与CRM齐全交融的平台化软件。同时,在平台底层技术上,思泉软件封装了"工作流、门户、建模、挪动、查问、集成、音讯、权限、平安"九大引擎,成为了国内多数将工作流引擎与疾速建模引擎齐全交融的平台化软件。先开发底层平台,再配置利用,思泉软件在技术上进行了彻底的平台化。后续的开发者可疾速配置性能利用,开发效率能进步80%以上。思泉软件依靠16年的专一研发教训,取得了诸多计算机软件著作权证书,在全国搭建了10多家服务机构为客户提供业余服务。 现在咱们曾经进入一个数字化的世界,企业治理从线下开始转向线上,泛滥企业开始要求更为优质的管理系统用于撑持转型。专一于OA、CRM、低代码利用开发平台的思泉软件精益求精,在底层技术上实现了企业管理系统一体化、智慧化的倒退指标,助力有数公司用数字化的形式,高效治理企业事务。 记者:思泉软件的研发是建设在什么样的需要之上?能够为企业客户解决哪个外围问题?思泉软件:从上世纪八十年代到当初,大多的中国软件厂商都是研发单零碎,如:OA厂商、ERP厂商、HR厂商等等,即便是一个公司研发进去的不同管理系统,也是互相独立的,从源头上造成了一家单位上了多套零碎的主观原状。如:ERP、HR、财务、OA、CRM等,造成了一个个信息孤岛。当初解决“信息孤岛”的方法大多是通过OA、BI软件去整合,能够解决一些问题,但成果不是特地现实,建设和保护老本都居高不下,也不能从本源上解决“信息孤岛”的问题。重大的困扰了企业的经营,也给老板做决策带来了数字化的挑战,是呀,没有精确的数据做撑持,怎能保障决策方向正确呢?软件行业,最早提倡数据集成、打消信息孤岛的是OA厂商,而后是BI厂商,最近两年是低代码开发平台厂商。OA厂商强调协同,大多是让异构零碎的单据调用OA中的工作流引擎来走审批流程,解决非OA零碎工作流技术短板的问题。BI厂商强调数据分析,通过BI与异构零碎做数据整合,为决策层提供适时的经营数据 ,及紧急事件揭示,通过BI做大数据分析后,为领导提供决策依据。私有化低代码开发平台厂商强调“中台”的概念,除了帮忙异构零碎做工作流审批、大数据分析外,还能依据用户的治理需要疾速开发利用,长期满足用户的信息化建设需要。这也是目前,企业接受度最多的模式。私有化低代码开发平台,装置部署快,易保护,性价比高,技术难度绝对非平台化管理软件来比,软件底层性能很弱小,开发利用神速,能将开效率进步80%以上,但在用户大并发、大数据处理时,就突显出了本人的劣势,因为大多管理软件没有大用户、多数据的应用场景。思泉软件是依据企业的理论状况,以 私有化低代码开发平台为根底,以解决理论问题为出发点,兼顾久远倒退指标,去解决用户的信息孤岛问题。 记者:你们所面对的企业是怎么的类型?一体化的低代码平台在不同公司的适配性上做了哪些设计? 思泉软件:思泉面对的其实是所有的B端客户,政府、学校、企业,不同规模的企业都适宜。其中规模化的、有信息化根底的企业尤为适宜这个低代码软件开发平台。 在性能上,“思泉低代码开发平台”是以“流程”为主线,以“门户治理”及“常识治理“为两冀,以“邮件、音讯、告诉”等外部沟通工具为信使,对单位“公共资源”进行集中管理、对立调度。,如:“会议室、车辆、图书、固定资产”整合所有异构零碎,以“打消信息孤岛,最终实现一体化”为终极目标。 记者:思泉软件低代码开发平台在竞品企业中有哪些劣势?思泉软件:与传统的软件开发相比,思泉低代码开发平台是针对平台的低层架构来评估,而通用软件则是针对软件的利用性能来评估。思泉低码码开发平台将“原型设计、编码开发、测试验证、挪动端开发“合并成了”利用开发“,能够间接调用之前封装好的代码做”拼积木“式开发,开发效率、软件品质、前期降级保护都失去了大幅度的晋升。总结看来,思泉软件开发平台有5大长处:第一,流程化。任何用户,都能够借助这平台的业余流程引擎,实现流程化治理。第二,平台化。九大引擎,标准化编程、个性化利用,可开发出泛滥规范或非规范的性能,通过独特的权限体系,分工协作 。第三,业余一体化。在一个平台上开发进去的模块,人造一体,从本源上打消了信息孤岛。第四,智慧化。思泉软件低代码开发平台与智能硬件集成,实现在5G大背景的综合性智能解决方案。第五点,大数据分析。思泉软件低代码开发平台在性能上能够实现大数据利用,并从广度、深度去剖析利用,为用户提供业余的数据反对,实现数字化治理降级。 记者:思泉软件低代码软件开发平台是否曾经开始投入商用?思泉软件:思泉软件低代码疾速开发平台是国内优良的软件疾速开发平台之一,也是国内首家将业余OA与CRM利用齐全融和的平台化软件,更是国内少有将底层“工作流技术及疾速建模技术”齐全融和的平台化软件,取得了央视的报道。平台现在曾经进入第四个阶段的开发和降级。目前正式客户曾经冲破200多家了,前期咱们还会加大利用模块的开发力度,在性能上,匹配更多的客户。 记者:思泉软件所开发的治理平台如何保障其安全性、稳定性以及大量信息可能在前期冗余时须要的拓展性?思泉软件:平台有个业余的平安引擎,专门保障平台的稳定性、安全性,具体为:对立申请验证,避免跨站攻打;参数化SQL操作,避免SQL注入攻打;通过加密传输,避免HTTP申请拦挡获取明码;通过加密数据申请,避免数据申请篡改,读取或删除数据;避免暴力破解:可设置0或n次谬误明码即要求输出验证码,验证码无效时长2分钟;会话超时主动退出;账号一段时间未登录应用过即锁定,避免账号被盗;账号强明码要求(明码长度、蕴含数字和大小写字母、蕴含特殊字符),避免简略明码被破解;明码不可逆加密存储(MD5),不以明文的形式保留和传输,通过数据库也无奈获知明码明文;零碎具备主动明码治理准则:明码定期更新(可设置更新的频率、几次以内明码不能雷同);Windows身份验证集成AD域;表单字段能够指定数据存储形式(明文、密文)、加密形式(MD5、RSA)。能够说做到了全方位保障平台所开发的管理系统平安问题。 记者:思泉软件如何帮忙企业实现高效能的同时,管制开发和前期运维老本?思泉软件:思泉低代码开发平台通过一直进步代码的“复用率”,就曾经将开发的老本升高80%以上了,因为开发方式曾经是模块化、微服服化,引擎化。用户前期调用、开发、保护都十分不便,老本极低,人员流动时,交接也容易的。 记者:将来企业信息化的趋势是什么?对此你们如何对开发软件进行降级? 思泉软件:管理软件通过了流程化、平台化,现正在经验一体化和智慧化。将来咱们会专一这个方向,深挖客户需要,将工作布局清晰定位在“一体化、智慧化”两个方面,摸索更多技术上的可能性与可操作性。

April 13, 2021 · 1 min · jiezi

关于图像识别:文字识别关键信息提取的3种探索方法

摘要:如何通过深度学习模型来从文档图片中自动化地提取出要害信息成为一项亟待解决的挑战,受到学术界和工业界的宽泛关注。本文分享自华为云社区《技术综述十:文字辨认之要害信息提取》,原文作者:小菜鸟chg 。 深度学习模型曾经在OCR畛域,包含文本检测和文本辨认工作,取得了微小的胜利。而从文档中提取要害信息(如图1所示),其作为OCR的上游工作,存在十分多的理论利用场景。应用人力来从这些文档中提取信息是反复且费时费力的。如何通过深度学习模型来从文档图片中自动化地提取出要害信息成为一项亟待解决的挑战,受到学术界和工业界的宽泛关注。上面将对近期几篇相干文章进行简要介绍,并将其分为三个类别:基于栅格(grid-based)、基于图构造(graph-based)和端到端(end-to-end)。 (a)火车票 (b)购物收据 图1 从文档图片中提取要害信息 1. 基于栅格的文档图片要害信息提取技术该类办法基于图片像素点将图片转换为栅格示意向量,输出到深度学习网络中以学习提取要害信息。 1.1 Chargrid[1]这篇文章指出文档中的文本间关系不仅受文本的序列程序影响,还与文档中各文本的版式散布无关。为解决上述问题,作者提出chargrid办法,其将文档图片映射为一个字符级别的2D栅格示意,如图2所示。对于每一个字符栅格采纳one-hot编码表示,整个图片的向量示意为tilde{g} in mathbb{R}^{H×W×N_{c}}_g_~∈R_H_×_W_×_Nc_,其中H_H_和W_W_是图片的长和宽,N_{c}_Nc_是字符类别数。 图2 chargrid的文档示意 随后该向量示意作为chargrid-net的输出,基于encoder-decoder的CNN网络结构(如图3所示)进行要害信息的文本框检测和语义宰割。整个网络由宰割损失、边框分类和边框坐标回归三个局部组成的损失函数优化学习:{mathcal{L}}_{total}={mathcal{L}}_{seg}+{mathcal{L}}_{boxmask}+{mathcal{L}}_{boxcoord}L_total_=L_seg_+L_boxmask_+L_boxcoord_。要害信息内容通过将宰割类别属于同一类别的字符整合失去。 图3 chargrid模型架构 1.2 CUTIE[2]这篇文章同样指出仅利用NLP技术是无奈解决文档中各文本间的布局信息。因而作者设计了CUTIE办法,如图4所示,将文档图片映射为保留各文本空间地位关系的栅格向量示意,而后设计了两类CNN模型来进行要害信息题:CUTIE-A,采纳高分辨率网络HRNet作为骨干网络;CUTIE-B,采纳空洞卷积的CNN网络。整个模型由每个box的预测类别和实在类别间的穿插熵损失优化学习。 图4 CUTIE模型架构 2. 基于图构造的文档图片要害信息提取技术基于图构造的办法是将文档图片看作是由文本切片(text segment)组成的图构造,并利用神经网络模型来学习出各文本切片间的关系来提取出文档的要害信息内容。 2.1 GC-BiLSTM-CRF[3]这篇文章指出传统NER办法BiLSTM-CRF无奈利用文档图片中各文本切片间的布局信息。为解决上述问题,作者提出利用图卷积神经网络来学习文本切片的语义信息和布局信息。 图5 图卷积神经网络学习文本切片的图向量示意 具体地,将文本切片看做点,将文本间关系看做边,来结构一个全连贯图构造。利用图卷积神经网络来学习失去每个文本切片的图向量示意,如图5所示。 图6 引入图向量示意的BiLSTM-CRF 在失去文本切片的图向量示意后,将其与文本切片中每个文本token的Word2Vec向量拼接,输出到BiLSTM-CRF网络中进行文档图片的要害信息提取。整个模型由文本切片分类工作和IOB序列分类工作联结优化学习。 2.2 LayoutLM[4]这篇文章指出预训练模型曾经在NLP畛域取得了微小的胜利,然而其不足对布局和版式信息的利用,从而不适用于文档图片要害信息提取工作。为解决上述问题,作者提出LayoutLM模型。 图7 LayoutLM模型架构 该模型以BERT(NLP畛域十分弱小的预训练模型)为骨干网络,为了利用布局和版式信息,引入了2D地位向量示意,即各文本切片的两点标注(左上角的横纵坐标和右下角的横纵坐标)别离通过横纵两个方向上的索引表失去的向量。同时能够选择性地退出切片的视觉向量示意以补充更多的信息。因为BERT实质上可被看做是一个全连贯的图网络,因而咱们将LayoutLM也归类于基于图构造的技术。后续呈现了相似于LayoutLM的预训练模型如Lambert[5]等,在文档图片要害信息提取工作上都获得了SOTA构造,证实了深度学习模型基于大语料和大模型的弱小能力。 3.端到端的文档图片要害信息提取技术端到端的办法,顾名思义,就是间接以原始图片作为输出失去文档的要害信息内容。 3.1 EATEN[6]这篇文章指出,基于检测辨认流程的信息提取技术会受到如轻微的地位偏移等带来的影响。为解决上述问题,作者提出EATEN办法,其间接从原始图片输出中提取出文档要害信息内容。 图8 EATEN模型架构 具体地,如图8的网络结构所示,EATAN采纳CNN骨干网络来提取失去文档图片的高层视觉信息,而后利用实体类别感知的注意力网络来学习实体布局信息,最初利用基于LSTM的解码器解码失去预设的实体内容。该模型因为间接从图片中失去文档要害信息,易于减速优化,便于边缘部署。 3.2 TRIE[7]这篇文章指出,现有办法对要害信息提取都是将其作为多个独立的工作进行,即文字检测、文字辨认和信息提取,彼此之间无奈进行互相监督学习,因而作者提出一个端到端的网络模型TRIE,同时对上述三个工作进行模型学习。 图9 TRIE模型架构 具体地,利用ResNet+FPN作为骨干网络,进行文字检测,而后利用检测网络+ROIAlign的后果进行attention+encoder-decoder的文字辨认,最初将文本地位信息、视觉信息、语义信息进行交融,通过BiLSTM来进行IOB标签分类失去文档要害信息。整个TRIE模型对三个工作(即文本检测、文本辨认和信息提取)进行独特优化学习: 小结:本文对OCR畛域中文档图片的要害信息提取技术进行了简要介绍,将近期技术按模型分为基于栅格、基于图和端到端三种类别,对每个类别筛选了两篇论文进行了论述。总的来说,基于大语料的预训练图模型展现出了微小的实力,而端到端模型也存在不小的后劲。 参考文献:[1] Katti, Anoop R., et al. “Chargrid: Towards Understanding 2D Documents.” EMNLP, 2018.[2] Zhao, Xiaohui, et al. “Cutie: Learning to understand documents with convolutional universal text information extractor.” arXiv, 2019[3] Liu, Xiaojing, et al. “Graph Convolution for Multimodal Information Extraction from Visually Rich Documents.” NAACL, 2019.[4] Xu, Yiheng, et al. “Layoutlm: Pre-training of text and layout for document image understanding.” KDD, 2020.[5] Garncarek, Łukasz, et al. “LAMBERT: Layout-Aware language Modeling using BERT for information extraction.” arXiv, 2020[6] Guo, He, et al. “Eaten: Entity-aware attention for single shot visual text extraction.” ICDAR, 2019.[7] Zhang, Peng, et al. “TRIE: End-to-End Text Reading and Information Extraction for Document Understanding.” ACM MM, 2020. ...

April 9, 2021 · 1 min · jiezi

关于深度学习:初窥Ray框架

本文首发于:行者AI随着各行各业数字化的一直推动,AI须要解决的数据越来越多,繁多服务器曾经难以满足以后产业的倒退需要,服务器集群成为企业用AI解决数据的标配硬件,而分布式计算成为人工智能利用的标配软件。 从图1能够看出,现今有很多开源的分布式计算框架,从模型的训练、调参到部署;从NLP、CV到RS;这些框架笼罩到了AI产业生命周期的各个方面。本文就选取其中的Ray框架进行简略的介绍。 图1. 各种分布式计算框架 Ray 是伯克利大学在2017年开源的分布式计算框架,对应的论文是《Ray: A Distributed Framework for Emerging AI Applications》。强化学习工作须要与环境进行大量的交互(毫秒级),且在工夫上反对异构性。该框架专门为机器学习与强化学习设计,相较于其余框架,ray具备以下劣势: 轻量级可疾速构建通用性强性能优异上面就这四个长处为大家进行具体介绍。 1. Ray框架的劣势1.1 轻量级相较于传统的分布式框架(尤其是hadoop、spark等),Ray能够间接通过pip进行装置,且对系统版本无要求。 pip install -U rayRay是一个简略的分布式策略,而非残缺的生态,因此不须要简单的构建。 另一方面,轻量而优良的框架往往能够作为企业数据处理的根底框架,企业一直在该框架的根底上减少生态,从而造成企业独有的利用生态。 1.2 可疾速构建如hadoop等传统框架,要对原有的单机程序进行分布式化,须要批改整个代码逻辑,以MapReduce的编程计划重构各个计算模块,这使得hadoop等传统框架有着良好的可编辑性,算法工程师能够依据业务需要进行具体的批改。弱小的可编辑性也带来了学习老本高,代码重构艰难等诸多问题。人工智能突飞猛进,模型在一直更迭,麻利开发成为了很多AI企业的开发模式,AI利用的简单构建会大大影响整个我的项目的推动。 如下代码,将一个简略的单机程序函数,转换为Ray分布式的函数,只是在原有函数的根底上退出了ray.remote的装璜器,便实现了分布式化的工作。 ### 原始单机代码def f(x): return x * xfutures = [f.remote(i) for i in range(4)]print(ray.get(futures))### Ray分布式代码import rayray.init()@ray.remotedef f(x): return x * xfutures = [f.remote(i) for i in range(4)]print(ray.get(futures))1.3 通用性强近年tensorflow、torch等深度学习框架成为人工智能利用的模型框架,思考到产业利用场景,这些框架都给出了各自分布式训练和部署的计划,且这些计划的计算资源利用率较高。大型的我的项目往往由数个算法模型组成,为了疾速开发,算法工程师往往采纳开源的代码构建,而这些开源的代码采纳的深度学习框架很可能互不雷同,针对繁多框架的分布式计划难以实用。 除此之外,ONNIX等为代表的框架,偏向于将所有框架的模型对立到繁多的解决方案上,因为很多前沿的深度学习模型对神经元进行了简单的批改,无奈适配到通用的算子上,须要算法工程师手写算子,从而拖慢了开发速度。Ray将机器学习模型、numpy数据计算、繁多的函数形象成通用的计算,实现了对各种深度学习框架、机器学习框架的适配。 另外,Ray对强化学习的利用进行了专门的生态构建。 1.4 性能优异图2为Ray、Horovod以及tensorflow原生的分布式计划训练ResNet-101模型的比拟,纵轴为每秒均匀迭代的图片数,能够看出Ray稍微优于Horovod框架。 图2. 分布式训练速度比拟 图3为Clipper和Ray在模型调用上吞吐量的比拟,两者均用同一网络模型,能够看出Ray优于Clipper。 图3. 分布式部署吞吐量比拟 Ray并没有做到每个分布式场景都优于其余框架,但Ray汇合训练、调参以及部署为一体,仍能放弃不错的性能,因此值得学习和应用。 得益于Ray框架良好的性能,Ray宽泛用于工业界(如蚂蚁金服),要先学会应用Ray必先理解Ray的形成,下一大节就Ray的形成进行介绍。 2. Ray的应用2.1 Ray的形成Ray大抵由四局部组成: ...

April 8, 2021 · 1 min · jiezi

关于pytorch:PyTorch建立RNN相关模型

之前写过PyTorch建设深度神经网络,这一次是上一篇文章的连续,将介绍RNN,LSTM,GRU相干模型搭建。RNN、GRU、LSTM均是领有“记忆”性能的网络模块,在模型参数上基本相同。 建设RNN模型# 定义网络结构class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.rnn = nn.RNN(input_size=28, # 输出特色的大小 hidden_size=64, # RNN模块(block)的数量,随便设置 num_layers=1, # 示意RNN层的层数 batch_first=True) # RNN默认输出的格局是[seq_len, batch, feature] # batch_first=True示意格局变成[batch, seq_len, feature] # 这里的64和hidden_size的64绝对应 self.out = nn.Linear(64, 10) self.softmax = nn.Softmax(dim=1) def forward(self, x): inputs = x.reshape((x.shape[0],28, -1)) # output:[batch, seq_len, hidden_size] # 尽管RNN的batch_first为True,然而h_n,c_n第一个维度还是num_layers # h_n:[num_layers*num_directions, batch, hidden_size] 只蕴含最初一个序列的隐层后果,示意h_t # num_directions:取值为1或2,示意是否为双向RNN output, h_n = self.rnn(inputs) output_in_last_timestep = h_n[-1, :, :] x = self.out(output_in_last_timestep) out = self.softmax(x) return out建设LSTM模型# 定义网络结构class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.lstm = nn.LSTM(input_size=28, # 输出特色的大小 hidden_size=64, # LSTM模块(block)的数量,随便设置 num_layers=1, # 示意LSTM层的层数 batch_first=True) # LSTM默认输出的格局是[seq_len, batch, feature] # batch_first=True示意格局变成[batch, seq_len, feature] # 这里的64和hidden_size的64绝对应 self.out = nn.Linear(64, 10) self.softmax = nn.Softmax(dim=1) def forward(self, x): inputs = x.reshape((x.shape[0],28, -1)) # output:[batch, seq_len, hidden_size] # 尽管LSTM的batch_first为True,然而h_n,c_n第一个维度还是num_layers # h_n:[num_layers*num_directions, batch, hidden_size] 只蕴含最初一个序列的输入后果,示意h_t # c_n:[num_layers*num_directions, batch, hidden_size] 只蕴含最初一个序列的cell后果,示意c_t # num_directions:取值为1或2,示意是否为双向LSTM output, (h_n, c_n) = self.lstm(inputs) output_in_last_timestep = h_n[-1, :, :] x = self.out(output_in_last_timestep) out = self.softmax(x) return out定义双向LSTM模型须要在nn.LSTM中增加参数bidirectional=True ...

April 6, 2021 · 2 min · jiezi

关于pytorch:PyTorch建立模型相关

Pytorch简介PyTorch是FaceBook开源的第三方库,其作用是疾速搭建深度学习模型,验证思路。 一般模型导入第三方库首先导入各种第三方库 import torchfrom torch import nn,optimfrom matplotlib import pyplot as pltfrom torch.utils.data import DataLoaderfrom torch.autograd import Variableimport numpy as npfrom torchvision import datasets, transforms数据筹备train_dataset = datasets.MNIST(root='./', train=True, transform=transforms.ToTensor(), download=True)test_dataset = datasets.MNIST(root='./', train=False, transform=transforms.ToTensor(), download=True)运行这段代码时,对于PyTorch的低版本会呈现谬误,笔者降级到1.7.1则运行胜利 # 批次大小batch_size = 64# 装载训练集train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)# 装载测试集test_loader = DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=True)因为给定的数据的形态是$$[batch\_size, 1, 28, 28]$$之后训练和预测时咱们须要将数据转换成二维格局 定义网络结构# 定义网络结构class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(784, 10) self.softmax = nn.Softmax(dim=1) def forward(self, x): inputs = x.reshape((x.shape[0], -1)) x = self.fc1(inputs) out = self.softmax(x) return out训练和测试模型训练def train(): for i, data in enumerate(train_loader): # 取得一个批次的数据和标签 inputs, labels = data inputs = inputs.cuda() labels = labels.cuda() # 取得模型预测后果 out = model(inputs) # to one-hot # scatter_(input, dim, index, src) → Tensor # 将src中的所有值依照index确定的索引写入本tensor中。其中索引是依据给定的dimension,dim依照gather()形容的规定来确定。 labels = labels.reshape((-1, 1)).cuda() one_hot = torch.zeros(inputs.shape[0], 10).cuda().scatter(1, labels, 1) # 计算loss # mse_loss要求形态统一 loss = MSE_loss(out, one_hot) # 梯度清零 optimizer.zero_grad() # 反向流传 loss.backward() # 更新参数 optimizer.step()测试def test(): correct = 0 for i, data in enumerate(test_loader): # 取得一个批次的数据和标签 inputs, labels = data inputs = inputs.cuda() labels = labels.cuda() # 取得模型预测后果 out = model(inputs) _, predicted = torch.max(out, 1) correct += (predicted == labels).sum() print("Test acc:{0}".format(correct.item()/len(test_dataset)))更改模型增加DropoutDropout能够使神经元随机失活,其中参数p示意失活概率 ...

April 4, 2021 · 2 min · jiezi

关于tensorflow:源码解读CSSRNN

源代码:CSSRNN github链接,IJCAI2017 模型解读 current embedding: [state_size, emb_dim],其中state_size为link或grid的数量,emb_dim为embedding的维度。destination embedding: [state_size, emb_dim],同上;起点embedding为独自的一套。neighbor embedding:其实是一套线性变换的系数,并不是embedding,只是用embedding来减速;w的shape为[hid_dim, state_size],b的shape为[state_size],其中hid_dim为LSTM的输入维度。CSSRNN 最初一层的本质就是一个带邻接表束缚的Softmax层。所谓LPIRNN,相比CSSRNN减少了一个维度,shape为[hid_dim, state_size, adj_size]。能够了解为CSSRNN是按节点给系数,LPIRNN是按边给系数。代码解读ID Embedding先创立边的embedding,shape=[state_size, emb_dim];embedding的实质就是全连贯神经网络的系数矩阵W。 # 有pretrainemb_ = tf.get_variable("embedding", dtype=tf.float64, initializer=pretrained_emb_)# 无pretrainemb_ = tf.get_variable("embedding", [state_size, emb_dim], dtype=tf.float64)Input的编码是one-hot,对one-hot的输出构建全连贯神经网络,等价于从embedding中依据id编号提取出one-hot即元素1所在的行来。这个性能相似tf.gather()办法,TensorFlow提供了tf.nn.embedding_lookup(),能够并行地从embedding中查表,失去输出Tensor(shape=[batch_size, time_steps, state_size])embedding后的Tensor(shape=[batch_size, time_steps, emb_dim])。 emb_inputs_ = tf.nn.embedding_lookup(emb_, input_label, name="emb_inputs") # [batch, time, emb_dim]为了思考起点的影响,能够用同样的办法对destination进行embedding,而后通过tf.concat拼接到one-hot embedding进去的Tensor里。 # 留神,起点独自做了一次embedding,与后面的emb不是一套dest_emb_ = tf.get_variable("dest_emb", [state_size, emb_dim], dtype=tf.float64)dest_inputs_ = tf.tile(tf.expand_dims(tf.nn.embedding_lookup(self.dest_emb_, dest_label_), 1), [1, self.max_t_, 1]) # [batch, time, dest_dim]inputs_ = tf.concat(2, [emb_inputs_, dest_inputs_], "input_with_dest") # [batch, time, emb_dim + dest_dim]RNN层: ...

March 31, 2021 · 2 min · jiezi

关于华为:MindSpore实践对篮球运动员目标的检测

摘要:本文讲述的是MindSpore对篮球运动员指标的检测利用,通过AI技术辅助对篮球赛场进行剖析。本文分享自华为云社区《MindSpore大V博文系列:AI对篮球运动员指标的检测》,原文作者:李锐锋。 MindSpore作为一个端边云协同的开源的全场景AI框架,往年3月份开源以来,受到了发展中国家的宽泛关注和利用,欢送大家参加开源奉献,模型众智单干,行业翻新与利用,学术单干等,奉献您在云侧,端侧 (HiMindSpore应用程序),侧向以及平安畛域的利用案例。MindSpore与您在AI畛域独特成长,让AI使能千行百业,开释出弱小的性能。 MindSpore对篮球运动员指标的检测利用,通过AI技术辅助对篮球赛场进行剖析。 一、AI在篮球运动检测方面的应用想必大家对篮球运动都比拟相熟,在看球赛时,通过咱们的肉眼看到的画面,对赛场状况进行察看,能够剖析出一些有用的信息。当初随着AI技术的迅速倒退,通过深度学习算法也能够对篮球赛场上的画面进行学习,而后对篮球运动员的数量、行为等提取一些有用的信息,比方:通过对球员衣服颜**分出各篮球队的成员,也能够通过对球员的行为剖析出球员正在执行什么动作以及赛场的比分等,如图1所示为通过ModelArts平台实现推理后展现的球员信息。 图1 深度学习推理出球员信息 那么怎么通过AI技术对篮球赛场进行剖析呢,首先咱们抉择AI架构是基于华为自研AI计算框架MindSpore。MindSpore提供全场景对立API,为全场景AI的模型开发、模型运行、模型部署提供端到端能力。同时,MindSpore采纳端-边-云按需写作分布式架构、微分原生编程新范式以及AI Native新执行模式,实现更好的资源效率、平安可信,同时升高行业AI开发门槛、开释昇腾芯片算力,助力普惠AI。 抉择AI框架之后,咱们这次抉择的网络模型是基于MindSpore框架开发的yolov3_darknet53网络模型。 如果你想要查看篮球运动员检测的网络代码,能够拜访MindSpore社区的开源代码,地址:https://github.com/mindspore-ai/mindspore-21-days-tutorials/tree/main/chapter4 在MindSpore开源社区也能够找到基于MindSpore框架的yolov3_darknet53网络的源码,应用的是coco2014数据集,参考链接:https ://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/yolov3_darknet53 以下是对该网络模型及利用实现的具体介绍。 二、yolo简介yolo(You only look once)是一种经典的单阶段指标检测算法,在16年提出了第一个版本yolov1,前面还提出了多个版本,yolov3就是第三个版本。 yolo这个算法,在不同版本均有改良之处,上面大抵介绍下yolov算法的三种版本的区别和改良: 1、yolov1是将指标检测作为回归问题来解决,应用一个神经网络间接从整个图片中预测边界框和类别概率,因为速度很快,所以能够做到实时指标检测 2、yolov2比yolov1速度很快,并且更准,改良点比拟多,如:应用了BatchNorm,让网络更容易拟合;应用了anchor,去除了yolov1中的全连贯层;应用了维度聚类的办法及多尺度训练等改良措施。 3、yolov3比yolov2精度会更高,不过速度会有点降落。yolov3的改良之处为: 1) 特征提取网络采纳了残差构造,并且层数更多。 2) yolov3在3个尺度上进行检测,顺次检测大、中、小指标。 三、yolov3网络结构yolov3应用的根底网络是用Darknet53, Darknet53是全卷积构造,如图2所示,右边为yolov2的Darknet19,左边是yolov3应用的Darknet53。Darknet53去掉了所有的Maxpooling层,并减少了卷积层数。它总共有23个残差模块,通过5次下采样,最初网络输入是网络输出的1/32。因为网络加深的起因,yolov3网络的运行速度比yolov2稍慢。 yolov3网络结构中Conv2D block蕴含了5个卷积层,整个网络结构绝对简略一些,同时,该网络为单阶段检测办法,绝对faster rcnn 要容易许多。 图2 Darknet网络结构 四、yolov3_darknet53在篮球运动检测方面的实现咱们抉择的网络模型正是上一节中介绍的yolov3_darknet53模型,数据集则是一段篮球比赛相干的数据集,应用的AI框架是华为推出的MindSpore深度学习框架。最初,应用MindSpore的API来执行网络模型的训练和推理工作。 1、数据筹备本次应用的数据是图片数据,图片能够是在球赛现场拍摄的图片,也能够视频中的图片,咱们这次应用的数据起源是网上下载篮球比赛相干的视频。 视频其实是有一帧一帧图片间断播放实现的,所以,反过来咱们从视频中能够读取一帧一帧的图片,最初将图片保留到相干目录。因为视频中每秒蕴含的视频帧比拟多,一些相邻的图片内容十分类似,看不出什么差异性,所以在获取视频帧时,适当插入工夫距离,按肯定工夫频率截取视频中的一张张图片,这样提取进去的图片差异性比拟大,很少有雷同的图片,这种数据的品质比拟好。 生成好了数据后,还须要对数据进行标注,这个能够在华为云的ModelArts平台上进行数据标注操作,最初将筹备好的数据拷贝到相应的目录当中,并且将数据集分成训练数据和推理数据,供后续模型训练和推理应用。 2、模型训练脚本本次模型的搭建次要是调用MindSpore的API接口,如:能够调用context.set_context()接口配置当初应用的环境,如果咱们环境用的是升腾910芯片,并且采纳图模式进行训练,则能够通过以下指令进行配置: context.set_context(mode=context.GRAPH_MODE, device_target="Ascend")本次模型训练脚本,所用到的MindSpore相干接口如下所示: import mindspore as msimport mindspore.nn as nnimport mindspore.context as contextfrom mindspore import Tensorfrom mindspore.nn.optim.momentum import Momentumfrom mindspore.train.callback import ModelCheckpoint, RunContextfrom mindspore.train.callback import _InternalCallbackParam, CheckpointConfigfrom mindspore.train.serialization import load_checkpoint, load_param_into_net这些配置或接口的应用在MindSpore官网上的教程和API文档都能找到具体的阐明,官网链接:https : //www.mindspore.cn/tutorial/training/zh-CN/master/index.htm ...

March 26, 2021 · 1 min · jiezi

关于深度学习:知乎B站为何成中国社区概念股

【深几度·重审互联网系列】 撰稿|吴俊宇 审阅|翟鑫源 「摘要:社区气氛带来的自传播效应,还能够帮忙企业升高营销费用,让企业解脱“买量营销”的逻辑,造成平台内容生产的良性循环。在互联网格局固化的状况下,“社区”作为最初的流量池,是精细化商业经营的根底。」 01 中国社区价值正被放大? “社区”是内容企业的重要故事。 互联网红利渐趋消退,用户拉新难度加大,“社区”价值正在被放大。内容生产产业的凋敝让“社区”成为最佳内容生产场域。 B站、快手、知乎三家同代企业都对“社区”自我认知极为明确。 知乎赴美IPO,定位是“问答社区”。B站在2020年年报中自称“年轻人文化社区”,快手赴港招股书中自我定位是,“內容社区及社交平台”。 事实上,这三家企业的基因都是“社区”,都是2010年左右互联网浪潮下诞生的同一代产品。2009年B站诞生,2011年知乎诞生,2012年快手转型短视频社区。 尔后,三家企业不论其余业务如何减少,始终都放弃着“社区”气氛。 在尔后上市潮中,三家企业仍旧在招股书、财报中始终强调本身的“社区”定位。 “社区文化”在知乎招股书中,被视为外围竞争力之一。 招股书中提到,保护晋升品牌名誉对社区胜利十分重要,取决于继续提供高质量和值得信赖的内容以及维持社区文化的能力,如果不能放弃社区文化,内容社区吸引力可能会升高。 快手招股书中提到,內容社区越沉闷,用戶越乐于奉献內容,并积极参与社区,而非仅充当內容消费者。 快手管理层在剖析市场环境时认为,国内有若干个以短视频或直播內容为根底的社交平台,局部平台专一网络游戏和娱乐等特定內容品种,而其余平台则投合多元化社交及娱乐需要。 B站2020年年报提到了一个重要危险点:社区文化。 这被管理层视为“至关重要”。年报中解释,如果未能在指标用户群中保护文化品牌,经营可能会受到重大不利。因而,B站策略中,十分重要的一条是“社区第一”(Community First,2020年中报)。 内容消费市场的持续增长,使得中国社区市场规模也在一直落大。 中投公司CIC报告显示,中国内容社区从2015年的5.162亿人大幅扩充到2019年的7.73亿人,预计2025年将达10亿人。宏大的市场为不同社区内容产品发明了成长空间。 社区到底是什么?“社区”实质是个具备生机的生态系统。 生态系统内,用户有统一社区气氛。气氛会激发内容生产、用户探讨。内容获取老本因而大幅升高,用户获取老本也会降落。这个过程中逐步造成具备长期自我迭代能力的流量池。 社区气氛带来的自传播效应,还能够帮忙企业升高营销费用,让企业解脱“买量营销”的逻辑,造成平台内容生产的良性循环。 在互联网格局固化的状况下,“社区”作为最初的流量池,是精细化商业经营的根底。目前快手2020年财报尚未公布,咱们无奈对快手的商业逻辑做更多钻研。 但知乎、B站作为同期成长,同时在美国资本市场上市,具备较强社区气氛,且都面临破圈考验的两家企业,具备很强可比性。 知乎是否成为像B站一样被资本市场追捧,且具备高度成长性的一家公司?这取决于接下来三点:稳固社区气氛,取得营收增长,扩充业务边界。 02 B站为何会被高估? 目前市面上有一种观点是:B站被高估了,而爱奇艺被看空了。 咱们暂且不去探讨B站目前的高估是否存在泡沫,也不去探讨爱奇艺是否被低估了。 从资本和商业逻辑来看,B站值得被高估的一部分起因是,“年轻化”带来的稀缺性,高增长带来的高设想空间,乃至绝对充分的现金流。 爱奇艺被质疑的起因是,并没有胜利复刻Netflix的自制逻辑。尽管内部影视剧洽购老本正在降落,但内容自制长期亏损,这带来了高制作老本、高营销老本挑战。 从经营数据看,B站和爱奇艺都处于亏损状态。爱奇艺甚至多项经营数据都优于B站,但两家企业在资本市场体现截然相同。 同为1亿会员,爱奇艺2020年营收是297亿,B站仅为120亿。截止3月31日,爱奇艺市值仅为220亿美元,同样亏损的B站市值却超过400亿美元。 资本市场有非理性一面。不同“故事”会带来不同市场体现。B站被资本市场认可的重要因素是:高成长性,“年轻人文化社区”定位,短缺现金流带来的摸索空间。 社区自传播效应会造成绝对较强品牌粘性,作为“社区”,B站具备一批高沉闷、高粘度用户,它们的存在会让企业营销老本有所升高。 此外,UP主自发生产的逻辑让B站的内容获取老本更为低廉。比照爱奇艺与B站近三年内容老本会发现,B站投入有余爱奇艺的5%。 回到老本来看,比照2020年爱奇艺和B站的老本构造会发现。对B站而言,内容洽购并非重大老本。真正老本收入重心在UP支出分成。 如果严格界定,这部分老本也能够计入内容老本之中。然而,其价值在于,进一步激发UP主的创作能源,使得平台内容得以继续迭代。 当然,这并不是称誉B站的内容老本控制能力。 依照现实状况,内容产业本来应该造成良性循环——高老本内容生产,积淀优质内容,积攒规模化高粘度用户,进而构建成长飞轮。这是典型的Netflix模式。 从内容生产的角度来看,爱奇艺抉择了一条正确但艰难的路线。 高制作老本的优质内容制作,本来应该是平台“护城河”。这类内容能够帮平台吸纳会员、升高营销老本。 然而,国内内容产业面临复杂性。受政策监管、流量考核、演员片酬等因素影响,优秀作品诞生概率升高。 高老本投入的低质网剧不足外围竞争力,还会进一步带来高营销老本。这类内容必然会受短视频影响,甚至沦为“鸡肋”。 2019年开始,爱奇艺就在尝试升高内容生产成本。如升高明星片酬、严控制作老本等,以此缩窄亏损。2020年爱奇艺推出“迷雾剧场”一个重要因素就是升高营销费用。 爱奇艺曾凭“中国Netflix”故事取得高市值。然而,这一“故事”难度较高,在当下并不被资本看好。B站的“年轻人社区”故事更吸引眼光。 对B站而言,社区定位投合了当下年轻人的爱好。让企业老本管制、内容生产造成了简略无效的商业循环。 后果便是B站取代爱奇艺,成资本市场宠儿。 03 知乎还是新兴成长公司? 据美国联邦证券法,知乎在这次IPO中被界定为“新兴成长型公司”。 美国证券交易委员会文件显示,“新兴成长型公司”一个重要条件是,近一财年总收入低于10.7亿美元。“新兴成长型公司”有资格升高上市公司报告要求。 作为一家“新兴成长型公司”,在这次IPO的同时还进行了私募配售(CPP),阿里、京东、腾讯、Lilith Games一并参加知乎的私募配售。 从企业倒退工夫看,知乎并不算年老。甚至在国内市场频频被投资人视为“慢”。 过来10年,和知乎同一时间诞生的B站、快手抓住机会利用“破圈”策略成为明星企业。10年倒退过程中。知乎经验了常识付费、在线直播、视频化三波内容潮流。 在这个过程中,知乎已经长期被视为与喜马拉雅、失去等常识付费平台在同一赛道,也经验过字节跳动等公司的挑战。三波潮流后,知乎的内容体系逐步丰盛。 但不论是“新兴成长型公司”,还是阿里、京东策略投资等一系列重要信息表明:知乎仍旧处在成长期,将来还有进一步成长的空间。 知乎成长的根底,仍旧在于“社区”带来的设想空间。 ...

March 24, 2021 · 1 min · jiezi

关于深度学习:unknow-or-unsupported-command-install

报错及解决过程形容1.运行python我的项目时,报错(须要引入包) No module named SimpleITK解决:在cmd中输出以下命令,装置(cmd打开方式:windows+r,而后输出cmd,回车关上) pip install SimpleITK   2.然而报错。报错内容如下 unknow or unsupported command install在cmd中输出where pip,发现起因是strawberry(这是我电脑上装置的LoadRunner12.55所用的WebTours游览网站的环境)   思路:上图表明,有很多pip,所以cmd不晓得用哪个,咱们只须要通知cmd执行哪一个pip即可。  解决:1.复制上图pip的门路,即D:\myDL\Anaconda3\Scripts\pip.exe2.cmd中输出D:\myDL\Anaconda3\Scripts\pip.exe install SimpleITK   参考文章pytorch环境下“No module named SimpleITK”的解决办法 pip命令提醒unknow or unsupported command install解决办法

March 23, 2021 · 1 min · jiezi

关于深度学习:卷积网络的可视化解释类激活映射

本文首发于:行者AI在整篇文章阐述开始之前,咱们先做一些概念性的解说铺垫。卷积神经网络的各层卷积单元在模型网络中实际上有充当了指标检测器的作用,只管没有提供对指标地位的监督。尽管其领有在卷积层中定位对象的不凡能力,但当应用全连贯层进行分类时,这种能力就会丢失。基于此,提出了CAM(类激活映射)的概念,采纳全局均匀池化,以热力求的模式通知咱们,模型通过哪些像素点得悉图片属于某个类别,使模型透明化和具备可解释性,如下图所示: 1. Global Average Pooling的工作机制 这里咱们假如最初的类别数为n,最初一层含有n个特色图,求每张特色图所有像素的平均值,后接入一个有n个神经元的全连贯层。要有n个特色图的起因在于,每个特色图次要提取了某一类别相干的某些特色。 2. 什么是CAM?CNN最初一层特色图富含有最为丰盛类别语意信息(能够了解为高度形象的类别特色),因而CAM基于最初一层特色图进行可视化。CAM能让咱们对CNN网络有很好的解释作用,利用特色图权重叠加的原理取得热图,具体工作原理如下图所示。 设最初一层有n张特色图,记为$A^1,A^2,...A^n$,分类层中一个神经元有n个权重,一个神经元对应一类,设第$i$个神经元的权重为$w^1,w^2,...w^n$,则第c类的CAM的生成形式为: $$L_{CAM}^c = \sum_{i=1}^n w_i^cA^i (式1) $$ 生成的CAM大小与最初一层特色图的大小统一,接着进行上采样即可失去与原图大小统一的CAM。 2.1. 为什么如此计算能够失去类别相干区域用GAP示意全局均匀池化函数,沿用上述符号,第c类的分类得分为$S_c$,GAP的权重为$w_i^c$,特色图大小为$c_1*c_2$,第$i$个特色图第$k$行第$j$列的像素值为$A_{kj}^i$,则有: $$S_c = \sum_{i=1}^n w_i^c GAP(A_i) $$ $$= \sum_{i=1}^n w_i^c \frac 1Z \sum_{k=1}^{c_1} \sum_{j=1}^{c_2}A_{kj}^i$$ $$= \frac 1Z \sum_{i=1}^n \sum_{k=1}^{c_1} \sum_{j=1}^{c_2} w_i^c A_{kj}^i(式2) $$ 特色图中的一个像素对应原图中的一个区域,而像素值示意该区域提取到的特色,由上式可知$S_c$的大小由特色图中像素值与权重决定,特色图中像素值与权重的乘积大于0,有利于将样本分到该类,即CNN认为原图中的该区域具备类别相干特色。式1就是计算特色图中的每个像素值是否具备类别相干特色,如果有,咱们能够通过上采样,看看这个像素对应的是原图中的哪一部分。GAP的出发点也是如此,即在训练过程中让网络学会判断原图中哪个区域具备类别相干特色,因为GAP去除了多余的全连贯层,并且没有引入参数,因而GAP能够升高过拟合的危险。可视化的后果也表明,CNN正确分类确实是因为留神到了原图中正确的类别相干特色。 2.2. CAM缺点须要批改网络结构并从新训练模型,导致在理论利用中并不不便。 3. Grad-CAM3.1. Grad-CAM构造 Grad-CAM 和 CAM 基本思路一样,区别就在于如何获取每个特色图的权重,采纳了梯度的全局均匀来计算权重。定义了Grad-CAM中第$\kappa$个特色图对应类别c的权重: $$\alpha_\kappa^c = \frac 1Z \sum_i \sum_j \frac {y^c}{\alpha A_{ij}^k} (式3) $$ 其中,Z示意特色图像素个数,$y^c$示意第c类得分梯度,$A_{ij}^k$示意第$k$个特色图中,$(i,j)$地位处的像素值。而后再求得所有的特色图对应的类别的权重后进行加权求和,这样便能够失去最初的热力求,求和公式如下: $$L_{Grad-CAM}^c = ReLU(\sum_k \alpha_k^c A^k)(式4) $$ ...

March 12, 2021 · 1 min · jiezi

关于深度学习:SSDSingle-Shot-MultiBox-Detector笔记

前言本文用于记录学习SSD指标检测的过程,并且总结一些精髓知识点。 为什么要学习SSD,是因为SSD和YOLO一样,都是one-stage的经典构架,咱们必须对其了解十分粗浅能力触类旁通设计出更加优良的框架。SSD这个指标检测网络全称为Single Shot MultiBox Detector,重点在MultBox上,这个思维很好地利用了多尺度的劣势,全面晋升了检测精度,之后的YOLOv2就借鉴了SSD这方面的思路才缓缓倒退起来。 强烈建议浏览官网的论文去好好了解一下SSD的原理以及设计思路。这里也提供了相干的pdf:http://www.cs.unc.edu/~wliu/p... 当然也有很多好的博客对其进行了介绍,在本文的最下方会有相干链接。本篇文章次要为本人的笔记,其中加了一些本人的思考。 网络构架SSD的原始网络构架倡议还是以论文为准,毕竟平时咱们接触到的都是各种魔改版(也就是所谓的换了backbone,例如最常见的SSD-mobilenetv2),尽管与原版大同小异,不过对于了解来说,会增大咱们了解的难度,因而,齐全有必要看一遍原始的论文形容。 SSD在论文中是采取的VGG网络作为骨干构造,然而去除了VGG中的最初几层(也就是咱们常常说的分类层),随后增加了一些新的内容(在原文中叫做auxiliary structure),这些层别离是: 额定的特征提取层(Extra Feature Layers),作用就是和本来backbone的层相结合独特提取出不同尺寸的特色信息,相当于增强了之前的backbone,使其网络更深,提取能力更加弱小。分类层(classification headers),对之前网络中的不同地位网络层输入的特色层(不同尺度),进行卷积得出每个特色图中每个坐标对应的分类信息(每个坐标对应着许多default boxes)。坐标地位回归层(regression hearders),构造与分类层相仿,只是输入的通道略有不同,通过对不同尺度的特色图进行卷积,输入的是每个特色图中每个坐标对应的default boxes的偏移坐标(文章中称为shape offset)。 总体来说,SSD网络结构其实有四局部组成,backbone局部、额定增加的特征提取层、分类层以及坐标地位回归层。留神当初这篇SSD是出于Yolo一代之后二代之前,Yolo二代三代中不同尺度的特色图思维是有借鉴于SSD的。 用于检测的多尺度特色图多尺度特色图具体示意就是SSD在整个网络的不同地位,取出相应的特色层进行预测,每个特色层因为尺度不一样能够检测的视线以及指标物体的大小也不同。每个特色图能够预测出分类信息和地位信息,如下图中能够看到整个网络应用从前到后应用了6个不同的特色图,从38x38x512到1x1x256一共六个不同尺度的特色图。 也就是应用低层feature map检测小指标,应用高层feature map检测大指标,是SSD的突出贡献。 那么default box是如何产生? default box论文中的原话是这样的: We associate a set of default bounding boxes with each feature map cell, for multiple feature maps at the top of the network. The default boxes tile the feature map in a convolutional manner, so that the position of each box relative to its corresponding cell is fixed. At each feature map cell, we predict the offsets relative to the default box shapes in the cell, as well as the per-class scores that indicate the presence of a class instance in each of those boxes.就是对于上述每一个不同尺度的特色图(38x38、19x19、10x10、5x5、3x3、1x1),每一个特色图中的坐标中(cell)产生多个default box。对于每个default box,SSD预测出与实在标定框的偏移(offsets,一共是4个数值,代表地位信息)以及对应于每个类的概率confidence($c_1 ,c_2, ..., c_p$)。如果一共有c类,每一个坐标产生k个box,那么咱们在进行训练的时候,每个cell就会产生(c+4)k个数据,如果特色图大小为mxn,那么总共就是(c+4)kmn,例如3x3的特色图,mxn就是3x3。 ...

March 10, 2021 · 3 min · jiezi

关于深度学习:深度学习研究生第一年之际前来谈谈自己的感受

前言在行将完结研究生第一年之际,前来谈谈本人的感触。 你能够把这篇文章当做深度学习者、程序员、研究生的简短自白。可能会有点啰嗦,会有点无趣。但如果有工夫、感兴趣,无妨浏览浏览,或者你能从其中挑出点有用的货色来呢。 谈到的话题: 编程语言抉择该怎么筹备去找工作上不上博杂谈人不知;鬼不觉入行深度学习行将快一年,尽管说入行之前所做的我的项目,所编写的代码和当初做的并没有什么间接关系。然而从本人的上手水平和过去的教训来说,好的根底还是很重要的。 对于深度学习的根底,大体分为三个局部: 理论知识根底(数学知识的把握水平)编程根底(C/C++/python)实际根底(配置环境,debug,遇到问题寻找答案)因为之前大部分的工作是在电赛,次要应用的语言是C。也加入过ACM,应用C++来编写算法。得益于这些实际,本人的C/C++编程功底是有一些的,因而上手python很快,也理解了些python的底层常识(举荐一本<Python源码分析>)。 Python语言很富丽很美好很高级。C语言100行做的事件Python可能2行就做到了,然而啊,你不晓得Python的2行代码中其实也执行了C语言,如果你应用的是C实现的Python,在Python内核中,理论调用的还是C语言,只是你看不到摸不着罢了。 深度学习的入门门槛尽管,然而略微努致力,过了这扇门,当前的路就好走多了:一篇文章解决机器学习,深度学习入门纳闷。 大部分编程语言都是共通的,熟练掌握其中一门,其余语言也就好动手了。 编程语言接触的越多就会越明确这个情理,不论是动静语言、动态语言还是解释型语言、编译型语言,大体都是互通的。都有近似对立的数据类型,都有近似对立的流程构造,很多关键字也是一样的, 本科的时候咱们第一个学习的编程语言应该是C语言。过后一人一本红皮谭浩强,且不说对这本书的评估,也是起码引领咱们步入了编程的大门。瞎话瞎话学好C语言受害无穷。到现在,C语言的C99规范还是判若两人地稳固,C语言依然无处不在。 每种编程语言都有归宿自从升入研究生以来,写C语言的机会变少了,大部分工夫只是在看。面对着本人已经很相熟很相熟的语言,像是生疏了很多,放心本人这样会“忘掉”它,于是想着去用用啊,去轻易写点货色啊,强行去操作啊。 但还是发现,C语言不适宜我过后的我的项目,强行往上凑是不行的。就和我曾自觉置信python是世界上最好用的语言一样(2333,不是php)。曾一度认为python什么也能够做,然而疏忽了重要的一点,编程语言设计的初衷。 翻了翻C语言的历史。C语言的设计指标是提供一种能以繁难的形式编译、解决低级存储器、产生大量的机器码以及不须要任何运行环境反对便能运行的编程语言。次要是用于底层开发的。而Python呢,Python的设计者Guido van Rossum是依据ABC语言开发进去的,而这门语言的初衷是为了服务那些非程序员们。怪不得Python语言长得那么像伪代码。 所以啊,面对不同的我的项目,挑一门不同的编程语言吧,比方我来说: Python:次要用来编写深度学习代码,利用Tensorflow和Pytorch库来实现本人的想法,当然Python还能够做别的,也用Python搭建过网站的后盾(Django)。C/C++:本人对C语言更相熟一些吧,因为C语言很纯正很洁净,没有间接的类性能的反对尽管是硬伤,然而其底层性的特点还是无可比拟的,C语言更多的是在写瓶颈算法代码。而C++对我来说略微臃肿一些,规范更新太快,不过毕竟和C有亲戚关系,厚此薄彼了。JavaScript:又是一门脚本语言,然而在我看来JS也开始面向大工程来倒退了,各种规范也是层出不穷,每年一个草案,模块与模块间的相互调用也越来越谨严了。这门我个别拿来在浏览器上游玩,制作一些本人的小工具之类的。还有一些语言,还接触过lua和php,亦或是C#,lua是为了疾速入门torch,php是为了搭建这个wordpress做后端的博客。C#是为了应用VS做一个WPF上位机。lua玲珑弱小和C语言很亲热,PHP本人并不是很喜爱,看了纯正为了WordPress,C#看了有小半年,各方面也挺好用,不过须要充沛了解所有皆对象的概念。 人的精力有限,把握一门编程语言还是很难的。所以很艳羡那些会多国语言的人,既然人家都能学那么好,那么咱们怎么就不能把握多门编程语言呢? 还是多学一些语言吧很多人说精通一门语言比学会多种语言有用,这句话说得在理,然而我在理论的我的项目中更多的是多种编程语言齐驱并驾的,一种语言吃到死的我的项目还是比拟少的。 为什么,其实工作中更多遇到的是穿插编译,凡是波及到我的项目,光应用一门语言个别是行不通的。大多数都须要联合不同语言的专长来进行。把本人的技能树点满,遇到不同的怪物也就熟能生巧了。 在利用Pytorch这个深度学习框架在搭建一些深度学习算法的时候,咱们利用pyyhon来写外围程序,然而如果遇到瓶颈,一些算法速度要求只用python写满足不了这时候就须要C/C++了。另外学习学习cuda也是必要的。 但有一门语言是必学的。 明天,IEEE Spectrum 公布了第五届顶级编程语言交互排行榜:Python 卫冕胜利,C++ 异军突起,雄踞第二,C 语言和 Java 则「退位让贤」,分据第三和第四。 能够这么说,Python不论在求职、开源我的项目、自定义我的项目都占据第一的地位能够说很强势了,Python的劣势不用多说,学好Python好好搞事才是硬道理。 总结下,倡议学习的的语言:C/C++、Python以及JS。 好习惯我这里要说的好习惯不是指早睡早起,这个睡觉的习惯,我不做过多的评估,每个人有每个人的习惯。而且本人也是反例,平时都是一点多睡,早上8点左右起,这样着实不好,大家别学我。 我要说的,是编写代码过程中,能做的查看尽量都做了,别嫌麻烦,该应用assert就别嫌影响代码好看,正文最好都写上,该有的log就log了,该git就git,要不然到时候调试起来真的很影响效率。 自己深深受了这个的苦啊。 应不应该上博这个应该是陈词滥调的问题了,曾有一老友专门过去劝我读博,通宵畅谈,过后差点就被感动了...读博这个真的须要思考分明,我身边有很多转博的人,无非就是两种: 老师劝直博,许可必定能毕业,因为业余偏实践,而后本人感觉研究生进去也不晓得做什么,索性再读几年。本人有想法,想搞钻研,感觉研究生三年工夫不够用,须要博士的工夫持续搞。的确,如果本人想要钻研的货色发现一两年基本出不来后果,何不尝试一下博士呢? 因为一旦你工作了,你想要做的,其实和老板让你做的,差距还是挺大的。 上不上博不是本人一个人的事儿,问问家人,问问女朋友,看看他们是否反对你,而后最终当然看本人的抉择了。 我的项目?工作?如果始终以钻研的心态去找工作,去做我的项目,那么我想说:你想的和人家要的,那能够天壤之差。 之前有一个我的项目,我想要用Python来写,用GPU来跑,想多了啊,人家要求用C++来写,用CPU来跑,你认为谁都有GPU呢,我的项目谈的更是理论,理论落位才是硬道理,因为应用你产品的人,不肯定都有GPU。 如果二心科研,那么我的项目将会是一个齐全不同的天地,两者差异还是很大的,各有各有短处短处,有人说实践很难,也有人说理论我的项目很难,这个真的不好说,只有实践和理论相结合,才是最好的吧。 找工作来说,算法畛域,C++/C语言依然是万金油,不能漠视哇。 后记简略谈谈本人的感触,心愿对大家有帮忙。 好几天没写博客,发现一个情理: 对于大多数有需要的程序员来说,浏览博客是一件很爽的体验。 尤其是在看满满常识干货的时候,那陈腐的代码和公式啊,赤裸裸地铺满在博主参差有条理的页面上,那一张张配图是如许地迷人。尽管巴不得连忙把这些内容涤荡下来,鼠标滚轮上的中指就要按奈不住往下滑——等等!先珍藏了。 然而写博客就稍稍麻烦了,想吐槽的常识太多,奈何工夫又不够,只能慢慢来啊...总得须要酝酿是吧? 贵在保持吧~ 撩我吧如果你与我气味相投于此,老潘很违心与你交换;如果你喜爱老潘的内容,欢送关注和反对。如果你喜爱我的文章,心愿点赞???? 珍藏 ???? 评论 ???? 三连一下~想晓得老潘是如何学习踩坑的,想与我交换问题~请关注公众号「oldpan博客」。老潘也会整顿一些本人的私藏,心愿能帮忙到大家,点击神秘传送门获取。

March 9, 2021 · 1 min · jiezi

关于深度学习:Protobuf在Cmake中的正确使用

Protobuf是google开发的一个序列化和反序列化的协定库,咱们能够本人设计传递数据的格局,通过.proto文件定义咱们的要传递的数据格式。例如,在深度学习中罕用的ONNX替换模型就是应用.proto编写的。咱们能够通过多种前端(MNN、NCNN、TVM的前端)去读取这个.onnx这个模型,然而首先你要装置protobuf。 在之前的博文中曾经简略介绍了onnx,其中onnx.proto就代表了onnx模型的根本数据结构。一般来说,protobuf常常搭配Cmake应用,Cmake有官网的modules,能够通过简略的几个命令protobuf_generate_cpp来生成对应的.pb.cc和.pb.h。 简略的例子: find_package(Protobuf REQUIRED)include_directories(${Protobuf_INCLUDE_DIRS})include_directories(${CMAKE_CURRENT_BINARY_DIR})protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS foo.proto)protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS EXPORT_MACRO DLL_EXPORT foo.proto)protobuf_generate_python(PROTO_PY foo.proto)add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS})target_link_libraries(bar ${Protobuf_LIBRARIES})然而这个例子太简略了,如果咱们的.proto文件只有一个或者说都只在一个目录里,那用这个命令没什么故障... 但如果是这种状况,咱们的文件目录如下: ├── CMakeLists.txt├── README.md├── meta│ └── proto│ ├── CMakeLists.txt│ └── common│ ├── bar│ │ ├── CMakeLists.txt│ │ └── bar.proto│ └── foo│ ├── CMakeLists.txt│ └── foo.proto└── src ├── CMakeLists.txt ├── c_proto.cc └── c_proto.hh其中foo.proto文件如下: message foo_msg { optional string name = 1;}bar.proto的文件如下: import "common/foo/foo.proto"; message bar_msg { optional foo_msg foo = 1; optional string name = 2;}如上,bar文件援用foo,而且这两个不在一个目录,如果间接应用protobuf_generate_cpp来生成,间接会报错。(这个例子取自Yu的一篇博文) ...

March 8, 2021 · 1 min · jiezi

关于深度学习:主机回来以及简单的环境配置RTX3070CUDA111CUDNNTensorRT

紧接着前几天的事: 非凡的日子,想起了当年的双(1080TI)显卡装机实录和 炼丹炉买不起了:聊一聊这段日子的显卡行情之后,决定买一台整机玩玩。 而当初,主机终于回!来!了!主机回来干什么,当然是——配置环境。 老潘之前也有一些配置环境的文章,能够参考: ubuntu16.04下装置NVIDIA(cuda)-gtx965m相干步骤以及问题pytorch-0.2胜利调用GPU:ubuntu16.04,Nvidia驱动装置以及最新cuda9.0与cudnnV7.0配置win10下装置应用pytorch以及cuda9、cudnn7.0装置cuda9.1内核问题:Unable to locate the kernel source深度学习-在ubuntu16.04装置CUDA9.1-总结(问题齐全解决方案)对于在ubuntu上源码装置TensorFLow-1.7.0-cuda9.1-cudnn7.1.2过程中问题解决方案-_-|| 没想到那会写了这么多配置环境的文章,可能那会遇到的问题比拟多吧...配环境什么的,其实只有严格依照步骤来一步一步配,基本上不会呈现什么问题,呈现问题个别都是咱们某一步没有走对,而退回去再走比拟麻烦而已。 而当初对于配环境来说能够是驾轻就熟了(前几年不晓得踩了多少坑,到当初都印象粗浅),严格依照步骤来,装置Ubuntu和配置深度学习环境,1个小时多就搞定了。 接下来稍微具体地讲一下过程。 Windows下装置Ubuntu-18.04配置深度学习环境(Cuda+Cudnn+Pytorch+TensorRT)主机长这样先放一组图吧。 早晨开机还挺炫的,但其实对于老潘来说炫不炫不重要,性能好就行... 主机配环境主机回来店家只给我装了Windows零碎,对于老潘来说,打游戏是主要的(哈哈哈哈...),忍住了先下载一个鬼泣5玩玩的想法。先从Ubuntu官网下载了官网的镜像包。 官网最新的Ubuntu是20.10,但对于搞事的人来说,还是18.04版本好一些(之前实验室用的是16.04)。 开始配置双系统,双系统是必须的,Ubuntu能够搞深度学习,也能够当服务器使,Windows则能够应酬一些游戏和其余应急利用。 对于如何将下载好的Ubuntu零碎镜像制作成U盘、如何装置,老潘这里不赘述了。能够看以下这篇文章,介绍的很具体,我就是依照这个严格来执行的: Windows下装置Ubuntu具体教程当然如果有问题欢送交换,间接留言即可~ 装置过程尽管不赘述了,但还是简略过一下: 进入BIOS,抉择Ubuntu启动U盘,而后开始装置Ubuntu: 其余一路点点点,而后简略分个区。 而后开始装置... 期待半小时,装好了! 设置SSH为什么要设置ssh,当然是想让这个Ubuntu充当一个服务器的作用,开启之后能够应用ssh登录去操作。 例如我,能够先把服务器开了,而后应用其余电脑,例如MAC,应用局域网通过SSH连贯这个服务器即可。 怎么开启ssh呢?新的Ubuntu零碎还没有装置SSH。 执行以下命令: sudo apt install openssh-serversudo systemctl start ssh.service而后能够通过netstat -lnp | grep 22查看下开启没。 如果想要每次启动主动开启SSH,能够这样: sudo systemctl enable ssh这样就差不多啦。 装置NVIDIA显卡驱动默认Ubuntu装置的是llvmpipe这个显卡驱动,这个是linux下的专用显卡驱动,当初须要换成NVIDIA的。 首先禁用nouveau。 执行sudo gedit /etc/modprobe.d/blacklist.conf 加上以下这两句: blacklist nouveauoptions nouveau modest=0 保留后,而后执行: sudo updata-initramfs -usudo reboot重启后,Ctrl+Alt+F1切换到tty界面,敞开lightdm(如果没有则不必管): ...

March 7, 2021 · 2 min · jiezi

关于深度学习:机器学习系统或者SysMLDL笔记一

前言在应用过TVM、TensorRT等优良的机器学习编译优化零碎以及Pytorch、Keras等深度学习框架后,总感觉有必要从实践上对这些零碎进行一些剖析,尽管说在实践中学习是最快最间接的(指哪儿打哪儿、不会哪儿查哪儿),但恶补一些对于零碎设计的一些常识还是十分有用了,权当是坚固一些根底了。 因而,有必要学习理解一下机器学习零碎的设计和思维。如果不是很理解机器学习零碎的设计,能够看下知乎上对于这个问题的答复:相比AI算法钻研,计算机系统钻研败落了吗? 以下是本系列文章的笔记起源: CSE 599W: Systems for MLAI-Sys Spring 2019留神,这一系列文章并不是传统的深度学习或者机器学习解说,对于这部分的解说能够看CS231n或者吴恩达的入门课,该系列文章适宜在深度学习方面有教训有理解的童鞋。 附一张CSE 599W这门课(偶像tqchen主讲)一开始的解说阐明: 这门课次要的重点不在深度学习实践算法,而是与深度学习无关,机器学习零碎方面的解说。 什么是深度学习简略说下深度学习。 由上图可知,深度学习所蕴含的根本内容,也就是以下四大局部: 模型的设计(最外围的中央,不同的工作设计的模型不同,应用的具体算法也不同)指标函数,训练策略(用于训练模型权重参数的指标函数,也就是损失函数,以及一些训练的办法)正则化和初始化(与训练过程中的模型权重信息有关系,放慢训练的收敛速度,属于训练局部)足够多的数据(机器学习亦或深度学习都是由数据驱动着了,没有数据的话就什么都不是)咱们在学习深度学习的过程中,难免会有一些实际,于是咱们就利用以下这些优良的深度学习库去实现咱们本人设计的模型,并且设计好损失函数,一些正则化策略,最终利用这些库去读入咱们须要新联的数据,而后运行期待即可。 这些优良的深度学习库(caffe、Mxnet、TF、Pytorch)咱们应该都耳熟能详了,那么这些深度学习库的大略构造都是什么呢? 大部分的深度学习库都是由以下三个局部组成 用户API零碎组件底层架构大多数的咱们其实并不需要接触除了用户API以外的其余两个局部,而用户API也是深度学习库最顶层的局部。 Logistic Regression拿个例子简略说一下用户的API,首先咱们有一个逻辑回归的工作,就拿最相熟的MNIST数据集来进行演示,咱们通过输出每个数字的向量化数据,而后通过全连贯层去计算这些向量并且利用softmax函数进行预测。整个网络模型很简略已有一层全连贯层。 接下来咱们看一下应用numpy和tinyflow(这是一个迷你的深度学习零碎库,麻雀虽小五脏俱全,值得咱们去学习)去训练一个简略的神经网络辨认MNIST手写数据库的例子: <figure class="half"><img src="https://image.oldpan.me/TIM%E6%88%AA%E5%9B%BE20190509191736.jpg" width=49%><img src="https://image.oldpan.me/TIM%E6%88%AA%E5%9B%BE20190509191744.jpg" width=50%></figure> 上述代码中最重要的也就是三个局部(在上图右侧曾经列了进去): 前向计算:因为只有一个全连贯层,所以咱们的计算也很简略$h_{k}=w_{k}^{T} x_{i}$,其中$ x_{i}$为输出的数据,$w_{k}^{T}$为权重,$h_{k}$为权重向量和数据向量点乘的后果。计算出来后果后咱们应用softmax函数对其进行分类计算失去对应十个数字的概率向量(最初输入的向量蕴含10个元素,别离为每个数字的可能性)反向求导:咱们求出权重W对于极大似然损失的导数,这里咱们人工写了进去,在右图第二局部梯度更新:咱们简略对权重W进行更新,更新值为学习率乘以W的梯度,即$w \leftarrow w-\eta \nabla_{w} L(w)$,也就是咱们常常用的SGD整个深度学习库中最重要的也就是上述三个局部,大部分的深度学习库曾经帮咱们实现了上述的代码,咱们不须要反复造轮子,间接应用即可。 尝试应用TensorFlow like API接下来,咱们应用相似于TensorFlow的API来对上述形容的代码进行重构,应用TensorFlow的API格局来实现上述代码实现的训练过程。 那么,为什么要应用TensorFlow类型的API进行演示而不是采纳Pytorch呢?其实TensorFlow与Pytorch构建的图类型很不一样,尽管在最近一段时间TensorFlow曾经呈现了eager mode,但经典的TensorFlow是采纳动态图来构建整个训练过程的。 也就是说,在TF中构建的是动态图,而在Pytorch中构建的是动态图: 其实对于动态图和动态图对于这个话题曾经通过了很多的探讨,动态图灵便多变,而动态图尽管没有动态图灵便,然而因为提前都确定好了输出参数,计算形式等等过程,零碎能够针对这些特点来对计算进行布局,所以在计算过程中的性能比动态图是要高一些的。 首先咱们确定要进行的前向数据以及操作算子: 输出x为float32类型的向量,[None,784]中None示意以后输出的batch-size未知W为权重信息,维度为[784,10]y为前向计算函数,利用算子函数嵌套定义了整个计算过程。 接下来设定了损失函数,能够看到 cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y), reduction_indices=[1]))这句中申明了一个损失函数,应用的是分类工作中最罕用的穿插熵损失,留神y_代表寄存么一个数据的分类label,每一个数据的分类标签是一个元素数量为10的向量,用于与预测进去的值进行比对。具体的公式在下图右侧。 接下来设定了主动求导的过程,这一步中咱们要求的是权重向量对损失值(也就是穿插熵损失后计算出来的值)的梯度,这里咱们只是申明了一个函数,然而其中的计算过程是比较复杂的(也就是咱们常说的主动求导的过程),这个之后会进行解说,主动求导是咱们必须要把握的,间接手撸是必须的。 设定好了损失函数,接下来咱们就要拿计算出来的梯度值来更新网络的权重信息了,在这个例子中应用SGD随机梯度降落的形式进行权重更新,咱们只须要设定学习率这个超参数就能够。 因为在TF中,所有的申明式都仅仅是对要计算的流程进行申明,实际上并没有计算(这里能够称为一个懒计算的办法),也就是所谓的动态图形式定义好了整个网络以及训练的步骤,只是没有开始运作而已。 在运行完sess.run一句后,整个网络才开始正式执行起来。 这几张ppt的内容讲述了一个典型的神经网络库的运行流程(TF类型的,如果是Pytorch的话略有不同),通过这个咱们能够晓得一个深度学习框架的根本作用。接下来要说的就是上述过程中最为重要的主动求导过程。 计算图(Computation Graph)计算图是实现主动求导的根底,也是每个深度学习框架必须实现的局部,接下来咱们简略说说计算图是什么? 要说起计算图首先简略提一下申明式编程,正如下图中所展现的,计算图实质上是一种申明式语言,怎么说比拟适合,这种语言不同于咱们平时所说的python和C++,它是一种DSL(畛域语言)或者一种迷你语言,这种语言深刻嵌入到Python和C++中,也就是咱们应用Python去操作,应用C++去具体实现。 是申明式编程不是简略地一条接一条地执行咱们的指令,而是依据咱们给出的所有指令创立一个计算图(computing graph)。这个图被外部优化和编译成可执行的 C++ 代码。这样咱们就能同时利用上两个世界的最优之处:Python 带来的开发速度和 C++ 带来的执行速度。 ...

March 3, 2021 · 1 min · jiezi

关于深度学习:买不起炼丹炉了谈一谈特殊时期的显卡情况

原文首发于公主号「oldpan博客」-> 原文链接在此~前言前一阵子忽然有了配主机的想法。呃,当然是为了搞深度学习。 设想一下,亲手买下本人心仪的配件,而后用心组装起来,闻着显卡的香气,啊,满满的成就感。 显卡料想着上RTX-3080或者3070,嗯,毕竟老潘曾经是打工人了,有点小钱,除了上缴,也应该犒劳犒劳一下本人了。毕竟要搞深度学习嘛。 关上手机,看看京东上显卡卖多少钱吧,记得30系列如同又便宜性能又强。 嗯?哇靠?! 什么状况!! 显卡跌价涨到姥姥家去了! 目前的状况目前的状况,简略说一句,就是显卡全线跌价。 翻1倍、翻2倍、翻3倍的都有。 而且还没有货,原价加2000都没有货,只有加4000加6000的才有那么一、两张货! 百度一下显卡关键字: 可见,除了探讨性能,显卡跌价、挖矿曾经成了最近一段日子的关键词。 行情价老潘这几天都在看显卡,看了京东看淘宝,看了拼多多刷抖音,抢不到原价卡,而JS手中的卡价格差不多是这个范畴: 3060:5000多(原2499元)3060TI:7000多(原2999元)3070:8000多(原3899元)3080:13000多(原5499元)3090:20000多(原11999元)卧槽真贵!可想而知溢价有多重大。 挖矿潮不仅是台式机挖矿,带3060-6G显卡的笔记本也被拉去挖矿了,最受欢迎的是神州之前一款性价比极高的3060笔记本,过后首发价只有5499,挖矿一天挣28块6个月回本。现在曾经涨到7599了。 之前也有up主拿上神州笔记本去星巴克蹭电挖矿,白嫖电费挖矿。 而后挖几个月差不多了擦洁净变成女生一手自用,就问你怕不怕。 也有土豪级别间接买一堆笔记本个体挖矿。 老黄思考到RTX 3060行将批发,不得不采取措施,决定通过软件形式将RTX 3060的挖矿性能限度为原来的一半,并推出CMP 30HX/40HX/50HX/90HX四款专门的挖矿芯片。 在一份媒体申明中,NVIDIA闪烁其辞,强调此番软件限度无奈被民间黑客破解,绝不答应烦扰游戏显卡市场的状况再度呈现。某UP主在对一款泄露RTX 3060批发显卡的测试中发现,只管没有驱动,这块RTX 3060在监测到挖矿操作时,性能仍然被削减了,之前标称有41.5MH/s,现在实测仅25MH/s,狐疑NVIDIA在显卡BIOS中写死了某些逻辑,并不依赖驱动。 --驱动之家老黄只管对挖矿做了限度,但RTX3060: 曾经被破解就算不挖ETH,也能够挖别的币不论什么起因,2月26号公布的RTX3060当初5000多能力买到现货,说实话,RTX3060的12G显存可能对于打游戏比拟鸡肋,然而对于深度学习来说还是挺有吸引力的,大的显存意味着能够跑大模型,跑大batchsize,训练成果更好更稳固。性能也相似于1080TI,如果能原价买到(2499)那是极为不错的,1080Ti二手目前也是4000多左右。 因为是新显卡,这几天京东放货略微多些,能够京东蹲一波抢一哈,万一抢到了呢。 显卡跌价起因?显卡跌价到底和什么无关,网上七嘴八舌,老潘本人也不是很分明,大略总结了以下几点起因: 矿潮起因资本起因产能跟不上具体的这里不剖析,因为剖析了也没用~买不到的还是买不到。 去年买显卡的真实写照:早买早享受,晚买不肯定享折扣。 你要问我还有什么显卡不跌价,还真有,那就是核显,不光不跌价,还提价了。 开个玩笑,其实除了30系,20系、10系都被带着跌价了。涨的不多的,只有比拟老的显卡(例如970)系列以及最高配的3090系列(溢价10%左右)。3060、3060ti、3070、3080是溢价最重大的几款型号(只看N卡,A卡我不懂)。 亮机卡个别也不涨,例如gt710、rx550等。 还有智商检测卡也不会涨,什么是智商检测卡,这里的指的是显存达不到挖矿要求(4G)的卡。矿主小白买了发现不能挖,或者挖了入不敷出,这种卡是比拟坑。然而也有魔改显卡,批改内存颗粒强行晋升内存的(例如1650魔改为1660)。 想想一下挖矿有如许疯狂吧: 索泰官网不小心官网挖矿网吧都曾经开启矿场“自买自用”了,网吧关停个体挖矿。上文提到的笔记本挖矿 挖矿挖的有多狠,连老黄都忍不住推出了挖矿专用卡CMP HX系列,然而还是那句话,个人感觉作用不大。 同是天涯沦落人当初想买显卡的无非就是这么几类: 矿老板,资金宏大,大量购卡散户挖矿,通常10张以下,资金无限,倡议新散户当初不要轻易接盘黄牛,这种资金更少,通常就几张卡,还必须焦急的出掉回笼资金头等玩家,也可称等等党,这类人绝对于公众而言对电脑有根本的理解,只会买3060ti以上的失常价位显卡,手上都有过渡卡1060、1660等小白,他们对本人电脑定位不清晰,跟风重大,比拟小心生产力工作者,例如深度学习模型训练、视频剪辑、渲染的工作者。对本人买什么比拟明确,在期待机会抢购适合价位的显卡。老潘属于最初一种,当然也会打打游戏。想买3070或者3080。其中3070,6000以内可能会下手,3080,8000以内可能会下手。 也有切实忍不住就间接买啦,早买早用嘛。 其余老潘疫情期间应用过的GPU服务器租用平台,利他GPU,能够间接租用服务器进行深度学习工作,那会帮了我不少忙。 交易应用的叫做DBC的虚构货币。 那会记得是300多块钱能够租1080TI,差不多两个礼拜的样子,当初点进去看看,服务器没有几台了,价格也绝对之前高一些。可能大部分机器都被拿去挖矿了。 深度学习配置举荐配置嘛,除了显卡其余都好说。 举荐一个单卡本人玩的深度学习配置,有多卡需要的能够上Z490或者X299这类的主板。 CPU:intel 十代10700F散片 价格2000散热:酷冷至尊 暴雪T400PAO ARGB主板:微星 B460M 迫击炮 WIFI 价格739显卡:RTX 3060 或 RTX 3080内存:海盗船复仇者RGB 3000 8*2硬盘:西数SN750 500G 黑盘电源:酷冷至尊 G700 700W金牌 直出机箱:航嘉阿瑞斯全侧透风扇:航嘉炫彩*5如果是3060,上述8500左右;如果是3070,上述配置11000左右;如果是3080则须要更好的CPU、主板和电源了(差不多16000左右)。 ...

March 2, 2021 · 1 min · jiezi

关于深度学习:深度学习中数据集很小是一种什么样的体验

前言明天提一个比拟轻松的话题,简略探讨数据集大小对深度学习训练的影响。不晓得大家有没有看过这篇文章:Don't use deep learning your data isn't that big 是的,有人对深度学习的局限性提供了一个证据:那就是当你数据比拟少的时候,深度学习的作用相比拟于其余传统的办法并没有什么劣势,相同成果还不如传统的办法。 提出这个说法的作者利用两种办法进行了测试,测试的数据集是MNIST,测试计算机是否能正确辨认0和1,采纳的办法别离是: 5层的深度神经网络,活函数是双曲正切函数;另一种办法应用的是李加索变量抉择办法,这种办法思维就是筛选10个边际p值最小的像素来进行(用这些值做回归就能够了);而后得出一个论断: 那就是应用李加索办法的体现要优于神经网络。What? 注释那么回到正题,下面的说法到底对不对,咱们在数据比拟小的时候是否正确地进行深度学习的训练从而达到比较满意的成果? 咱们都晓得,神经网络相当于一个有限深的万能函数,咱们输出变量x而后失去后果y,两头经验了很多简单的计算过程。实践上,通过传统算法能够解决的问题通过深度学习都能够解决,然而如果神经网络足够深的时候,尽管这个网络的性能很弱小,然而如果数据不够,很容易达到过拟合的景象,从而达不到咱们要求的成果。 那么数据集过小是否能够通过深度学习来做,咱们来测试一下。 一维信号咱们测试数据很简略,不是咱们平时应用的三通道RGB图(3 x 256 x 256),而是一般的一通道一维信号(1 x 168)。 上方是咱们的一维信号,532nm和1064mn别离对应两种不同的信号,咱们只须要对一种信号处理器可。信号的格局是.mat文件,也就是matlab文件。 下面的文件中,train数据集是161 x 168,第一行是x轴的坐标咱们不必理睬只须要y轴的数据,而后每40个数据组是一类也就是 2-41、42-81、82-121、122-161,一共四类。而test数据集是81x168,第一行同样是x坐标咱们不论,每20个数据组是一类(和train数据组程序上类别是一样的)。也就是说咱们一共有四类信号要进行分类。 label别离为:0、1、2、3. 咱们的训练数据量只有160组,而测试数据量也只有80组。 数据读取咱们采纳的深度学习库是Pytorch,利用的python上的scipy库,scipy是一个线性函数解决库,当然咱们只是应用它对mat文件的读取性能。 创立一个文件读取.py,引入以下头文件。 import torchimport torch.utils.data as dataimport scipy.ioimport osimport os.path as osp而后咱们编写文件读取类.py: # 将原始数据转化为训练须要的数据格式def to_tensor(data): data = torch.from_numpy(data).type(torch.float32) data = data.unsqueeze(0) return data# 读取数据类class LineData(data.Dataset): def __init__(self, root, name=532, train=True, transform=to_tensor): self.root = os.path.expanduser(root) self.name = name self.train = train self.transform = transform self.classes = [0, 1, 2, 3] if not osp.exists('datasets'): raise FileExistsError('Missing Datasets') if self.train: self.train_datas = [] self.train_labels = [] dataset_dir = osp.join(self.root, 'train_{}nm.mat'.format(self.name)) train_data = scipy.io.loadmat(dataset_dir)['lineIntensity'] data_length = len(train_data) - 1 # 161 - 1 = 160 if self.transform: for i in range(data_length): # 0 - 159 self.train_datas.append(transform(train_data[i+1])) # i+1 => 1 - 160 self.train_labels.append(self.classes[int(i / 40)]) else: raise ValueError('We need tranform function!') if not self.train: self.test_datas = [] self.test_labels = [] dataset_dir = osp.join(self.root, 'test_{}nm.mat'.format(self.name)) test_data = scipy.io.loadmat(dataset_dir)['lineIntensity'] data_length = len(test_data) - 1 # 81 - 1 = 80 if self.transform: for i in range(data_length): # 0 - 79 self.test_datas.append(transform(test_data[i+1])) # i+1 => 1 - 80 self.test_labels.append(self.classes[int(i / 20)]) else: raise ValueError('We need tranform function!') def __getitem__(self, index): """ Args: index (int): Index Returns: tuple: (image, target) where target is index of the target class. """ if self.train: data, target = self.train_datas[index], self.train_labels[index] else: data, target = self.test_datas[index], self.test_labels[index] return data, target def __len__(self): if self.train: return len(self.train_datas) else: return len(self.test_datas)编写神经网络写好文件读取代码后,咱们来设计一下神经网络,因为数据量很少,所以咱们的神经网络的层数也应该降落。否则很容易呈现过拟合的景象。 ...

March 1, 2021 · 4 min · jiezi

关于深度学习:看完你就明白什么是图神经网络

摘要:图神经网络是一种基于图构造的深度学习办法。1.什么是图神经网络图神经网络(Graph Neu做ral Networks, GNNs)是一种基于图构造的深度学习办法,从其定义中能够看出图神经网络次要由两局部组成,即“图”和“神经网络”。这里的“图”是图论中的图数据结构,“神经网络”是咱们相熟的深度学习NN构造,如MLP,CNN,RNN等。要理解图神经网络咱们须要先回顾一下“图”和“神经网络”的基本概念。 1.1图的定义 1.2典型神经网络典型的神经网络构造有两条主线,一条主线是卷积神经网络,简称CNN,次要用于图像类数据的解决。另一条主线是循环神经网络,简称RNN,次要用于时序类数据的解决。因为神经网络构造的介绍不是本篇的重点,因而在这里不做重点介绍。只展现如下两图典型的CNN和RNN的构造: 下图展现了以后的支流神经网络构造以及实用的场景: 1.3图神经网络根据上述对图和神经网络的回顾,咱们能够看出,图神经网络就是借助神经网络的“能力”如深度特色抽取等来解决图构造的数据,因而对于图神经网络,其直观的构造应该如下图: 其中图构造的数据有许多,如社交网络图、交通路线图、人物关系图、分子结构图、计算结网络拓扑图等等。这些数据都能够作为图神经网络的输出。之后通过特定的神经网络构造,如MLP,CNN,RNN等的基于图构造的运算,能够实现对于图示意的分类,图的节点或边的预测等性能。 2.为什么须要图神经网络近年来,深度学习曾经彻底改变了许多机器学习工作,从图像分类和视频解决,到语音辨认和自然语言了解,这些工作中的数据通常示意在欧几里得空间中。然而,在越来越多的应用程序中,数据是从非欧几里得域生成的,并示意为具备简单关系和对象之间相互依赖的图形。图数据的复杂性给现有的机器学习算法带来了微小的挑战。下图左为图像(欧几里得空间),右为图(非欧几里得空间)。 传统的神经网络构造如CNN、RNN等都是承受欧几里得空间的数据作为输出,他们无奈解决非欧几里得空间的数据结构,比方图和风行构造。因而对于此类数据,图神经网络就更加适宜解决。近年来图神经网络的钻研热度也一直晋升,如下图所示: 3.图神经网络典型的利用场景本章节基于图神经网络近年来的一些研究进展,展现一下图神经网络以后典型的利用场景以及一些典型的工作。 将图构造和节点内容信息作为模型的输出,GNNs的输入能够通过以下机制之一专一于不同的图剖析工作: Node-level输入用于点回归和分类工作。Edge-level输入与边分类和链路预测工作相干。Graph-level输入和图分类工作相干,比方图示意。上面以典型论文为例介绍几个GNNs的典型工作: 3.1图分类咱们晓得很多有机物或者化合物的分子结构都是能够用图构造来示意的,比方下图的4-nitroindole,该GNN的作用是训练一个图神经网络,接管一个分子结构来判断该分子结构会不会导致产生渐变。在训练的过程中如果有现存的已标注的可导致产生渐变的分子结构,咱们就能够训练该图神经网络,而后用他来预测一个新的未知的分子会不会导致渐变。 3.2图生成咱们晓得在图像和语言的畛域里别离有embedding和generation技术,比方常见的图像和语言生成技术,比方动静动态的预训练和词嵌入技术。相应的在图畛域,咱们也有图的嵌入示意比方graph embedding representation和图的generation技术。比方下图的graphvae,变分图自编码器就是一个图生成模型,其次要是为图中节点找寻适合的 Embedding 向量,并通过 Embedding 向量实现图重构。其中获取到的节点 Embedding 能够用于撑持上游工作。比方在新的分子结构生成发现中能够应用该技术来放慢分子发现速度。 3.3社交网络分析在社交网络分析中,实体之间的关系往往会是十分重要的特色,图构造就能很好的示意这种关系特色。如下图的社交网络图中,每个实体的关系能够用边来形容,这样在进行实体分类或者关系分类时,利用图数据结构,实现特定工作的标注,就能够训练出一个图神经网络来实现此类工作。 3.4网络拓扑剖析网络的拓扑人造就是图构造的示意,计算机网络中的路由技术就是以图轮为根底的算路技术。同时网络中每两个节点之间也会有时延,丢包,抖动等网络KPI信息。这些点对之间的KPI往往是动态变化的,这就影响到了实时路由决策和优化的问题。比方以后链路的时延或者丢包过大,路由算法就须要抉择新的门路进行数据包传递。图神经网络在这个问题中就能够接管底层的网络拓扑、网络配置信息和流量矩阵信息来实时预测每一个点对,每一条流的试验丢包抖动,这样就能够更好的配合路由和优化算法,使能网络的主动驾驶。 4.图神经网络典型训练框架4.1 Semi-supervised learning for node-level classification:给定一个网络,其中局部节点被标记,其余节点未标记,ConvGNNs能够学习一个鲁棒模型,无效地辨认未标记节点的类标签。为此,能够通过叠加一对图卷积层,而后是用于多类分类的softmax层来构建端到端框架。见图(a) 4.2 Supervised learning for graph-level classification:图级分类的目标是预测整个图的类标签。该工作的端到端学习能够联合图卷积层、图池层和/或readout层来实现。图卷积层负责准确的高级节点示意,图池层则表演下采样的角色,每次都将每个图粗化成一个子结构。readout层将每个图的节点示意折叠成一个图示意。通过在图示意中利用一个多层感知器和一个softmax层,咱们能够建设一个端到端图分类框架。见图(b) 4.3 Unsupervised learning for graph embedding:当图中没有可用的类标签时,咱们能够学习在端到端框架中以齐全无监督的形式嵌入图。这些算法以两种形式利用边缘级信息。一种简略的办法是采纳自编码器框架,编码器应用图卷积层将图嵌入到潜在示意中,在潜在示意上应用解码器重构图构造。另一种罕用的办法是利用负采样办法(negative sampling),即对图中有链接的局部节点对进行负采样,而对图中有链接的节点对进行正采样。而后应用逻辑回归层对的正负配对进行辨别。见图(c) 参考文献[1]. https://mp.weixin.qq.com/s/PSrgm7frsXIobSrlcoCWxw [2]. http://speech.ee.ntu.edu.tw/~tlkagk/courses/ML2020/GNN.pdf [3]. https://persagen.com/files/misc/scarselli2009graph.pdf [4]. https://arxiv.org/pdf/1802.03480.pdf [5]. https://arxiv.org/abs/1901.00596 [6]. https://arxiv.org/abs/1910.01508 ...

March 1, 2021 · 1 min · jiezi

关于深度学习:浅谈深度学习如何计算模型以及中间变量的显存占用大小

前言亲,显存炸了,你的显卡快冒烟了! torch.FatalError: cuda runtime error (2) : out of memory at /opt/conda/conda-bld/pytorch_1524590031827/work/aten/src/THC/generic/THCStorage.cu:58想必这是所有炼丹师们最不想看到的谬误,没有之一。 OUT OF MEMORY,显然是显存装不下你那么多的模型权重还有两头变量,而后程序奔溃了。怎么办,其实方法有很多,及时清空两头变量,优化代码,缩小batch,等等等等,都可能缩小显存溢出的危险。 然而这篇要说的是下面这所有优化操作的根底,如何去计算咱们所应用的显存。学会如何计算出来咱们设计的模型以及两头变量所占显存的大小,想必晓得了这一点,咱们对本人显存也就会得心应手了。 如何计算首先咱们应该理解一下根本的数据量信息: 1 G = 1000 MB1 M = 1000 KB1 K = 1000 Byte1 B = 8 bit好,必定有人会问为什么是1000而不是1024,这里不过多探讨,只能说两种说法都是正确的,只是利用场景略有不同。这里对立依照下面的规范进行计算。 而后咱们说一下咱们平时应用的向量所占的空间大小,以Pytorch官网的数据格式为例(所有的深度学习框架数据格式都遵循同一个规范): 咱们只须要看右边的信息,在平时的训练中,咱们常常应用的个别是这两种类型: float32 单精度浮点型int32 整型个别一个8-bit的整型变量所占的空间为1B也就是8bit。而32位的float则占4B也就是32bit。而双精度浮点型double和长整型long在平时的训练中咱们个别不会应用。 ps:生产级显卡对单精度计算有优化,服务器级别显卡对双精度计算有优化。 也就是说,假如有一幅RGB三通道真彩色图片,长宽别离为500 x 500,数据类型为单精度浮点型,那么这张图所占的显存的大小为:500 x 500 x 3 x 4B = 3M。 而一个(256,3,100,100)-(N,C,H,W)的FloatTensor所占的空间为256 x 3 x 100 x 100 x 4B = 31M 不多是吧,没关系,好戏才刚刚开始。 显存去哪儿了看起来一张图片(3x256x256)和卷积层(256x100x100)所占的空间并不大,那为什么咱们的显存仍旧还是用的比拟多,起因很简略,占用显存比拟多空间的并不是咱们输出图像,而是神经网络中的两头变量以及应用optimizer算法时产生的巨量的两头参数。 咱们首先来简略计算一下Vgg16这个net须要占用的显存: 通常一个模型占用的显存也就是两局部: 模型本身的参数(params)模型计算产生的两头变量(memory) 图片来自cs231n,这是一个典型的sequential-net,自上而下很顺畅,咱们能够看到咱们输出的是一张224x224x3的三通道图像,能够看到一张图像只占用150x4k,但下面是150k,这是因为这里在计算的时候默认的数据格式是8-bit而不是32-bit,所以最初的后果要乘上一个4。 ...

February 28, 2021 · 1 min · jiezi

关于深度学习:用深度学习技术造假巨星短视频狂揽几十万粉丝

三天前,一个名为@deeptomcruise的TikTok账号开始公布好莱坞巨星汤姆-克鲁斯的视频片段,从打高尔夫到在意大利的一家男装店里被绊倒后讲笑话,再到用硬币表演魔术。在这三段视频中,克鲁斯每一段都会收回他标志性的狂笑,不过尽管所有这些视频中的人看起来都和汤姆-克鲁斯如此相像,但这些都不是克鲁斯,而是用深度伪造视频技术「deepfake」制作的假视频。 如果仔细观察就能够发现一些疑点,首先视频里的汤姆-克鲁斯看起来要比58岁年老很多, 而且也要比真人高出很多。此外,他的声音也有显著的不同。 不过大多数网友并没有留神到这些,这个名为@deeptomcruise账号曾经积攒了23.6万名粉丝,并且粉丝数还在一直减少中。目前TikTok官网没有发表上传应用「deepfakes」技术的视频是否违反了服务条款,但有不少用户曾经感觉事件的严重性,并且有人倡议:每个公众人物都应该在那里注册一个通过验证的账号,即便他们不公布内容,这样更容易让用户辨认混充的账号。 麻省理工学院的钻研人员对这项技术进行了具体的解释,@deeptomcruise 正在应用 「deepfakes」技术,这是一个联合了 「深度学习 」和 「假货 」的术语,一种非凡的合成媒体,在这种媒体中,图像或视频中的一个人与另一个人的肖像进行了替换。 为了制作一个深度伪造视频,制作者应用面部辨认算法和一个称为变异主动编码器[VAE]的深度学习计算机网络,将一个人的脸换成另一个人的脸。VAE被训练成将图像编码成低维示意,而后将这些示意解码回图像。例如,如果你想将任何视频转化为影星尼古拉斯-凯奇的「深度伪造」,你须要两个主动编码器,一个是在演员脸部的图像上训练的,另一个是在多种脸部的图像上训练的。 这两个训练集所应用的人脸图像能够通过对视频帧利用面部辨认算法来策动,以捕获天然产生的不同姿态和照明条件。一旦实现这种训练,你就能够将在多样化的人脸上训练的编码器与在尼古拉斯-凯奇的脸上训练的解码器联合起来,从而在他人的身材上造成演员的脸。 这项技术早在2017年就呈现公众视线中,那时有很多美国前总统特朗普的追随者公布了大量假新闻,在2019年的电影《爱尔兰人》中这项技术也被大量应用,人们对这项技术的评估十分两极化,喜爱的人感觉这将开启一个电影新时代,厌恶的人感觉会有人用它来进行「立功」。 目前来说@deeptomcruise账号里公布的视频并没有任何危害,但还是心愿视频平台减速制订「deepfakes」制作视频公布规定,防止有用户上当受骗。

February 27, 2021 · 1 min · jiezi

关于深度学习:CVer想知道的都在这里了一起分析下中国计算机视觉人才调研报告吧

最近闲来无事,老潘以一名一般算法工程师的角度,联合本身以及四周人的状况,感性也理性地剖析一下极市平台前些天公布的2020年度中国计算机视觉人才调研报告。 以下的“计算机视觉人才”简称“人才”,感觉说人才有点怪怪的感觉?本人也算人才么?老潘只不过是一个普普通通的算法工程师罢了(逃)。 这个报告一共分为几个方面,用大白话讲一下就是: 计算机人才哪个城市最多,哪个业余最多、都喜爱发些什么论文、喜爱什么编程语言、深度学习框架、工作地点等等作为计算机人才,咱们应该学习什么能力不被社会所淘汰,如何晋升本人计算机人才也会有懊恼,不论是在学校还是在公司.....都是你想晓得的。 再次申明,该报告是由极市平台、中国图像图形学学会以及Deloitte联结公布。以下图片内容来源于报告,未做任何批改。一共34页的报告PDF,感兴趣的,公众号回复“000”即可。 哎呀,废话不多说,开始剖析(吐槽)吧。 第一节 人才现状? 先看下人才散布? 调研人才散布中硕士和本科占比80%挺失常,硕士做算法工程的更多,博士做算法钻研的更多。个别在互联网公司中,大部分都是硕士做算法工程师,来的实习生也都是硕士研究生,当然也有少许的本科生,特地优良的本科生应该也是能够做算法工程师这个岗位的。 研究生相比本科生的劣势可能是: 学位,以及多学了几年常识?但最重要的是在研究生阶段你有实验室,实验室如果老师资源够好经费足够,是能够做一些其他人没有条件去做的事件。回想起当年本科生的时候,大家都是凑钱加入较量,所有设施都是队员们惨兮兮地从生活费中一点一点扣,买个主控板都要精打细算。拿不到好奖项(奖金)的时候也经常入不敷出。 不过那会大家都很开心,毕竟是真正的酷爱,当年熬夜通宵的日子当初也一去不复返了。 本科生与研究生做我的项目的区别还有一个:本科生没有束缚,作较量更多的是凭着趣味,是被动;研究生有导师管着,大部分学生做我的项目是导师要求,是被动。态度决定所有,趣味才是一直学习的能源。 哦对了,报告中一句话值得斟酌:"在具备相干教训的群体中,其算法教训略多于工程教训"。 好好打工程根底吧! 看一下地区散布 来自北京的人才无需质疑数量必定是第一,起因很简略,北京相应的人工智能企业最多,互联网气氛最好,大家当然都来北京了。接下来是深圳,深圳是守业之都,机具守业激情,硬件公司也多一些,机器人和AI联合的企业一抓一大把。最闻名的算是大疆了。 好的企业都被一线二线城市瓜分了,那其余中央呢.. 老潘也面临着残暴的事实:我这个业余这个技术方向,回老家切实找不到工作啊。 业余散布再看一下业余散布。 学计算机专业的就是好呀,计算机相干业余在找工作上是有肯定的劣势,毕竟人家底子好一些。然而大家不要灰心,当初是自学的时代,网上好资源一搜一大把,只有你肯下功夫学习,不肯定比业余搞计算机的差。 业余(相差太大的业余,例如田园设计等,这个难度可能会大些)和你在上学阶段学什么关系并不是很大,要害还是看本人。 趁着在学校,多找些组织,找些材料,连忙学习吧! 钻研畛域果然指标检测的人最多。 指标检测最好入门,材料最多,变种最多,代码最多...特地适宜充当毕业生的毕设我的项目选题。不过如果是找算法开发相干的工作,只会指标检测是远远不够的。 老潘在前年找工作的时候主打的也是指标检测,过后在实习时候曾经聊好了一个公司leader,许可说秋招的时候会再面试一下(就过)。然而秋招的时候那位leader不好意思地跟我说,他们公司指标检测相干工作开发这一块的人曾经比拟多了,他们更想要招有3D生成或者GAN我的项目教训的求职者。总而言之就是一句话: 你很优良,然而不适宜咱们。 不过不同公司的需要是不一样的,指标检测这个方向对于大部分公司来说,依然是需求量比拟大的。 时代在倒退,AI也在不停提高,你要问我当初CV畛域哪儿还不卷? 我也不晓得啊~ 发表论文散布发论文最好发的是什么话题?当然也是指标检测了。 不得不吐槽一下,不论是anchor-base还是anchor-free的检测框架,改一下脑袋(head)改一下颈部(neck)改一下身材(backbone)就能够水一篇论文了。什么?不会改?那就改一下数据集吧~同样的框架,换个场景,又是一条好汉。 喜爱的编程语言 还是老潘之前说过的,AI行业最风行的语言就是Python和C++。 不论是最火的深度学习框架Pytorch和Tensorflow,还是比拟风行的模型减速推理框架TensorRT和TVM。都会提供Python接口来实现与用户的交互,提供API供用户应用,但理论内核代码都是应用C++编写的。起因很简略,为了保障性能以及不便地应用各种减速库(MKL、cuDNN)。另外,C++中的各种个性也比拟适宜团队合作开发大型项目,感兴趣的能够浏览相干源码,亲自感触下其牛逼之处。 对Pytorch源码感兴趣的能够看: 一个Tensor的生命历程(Pytorch版)-上篇一个Tensor的生命历程(Pytorch版)-下篇还有很多这里临时不介绍了,有趣味能够关注老潘,时不时会剖析一哈框架。 喜爱的深度学习框架以下内容很实在..国产的深度学习框架使用率7%不到(往年应该超过7%了,paddlepaddle很好用),还是Pytorch和Tensorflow的天下。 PS:感觉Darknet应该是靠yolov3火起来的,而且后继有人不断更新...纯C语言开箱即用对工业界几乎不要太好。Caffe2挺惋惜。MXNet小而美。 老潘理性分析一哈。对于学生来说,框架的易用性和社区欠缺度很重要(说白了就是遇到不会的问题,百度的时候材料多不多)。还有刚开始入门的小白,会听他人说什么什么好什么好,跟风应用;但对于公司来说,根本就是依据理论需要抉择应用框架,例如这个模型只有Tensorflow的开源版本,有咩有Pytorch的,灭有?复现太耗时间,间接上手Tensorflow吧~毕竟是以业务来驱动的,产出就是第一指标,反之亦然。 目前状况来看,Pytorch不管在学生还是公司占有率劣势很大。老潘3年前开始应用Pytorch进行深度学习钻研,那会还是0.2版本,比照过后的TensorFlow,几乎就像蚂蚁和大象。但短短2、3年工夫,蚂蚁曾经长大了。 公司更偏向于Pytorch的起因也很简略: 多种模型Pytorch实现最多(例如CenterNet、FCOS)多种整合好的训练框架基于Pytorch(mmdet、detectron2)Pytorch训练好的模型部署起来也比拟不便(各类推理框架对于Pytorch的反对更多一些,例如TensorRT)更少数不清的理由(例如debug不便、对老手敌对等等)当然TensorFlow也是有长处的,TensorFlow-server很多公司在应用,尽管也有一部分是历史起因,然而其稳定性和可靠性依然比大部分的server要强。 PS:举荐一个能够媲美TensorFlow-Server的服务器推理框架——triton-inference-server,前身是TensorRT-server,现已开源,能够部署各种框架模型进去(TensorRT、Pytorch、TensorFlow、Onnxruntime等),老潘钻研过一段时间,苦于没有工夫分享,感兴趣的能够交换一波~ 什么?上述框架满足不了你?你要手撸一个框架本人搞(重大狐疑你是来炫技的)?在学生时代是能够花点工夫,模拟其余大型框架写一个小的框架练练手,这里举荐几个我的项目来瞧一瞧学一学: tinyflowtinygradC++模板元编程实战-一个深度学习框架的初步实现一般来说,框架同时具备训练和推理性能。但训练局部写起来挺难,如果是只写推理性能的话,又简略一些。很多框架只有推理性能,感兴趣的能够参考一哈,简略列了一些(并不全): NCNNMNNTVM如果是硬件公司(很多这样的硬件守业公司)应用本人的芯片,也会有相应的AI底层算法工程师去搭建相似于TensorRT这样的产品,写op,操控内存接口,最终产出相似于TensorRT这样的动态链接库,暴露出API供下层调用。 总之,框架这货色还是用的难受比拟好,我嘛,就喜爱用Pytorch! 薪资状况大部分互联网公司搞算法的薪资比搞开发的可能会高一些,但其实也相差不了多少(真的相差不了多少)。 大部分算法工程师也会干开发的活,只是附带算法这个属性罢了。只有真正的算法研究员才是真正钻研算法实践退出新算法的。 对于硬件公司来说(vivo、oppo这类),算法工程师和开发工程师薪资并无区别(硕士校招)。都是有好几档,看各自程度定级。然而会有些钻研性质的岗位只要求博士参加,这也就是博士与硕士的差距。 对于硕士研究生来说,算法和开发相差并没有设想中那么大,也不存在所谓的鄙视链。 行业散布行业散布还是比拟中肯的,人工智能畛域与深度学习密切相关。大部分互联网公司也有很多深度学习的业务线存在,例如快手、抖音等各种AI玩法,都是与深度学习关系很深的我的项目。 还有电商的以图搜图、虚构试妆;教育领域的视频教学中的课程互动、拍照搜题、智能阅卷等等。都是当初很平时融入生存中的AI场景,也能够说,AI无处不在了。 借一下报告中的内容: 自2018年起,寰球计算机视觉技术一直成熟,开源生态、技术社区、人工智能开放平台的建设也使得算法的开发与利用门槛显著降落。德勤在《寰球人工智能倒退白皮书》中指出,由深度学习驱动的计算机视觉在某些畛域曾经超过人类,特地是在人脸识别、图像分类等工作中。同时,在我国,计算机视觉技术的利用领有宏大的市场空间与丰盛的场景数据,因此当技术成熟度达到产业要求时,不少垂直行业,尤其是行业中的头部企业,抉择了在组织外部搭建计算机视觉团队,打造行业专属的计算视视觉算法产品或相干性能。 ...

February 24, 2021 · 1 min · jiezi

关于深度学习:实现TensorRT70插件自由如果不踩坑使用TensorRT插件功能

本系列为新TensorRT的第一篇,为什么叫新,因为之前曾经写了两篇对于TensorRT的文章,是对于TensorRT-5.0版本的。好久没写对于TensorRT的文章了,所幸就以新来结尾吧~ 接下来将要解说的TensorRT,将会是基于7.0版本。 7版本结尾的TensorRT变动还是挺大的,减少了很多新个性,然而TensorRT的外围运作形式还是没有什么变动的,对于TensorRT的介绍能够看之前写的这两篇: [利用TensorRT对深度学习进行减速](https://oldpan.me/archives/us... [利用TensorRT实现神经网络提速(读取ONNX模型并运行)](https://oldpan.me/archives/te... 本文的内容呢,次要是解说: TensorRT自定义插件的应用形式如何增加本人的自定义算子看完本篇能够让你少踩巨多坑,客官记得常来看啊。 前言随着tensorRT的一直倒退(v5->v6->v7),TensorRT的插件的应用形式也在不断更新。插件接口也在一直地变动,由v5版本的IPluginV2Ext,到v6版本的IPluginV2IOExt和IPluginV2DynamicExt。将来不晓得会不会进去新的API,不过这也不是咱要思考的问题,因为TensorRT的后兼容性做的很好,基本不必放心你写的旧版本插件在新版本上无奈运行。 目前的plugin-API: TensorRT插件的存在目标,次要是为了让咱们实现TensorRT目前还不反对的算子,毕竟众口难调嘛,咱们在转换过程中必定会有op不反对的状况。这个时候就须要应用TensorRT的plugin去实现咱们的本人的op。此时咱们须要通过TensorRT提供的接口去实现本人的op,因而这个plugin的生命周期也须要遵循TensorRT的规定。 一个简略的理解那么plugin到底长啥样,能够先看看TensorRT的官网plugin库长啥样,截止写这篇文章时,master分支是7.2版本的plugin: https://github.com/NVIDIA/Ten... 官网提供的插件曾经相当多,而且TensorRT开源了plugin局部(能够让咱们白嫖!)。并且能够看到其源码,通过模拟源码来学习plugin是如何写的。 如果要增加本人的算子,能够在官网的plugin库里头进行批改增加,而后编译官网的plugin库。将生成的libnvinfer_plugin.so.7替换本来的.so文件即可。或者本人写一个相似于官网plugin的组件,将名称替换一下,同样生成.so,在TensorRT的推理我的项目中援用这个动态链接库即可。 以下介绍中,咱们须要写的IPlugin简称为插件op。 开始写插件有趣味的能够先看看TensorRT的官网文档,官网文档的介绍简略意骇,不过坑是少不了的..而本文的目标,就是尽量让你少趟坑。 首先依照官网plugin的排布形式,上面轻易挑了个官网plugin: 筹备一个本人的插件:custom.cpp和custom.h,copy并paste官网代码,名字替换成本人的。以最新的IPluginV2DynamicExt类为接口。 咱们须要写两个类: MyCustomPlugin,继承IPluginV2DynamicExt,是插件类,用于写插件具体的实现MyCustomPluginCreator,继承BaseCreator,是插件工厂类,用于依据需要创立该插件对了,插件类继承IPluginV2DynamicExt才能够反对动静尺寸,其余插件类接口例如IPluginV2IOExt和前者大部分是类似的。 // 继承IPluginV2DynamicExt就够啦class MyCustomPlugin final : public nvinfer1::IPluginV2DynamicExtclass MyCustomPluginCreator : public BaseCreatorMyCustomPlugin 插件类总览: class MyCustomPlugin final : public nvinfer1::IPluginV2DynamicExt{public: MyCustomPlugin( int in_channel, const std::vector<float>& weight, const std::vector<float>& bias); MyCustomPlugin( int in_channel, nvinfer1::Weights const& weight, nvinfer1::Weights const& bias); MyCustomPlugin(void const* serialData, size_t serialLength); MyCustomPlugin() = delete; ~MyCustomPlugin() override; int getNbOutputs() const override; DimsExprs getOutputDimensions(int outputIndex, const nvinfer1::DimsExprs* inputs, int nbInputs, nvinfer1::IExprBuilder& exprBuilder) override; int initialize() override; void terminate() override; size_t getWorkspaceSize(const nvinfer1::PluginTensorDesc* inputs, int nbInputs, const nvinfer1::PluginTensorDesc* outputs, int nbOutputs) const override; int enqueue(const nvinfer1::PluginTensorDesc* inputDesc, const nvinfer1::PluginTensorDesc* outputDesc, const void* const* inputs, void* const* outputs, void* workspace, cudaStream_t stream) override; size_t getSerializationSize() const override; void serialize(void* buffer) const override; bool supportsFormatCombination(int pos, const nvinfer1::PluginTensorDesc* inOut, int nbInputs, int nbOutputs) override; const char* getPluginType() const override; const char* getPluginVersion() const override; void destroy() override; nvinfer1::IPluginV2DynamicExt* clone() const override; void setPluginNamespace(const char* pluginNamespace) override; const char* getPluginNamespace() const override; DataType getOutputDataType(int index, const nvinfer1::DataType* inputTypes, int nbInputs) const override; void attachToContext(cudnnContext* cudnn, cublasContext* cublas, nvinfer1::IGpuAllocator* allocator) override; void detachFromContext() override; void configurePlugin(const nvinfer1::DynamicPluginTensorDesc* in, int nbInputs, const nvinfer1::DynamicPluginTensorDesc* out, int nbOutputs) override;private: int _in_channel; std::vector<float> weight; std::vector<float> bias; float* weight; float* bias; bool _initialized; const char* mPluginNamespace; std::string mNamespace;};成员变量如果你的插件有weights(相似于conv操作的weight和bias),有参数(相似于conv中的kernel-size、padding),在类中则须要定义为成员变量,为private类型: ...

February 20, 2021 · 5 min · jiezi

关于深度学习:Mac-mini-M1使用简单体验编程游戏深度学习

好久不见了各位! 前一阵子忍不住剁手买了M1芯片的mac mini,为了补救本人的内疚感就卖了本人的旧的mbp2017款。数据也齐全迁徙到了新机器上,之前的工作也就由mbp2017彻底换成mac mini了,要换就换彻底点,不要给本人了留后路,哼。 为什么买mini而不是macbook系列,当然是为了缩小一下尝鲜的老本,mini对于有显示器有键盘的童鞋来说,应该是尝鲜m1芯片最有性价比的一款了(某宝只需4700)。 另外须要阐明一点,M1这个Apple Silicon尽管是arm构架,和之前应用的ipad相似,然而性能相比ipad的A12Z晋升是十分大的。具体的跑分这里不展现了,全网轻易搜搜就有,也就图个乐,还是须要看看平时应用的一些状况。 简略的看一下包装盒子。其实这个mini没见到实物前看起来不大,但理论拿在手中还是感觉挺大的,起码装到书包里也是不能漠视的一大个。 拆开看看前面的接口数量,对我来说接口多少其实不是很重要,满足根本要求就好,切实不行就拓展坞。接显示器的话,HDMI链接4K屏就很完满。 展现一下略显凌乱的桌面,键盘是IKBC的静音红轴,显示器是LG的27UL550,27寸4k,尽管不是4k的最佳尺寸,显示水平也比拟细腻了,算是入门级4k屏幕。 显示分辨率设置为2304 x 1296 60HZ刚刚好,毕竟原生4k看的眼睛会瞎????,须要留神30HZ和60HZ对鼠标晦涩度影响很大,之前mbp2017在链接4k屏的时候30hz的刷新率用起来太不难受了。 应用体验应用了一个多月,大部分状况和平时应用简直没有区别,对于我来说就是VSCODE+Pycharm+一些其余的工具(paste、esayconnect、iterm2等),应用起来和平时区别不是很大,前提是须要略微花一点心理去折腾下。甚至如果不须要ide的话,间接iterm+vim插件就能解决绝大部分编译代码和应用场景。 还有一些常用软件,迅雷、QQ、微信、钉钉、爱奇艺啥的都没问题,其中有的是转译有的是原生反对,目前用起来没有显著区别。放心大胆地用吧!查看各类软件对M1芯片的反对水平:https://doesitarm.com/ 目前是1月10号,绝大部分的软件都曾经反对的差不多了。 M1芯片的应用报告网上很多,我这里就不赘述啦,只挑我比拟感兴趣的方面来说说吧。 最新消息Pycharm和Clion在1月2号的最新更新曾经原生反对了Apple Silicon(他们公司全家的产品应该都反对M1了),简略尝试了下,ZNM丝滑。 CPU性能简略测试一下M1芯片8核CPU的性能,以下代码应用的库为Pytorch,做矩阵加法运算(代码借鉴于 https://github.com/pytorch/py...: from tqdm import tqdmimport torch@torch.jit.scriptdef foo(): x = torch.ones((1024 * 12, 1024 * 12), dtype=torch.float32).cuda() y = torch.ones((1024 * 12, 1024 * 12), dtype=torch.float32).cuda() z = x + y return zif __name__ == '__main__': z0 = None for _ in tqdm(range(10000000000)): zz = foo() if z0 is None: z0 = zz else: z0 += zz下面这段代码在1080ti上运行这段代码的速度为325,通过nvidia-smi命令能够看到GPU曾经被打满了。 ...

February 13, 2021 · 3 min · jiezi