华为天才少年谢凌曦分享了万字长文,阐述了关于视觉识别领域发展的个人观点...

2023-11-13

ca125218d54d2753c8112af06c415c26.png

作者:谢凌曦

编辑:桃子

报道:新智元

计算机视觉识别领域的发展如何?华为天才少年谢凌曦分享了万字长文,阐述了个人对其的看法。

最近,我参加了几个高强度的学术活动,包括CCF计算机视觉专委会的闭门研讨会和VALSE线下大会。经过与其他学者的交流,我产生了许多想法,千头万绪,便希望把它们整理下来,供自己和同行们参考。当然,受限于个人的水平和研究范围,文章中一定会存在许多不准确甚至错误的地方,当然也不可能覆盖所有重要的研究方向。我期待与有兴趣的学者们进行交流,以充实这些观点,更好地探讨未来发展方向。

在这篇文章中,我将会着重分析计算机视觉领域,特别是视觉感知(即识别)方向所面临的困难和潜在的研究方向。

相较于针对具体算法的细节改进,我更希望探讨当前算法(尤其是基于深度学习的预训练+微调范式)的局限性和瓶颈,并且由此得出初步的发展性结论,包括哪些问题是重要的、哪些问题是不重要的、哪些方向值得推进、哪些方向的性价比较低等。

在开始之前,我先画出如下思维导图。为了寻找合适的切入点,我将从计算机视觉和自然语言处理(人工智能中两个最受关注的研究方向)的区别开始谈起,引出图像信号的三个根本性质:信息稀疏性、域间差异性、无限粒度性,并将它们与几个重要的研究方向相对应。这样,我们就能更好地了解每个研究方向所处的状态:它已经解决了哪些问题、还有哪些重要的问题没有解决,然后针对性地分析今后的发展趋势。

26ea8e3173fb20150b25ebf4373dd1f3.jpeg

导图:CV和NLP的差异、CV三大挑战及应对方法

CV的三大基本困难和对应的研究方向

一直以来,NLP都走在CV的前面。不论是深度神经网络超越手工方法,还是预训练大模型开始出现大一统的趋势,这些事情都先发生在NLP领域,并在不久之后被搬运到了CV领域。这里的本质原因是NLP的起点更高:自然语言的基础单元是单词,而图像的基础单元是像素;前者具有天然的语义信息,而后者未必能够表达语义。

从根本上说,自然语言是人类创造出来,用于存储知识和交流信息的载体,所以必然具有高效和信息密度高的特性;而图像则是人类通过各种传感器捕捉的光学信号,它能够客观地反映真实情况,但相应地就不具有强语义,且信息密度可能很低。

从另一个角度看,图像空间比文本空间要大得多,空间的结构也要复杂得多。这就意味着,如果希望在空间中采样大量样本,并且用这些数据来表征整个空间的分布,采样的图像数据就要比采样的文本数据大许多个数量级。顺带一提,这也是为什么自然语言预训练模型比视觉预训练模型用得更好的本质原因——我们在后面还会提到这一点。

根据上述分析,我们已经通过CV和NLP的差别,引出了CV的第一个基本困难,即语义稀疏性。而另外两个困难,域间差异性和无限粒度性,也多少与上述本质差别相关。正是由于图像采样时没有考虑到语义,因而在采样不同域(即不同分布,如白天和黑夜、晴天和雨天等场景)时,采样结果(即图像像素)与域特性强相关,导致了域间差异性。同时,由于图像的基本语义单元很难定义(而文本很容易定义),且图像所表达的信息丰富多样,使得人类能够从图像中获取近乎无限精细的语义信息,远远超出当前CV领域任何一种评价指标所定义的能力,这就是无限粒度性。关于无限粒度性,我曾经写过一篇文章,专门讨论这个问题。

https://zhuanlan.zhihu.com/p/376145664

5e04d0f436d48a3b5f377bf266370236.png

