-
内存是各种计算机系统中存储数据不可或缺的硬件单元,但现在新一代的智慧内存有更多的应用,可以存储数据,并进行庞大的数据运算,能如人脑一般结合存储与运算于一体,这样的内存内运算(in-memory computing)架构模仿人脑神经网络的架构,是未来实现高性能、低耗电人工智能的希望所在。 今年的IEEE亚洲固态电路会议(IEEE A-SSCC)中,阳明交大与工研院电光系统所团队共同合作,以商用化的28纳米制程技术,发布目前全世界最高能效的三元卷积神经网络(ternary CNN)内存内运算加速芯片。 全世界最高能效的三元卷积神经网络内存内运算加速芯片。 三元卷积神经网络内存内运算加速芯片,每瓦功耗每秒可进行超过两万万亿次的运算(20943 TOPS/W),较过去的技术大幅提升3.7倍,面积使用效率也提升4.5倍,树立全新的内存内运算性能里程碑。 通过跨层级共同设计技术,三元卷积神经网络内存内运算加速芯片,克服内存内运算中存在的计算误差,展示极低耗电且高准确的语音关键字识别能力,目前与工研院的团队正积极将该技术导入商业用“即呼即醒”的智慧蓝牙耳机中。
-
北大等研究机构提出了采用梯度调节模块(GRM),通过训练权重在特征重建时的作用效果及像素的空间位置先验,调节反向传播时各权重的梯度,以增强模型的记忆性的超像素分割模型 LNSNet。该研究已被 CVPR 2021 接收,主要由朱磊和佘琪参与讨论和开发,北京大学分子影像实验室卢闫晔老师给予指导。转发自https://www.jiqizhixin.com/论文链接:https://arxiv.org/abs/2103.10681项目开源代码:https://github.com/zh460045050/LNSNet实验室链接:http://www.milab.wiki一、简介图像分割是计算机视觉的基本任务之一,在自动驾驶、安防安保、智能诊疗等任务中都有着重要应用。超像素分割作为图像分割中的一个分支,旨在依赖于图像的颜色信息及空间关系信息,将图像高效的分割为远超于目标个数的超像素块,达到尽可能保留图像中所有目标的边缘信息的目的,从而更好的辅助后续视觉任务(如目标检测、目标跟踪、语义分割等)。基于传统机器学习的超像素分割方法会将超像素分割看作像素聚类问题,并通过限制搜索空间的策略,提高超像素的生成效率(如 SLIC、SNIC、MSLIC、IMSLIC 等方法)。然而,这些方法大多依赖 RGB 或 LAB 颜色空间信息对像素进行聚类,而缺乏对高层信息的考量。虽然一些超像素分割方法(LRW、DRW、ERS、LSC)通过构建图模型的方式,将原本 5 维的颜色及空间信息依据四邻域或八邻域节点的相似性关系丰富至 N 维,来获取更好的特征表达。进而使用随机游走或谱聚类等方式进行超像素分割,但这些方法运行效率较差。采用卷积神经网络进行超像素分割(SEAL、SSN、S-FCN)大多抛弃了传统超像素方法的无监督的广义分割模式,转而采用大量的区域级的分割标注对卷积神经网络进行离线训练指导超像素的生成。这种基于标注的训练模式导致生成的超像素通常包含较多了高层语义信息,因此限制了超像素分割方法的泛化性及灵活性。此外,这种超像素分割模式也无法较好的应用于缺乏分割标注的视觉任务,如目标跟踪、弱监督图像分割等。近期已有工作(RIM)借鉴深度聚类的模式无监督地运用神经网络进行广义超像素分割,然而该方法需要依据每一张输入图像训练一个特定的卷积神经网络进行像素聚类,因此极大地增加了超像素分割的运算时间。因此为保证超像素分割既可以更好的借助深度学习进行有效的特征提取,又可以同时兼顾传统超像素分割方法高效、灵活、迁移性强的特点,本研究从持续学习的视角看待超像素分割问题,并提出了一种新型的超像素分割模型可以更好的支持无监督的在线训练模式 (online training)。考虑到超像素分割作为广义分割问题需要更关注图像的细节信息,本模型摒弃了其他超像素分割网络中采用的较深而复杂的卷积神经网络结构,而选用了较为轻量级的特征提取模块(FEM),并提出了非迭代聚类模块(NCM)通过自动选取种子节点,避免了超像素分割方法中的聚类中心的迭代更新,极大地降低了超像素分割的空间复杂度与时间复杂度(相比SSN参数量降低近20倍同时运算时间加快了近 4倍)。为解决在线学习所带来的灾难性遗忘问题,本模型采用了梯度调节模块(GRM),通过训练权重在特征重建时的作用效果及像素的空间位置先验,调节反向传播时各权重的梯度,以增强模型的记忆性及泛化性。二、训练框架设计总的来看,在特定图像 Ii 上进行广义超像素分割的本质,可以看作在该图像域中的进行像素聚类任务 Ti。因此,对于包含 n 张图像的图像集 I={I1, I2, … In},在该图像集上的超像素分割任务可以看作任务集 T={T1, T2, … Tn}。在此条件下,我们可以将当前基于深度学习的超像素分割方法看作以下两种策略:① 基于深度聚类模式的 RIM 超像素分割方法可以看作是一种单任务学习策略。如图 2B 所示,该策略针对任务集中每一个特定任务 Ti 找到一个最优的参数空间,因此整个任务集 T 来说,该任务需要训练得到 n 个各不相同的参数空间用以提取聚类特征。这种做法极大地增加了模型训练及存储的消耗,导致其运算效率极低。② 其他超像素分割网络的训练模式(SEAL、SSN、S-FCN)则可以看作一种多任务学习策略。如图 2A 所示,该策略在分割标注的指导下得到一个对于整个任务集 T 通用参数空间。虽然这种策略仅需要得到一个参数空间,但该方式仍需要离线的进行模型训练,且训练过程都需要维护整个图像集 I。此外,这些方法对于分割标签的需求也导致其过于关注提取更高层语义特征,而非关注对于广义超像素分割来说更重要的低层颜色特征与空间特征的融合,限制了卷积神经网络的迁移性及灵活性。 与这两种方式不同,本文希望利用持续学习策略,保证超像素分割方法既可以既借助卷积神经进行更为有效的特征提取,又同时兼顾传统超像素分割方法高效、灵活、迁移性强的特点。如图 2C 所示,本文所采用的持续学习策略通过逐一针对特定图像 Ii 进行训练,保证最终可以得到一个适用于整个任务集 T 的通用参数空间,这要求了卷积神经网络需要具备记忆历史任务的能力,也就是解决持续学习中的灾难性遗忘问题。本模型的具体训练流程如图 3 所示,在第 i 轮的训练过程中,我们仅考虑单一的任务 Ti 对模型进行拟合。其中,特征提取模块 FCM 用于生成聚类所需的聚类特征,无迭代聚类模块 NCM 进而利用聚类特征进行聚类得到超像素分割结果。梯度调节模块 GRM 则用以调节反向传播时 FCM 参数的梯度,保证模型可以更好的记忆历史任务 Ti-1,Ti-2,….. , T1。 三、模型结构及损失函数设计本文提出的模型结构如图 3 所示,其中考虑到超像素分割作为广义分割问题更为关注图像的细节信息与空间信息的融合。因此本模型在特征提取模块 FEM(图 3A)部分摒弃了其他超像素分割网络中采用的较深而复杂的卷积神经网络结构,转而使用较为轻量级的特征提取模块,以减少在特征提取过程中图像细节信息的损失。具体来看,我们首先将输入图像颜色信息 RGB/LAB 及空间信息 XY 进行 Concat 得到 5 维的输入张量 X。随后我们使用三个不同空洞率 (d=1,3,5) 的空洞卷积进行多尺度的特征提取,并采用两个 3x3 卷积模块进行多尺度特征融合,进而得到用以进行聚类的输出特征图 Z:接着,进一步增加过程的运算效率,我们提出了无迭代聚类模块 NCM(图 3C)通过生成种子节点相对于网格中心的横纵坐标偏移量,保证种子节点在具有较强空间紧凑程度的前提下,预测相应超像块的种子节点,并依据其与各像素聚类特征间的 T 相似性进行像素聚类。该模块首先将图像按照超像素个数进行网格划分,进而对属于同一网格的位置进行空间池化操作,得到空间尺寸等于超像素个数的低分辨特征图作为网格的特征 Zk。随后,我们将 Zk 输入 out channel 为 2 的 1x1 卷积得到种子节点相对于网格中心的横纵偏移量△r,△c,并将此叠加至网格中心坐标 Sc 最终的超像素种子节点:随后,我们利用 T - 分布核函数计算种子节点特征与其余像素特征的相似性,并以此为依据得到最终的像素聚类结果 L,也就是输出超像素块。最后,梯度调节模块 GRM(图 3B)首先利用像素聚类特征进行对输入图像及其各像素的空间信息进行重建。其中梯度自适应层(GAL)依据重建结果计算 FEM 中各通道对于当前任务的拟合程度 g(W^r),具体来看,我们分别依据重建权重 W^r 判断各 Z 中特征通道分别在颜色信息和空间位置复原中的重要性,并利用二者乘积表示该通道的拟合程度:随后,在训练过程中 GAL 通过维护记忆矩阵 m 用以记忆各通道在前序任务中的拟合程度。随后在反向传播过程中,我们对各通道所对应的 FEM 中权重矩阵依据前序任务的重要程度构建调节率φ^a,用以调节对各通道所对应权重的梯度:该调节率可以保证对于历史任务拟合程度较好的权重具有较小的梯度,从而避免对于在前序任务中拟合程度高而在当前任务中拟合程度低的权重在反向传播过程中受到污染,进而防止 FEM 过拟合当前任务造成对前序任务的造成灾难性遗忘。此外,GRM 还采用了梯度双向层(GBL)借助边缘先验信息使得平滑位置超像素块可以更多的关注空间信息,而纹理丰富位置超像素块可以更多考虑颜色信息,达到减少冗余超像素块、增强边缘拟合性的目的。模型训练的损失函数包含两个部分,其中第一个部分为重建损失 Lr。该部分通过 MSE 损失保证聚类特征可以重建回初始图像及各像素对应的空间位置信息,从而使得聚类特征可以更好的对空间信息及颜色信息进行融合。第二部分为聚类损失 Lc,该部分在 DEC 聚类损失的基础上增加了空间距离约束。该约束可以在保证各超像素块中像素类内相似性大的同时,使得每一像素更趋向于被分配到与其空间距离前 k 近的种子节点所在超像素中,从而保证分割结果中超像素块的紧凑程度。四、实验总的来看我们的方法相比于 SOTA 的超像素分割方法,具有更高的效率及可迁移性。首先,我们在 BSDS 数据集上进行了实验,可以看到我们提出的超像素分割策略在 ASA、BR、F 等常用超像素评价指标中都远高于其余无监督的超像素分割方法(包括传统方法 SLIC、LSC、ERS,RIM)。此外,相比于依赖分割标签的有监督超像素分割方法 SSN,由于我们的方法在训练过程中无法感知到高层语义信息,导致分割结果会产生相对较多的冗余超像素块,这点造成了我们的方法的分割精确性较低,因此在 ASA 及 F 指标中略低于 SSN。然而这一特点也使得我们的模型具有更好的分割召回率,对于一些复杂场景中的模糊边缘的拟合性更好,因此我们的方法可以取得更高的 BR 指标此外,由于使用了更为轻量级的特征提取器,并采用无迭代的聚类模式,我们模型在时间、空间复杂度上远低于其余基于卷积神经网络的超像素分割方法。此外,我们也将 BSDS 数据集中训练好的超像素分割模型应用在医学影像中进行实验,以测试各超像素分割模型的迁移性。可以看到,无论是对于眼底荧光造影中眼底血管分割数据集(DRIVE)还是 OCT 影像中视网膜层分割数据集(DME),我们的模型都比其他基于卷积神经网络分割模型具有更好的迁移性。
-
非监督学习(unsupervised learning)卷积神经网络最初是面向监督学习问题设计的,但其也发展出了非监督学习范式 ,包括卷积自编码器(Convolutional AutoEncoders, CAE) [47] 、卷积受限玻尔兹曼机(Convolutional Restricted Boltzmann Machines, CRBM)/卷积深度置信网络(Convolutional Deep Belief Networks, CDBN) 和深度卷积生成对抗网络(Deep Convolutional Generative Adversarial Networks, DCGAN) 。这些算法也可以视为在非监督学习算法的原始版本中引入卷积神经网络构筑的混合算法。CAE的构建逻辑与传统AE类似,首先使用卷积层和池化层建立常规的卷积神经网络作为编码器,随后使用反卷积和向上池化(up-pooling)作为解码器,以样本编码前后的误差进行学习,并输出编码器的编码结果实现对样本的维度消减(dimentionality reduction)和聚类(clustering)。在图像识别问题,例如MNIST中,CAE与其编码器同样结构的卷积神经网络在大样本时表现相当,但在小样本问题中具有更好的识别效果。CRBM是以卷积层作为隐含层的受限玻尔兹曼机(Boltzmann Machines, RBM),在传统RBMs的基础上将隐含层分为多个“组(group)”,每个组包含一个卷积核,卷积核参数由该组对应的所有二元节点共享。CDBN是以CRBM作为构筑进行堆叠得到的阶层式生成模型,为了在结构中提取高阶特征,CDBN加入了概率极大池化层( probabilistic max-pooling layer),和其对应的能量函数。CRBMs和CDBMs使用逐层贪婪算法(greedy layer-wise training)进行学习 [50] ,并可以使用稀疏正则化(sparsity regularization)技术。在Caltech-101数据的物体识别问题中,一个24-100的两层CDBN识别准确率持平或超过了很多包含高度特化特征的分类和聚类算法。生成对抗网络( Generative Adversarial Networks, GAN)可被用于卷积神经网络的非监督学习,DCGAN从一组概率分布,即潜空间(latent space)中随机采样,并将信号输入一组完全由转置卷积核组成的生成器;生成器生成图像后输入以卷积神经网络构成的判别模型,判别模型判断生成图像是否是真实的学习样本。当生成模型能够使判别模型无法判断其生成图像与学习样本的区别时学习结束。研究表明DCGANs能够在图像处理问题中提取输入图像的高阶层表征,在CIFAR-10数据的试验中,对DCGAN判别模型的特征进行处理后做为其它算法的输入,能以很高的准确率对图像进行分类 。优化正则化(regularization)参见:正则化在神经网络算法的各类正则化方法都可以用于卷积神经网络以防止过度拟合,常见的正则化方法包括Lp正则化(Lp-norm regularization)、随机失活(spatial dropout)和随机连接失活(drop connect)。Lp正则化在定义损失函数时加入隐含层参数以约束神经网络的复杂度:式中为损失函数,包含弗罗贝尼乌斯范数(Frobenius norm)的求和项被称为正则化项,其中是正则化参数,用以确定正则化项的约束力。可证明,当时,正则化项是凸函数(convex function) [51] ;特别地,当时,L2正则化又被成为Tikhonov正则化(Tikhonov regularization)。时的Lp正则化有利于卷积核权重的稀疏化,但此时的正则化向不是凸函数 。卷积神经网络中的空间随机失活(spatial dropout)是前馈神经网络中随机失活理论的推广。在全连接网络的学习中,随机失活会随机将神经元的输出归零,而空间随机失活在迭代中会随机选取特征图的通道使其归零。进一步地,随机连接失活直接作用于卷积核,在迭代中使卷积核的部分权重归零。研究表明空间随机失活和随机连接失活提升了卷积神经网络的泛化能力,在学习样本不足时有利于提升学习表现。分批归一化(Batch Normalization, BN)数据的标准化是神经网络输入管道中预处理的常见步骤,但在深度网络中,随着输入数据在隐含层内的逐级传递,其均值和标准差会发生改变,产生协变漂移(covariate shift)现象。协变漂移被认为是深度网络发生梯度消失(vanishing gradient)的原因之一。BN以引入额外学习参数为代价部分解决了此类问题,其策略是在隐含层中首先将特征标准化,然后使用两个线性参数将标准化的特征放大作为新的输入,神经网络会在学习过程中更新其BN参数。卷积神经网络中的BN参数与卷积核参数具有相同的性质,即特征图中同一个通道的像素共享一组BN参数。此外使用BN时卷积层不需要偏差项,其功能由BN参数代替。包含跳跃连接的残差块包含跳跃连接的残差块跳跃连接(skip connection)跳跃连接或短路连接(shortcut connection)来源于循环神经网络(Recurrent Neural Network, RNN)中的跳跃连接和各类门控算法,是被用于缓解深度结构中梯度消失问题的技术。卷积神经网络中的跳跃连接可以跨越任意数量的隐含层 ,这里以相邻隐含层间的跳跃进行说明:式中是特征图的转换系数,当和的尺寸不同时,转换系数将尺寸更小的特征图,通常是转换为的尺寸,确保矩阵元素运算成立。当的输出值小而的输出值大时,卷积层的输出近似于等值函数,对该层的特征传递没有负面影响,因此设定了层的学习基线,使该层在迭代中至少不会退化。在BP框架内,部分误差在反向传播时可以跳过层直接作用于层,补偿了其在深度结构中逐级传播造成的梯度损失,因此有利于深度结构的误差传播。包含跳跃连接的多个卷积层的组合被称为残差块(residual block),是一些卷积神经网络算法,例如ResNet的构筑单元。加速通用加速技术卷积神经网络可以使用和其它深度学习算法类似的加速技术以提升运行效率,包括量化(quantization)、迁移学习(transfer learning)等 [2] 。量化即在计算中使用低数值精度以提升计算速度,该技术在一些深度算法中有得到尝试。对于卷积神经网络,一个极端的例子是XNOR-Net,即仅由异或门(XNOR)搭建的卷积神经网络 。迁移学习一般性的策略是将非标签数据迁移至标签数据以提升神经网络的表现,卷积神经网络中迁移学习通常为使用在标签数据下完成学习的卷积核权重初始化新的卷积神经网络,对非标签数据进行迁移,或应用于其它标签数据以缩短学习过程 。FFT卷积卷积神经网络的卷积和池化计算都可以通过FFT转换至频率域内进行,此时卷积核权重与BP算法中梯度的FFT能够被重复利用,逆FFT也只需在输出结果时使用,降低了计算复杂度 。此外,作为应用较广的科学和工程数值计算方法,一些数值计算工具包含了GPU设备的FFT,能提供进一步加速 。FFT卷积在处理小尺寸的卷积核时可使用Winograd算法降低内存开销。权重稀疏化在卷积神经网络中对权重进行稀疏化,能够减少卷积核的冗余,降低计算复杂度,使用该技术的构筑被称为稀疏卷积神经网络(Sparse Convolutional Neural Networks) 。在对ImageNet数据的学习中,一个以90%比率稀疏化的卷积神经网络的运行速度是同结构传统卷积神经网络的2至10倍,而输出的分类精度仅损失了2% 。
-
对卷积神经网络的研究可追溯至日本学者福岛邦彦(Kunihiko Fukushima)提出的neocognitron模型。在其1979 和1980年 发表的论文中,福岛仿造生物的视觉皮层(visual cortex)设计了以“neocognitron”命名的神经网络。neocognitron是一个具有深度结构的神经网络,并且是最早被提出的深度学习算法之一 ,其隐含层由S层(Simple-layer)和C层(Complex-layer)交替构成。其中S层单元在感受野(receptive field)内对图像特征进行提取,C层单元接收和响应不同感受野返回的相同特征 。neocognitron的S层-C层组合能够进行特征提取和筛选,部分实现了卷积神经网络中卷积层(convolution layer)和池化层(pooling layer)的功能,被认为是启发了卷积神经网络的开创性研究 。第一个卷积神经网络是1987年由Alexander Waibel等提出的时间延迟网络(Time Delay Neural Network, TDNN) 。TDNN是一个应用于语音识别问题的卷积神经网络,使用FFT预处理的语音信号作为输入,其隐含层由2个一维卷积核组成,以提取频率域上的平移不变特征 。由于在TDNN出现之前,人工智能领域在反向传播算法(Back-Propagation, BP)的研究中取得了突破性进展 ,因此TDNN得以使用BP框架内进行学习。在原作者的比较试验中,TDNN的表现超过了同等条件下的隐马尔可夫模型(Hidden Markov Model, HMM),而后者是二十世纪80年代语音识别的主流算法 。1988年,Wei Zhang提出了第一个二维卷积神经网络:平移不变人工神经网络(SIANN),并将其应用于检测医学影像 。独立于Zhang (1988),Yann LeCun在1989年同样构建了应用于计算机视觉问题的卷积神经网络,即LeNet的最初版本。LeNet包含两个卷积层,2个全连接层,共计6万个学习参数,规模远超TDNN和SIANN,且在结构上与现代的卷积神经网络十分接近 [11] 。LeCun (1989) 对权重进行随机初始化后使用了随机梯度下降(Stochastic Gradient Descent, SGD)进行学习,这一策略被其后的深度学习研究所保留。此外,LeCun (1989)在论述其网络结构时首次使用了“卷积”一词 ,“卷积神经网络”也因此得名。LeCun (1989)的工作在1993年由贝尔实验室(AT&T Bell Laboratories)完成代码开发并被部署于NCR(National Cash Register Coporation)的支票读取系统 。但总体而言,由于数值计算能力有限、学习样本不足,加上同一时期以支持向量机(Support Vector Machine, SVM)为代表的核学习(kernel learning)方法的兴起,这一时期为各类图像处理问题设计的卷积神经网络停留在了研究阶段,应用端的推广较少 。在LeNet的基础上,1998年Yann LeCun及其合作者构建了更加完备的卷积神经网络LeNet-5并在手写数字的识别问题中取得成功 。LeNet-5沿用了LeCun (1989) 的学习策略并在原有设计中加入了池化层对输入特征进行筛选。LeNet-5及其后产生的变体定义了现代卷积神经网络的基本结构,其构筑中交替出现的卷积层-池化层被认为能够提取输入图像的平移不变特征。LeNet-5的成功使卷积神经网络的应用得到关注,微软在2003年使用卷积神经网络开发了光学字符读取(Optical Character Recognition, OCR)系统。其它基于卷积神经网络的应用研究也得到展开,包括人像识别、手势识别等。在2006年深度学习理论被提出后,卷积神经网络的表征学习能力得到了关注,并随着数值计算设备的更新得到发展。自2012年的AlexNet开始,得到GPU计算集群支持的复杂卷积神经网络多次成为ImageNet大规模视觉识别竞赛(ImageNet Large Scale Visual Recognition Challenge, ILSVRC)的优胜算法,包括2013年的ZFNet、2014年的VGGNet、GoogLeNet [24] 和2015年的ResNet。
-
关于CNN模型的可解释问题,很早就有人开始研究了,姑且称之为CNN可视化吧。比较经典的有两个方法,反卷积(Deconvolution)和导向反向传播(Guided-backpropagation),通过它们,我们能够一定程度上“看到”CNN模型中较深的卷积层所学习到的一些特征。当然这两个方法也衍生出了其他很多用途,以反卷积为例,它在图像语义分割中有着非常重要的作用。(ps:目前网上有一些关于反卷积的文章,我感觉没有说的特别到位的,当然也有可能是大家理解的角度不同,但是另外一些解读那就是完全错误的了,包括某乎。不得不说,真正要深入理解反卷积还是要去啃论文,很多人嫌麻烦总是看些二手的资料,得到的认识自然是有问题的。当然这些都是题外话,我也有写一篇关于反卷积的文章的计划。看以后的时间安排)从本质上说,反卷积和导向反向传播的基础都是反向传播,其实说白了就是对输入进行求导,三者唯一的区别在于反向传播过程中经过ReLU层时对梯度的不同处理策略。
-
OpenCV在TEXT扩展模块中支持场景文字识别,最早的场景文字检测是基于级联检测器实现,OpenCV中早期的场景文字检测是基于极值区域文本定位与识别、最新的OpenCV3.4.x之后的版本添加了卷积神经网络实现场景文字检测,后者的准确性与稳定性比前者有了很大的改观,不再是鸡肋算法,是可以应用到实际场景中的。值得一提的是基于CNN实现场景文字检测算法OpenCV中采用了是华中科技大学贡献的模型,模型结构如下:代码演示 基于极值区域文本定位的方法实现场景文字检测演示如下:def cascade_classfier_text_detect(): img = cv.imread("D:/images/cover_01.jpg") vis = img.copy() # Extract channels to be processed individually channels = cv.text.computeNMChannels(img) cn = len(channels)-1 for c in range(0,cn): channels.append((255-channels[c])) # Apply the default cascade classifier to each independent channel (could be done in parallel) print("Extracting Class Specific Extremal Regions from "+str(len(channels))+" channels ...") print(" (...) this may take a while (...)") for channel in channels: erc1 = cv.text.loadClassifierNM1('trained_classifierNM1.xml') er1 = cv.text.createERFilterNM1(erc1,16,0.00015,0.13,0.2,True,0.1) erc2 = cv.text.loadClassifierNM2('trained_classifierNM2.xml') er2 = cv.text.createERFilterNM2(erc2,0.5) regions = cv.text.detectRegions(channel,er1,er2) rects = cv.text.erGrouping(img,channel,[r.tolist() for r in regions]) #Visualization for r in range(0,np.shape(rects)[0]): rect = rects[r] cv.rectangle(vis, (rect[0],rect[1]), (rect[0]+rect[2],rect[1]+rect[3]), (255, 0, 0), 2) cv.rectangle(vis, (rect[0],rect[1]), (rect[0]+rect[2],rect[1]+rect[3]), (0, 0, 255), 1) #Visualization cv.imshow("Text detection result", vis) cv.imwrite("D:/test_detection_demo_02.png", vis) cv.waitKey(0)基于卷积神经网络模型实现场景文字检测演示如下:def cnn_text_detect(): image = cv.imread("D:/images/cover_01.jpg") cv.imshow("input", image) result = image.copy() detector = cv.text.TextDetectorCNN_create("textbox.prototxt", "TextBoxes_icdar13.caffemodel") boxes, scores = detector.detect(image); threshold = 0.5 for r in range(np.shape(boxes)[0]): if scores[r] > threshold: rect = boxes[r] cv.rectangle(result, (rect[0], rect[1]), (rect[0] + rect[2], rect[1] + rect[3]), (255, 0, 0), 2) cv.imshow("Text detection result", result) cv.waitKey() cv.waitKey(0) cv.destroyAllWindows()运行结果 基于极值区域文本定位
-
1.概念 经典的目标检测如Faster R-CNN, YOLOv3等都用到了Anchor, 怎么设计Anchor每个目标检测方法各不相同。Faster R-CNN中的Anchor有三种形状,三种长宽比,比如形状有[128, 256, 512]三个,长宽比有[1:1, 1:2, 2:1]三种,这样组合就是9个anchor。YOLOv3中的Anchor是通过K-Means聚类得到的。这些基于anchor的方法的目的是学习一个从Anchor到GT Box的转换函数,下边我们了解一下理论感受野、Anchor、实际感受野三者之间的关系。先看一张图:图源Medium一个kernel size=3的卷积核,通过在原feature map上划窗,然后计算得到的是一个值,这个值是通过计算原来feature map上3×3面积上的值得到的结果,那就说经过这个3×3卷积以后,这一层feature map的感受野就是3×3。如果是两个kernel size=3的卷积核堆叠起来,那么上图黄色的feature map每个值对应最下面的5×5的感受野。**理论感受野:**某一层feature map中的某一个位置,是由前面某一层固定区域输入计算出来的,那这个固定区域就是这个位置的感受野。实际感受野: 实际感受野要小于理论感受野,是在NIPS2016中的Understanding the Effective Receptive Field in Deep Convolutional Neural Networks提出的。文章主要贡献有以下几点:并不是感受野内所有像素对输出向量的贡献相同,实际感受野是一个高斯分布,有效感受野仅占理论感受野的一部以上就是不同层下的不同的感受野。使用不同的激活函数与不同的卷积采样方法,产生的实际感受野也不尽相同。其中ReLU的高斯分布没有另外两个平滑,创建了一个较少的高斯分布,ReLU导致很大一部分梯度归零。另外就是非常关心的问题,实际感受野是如何变化的?实际感受野和理论感受野的关系是什么样的?文章中也给出了答案,见上图,随着网络层数的加深,实际有效的感受野是程级别增长。而右图展示了随着网络层数的加深,有效感受野占理论感受野的比例是按照级别进行缩减的。其中需要注意的是实际感受野的计算方式:若像素值大于(1-96.45%)的中心像素值,就认为该像素处于实际感受野中。训练的过程中,感受野也会发生变化可以看出分类和分割任务经过训练后的感受野都有提升,不过提升幅度不太一样。这也说明了神经网络通过学习,扩大了感受也,能够自适应把越来越大的权重放在感受野之外的像素上。也在一定程度上说明更大感受野的必要性。
-
CR的主要特征就是能够通过对操作环境的感知而改变发射机参数,侦听频谱中是否有空间容纳非授权用户进行通信,而不干扰该频段执牌用户的正常通信。从广义上讲,“认知无线电”这个术语可以是指实现这一技术口标的各种解决方案.这些解决方案试图以尽可能不影响频谱主用户的方式,将次要用户的信号与主要用户的信号交织(Interweave) ,覆盖(underlay)、重叠(Overlay)在一起,CR设备可以是在以上3种工况下运行。在交织模式下,次用户通过频谱感知寻找空穴进行信号传输。而在谱覆盖模式中,允许非授权用户与执牌用户传输同时同频进行,就像超宽带(Ultra Wide Band,UWB)系统一样。次级无线电通过足够大的带宽传播信号,以确保对主要用户造成的干扰量在可容忍的范围内。因此,引人了干扰温度的概念来确定主接收机的可容忍干扰水平同。如果采用有效的频谱管理和资源分配技术,这种模式可以显著提高频谱利用率。
-
优化通常是一个极其困难的任务。传统的机器学习会小心设计目标函数和约束,以确保优化问题是凸的,从而避免一般优化问题的复杂度。在训练神经网络时,我们肯定会遇到一般的非凸情况。即使是凸优化,也并非没有任何问题。在这一节中,我们会总结几个训练深度模型时会涉及到的主要挑战。在优化凸函数时,会遇到一些挑战。这其中最突出的是 Hessian 矩阵 H 的病态。这是数值优化、凸优化或其他形式的优化中普遍存在的问题病态问题一般被认为存在于神经网络训练过程中。病态体现在随机梯度下降会卡在某些情况,此时即使很小的更新步长也会增加代价函数。回顾式,代价函数的二阶泰勒级数展开预测梯度下降中的 −ϵg 会增加神经网络训练任务,我们可以监测平方梯度范数 g⊤g 和 g⊤Hg。在很多情况中,梯度范数不会在训练过程中显著缩小,但是 g⊤Hg 的增长会超过一个数量级。其结果是尽管梯度很强,学习会变得非常缓慢,因为学习率必须收缩以弥补更强的曲率。如图 8.1所示,成功训练的神经网络中,梯度显著增加。
-
ResRep: Lossless CNN Pruning via Decoupling Remembering and Forgetting论文:https://arxiv.org/abs/2007.03260代码:https://github.com/DingXiaoH/ResRepResRep这个名字包括两部分:Res指的是Gradient Resetting,本文提出的一种魔改SGD更新规则;Rep指的是Convolutional Re-parameterization,也就是本文的核心。所以,这一方法也是“重参数化宇宙”的一部分,可以看成重参数化方法论在剪枝领域的成功应用。我想到这个idea主要是是因为我想用结构重参数化来做剪枝,拓展重参数化的应用领域,觉得这样做很有意思。顺便再提一下结构重参数化代表作,一叠3x3卷积堆起来的RepVGG,GitHub 2000star,最新版达到84.16% ImageNet top-1,反超若干Transformer!RepVGGplus的工作正在进展中!清华&旷视提出RepVGG:让你的CNN一卷到底!重参宇宙的简要介绍:https://zhuanlan.zhihu.com/p/361090497Motivation:解耦“记忆”和“遗忘”这一方法多多少少跟神经科学研究有关:动物脑中的记忆和遗忘是两个相对独立的过程,由不同的机制和化学物质控制,并不是说我们记住了什么东西就会自然而然地“覆盖”掉什么记忆。这似乎意味着,如果我们把CNN类比于动物脑,CNN的结构类比于脑结构,CNN的训练(让一些参数变大,一些变小)类比于脑的记忆(一些突触变强,一些变弱),CNN的剪枝(去掉一些结构,如链接、kernel、通道)类比于脑的遗忘(一些神经元和突触的失活),我们就会想到:让CNN中的不同结构负责“记忆”和“遗忘”应该是有好处的。但是在大多数现有的剪枝方法中,“记忆”和“遗忘”是耦合的。例如,一些方法在卷积层的kernel上加一个惩罚项,如L1/L2/Lasso,然后先通过训练使一些通道变小(也就是说,使其对应的参数张量接近0)再剪枝。这样的解决方案是自然的,因为剪掉小的通道造成的精度损失自然就小。问题是,在这一训练过程中,每一个通道的参数既参与了“记忆”(计算原目标函数,导出与目标函数相关的梯度,用这部分梯度更新参数)又参与了“遗忘”(计算惩罚项,导出与惩罚项相关的梯度,用这部分梯度更新参数)。这就造成了一个左右为难的困境:模型既“记不好”(该变小的通道变小了,不该变小的也变小了,精度降低)又“忘不掉”(该变小的也没变得足够小,剪的时候依然有性能损失)。(如下图A)ResRep提出的解决方案是:将原CNN等价拆分成负责“记忆”(保持精度不降低)的部分和负责“遗忘”(去掉某些通道)的部分,前者进行“记忆训练”(不改变原目标函数、不改变训练超参、不改变更新规则),后者进行“遗忘训练”(一种基于SGD的魔改更新规则,即Res),应该能取得更好的效果(更高压缩率、更少精度损失)。然后,如果我们能将“记忆”和“遗忘”部分等价合并成一个更小的模型,不就能实现剪枝了吗?(如下图B)
-
机器学习的概念:机器学习是一种统计学方法,计算机利用已有数据得出某种模型,再利用此模型预测结果。特点:随经验的增加,效果会变好。简单模型举例:决策树模型预测班车到达时间的问题描述: 每天早上七点半,班车从 A 地发往 B 地,到达 B 地的时间如何准确预测?如果你第一次乘坐班车,你的预测通常不太准。一周之后,你大概能预测出班车 8:00 左右到达 B 地;一个月之后,随着经验的增加,你还会知道,周一常堵车, 会晚 10 分钟,下雨常堵车,会晚 20 分钟。于是你画出了如下的一张树状图,如 果是周一,还下了雨,班车会 8:30 到达;如果不是周一,也没有下雨,班车会 8:00 到达。机器学习和传统计算机运算的区别:传统计算机是基于冯诺依曼结构,指令预先 存储。运行时,CPU 从存储器里逐行读取指令,按部就班逐行执行预先安排好的 指令。其特点是,输出结果确定,因为先干什么,后干什么都已经提前写在指令 里了。机器学习三要素:数据、算法、算力 深度学习的概念:深层次神经网络,源于对生物脑神经元结构的研究。人脑神经网络:随着人的成长,脑神经网络是在渐渐变粗变壮。生物学中的神经元:下图左侧有许多支流汇总在一起,生物学中称这些支流叫做 树突。树突具有接受刺激并将冲动传入细胞体的功能,是神经元的输入。这些树突汇总于细胞核又沿着一条轴突输出。轴突的主要功能是将神经冲动由胞体传至 其他神经元,是神经元的输出。人脑便是由 860 亿个这样的神经元组成,所有的 思维意识,都以它为基本单元,连接成网络实现的。计算机中的神经元模型:1943 年,心理学家 McCulloch 和数学家 Pitts 参考了 生物神经元的结构,发表了抽象的神经元模型 MP。神经元模型是一个包含输入, 输出与计算功能的模型。输入可以类比为神经元的树突,输出可以类比为神经元 的轴突,计算可以类比为细胞核。人工智能 Vs 机器学习 Vs 深度学习 的对比:人工智能,就是用机器模拟人的意识和思维。机器学习,则是实现人工智能的一种方法,是人工智能的子集。深度学习就是深层次神经网络,是机器学习的一种实现方法,是机器学习的子集。 机器学习的典型应用1、应用领域 计算机视觉、语音识别、自然语言处理2、主流应用:(1) 预测(对连续数据进行预测) 如,预测某小区 100 平米的房价卖多少钱。 根据以往数据(红色●),拟合出一条线,让它“穿过”所有的点,并且与各个点 的距离尽可能的小。我们可以把以前的数据,输入神经网络,让他训练出一个模型,比如这张图中红 色点表示了以往的数据,虚线表示了预测出的模型 Y = ax + b ,大量历史数据 也就是面积 x 和房价 y 作为输入,训练出了模型的参数 a = 3.5, b = 150,则 你家 100 平米的房价应该是 3.5 * 100 + 150 = 500 万。 我们发现,模型不一定全是直线,也可以是曲线;我们还发现,随着数据的增多, 模型一般会更准确。(2) 分类(对离散数据进行分类) 如,根据肿瘤患者的年龄和肿瘤大小判断良性、恶性。 红色样本为恶性,蓝色样本为良性,绿色分为哪类?假如让计算机判断肿瘤是良性还是恶性,先要把历史数据输入到神经网络进行建 模,调节模型的参数,得到一条线把良性肿瘤和恶性肿瘤分开。比如输入患者的 年龄、肿瘤的大小 还有对应的良性肿瘤还是恶性肿瘤,使用神经网络训练模型 调整参数,再输入新的患者年龄和肿瘤大小时,计算机会直接告诉你肿瘤是良性 还是恶性。比如上图的绿色三角就属于良性肿瘤。
-
神经网络 脉冲神经网络 (SNN-Spiking Neuron Networks) 经常被誉为第三代人工神经网络。第一代神经网络 第一代神经网络是感知器,它是一个简单的神经元模型并且只能处理二进制数据。第二代神经网络包括比较广泛,包括应用较多的BP神经网络。编码 但是从本质来讲,这些神经网络都是基于神经脉冲的频率进行编码( rate coded)。模拟神经 脉冲神经网络,其模拟神经元更加接近实际,除此之外,把时间信息的影响也考虑其中。思路 思路是这样的,动态神经网络中的神经元不是在每一次迭代传播中都被激活(而在典型的多层感知机网络中却是),而是在它的膜电位达到某一个特定值才被激活。激活 当一个神经元被激活,它会产生一个信号传递给其他神经元,提高或降低其膜电位。脉冲 在脉冲神经网络中,神经元的当前激活水平(被建模成某种微分方程)通常被认为是当前状态,一个输入脉冲会使当前这个值升高,持续一段时间,然后逐渐衰退。解释 出现了很多编码方式把这些输出脉冲序列解释为一个实际的数字,这些编码方式会同时考虑到脉冲频率和脉冲间隔时间。模型 借助于神经科学的研究,人们可以精确的建立基于脉冲产生时间神经网络模型。脉冲编码 这种新型的神经网络采用脉冲编码(spike coding),通过获得脉冲发生的精确时间,这种新型的神经网络可以进行获得更多的信息和更强的计算能力。
-
由来自卡内基梅隆大学、美国东北大学、哥伦比亚大学、加州大学洛杉矶分校的成员共同开发的工具α,β-CROWN 获得了第二届国际神经网络验证大赛总分第一,以及 5 个单项第一!其中该团队的学生作者均为华人。近日,一年一度的国际神经网络验证大赛VNN-COMP落下帷幕。由来自卡内基梅隆大学(CMU)、美国东北大学、哥伦比亚大学、加州大学洛杉矶分校(UCLA)的成员共同研发的工具α,β-CROWN获得了第二届国际神经网络验证大赛总分第一,比分大幅度领先。该工具由华人学者张欢(CMU)、许凯第(东北大学)和王世褀(哥伦比亚大学)带领的团队开发。本文中,我们将介绍神经网络验证的基本问题、国际神经网络验证大赛的背景和本次竞赛获胜算法 α,β-CROWN。神经网络已经成为了现代人工智能中非常重要的元素。然而由于其复杂性,神经网络常常被视为「黑盒」,因为我们很难精确的刻画神经网络所表达的函数。例如,对抗样本 (adversarial examples) 是神经网络中的一个常见的问题:当在神经网络的输入中加入少量对抗扰动时,神经网络的输出可能产生错误的改变,比如将物体识为和输入毫不相关的类。这对于把神经网络应用到对安全性、鲁棒性要求较高的应用中提出了很大的挑战。 神经网络验证的主要任务是为神经网络的行为提供严格的理论保证,用严格的数学方法保证鲁棒性、正确性、公平性、安全性等。比如,在鲁棒性验证问题中,我们需要证明对于一个给定的网络,在某张图片上无论采用何种对抗攻击方法,只要对抗扰动的大小不超过某个阀值,任何攻击都一定不会成功。
-
原理 SPPNet也称为空间金字塔池化卷积网络,它可以将CNN的输入从固定尺寸图片改进为任意尺寸的图片。 SPPNet在普通的CNN结构中加入了ROI池化层,使得网络的输入可以是任意尺寸的。 ROI池化层一般跟在卷积层后面,它的输入是任意大小的卷积,输出是固定维数的向量。分析 1)设卷积层输出的宽度为w,高为h,通道为c。不管输入图像尺寸是多少,卷积层的通道数是不会变,也就是说c是一个常数。而w,h会随着输入图像的尺寸的变化而变化,可以看做是两个变量。 2)ROI池化层首先将卷积层划分为44的网格,每个网格的宽为w/4,高为h/4,通道数为c。当不能整除时,取整数。 3)对于网格中的每个通道,都取出最大值(即对每个网格内的特征做最大值池化),这个44的网格最终就形成了16c维的特征。 4)然后,再将网络划分成22的网格,用同样的方法提取特征,提取的特征的长度是4c。再把网络划分为11的网格,提取出的特征的长度就是c(也就是取出卷积中每个通道的最大值)。 5)最后,将得到的特征拼接起来,得到的特征是16c+4c+c=21c维的特征。很显然,这个输出特征的长度与w,h无关,因此ROI池化层可以把任意宽度、高度的卷积特征转换为固定长度的向量。特征 将ROI应用到目标检测中,可以这样考虑:网络的输入是一张图像,中间经过若干卷积形成了卷积特征,这个卷及特征实际上和原始图像在位置上是有一定对应关系的。因此,原始图像中的候选框,实际上也可以对应到卷积特征中相同位置的框,而利用ROI可以将卷积特征中不同形状的区域对应到同样长度的向量特征。 综合上述步骤,就可以将原始图像中的不同长宽的区域都对应到一个固定长度的向量特征,这就完成了各个区域的特征提取工作。计算 采用ROI后,就可以先对图像进行一遍卷积计算,得到整个图像的卷积特征; 接着,对于原始图像中的各种候选框,只需要在卷积特征中找到对应的位置框,再使用ROI池化层对位置框中的卷积提取特征,就可以完成特征提取工作 R-CNN与SPPNet的不同在于,R-CNN要对每个区域计算卷积,而SPPNet只需要计算一次,所以SPPNet的效率要高得多。
-
原理 Fast R-CNN中还存在一个有点尴尬的问题,它需要使用Selective Search提取框,这个方法比较慢。分析 在Faster R-CNN中,用RPN(Region Proposal Network)网络取代了Selective Search,速度和准确度均得到了很大提高。 RPN还是需要先使用一个CNN网络对原始图片提取特征,对这个卷积特征再进行一次卷积计算,保持宽、高、通道不变。位置 下面定义一个“位置”的概念:对于一个5139256的卷积特征,称它一共有5139个位置。让新的卷积特征的每一个位置都负责原图中对应位置9种尺寸的框的检测,检测的目标是判断框中是否存在一个物体,因此,一共有51399个框,这些框统一称为“anchor”。 anchor的面积分别为128128,256256,512512,每种面积又分为三种长宽比:2:1,1:1,1:2 anchor的尺寸实际是属于可调的参数,不同的任务可以选择不同的尺寸。计算步骤 1、设k为单个位置对应的anchor的个数,此时k=9,首先使用一个33的滑动窗口,将每个位置转换为一个统一的256维的特征。 这个特征对应了两部分的输出:一部分表示该位置的anchor为物体的概率,这部分的总输出长度为2k(一个anchor对应两个概率,一个是是物体的概率,一个是不是物体的概率);另一部分为框回归(同Fast R-CNN),一个anchor对应四个框回归参数(w和h的平移量、缩放量),因此框回归部分的总输出的长度为4k 2、Faster R-CNN使用RPN生成候选框后,剩下的网络结构与Fast R-CNN一样 3、在训练过程中,需要训练两个网络:RPN和分类网络。通常的做法是交替训练,即在一个batch中,先训练RPN一次,再训练分类网络一次。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签