以上述三大基本困难为牵引,我们将业界近年来的研究方向总结如下:

  • 语义稀疏性:解决方案为构建高效计算模型(神经网络)和视觉预训练。此处的主要逻辑在于,想要提升数据的信息密度,就必须假设数据的非均匀分布(信息论)并对其建模(即学习数据的先验分布)。目前,最为高效的建模方式有两类,一类是通过神经网络架构设计,来捕捉数据无关的先验分布(例如卷积模块对应于图像数据的局部性先验、transformer模块对应于图像数据的注意力先验);一类是通过在大规模数据上的预训练,来捕捉数据相关的先验分布。这两个研究方向,也是视觉识别领域最为基础、受到关注最多的研究方向。

  • 域间差异性:解决方案为数据高效的微调算法。根据以上分析,网络体量越大、预训练数据集体量越大,计算模型中存储的先验就越强。然而,当预训练域和目标域的数据分布具有较大差异时,这种强先验反而会带来坏处,因为信息论告诉我们:提升某些部分(预训练域)的信息密度,就一定会降低其他部分(预训练域没有包含的部分,即预训练过程中认为不重要的部分)的信息密度。现实中,目标域很可能部分或者全部落在没有包含的部分,导致直接迁移预训练模型的效果很差(即过拟合)。此时,就需要通过在目标域进行微调来适应新的数据分布。考虑到目标域的数据体量往往远小于预训练域,因而数据高效是必不可少的假设。此外,从实用的角度看,模型必须能够适应随时变化的域,因而终身学习是必须。

  • 无限粒度性:解决方案为开放域识别算法。无限粒度性包含开放域特性,是更高的追求目标。这个方向的研究还很初步,特别是业界还没有能被普遍接受的开放域识别数据集和评价指标。这里最本质的问题之一,是如何向视觉识别中引入开放域能力。可喜的是,随着跨模态预训练方法的涌现(特别是2021年的CLIP),自然语言越来越接近成为开放域识别的牵引器,我相信这会是未来2-3年的主流方向。然而,我并不赞成在追求开放域识别的过程中,涌现出的各种zero-shot识别任务。我认为zero-shot本身是一个伪命题,世界上并不存在也不需要zero-shot识别方法。现有的zero-shot任务,都是使用不同方法,将信息泄露给算法,而泄露方式的千差万别,导致不同方法之间难以进行公平对比。在这个方向上,我提出了一种被称为按需视觉识别的方法,以进一步揭示、探索视觉识别的无限粒度性。

这里需要做一个补充说明。由于数据空间大小和结构复杂度的差异,至少到目前为止,CV领域还不能通过预训练模型直接解决域间差异的问题,但是NLP领域已经接近了这一点。因此,我们看到了NLP学者们利用prompt-based方法统一了几十上百种下游任务,但是同样的事情在CV领域并没有发生。另外,在NLP中提出来的scaling law,其本质在于使用更大的模型来过拟合预训练数据集。也就是说,对于NLP来说,过拟合已经不再是一个问题,因为预训练数据集配合小型prompt已经足以表征整个语义空间的分布。但是,CV领域还没有做到这一点,因此还需要考虑域迁移,而域迁移的核心在于避免过拟合。也就是说,在接下来2-3年,CV和NLP的研究重心会有很大的差异,因而将任何一个方向的思维模式生搬硬套在另一个方向上,都是很危险的。

以下简要分析各个研究方向

方向1a:神经网络架构设计

2012年的AlexNet,奠定了深度神经网络在CV领域的基础。随后10年(至今),神经网络架构设计,经历了从手工设计到自动设计,再回到手工设计(引入更复杂的计算模块)的过程:

  • 2012-2017年,手工构建更深的卷积神经网络,探索一般优化技巧。关键词:ReLU、Dropout、3x3卷积、BN、跳跃连接,等。在这个阶段,卷积操作是最基本的单元,它对应于图像特征的局部性先验。

  • 2017-2020年,自动构建更复杂的神经网络。其中,网络架构搜索(NAS)盛行一时,最后定型为基础工具。在任意给定的搜索空间中,自动设计都能够达到稍微更好的结果,且能够快速适配不同的计算开销。

  • 2020年至今,起源于NLP的transformer模块从被引入CV,利用attention机制,补足了神经网络的远距离建模能力。如今,大部分视觉任务的最优结果,都借助于包含transformer的架构所达到。

对于这一方向的未来,我的判断如下:

  • 如果视觉识别任务没有明显改变,那么不论是自动设计,或者加入更复杂的计算模块,都无法将CV推向新的高度。视觉识别任务的可能改变,大致可以分为输入和输出两个部分。输入部分的可能改变如event camera,它可能会改变规则化处理静态或者时序视觉信号的现状,催生特定的神经网络结构;输出部分的可能改变,则是某种统一各种识别任务的框架(方向3会谈到),它有可能让视觉识别从独立任务走向大一统,从而催生出一种更适合视觉prompt的网络架构。

  • 如果一定要在卷积和transformer之间做取舍,那么transformer的潜力更大,主要因为它能够统一不同的数据模态,尤其是文本和图像这两个最常见也最重要的模态。

  • 可解释性是一个很重要的研究方向,但是我个人对于深度神经网络的可解释性持悲观态度。NLP的成功,也不是建立在可解释性上,而是建立在过拟合大规模语料库上。对于真正的AI来说,这可能不是太好的信号。

方向1b:视觉预训练

作为如今CV领域炙手可热的方向,预训练方法被寄予厚望。在深度学习时代,视觉预训练可以分为有监督、无监督、跨模态三类,大致叙述如下:

  • 有监督预训练的发展相对清晰。由于图像级分类数据最容易获取,因此早在深度学习爆发之前,就有了日后奠定深度学习基础的ImageNet数据集,并被沿用至今。ImageNet全集超过1500万的数据规模,至今没有被其他非分类数据集所超越,因此至今仍是有监督预训练上最常用的数据。另外一个原因,则是图像级分类数据引入了较少bias,因而对于下游迁移更加有利——进一步减少bias,就是无监督预训练。

  • 无监督预训练,则经历了曲折的发展历程。从2014年开始,出现了第一代基于几何的无监督预训练方法,如根据patch位置关系、根据图像旋转等进行判断,同时生成式方法也在不断发展(生成式方法可以追溯到更早的时期,此处不赘述)。此时的无监督预训练方法,还显著地弱于有监督预训练方法。到了2019年,对比学习方法经过技术改进,首次显现出在下游任务上超越有监督预训练方法的潜力,无监督学习真正成为CV界关注的焦点。而2021年开始,视觉transformer的兴起催生了一类特殊的生成式任务即MIM,它逐渐成为统治性方法。

  • 除了纯粹的有监督和无监督预训练,还有一类介于两者之间的方法,是跨模态预训练。它使用弱配对的图像和文本作为训练素材,一方面避免了图像监督信号带来的bias,一方面又比无监督方法更能学习弱语义。此外,在transformer的加持下,视觉和自然语言的融合也更自然、更合理。

基于上述回顾,我做出如下判断:

  • 从实际应用上看,应该将不同的预训练任务结合起来。也就是说,应当收集混合数据集,其中包含少量有标签数据(甚至是检测、分割等更强的标签)、中量图文配对数据、大量无任何标签的图像数据,并且在这样的混合数据集上设计预训练方法。

  • 从CV领域看,无监督预训练是最能体现视觉本质的研究方向。即使跨模态预训练给整个方向带来了很大的冲击,我依然认为无监督预训练非常重要,必须坚持下去。需要指出,视觉预训练的思路很大程度上受到了自然语言预训练的影响,但是两者性质不同,因而不能一概而论。尤其是,自然语言本身是人类创造出来的数据,其中每个单词、每个字符都是人类写下来的,天然带有语义,因此从严格意义上说,NLP的预训练任务不能被视为真正的无监督预训练,至多算是弱监督的预训练。但是视觉不同,图像信号是客观存在、未经人类处理的原始数据,在其中的无监督预训练任务一定更难。总之,即使跨模态预训练能够在工程上推进视觉算法,使其达到更好的识别效果,视觉的本质问题还是要靠视觉本身来解决。

  • 当前,纯视觉无监督预训练的本质在于从退化中学习。这里的退化,指的是从图像信号中去除某些已经存在的信息,要求算法复原这些信息:几何类方法去除的是几何分布信息(如patch的相对位置关系);对比类方法去除的是图像的整体信息(通过抽取不同的view);生成类方法如MIM去除的是图像的局部信息。这种基于退化的方法,都具有一个无法逾越的瓶颈,即退化强度和语义一致性的冲突。由于没有监督信号,视觉表征学习完全依赖于退化,因此退化必须足够强;而退化足够强时,就无法保证退化前后的图像具有语义一致性,从而导致病态的预训练目标。举例说,对比学习从一张图像中抽取的两个view如果毫无关系,拉近它们的特征就不合理;MIM任务如果去除了图像中的关键信息(如人脸),重建这些信息也不合理。强行完成这些任务,就会引入一定的bias,弱化模型的泛化能力。未来,应该会出现一种无需退化的学习任务,而我个人相信,通过压缩来学习是一条可行的路线。

方向2:模型微调和终身学习

作为一个基础问题,模型微调已经发展出了大量的不同的setting。如果要把不同的setting统一起来,可以认为它们无非考虑三个数据集,即预训练数据集 Dpre (不可见)、目标训练集 Dtrain 、目标测试集 Dtest (不可见且不可预测)。根据对三者之间关系的假设不同,比较流行的setting可以概括如下:

  • 迁移学习:假设 Dpre 或者 Dtrain 和 Dtest 的数据分布大不相同;

  • 弱监督学习:假设 Dtrain 只提供了不完整的标注信息;

  • 半监督学习:假设 Dtrain 只有部分数据被标注;

  • 带噪学习:假设 Dtrain 的部分数据标注可能有误;

  • 主动学习:假设 Dtrain 可以通过交互形式标注(挑选其中最难的样本)以提升标注效率;

  • 持续学习:假设不断有新的 Dtrain 出现,从而学习过程中可能会遗忘从 Dpre 学习的内容;

  • ……

从一般意义上说,很难找到统一的框架来分析模型微调方法的发展和流派。从工程和实用角度看,模型微调的关键在于对域间差异大小的事先判断。如果认为 Dpre 和 Dtrain 的差异可能很大,就要减少从预训练网络中迁移到目标网络中权重的比例,或者增加一个专门的head来适应这种差异;如果认为 Dtrain 和 Dtest 的差异可能很大,就要在微调过程中加入更强的正则化以防止过拟合,或者在测试过程中引入某种在线统计量以尽量抵消差异。至于上述各种setting,则分别有大量研究工作,针对性很强,此处不再赘述。

关于这个方向,我认为有两个重要问题:

  • 从孤立的setting向终身学习的统一。从学术界到工业界,必须抛弃“一次性交付模型”的思维,将交付内容理解为以模型为中心,配套有数据治理、模型维护、模型部署等多种功能的工具链。用工业界的话说,一个模型或者一套系统,在整个项目的生命周期中,必须得到完整的看护。必须考虑到,用户的需求是多变且不可预期的,今天可能会换个摄像头,明天可能会新增要检测的目标种类,等等。我们不追求AI能自主解决所有问题,但是AI算法应该有一个规范操作流程,让不懂AI的人能够遵循这个流程,新增他们想要的需求、解决平时遇到的问题,这样才能让AI真正平民化,解决实际问题。对于学术界,必须尽快定义出符合真实场景的终身学习setting,建立起相应的benchmark,推动这一方向的研究。

  • 在域间差异明显的情况下,解决大数据和小样本的冲突。这又是CV和NLP的不同点:NLP已经基本不用考虑预训练和下游任务的域间差异性,因为语法结构和常见单词完全一样;而CV则必须假设上下游数据分布显著不同,以致于上游模型未经微调时,在下游数据中无法抽取底层特征(被ReLU等单元直接滤除)。因此,用小数据微调大模型,在NLP领域不是大问题(现在的主流是只微调prompt),但是在CV领域是个大问题。在这里,设计视觉友好的prompt也许是个好方向,但是目前的研究还没有切入核心问题。

方向3:无限细粒度视觉识别任务

关于无限细粒度视觉识别(以及类似的概念),目前还没有很多相关的研究。所以,我以自己的思路来叙述这个问题。我在今年VALSE报告上,对已有方法和我们的proposal做了详细解读。以下我给出文字叙述,更详细的解读请参考我的专题文章或者我在VALSE上做的报告:

https://zhuanlan.zhihu.com/p/546510418

https://zhuanlan.zhihu.com/p/555377882

首先,我要阐述无限细粒度视觉识别的含义。简单地说,图像中包含的语义信息非常丰富,但不具有明确的基本语义单元。只要人类愿意,就可以从一张图像中识别出越来越细粒度的语义信息(如下图所示);而这些信息,很难通过有限而规范的标注(即使花费足够多的标注成本),形成语义上完整的数据集,供算法学习。

8a70bb2f99151bdc58ed93ecd345cdc7.jpeg

即使如ADE20K这样的精细标注数据集,也缺少了大量人类能够识别的语义内容

我们认为,无限细粒度视觉识别是比开放域视觉识别更难,也更加本质的目标。我们调研了已有识别方法,将其分为两类,即基于分类的方法和语言驱动的方法,并论述它们无法实现无限细粒度的理由。

  • 基于分类的方法:这包括传统意义上的分类、检测、分割等方法,其基本特点是给图像中的每个基本语义单元(图像、box、mask、keypoint等)赋予一个类别标签。这种方法的致命缺陷在于,当识别的粒度增加时,识别的确定性必然下降,也就是说,粒度和确定性是冲突的。举例说,在ImageNet中,存在着“家具”和“电器”两个大类;显然“椅子”属于“家具”,而“电视机”属于“家电”,但是“按摩椅”属于“家具”还是“家电”,就很难判断——这就是语义粒度的增加引发的确定性的下降。如果照片里有一个分辨率很小的“人”,强行标注这个“人”的“头部”甚至“眼睛”,那么不同标注者的判断可能会不同;但是此时,即使是一两个像素的偏差,也会大大影响IoU等指标——这就是空间粒度的增加引发的确定性的下降。

  • 语言驱动的方法:这包括CLIP带动的视觉prompt类方法,以及存在更长时间的visual grounding问题等,其基本特点是利用语言来指代图像中的语义信息并加以识别。语言的引入,确实增强了识别的灵活性,并带来了天然的开放域性质。然而语言本身的指代能力有限(想象一下,在一个具有上百人的场景中指代某个特定个体),无法满足无限细粒度视觉识别的需要。归根结底,在视觉识别领域,语言应当起到辅助视觉的作用,而已有的视觉prompt方法多少有些喧宾夺主的感觉。

上述调研告诉我们,当前的视觉识别方法并不能达到无限细粒度的目标,而且在走向无限细粒度的路上还会遭遇难以逾越的困难。因此,我们我们想分析人是如何解决这些困难的。首先,人类在大多数情况下并不需要显式地做分类任务:回到上述例子,一个人到商场里买东西,不管商场把“按摩椅”放在“家具”区还是“家电”区,人类都可以通过简单的指引,快速找到“按摩椅”所在的区域。其次,人类并不仅限于用语言指代图像中的物体,可以使用更灵活的方式(如用手指向物体)完成指代,进而做更细致的分析。

结合这些分析,要达到无限细粒度的目标,必须满足以下三个条件。

  • 开放性:开放域识别,是无限细粒度识别的一个子目标。目前看,引入语言是实现开放性的最佳方案之一。

  • 特异性:引入语言时,不应被语言束缚,而应当设计视觉友好的指代方案(即识别任务)。

  • 可变粒度性:并非总是要求识别到最细粒度,而是可以根据需求,灵活地改变识别的粒度。

在这三个条件的牵引下,我们设计出了按需视觉识别任务。与传统意义上的统一视觉识别不同,按需视觉识别以request为单位进行标注、学习和评测。当前,系统支持两类request,分别实现了从instance到semantic的分割、以及从semantic到instance的分割,因而两者结合起来,就能够实现任意精细程度的图像分割。按需视觉识别的另一个好处在于,在完成任意数量的request之后停止下来,都不会影响标注的精确性(即使大量信息没有被标注出来),这对于开放域的可扩展性(如新增语义类别)有很大的好处。具体细节,可以参看按需视觉识别的文章(链接见上文)。

0bfb3c1a609c90511e8590e40f1146cd.jpeg

统一视觉识别和按需视觉识别的对比

在完成这篇文章之后,我还在不断思考,按需视觉识别对于其他方向的影响是什么。这里提供两个观点:

  • 按需视觉识别中的request,本质上是一种视觉友好的prompt。它既能够达到询问视觉模型的目的,又避免了纯语言prompt带来的指代模糊性。随着更多类型的request被引入,这个体系有望更加成熟。

  • 按需视觉识别,提供了在形式上统一各种视觉任务的可能性。例如,分类、检测、分割等任务,在这一框架下得到了统一。这一点可能对视觉预训练带来启发。目前,视觉预训练和下游微调的边界并不清楚,预训练模型究竟应该适用于不同任务,还是专注于提升特定任务,尚无定论。然而,如果出现了形式上统一的识别任务,那么这个争论也许就不再重要。顺便说,下游任务在形式上的统一,也是NLP领域享有的一大优势。

在上述方向之外

我将CV领域的问题分为三大类:识别、生成、交互,识别只是其中最简单的问题。关于这三个子领域,简要的分析如下:

  • 在识别领域,传统的识别指标已经明显过时,因此人们需要更新的评价指标。目前,在视觉识别中引入自然语言,是明显且不可逆的趋势,但是这样还远远不够,业界需要更多任务层面的创新。

  • 生成是比识别更高级的能力。人类能够轻易地识别出各种常见物体,但是很少有人能够画出逼真的物体。从统计学习的语言上说,这是因为生成式模型需要对联合分布 p(x,y) 进行建模,而判别式模型只需要对条件分布 p(y|x) 进行建模:前者能够推导出后者,而后者不能推导出前者。从业界的发展看,虽然图像生成质量不断提升,但是生成内容的稳定性(不生成明显非真实的内容)和可控性仍有待提升。同时,生成内容对于识别算法的辅助还相对较弱,人们还难以完全利用虚拟数据、合成数据,达到和真实数据训练相媲美的效果。对于这两个问题,我们的观点都是,需要设计更好、更本质的评价指标,以替代现有的指标(生成任务上替代FID、IS等,而生成识别任务需要结合起来,定义统一的评价指标)。

  • 1978年,计算机视觉先驱David Marr设想,视觉的主要功能,在于建立环境的三维模型,并且在交互中学习知识。相比于识别和生成,交互更接近人类的学习方式,但是现在业界的研究相对较少。交互方向研究的主要困难,在于构建真实的交互环境——准确地说,当前视觉数据集的构建方式来源于对环境的稀疏采样,但交互需要连续采样。显然,要想解决视觉的本质问题,交互是本质。虽然业界已经有了许多相关研究(如具身智能),但是还没有出现通用的、任务驱动的学习目标。我们再次重复计算机视觉先驱David Marr提出的设想:视觉的主要功能,在于建立环境的三维模型,并且在交互中学习知识。计算机视觉,包括其他AI方向,都应该朝着这个方向发展,以走向真正的实用。

总之,在不同子领域,单纯依靠统计学习(特别是深度学习)的强拟合能力的尝试,都已经走到了极限。未来的发展,一定建立在对CV更本质的理解上,而在各种任务上建立更合理的评价指标,则是我们需要迈出的第一步。

结语

经过几次密集的学术交流,我能够明显地感受到业界的迷茫,至少对于视觉感知(识别)而言,有意思、有价值的研究问题越来越少,门槛也越来越高。这样发展下去,有可能在不久的将来,CV研究会走上NLP的道路,逐渐分化成两类:

一类使用巨量计算资源进行预训练,不断空虚地刷新SOTA;一类则不断设计出新颖却没有实际意义的setting以强行创新。这对于CV领域显然不是好事。为了避免这种事情,除了不断探索视觉的本质、创造出更有价值的评测指标,还需要业界增加宽容性,特别是对于非主流方向的宽容性,不要一边抱怨着研究同质化,一边对于没有达到SOTA的投稿痛下杀手。当前的瓶颈是所有人共同面对的挑战,如果AI的发展陷入停滞,没有人能够独善其身。

感谢看到最后。欢迎友善的讨论。

作者声明

所有内容均只代表作者本人观点,均有可能被推翻,二次转载务必连同声明一起转载。谢谢!

原文链接:

https://zhuanlan.zhihu.com/p/558646681

本文仅做学术分享,如有侵权,请联系删文。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为天才少年谢凌曦分享了万字长文,阐述了关于视觉识别领域发展的个人观点... 的相关文章

  • 如何在 Python 中使用 .format() 打印“for”循环中的列表?

    我是 Python 新手 我正在编写一段非常简单的代码 使用 for 循环打印列表的内容 format 我想要如下的输出 但我收到此错误 names David Peter Michael John Bob for i in names p
  • 有没有办法使用纯Python释放纯函数的GIL?

    我想我一定错过了什么 这看起来很正确 但我看不出有什么办法可以做到这一点 假设你有一个 Python 纯函数 from math import sin cos def f t x 16 sin t 3 y 13 cos t 5 cos 2
  • 如何使用 python 从嵌套表结构中识别最终父级?

    我有下表 我的问题是 我如何以编程方式识别最终父级 以下是通过示例解释的规则 the id 5 0的父母是51 0 身份证号51 0没有父母 因此 id5 0的最终父级是51 0 the id 6 0的父母是1 0 身份证号1 0的父母是1
  • 如何在 Django Admin 的“更改”页面中显示内嵌上传的图像?

    我正在尝试在中显示内联上传的图像 变更列表 页面在 Django 管理中 这是我的代码如下 models py from django db import models class Product models Model name mod
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • 如何在 python 中使用 libSVM 计算精度、召回率和 F 分数

    我想计算precision recall and f score using libsvm在Python中 但我不知道如何 我已经发现这个网站 http www csie ntu edu tw cjlin libsvmtools eval
  • PyQt4 信号和槽

    我正在使用 PyQt4 编写我的第一个 Python 应用程序 我有一个 MainWindow 和一个 Dialog 类 它是 MainWindow 类的一部分 self loginDialog LoginDialog 我使用插槽和信号 这
  • 使用 for 循环 Python 为数组赋值

    我正在尝试将字符串的值分配给不同的数组索引 但我收到一个名为 列表分配超出范围 的错误 uuidVal distVal uuidArray distArray for i in range len returnedList for beac
  • python 类的属性不在 __init__ 中

    我想知道为什么下面的代码有效 usr bin env python3 import sys class Car def init self pass if name main c Car c speed 3 c time 5 print c
  • 使用opencv+picamera流IO用树莓派捕获视频

    我使用 Raspberry 来简单地显示一个视频 目前仅此 为此 我必须使用 opencv cv2 我尝试了很多解决方案 但现在我想使用 Picamera 库捕获视频 我将向您展示我的代码 import io import time imp
  • Python控制台默认十六进制显示

    我在 Python 控制台中做了很多工作 其中大部分都涉及地址 我更喜欢以十六进制形式查看地址 So if a 0xBADF00D 当我简单地输入Python gt a进入控制台查看其值 我更喜欢 python 回复0xBADF00D代替1
  • 如何对嵌套函数进行单元测试? [复制]

    这个问题在这里已经有答案了 您将如何对嵌套函数进行单元测试f1 在下面的例子中 def f def f1 return 1 return 2 或者需要测试的函数不应该嵌套吗 有一个类似的问题这个链接 https stackoverflow
  • 使用 Matplotlib、PyQt 和 Threading 进行实时绘图导致 python 崩溃

    我一直在努力研究我的 Python 应用程序 但找不到任何答案 我有 PyQT GUI 应用程序 它使用 Matplotlib 小部件 GUI 启动一个新线程来处理 mpl 小部件的绘图 恐怕我现在通过从另一个线程访问 matplotlib
  • wxPython:更新wx.ListBox列表

    我在 python 程序中有一个 wx ListBox 我不想在 wx Timer 更新时更改其中的列表 我的计时器正在工作 我只是不知道如何更改它显示的列表 这是一个例子 http www daniweb com code snippet
  • 安装python启动文件

    我如何安装pythonstartup文件 以便它在命令上运行 例如python myfile py 我尝试将其安装到我的 home myuserUbuntu的目录 但它说我没有足够的权限 此外 不同的地方交替说它应该全部大写或全部小写 前面
  • 如何使用JQuery和Django(ajax + HttpResponse)?

    假设我有一个 AJAX 函数 function callpage ajax method get url abc data x 3 beforeSend function success function html IF HTTPRESPO
  • Flask APScheduler + Gunicorn 工作人员 - 在套接字修复后仍在运行任务两次

    我有一个 Flask 应用程序 我使用 Flask APScheduler 在我的数据库上运行计划查询并通过 cron 作业发送电子邮件 我通过 Gunicorn 使用以下配置运行我的应用程序并通过主管进行控制 program myapp
  • 使用 Tweepy 获取推文时出错

    我有一个用于获取推文的 Python 脚本 在脚本中我使用该库 Tweepy 我使用有效的身份验证参数 运行此脚本后 一些推文存储在我的 MongoDB 中 有些则被 if 语句拒绝 但我仍然收到错误 requests packages u
  • 为什么 Python exec 中的模块级变量无法访问?

    我正在尝试使用Pythonexec in a project https github com arjungmenon pypage执行嵌入的Python代码 我遇到的问题是在模块级 in an exec声明是难以接近的来自同一模块中定义的
  • 有效积累稀疏 scipy 矩阵的集合

    我有一个 O N NxN 的集合scipy sparse csr matrix 每个稀疏矩阵都有 N 个元素集 我想将所有这些矩阵加在一起以获得一个常规的 NxN numpy 数组 N 约为 1000 矩阵内非零元素的排列使得所得总和肯定不

随机推荐

  • 3D模型学会了「唱、跳、Rap、篮球」,程序员们全沉迷「鸡你太美」

    继 B 站之后 GitHub 网友也开始沉迷 鸡你太美 让 3D 姿态也学会了 唱 跳 Rap 篮球 而且动作准确度和连贯性似乎一点也不输练习时长两年半的练习生 看了这段 demo 之后 网友戏称 你的律师函已经在路上了 这段 看到停不下来
  • 万字解析GPT的情感与意识,它是一只被人类操控的“风筝”

    来源 AI未来指北 编辑整理 周小燕 郭晓静 AI未来指北 栏目由腾讯新闻推出 邀约全球业内专家 创业者 投资人 探讨AI领域的技术发展 商业模式 应用场景 伦理及版权争议 丨划重点 一部分基础工作可能会被AI产品替代 然而 创意工作 管理
  • Webpack打包-打包详细流程

    Webpack Webpack是一个现代化的静态模块打包器 支持JavaScript CSS 图片等资源的打包 它将所有模块及其依赖项视为静态资源 并创建一个依赖关系图 将这些资源转换为有效的输出文件 通过Webpack 可以将多个文件打包
  • HTTP 304 错误的详细解释

    Not Modified 客户端有缓冲的文档并发出了一个条件性的请求 一般是提供If Modified Since头表示客户只想比指定日期更新的文档 服务器告诉客户 原来缓冲的文档还可以继续使用 如果客户端在请求一个文件的时候 发现自己缓存
  • 【深度学习实验】前馈神经网络(三):自定义多层感知机(激活函数logistic、线性层算Linear)

    目录 一 实验介绍 二 实验环境 1 配置虚拟环境 2 库版本介绍 三 实验内容 0 导入必要的工具包 1 构建数据集 2 激活函数logistic 3 线性层算子 Linear 4 两层的前馈神经网络MLP 5 模型训练 一 实验介绍 本
  • 文章:LIME:Why Should I Trust You?

    本文结合文章 Why Should I Trust You Explaining the Predictions of Any Classifier 主要阐述一下内容 LIME 算法意义 LIME 算法原理 LIME 算法效果 原文参见 h
  • 【Python实训】Python实现多级菜单

    menu 北京 海淀 五道口 soho 网易 google 中关村 爱奇艺 汽车之家 youku 上地 百度
  • 二叉树的建立与遍历详解 菜鸟都能看懂的教程

    树形结构要多利用递归来求解 递归的关键就是想清楚所有的基准情形 然后扩展到一般情况 写代码的时候最好把基准情况放在前面 把一般情况放在后面 定义二叉树结构体 typedef struct BinaryTreeNode TelemType d
  • 前端获取后端的BigDecimal类型字段数值,丢失精度处理

    1 问题 前端请求后端接口获取BigDecimal类型字段数值时丢失精度 例如 5999 00变成5999 5999 50变成5999 5 2 解决方法 在字段上添加 JsonFormat shape JsonFormat Shape ST
  • 旋转矩阵推导

    一 前言 周而复始的搜索 循环往复的记忆 但终究还是不深刻 不能像老师一样交给一个新人 所谓提纲挈领 名师指导还是相当有必要的 因为所有的坎 名师都遇到过 而且总结了自己的一套方法论 这样才能够言简意赅 才能够让一个什么都不懂 有点夸张 略
  • springboot项目创建之后多个文件报红

    原因 因为你之前可能使用了git提交过项目 没有修改配置 而且在idea里默认就会会用git 解决办法 file gt seting gt version Control gt 编辑 gt 点击你的项目 gt vcs 修改为null
  • 服务器安全狗搭建过程

    发现安全狗构建基础的服务器安全环境简单高效 推荐 整理步骤如下 环境 Centos 6 x 7 x 64位 wget http down safedog cn safedog linux64 tar gz tar xzvf safedog
  • 【机器学习】感知机、线性支持向量机

    文章目录 一 感知机 线性二分类 二 感知机的损失函数 三 感知机实战 sklearn linear model Perceptron 四 Linear SVM 参考链接 一 感知机 线性二分类 感知机是一种相对简单的 二分类 的 线性 分
  • 在职场中哪些人不会被企业团队选用?在企业团队中哪些人不能用?

    企业团队离不开员工的打拼 那么现在人才济济的社会 企业团队中那些人是不能用的 小人不能用 当今社会我们评论一个人的好坏 首先看到的是他的道德品质 当一个人的道德品质不行 道德品行很差时 我们统称这类人为小人 都说远小人 在职场中也一样 小人
  • 华为OD机试 C++【TLV解析】

    题目 你收到了一串由两端设备传递的TLV格式的消息 现在你需要根据这串消息生成一个对应的 tag length valueOffset 列表 详细说明 这串消息其实是由许多小组成的 每一小组里包含了tag length value 其中 t
  • 关于element-ui el-cascader 级联选择器 单独选择任意一级选项,去掉单选按钮(记录一下)

    效果如下 分类 代码如下 单独选择任意一项属性 checkStrictly 绑定的是分类 id popper class自定义类名
  • SpringBoot--基础--05--错误处理

    SpringBoot 基础 05 错误处理 一 原理 1 1 自动配置类 ErrorMvcAutoConfiguration 1 2 一但系统出现4xx或者5xx之类的错误 ErrorPageCustomizer就会生效 定制错误的响应规则
  • 13个SQL优化技巧

    1 避免无计划的全表扫描 如下情况进行全表扫描 该表无索引 对返回的行无人和限制条件 无Where子句 对于索引主列 索引的第一列 无限制条件 对索引主列的条件含在表达式中 对索引主列的限制条件是is not null或 对索引主列的限制条
  • 国内IoT云平台横向对比

    三年过去了 目前各IoT平台功能有了极大的丰富和优化 行业头部玩家也逐渐浮出水面 目前市场的排名如下 阿里 小米 京东 百度 涂鸦 这几家以开放的生态 接入了千万甚至亿级设备 传统设备厂家如美的 海尔也在积极搭建自己的物联网平台 物联网已然
  • 华为天才少年谢凌曦分享了万字长文,阐述了关于视觉识别领域发展的个人观点...

    作者 谢凌曦 编辑 桃子 报道 新智元 计算机视觉识别领域的发展如何 华为天才少年谢凌曦分享了万字长文 阐述了个人对其的看法 最近 我参加了几个高强度的学术活动 包括CCF计算机视觉专委会的闭门研讨会和VALSE线下大会 经过与其他学者的交