网站建设规范/整站优化的公司
随着电子产品的升级换代,用户对通话质量的要求也越来越高。通话降噪算法对通话质量起到了关键核心的作用。计算资源的提升使得深度学习模型在便携式的低功耗芯片上面跑起来了,器件成本降低让IoT设备开始使用骨导传感器,,那怎么样才能将深度学习和传统算法结合?怎么样充分利用好骨导传感器?怎么样将客观测试的结果转化为真实的用户体验?这也是新时期通话算法面临的新的挑战。LiveVideoStackCon 2022北京站邀请到了王林章老师,为我们分享通话降噪算法在手机和IOT设备上的应用和挑战。
文/王林章
整理/LiveVideoStack
大家上午好。今天我带来的分享题目是:通话降噪算法在手机和IoT设备上的应用和挑战。
先看一下国家统计局的数据,在2021年全国通话时长有 4. 56 亿万分钟,基本上平均每人每天至少有 10 分钟的通话时间。
手机保有量也非常大,在 21 年底有18. 56 亿部手机。如果根据中国有14 亿人口的话,可能还有4亿多人有两个手机。
21年智能手机出货量的数据是13亿台,22年的数据量有所下降,大约在 11 亿台。
然后是 TWS 耳机的出货量,在 22 年大约有 3. 5 亿台,也在稳步增长,所以这个算法也在不停运作。
今天我从五个方面讲一下通话降噪算法落地的状态:
首先,通话降噪算法的评价方法,怎么样的算法才是最好的算法?其次,通话降噪算法的背景介绍。最后,介绍通话降噪算法面临的挑战、落地的实践和未来的展望。
-01-
通话降噪算法的评价方法
首先介绍一下:什么是语音,什么是噪声。
我们一般把语音分为两类:清音和浊音。清音,一般指声带不发音;浊音,声带发音。从图频谱上看,浊音会有很多基音和谐波,清音基本没有,就像白噪声。清音和浊音并不是指一个字,而是在音节里有清音和浊音的区别。
噪声分为很多种。常见的噪声,有马路噪声、地铁噪声、施工的噪声。还有一些特殊噪声,如风噪、共振噪声,因为这些噪声对算法的挑战更高,所以把它们列为特殊噪声。
关于噪声的分类,如果从算法的角度来讲,传统算法都可以处理好一般的平稳噪声。
根据空间的特性,可以分为方向性噪声和扩散场噪声,一般用阵列算法来处理。
此外,根据频带的宽度,又分为窄带和宽带噪声。图里有清音和浊音的标注,浊音会有比较清晰的谐波成分;清音就像白噪声,是一个比较平稳的状态。
我们大致理解一下噪声的范围。在生活中,比如会议室,如果不说话,可能是40到80dB的噪声场景。到了马路上,如果有汽车通过,一般是70到 80 dB。如果在地铁上,地铁呼啸而来的噪声可能会到90 dB。酒吧、KTV 里的噪声可能到了100 dB。飞机发动机就更大了,可能有110到130dB的噪声。
后文会给大家一些建议,看看什么样的噪声场景对我们危害比较大。
再说一下语音的声压级范围。一般耳语是在50 dB,正常说话可能在60 dB,不包括用扩音器。如果用扩音器,声音在 100 dB左右。大声喧哗一般是80dB,歌唱家一般在 90dB左右,但是最高能达 130dB。
左边的图显示了什么样的噪声对我们的影响最大。其实,在130dB 的情况下,我们只要在这个环境里待两分钟,那么听力就可能受伤害了,也许就不能再恢复了。
然后再看一下听力在KTV中的状态,KTV 里的噪声大约在 100 dB 左右,如果在这个环境里待过两个小时或超过两个小时,听力也会受到伤害,而且这种伤害是不能恢复的。
所以,给大家一个建议:不要在KTV里待太长时间,两个小时足够了,超过两个小时可以去休息一下,保护自己的听力。
再看一下,如果耳朵受损,会是一个什么样的状态。这里有一个数据,在正常播放的情况下,能够听得很清晰。在1000赫兹的情况下,如果正常播放的声音听不清楚了,要加大到约 20 dB 以上才能听清的话,那么耳朵就已经受到严重的伤害了。这时根据中国医学的数据来看,在 4000赫兹的环境里,可能要加到 70—80 dB 才能听清。所以如果耳朵受伤,可能最初听到的声音是很闷的。和大家强调一下,保护听力还是很重要的。
国际标准如何规范通话降噪的参数?
ITU出了一系列参数,因为我们在做通话降噪,所以最关注P800 这个协议,它是关于通话降噪评价非常多的一个标准,大家如果有兴趣可以去找原文看一下。
还有P830、805等一系列标准,大部分都是给音频和语音的编解码,用于音频的质量的判断,speech 也会有编解码质量的损伤,所以也有一些标准对此进行规范。
右边的第一张图是天津大学的老师在做的关于信噪比对可懂度的评价。我们发现当信噪比在0dB 的时候,可懂度基本在 50% 左右。当信噪比大于0,如果超过 10dB ,可懂度在 80dB的80% 以上,所以这时的可懂度是比较好的。当信噪比低于- 5dB时,可懂度就非常差了。
我们有一些通话和评测要求,这些要求会更加严格。在测试时,我们进行了严格的检验。例如要求测试时手机的通话时间,如打电话一小时或两小时,在不同环境下保持算法稳定运行。另外,当拿起手机时,我们会堵住底部的麦克风,这时即便通话也不能说话,因为底部的麦克风被堵上,声音无法传递。这是我们自己的测试要求。
刚才提到了一个重要的通话标准,即ITU标准里的P800。这个标准通常采用五分制评分。在算法开发过程中,我们通常无法完全达到4到5分的水平,因为这个要求非常高。因此,我们主要追求达到3到4分的水平,即听起来非常清晰,但可能会有一些杂音。
当然,如果得分在1到2分之间,这基本上是不可接受的;而得分在2到3分之间是可以的,意味着仍然可以进行交流,但可能存在一定的延迟。因此,在恶劣情况下,也可能出现2到3分的情况,能够确保可以通话,但音质可能不是很好。
在这里,我具体列举了具体参数。当做深度学习模型训练时,我们通常会关注到PESQ分和STOI分,这是短时主观的可懂度的评估。比如第三个TMOS分数,它评估的是在没有噪声的情况下使用手机打电话后,对方接收到的语音质量如何。大家可能会有一个疑问,即在没有噪声的情况下打电话,那传输的语音应该非常好,理论上讲确实应该非常好。但是,我们发现,算法可能会破坏语音,或者在传输过程中造成破坏。因此,TMOS是对传输过程中没有噪声且语音没有受损的情况下的评估。接下来,我们再看看NMOS和SMOS,它们是在噪声环境下对语音进行评估的。NMOS评估的是在噪声环境下打电话后,抑制噪声水平如何?抑制得越多,NMOS分数就越高。SMOS评估的是在噪声环境下打电话后,经过链路传输后的语音的保证度如何?语音保证度越好,得分就越高。
所以,看起来SMOS和NMOS的分数有些矛盾,因为抑制得越多,可能损伤的语音也越多,而如果要求语音保证很好,降噪水平可能就达不到目标要求。因此,有一个综合的评分叫做GMOS分数。GMOS分数综合了SMOS和NMOS的评分,从而得出一个结果。
TMOS、SMOS、NMOS以及GMOS是评价通话质量时非常重视的几个参数。目前,有一些趋势,就是大家还不太相信GMOS,如小米采用的评估方式是将SMOS和NMOS的平均值作为评价标准,而不是用GMOS。
小米的通话评估是在全消声室中进行的,目前所有的通话都会在这样的消声室中进行评价。噪声复原系统有6个扬声器,周围有6个扬声器来进行噪声复原。我们的手机是标准装卡,包括嘴巴与扬声器的距离以及耳朵与听筒的距离。这是我们的标准评价测试系统。
-02-
通话降噪算法的基础介绍
在介绍完语音通话评价后,我们继续探讨算法的技术。
首先,我们来看一下通话降噪算法的发展过程。最早,大家可能都知道谱减法、噪声估计这些早期的算法,后来的数据处理中也会用到类似的方法,例如高斯混合模型(GMM)算法和子空间算法,目前我们也在使用矩阵分解方法,如IV。
从2013年开始,深度学习在降噪领域发挥了强大的能力,尤其在抑制非平稳状态方面表现出色。早期的方法基于掩蔽曲线和频谱掩蔽,后来逐步升级,出现了基于复数谱mapbased方法。
目前,我们采用深度学习与传统方法相结合的方式进行降噪。我认为未来的趋势可能是采用多模态的降噪方法以及训练超大模型,这种降噪方法可能与目前热门的GPT模型以及超大模型的输出相关。
在通话降噪领域,从2012年到2013年,深度学习的引入可以被视为一个里程碑。其中有两篇文章具有重要意义:一篇是斯坦福的文章,在语音识别方面,通过抑制噪声,提高了鲁棒性;另一篇是2013年王德亮老师在语音分离方面引入了机器学习的方法。
我把通话降噪里比较经典的文章列在图中,这里有一个过程:早期我们用什么样的方法去做语音降噪,到后来我们逐步深入提升它的效果。
在早期阶段,徐勇在降噪研究中引用了一种称为"Dense"的方法,即线性层,取得了较好的降噪效果,这是早期取得较好降噪效果的一篇文章。然而,这种"Dense"层的计算量较大,并且效果有所欠缺,因为它所学习的东西类似于统计规律。
因此,从2016年开始,高通在研究中引入了一种被称为"CN"的卷积网络。卷积网络的好处在于它能够学习频域之间的频谱信息,所以具有更好的效果。
在2018年,有两篇文章也值得提及。一篇是由李锦辉老师在引入LSTM 的时候,提出的基于递归的RNN的模型,而另一篇则是大家比较熟悉的RNN方案,其参考代码在网上可获取。其模型具有非常低的计算量,但带来了非常好的降噪效果。它采用了传统降噪思路,包括降噪模型和树状滤波过程,这些细节较为复杂,但总的来说,这篇文章在早期为大家提供了有价值的参考。
随着对深度学习的研究,在2020年ICASSP举办了一个降噪比赛。西北工业大学的老师开发了DCCRN模型,效果是非常惊艳,在2020年的比赛中拿到第一名。
在2021年的比赛里,声学所的李晓东老师团队提出了一个分阶段降噪的模型,在处理混响的情况下表现更出色,也获得了第一名。
因此,总体来看,发展方向是从DNN到CNN,再到RNN,然后进一步发展为更为复杂的深度学习DCCRN模型。
这里我想提一下我们自己的工作,之前介绍的都是其他老师在降噪研究方面的工作,而我们在这个领域做了一点简单的改进。在前面介绍语音和噪声的情况时,提到语音除了基频和谐波外,还可能有共振峰等概念。所以,我们认为在卷积层上不一定需要在整个频谱范围内都做卷积。我们尝试了一种改进方式,即只对关注的低频部分进行卷积,然后再对关注的高频部分进行卷积。
这里的原始数据是一个婴儿的哭声。婴儿的哭声与人的声音非常相似,也有基频和谐波,因此对其进行降噪是非常难的。
我们再听一下在使用小模型时的输出结果,这个声音可能会听起来有些沉闷,这是因为在收敛过程中保留了一些婴儿的哭声。
再看一下训练的大模型的结果,基本上可以听到大模型对婴儿哭声的抑制效果非常好。语音的清晰度也还可以,基本上能听得清楚。根据前文所提的MOS打分,估计大模型的评分应该在3分左右,而小模型可能是2分多。
这是一个基础的概念,深度学习方面的内容讲完后,我们还需要看一下传统算法,因为在通话降噪领域,传统算法仍然发挥着重要作用。
这里展示了回声产生的过程:有一个说话人发出声音,声音通过路径传播,如果在下方黄色框内没有用算法进行处理,声音会通过麦克风进入耳朵。
在回声消除的算法中,最早期是采用牛顿迭代方法,它是一种简单的方法,通过误差和梯度迭代计算W因子。然而,这种方法存在一些问题,比如如何处理双重回声、共享环境、怎么确定滤波器长度、收敛速度以及非线性问题等。
所以我列出了一些简单的建议。例如,在设计滤波器时,考虑到复杂的混响环境,不一定需要使用很长的滤波器,可以使用其他方法。
此外,关于AEC,现在也有使用神经网络的方法,它的优点是语音保真度更好。目前有两种方法,一种是让神经网络学习整个过程,将麦克风的数据和参考信号输入网络,让网络自己学习和处理回声抑制;另一种方法是将传统算法的结果和参考信号一起提供给神经网络进行处理。这两种方法都各有优势,但是神经网络的计算量非常大,与传统方法相比,计算量的问题让我们很难接受。
所以,我们也在考虑一个问题,即是否将降噪效果也整合到回声抑制中。我们正在尝试这件事,即让神经网络既处理回声抑制,又进行降噪处理。
在2022年,我们参与了ICASSP的AEC挑战赛。我们发表了一些相关文章,取得了还不错的效果。特别是在低信回比的情况下,比如-5dB,甚至-50dB下,我们的方法仍然能够获得良好的效果。我们使用了一些热门的技术,比如Transformer,这是一种神经网络模型。但是,因为它的计算量较大,所以目前只是做了一些演示,并没有落地应用。另外,关于AEC,可能还涉及到一些阵列算法,适用于手机应用和IOT应用。
阵列算法主要用于实现方向性的信号抑制,其中包括一些常见的算法,如GSC、MVDR、GEV等。这些算法的主要目标是求出麦克风阵列与声源方向之间的关系。具体的推导过程可以在相关资料中找到。
通过阵列算法,我们可以得到麦克风阵列摆放位置与声源方向之间的关系。这个推导过程的好处在于可以了解每个麦克风接收到信号时会出现什么样的差异。
阵列算法的推导过程涉及到对阵列接收信号的标注以及确定目标方向矩阵。在推导过程中,可以使用简单的阵列算法,如CBF算法。CBF算法的基本思路是通过比较每个麦克风接收到的信号来确定最优的状态,这是CBF算法的最简单过程。
这里我们在做一件最重要的事情,就是确定两个麦克风之间接收信号的区别。其中最关键的因素可能是延时差异。虽然整个推导过程可能非常复杂,但它计算了延时对两个麦克风的影响。
CBF 只是理论上的推导,MVDR是我们真正使用的算法。MVDR算法的主要思路是通过约束条件来保证方向位的正确性,并使用拉格朗日算子来最小化目标函数并最大化目标信号,同时最小化其他方向的噪声信号。
对于单通道降噪问题,早期的方法是基于能量估计。通过计算信号在频段上的能量,并跟踪最小值,如果最小值不为零,那么它就被认为是这个平台里的噪声。
我们在实际应用中,发现平滑能量计算对结果的影响非常大。这里可以看到Alpha因子对噪声估计的准确度影响很大。
单通道降噪升级在这个基础上提出了一种基于信噪比的迭代评估方法,通过判断平滑和改进来获得更好的降噪效果,这算是传统算法里的迭代升级。
-03-
通话降噪面临的挑战
我们再看一下算法面临的挑战。
我们在手机、IOT以及在其他设备上的应用的时候,面临的最大问题就是计算资源。因为现在和以前不同,以前是传统算法,计算的容量有限。但是现在有深度学习这个模型。深度学习模型在语音降噪领域取得了显著的进展。这些模型的效果与模型的规模相关,越大的模型能够学习越多。如果想要实现更好的效果,关键是要确保足够的计算资源,所以这也依赖于硬件的不断发展。
虽然电脑上的计算资源较为充足,但在可穿戴设备(如小米SE手表)上,需要不停地优化手机里的算法,以便应用到手表、耳机上。
比如在电脑上,内存资源用1M以上也无所谓。然而,在手机上,可用的资源较为有限,可能只有几百K的内存可供使用。而在IOT设备上,通常只能分配100K左右的内存。所以这是一个很大的挑战。
在手机使用中存在一些挑战,其中之一是关于麦克风的问题。很多人打游戏时会在两端握着这个手机,这会把麦克风堵住。如果在打游戏的同时还需要与队友通信,但麦克风被堵住了,对方就无法听到声音。因此,我们就会面临一些挑战,比如如何解决麦克风被堵住的问题。
在2020年,小米普及了立体声功能的手机,手机两端都有speaker的声音,所以声音和麦克风的距离非常近。这种近距离使信回比非常低,甚至可以达到-30dB的超低信回比。
在测试中,我们还遇到了一些超级混响环境下的自适应回声消除(AEC)问题。测试团队会拿着手机在封闭的玻璃房间里进行电话测试,这种环境下存在非常强的混响。这种反复的声音反射可能会导致滤波器收敛困难,给我们带来一定的挑战。
在实际应用中,我们面临一些问题。例如,无线充电器的使用,当手机放在无线充电器上并打免提电话时,充电器的底部可能会堵住麦克风。因此,这时需要算法智能性地解决这个问题。
另外,耳机的使用也可能遇到类似的问题,例如不正确的佩戴方式会导致阵列算法的出现问题。为此,我们采用自适应波形形成而不是固定波束形成的方法。
除此之外,我们还面临其他挑战,例如风噪的处理,因为风噪对麦克风信号的影响是无规律的。因此,处理风噪也是一个相对困难的问题。
在处理音频的过程中,我们还遇到了一些挑战。例如,在使用3G网络时,如果用户使用电信号码,那么在3G网络中可能会产生Tap噪声,这是我们需要解决的问题之一。
另外,在早期的手机中,通常会有收音功能。然而,电路的GND地线可能会引入一些噪声,这也需要我们处理。
-04-
通话降噪算法的落地实践
在处理计算量的问题时,芯片的发展起到了重要的作用,如MTK和展讯,都在开发内核。这些内核不断升级,包括内核数目和SIMD等功能也在不断提升。SIMD指令能够执行多个乘加任务,从而为我们提供更多的计算资源。
所以大家可以考虑一下算法芯片话的开发,这是一个比较有潜力的平台。未来,在计算能力上面也可以看到一代、二代、三代不停的成长。
在将算法落地时,我们遇到的第二个问题是参数传递和更新的挑战。算法是有一些参数的,我们需要将这些参数顺利地传递给下层的DSP,以便更新算法参数。
我们遇到了一个耳机没有声音的问题。我们发现在测试时,没有测试到印度耳机的例子,我们只使用国内的耳机进行测试,而印度耳机的增益非常小。所以一旦出现问题,我们必须迅速解决。
因此,我们的算法一旦调整完毕,就需要立即更新参数。在这种情况下,设计的结构要求CPU能够快速将参数传递给DSP,以便迅速解决问题。这里提到的Orasis架构可以确保CPU与底层DSP之间实现快速通信。然而,我们也面临一些问题。例如,在通话过程中,客户可能抱怨通话质量不佳,但无法获得客户的隐私数据,所以我们会在客户自己的手机上保存一些数据。
当用户反馈通话质量不好时,可以保存相关的数据Log。我们会跟踪这些日志,并直接与客户沟通,询问是否可以上传这些日志。我们会在本地保留这些数据,获取部分用户数据来做进一步的数据分析。
在 TWS耳机上,除了使用传统的麦克风进行通信外,我们还可能使用 VPU进行通信。在耳机上,VPU的数据处理能力会被充分利用。
我们会发现VPU的质量并不理想,尤其是在高频方面存在污染。然而,它在低频方面的效果很好。为了解决这个问题,我们在这方面做了大量工作,把风噪处理得非常平稳。
在手表上也做了这种处理,比如怎么抑制混响。
在手机通话方面,也进行了一些处理,例如,只有手机的所有者能够拿起手机进行通话,其他人无法使用手机进行通话。
我们通过声纹降噪的方法,利用前30秒或10秒甚至更短的数据来获取用户的声纹信息。然后,在通话过程中,将应用这个声纹信息来进行算法处理,以便抑制其他人的声音。
这是一些声纹降噪效果体验的演示。
通话降噪其实还有很多问题,我简单罗列一下。例如强非线性情况下的一些问题、内麦回声的问题等,这都是需要解决的。
-05-
通话降噪的未来展望
未来展望方面,对于手机通话降噪,我们可以考虑基于低复杂度和低功耗的要求。这意味着可以结合传统算法和深度学习技术。在高计算资源的情况下,深度学习模型可能会成为主要的选择,并采用多级优化的方式来提高性能和效果。
在低功耗的情况下,我做了简单的罗列。有些问题可以使用经典算法来处理,而对于深度学习方面,可以考虑以下几个方面:特征选择、网络结构、Loss 函数。但在实际应用中,可能会遇到小模型在图像上的表现较好,但在听觉感知上效果可能不理想的情况。
最后,我认为多模态降噪也是未来的一个方向。我今天的分享就到这里,谢谢大家。
LiveVideoStackCon是每个多媒体技术人的舞台,如果您在团队、公司中独当一面,在某一领域或技术拥有多年实践,并热衷于技术交流,欢迎申请成为LiveVideoStackCon的出品人/讲师。
扫描下方二维码,可查看讲师申请条件、讲师福利等信息。提交页面中的表单完成讲师申请。大会组委会将尽快对您的信息进行审核,并与符合条件的优秀候选人进行沟通。
扫描上方二维码
填写讲师申请表单
相关文章:

通话降噪算法在手机和IOT设备上的应用和挑战
随着电子产品的升级换代,用户对通话质量的要求也越来越高。通话降噪算法对通话质量起到了关键核心的作用。计算资源的提升使得深度学习模型在便携式的低功耗芯片上面跑起来了,器件成本降低让IoT设备开始使用骨导传感器,,那怎么样才…...

Pet Detection System (PDS)
宠物医院检验设备物联系统...

【OpenCV常用函数:颜色空间转换、阈值化】cv2.cvtColor()+cv2.threshold()
1、cv2.cvtColor() 对图像进行颜色空间的转换 cv2.cvtColor(src, code[, dst[, dstCn]])1) src: 输入图像 2) code: 颜色空间转换编码,常使用的GRAY和RGB之间的转换 cv2.COLOR_BGR2GRAY, cv2.COLOR_RGB2GRAY, cv2.COLOR_GRAY2BGR, cv2.COLOR_GRAY2RGB 3) dst: 输出…...

一键登录和短信验证登录,到底有什么区别?
一键登录是什么? 本机号码一键登录验证是一种登录认证方式,通过获取用户手机上的本机号码来验证用户身份,从而实现快捷登录和简化登录流程的目的。 在使用一键登录时,首先需要用户在登录页面选择使用本机号码一键登录࿰…...

史上最精简Android RecyclerView实现拖拽排序改变位置代码
要实现RecyclerView的长按拖动改变位置,可以使用ItemTouchHelper类来处理拖动和滑动的操作。下面演示如何实现长按拖动改变位置: 首先,在你的Activity或Fragment中,初始化RecyclerView和ItemTouchHelper: RecyclerVi…...

centos 7 系统上重启 mysql 时报错 Failed to restart mysqld.service: Unit not found.
在 centos 7 系统上,使用常规命令:systemctl restart mysql 或 service mysqld restart 重启 mysql 时都会报如下错误: Failed to start mysqld.service: Unit not found. 根据所报错误,在网上搜罗了一圈,未果&#x…...

时间复杂度空间复杂度相关练习题
1.消失的数字 【题目】:题目链接 思路1:排序——》qsort快排——》时间复杂度O(n*log2n) 不符合要求 思路2:(0123...n)-(a[0]a[1][2]...a[n-2]) ——》 时间复杂度O(N)空间复杂度…...

Linux | Ubuntu18.04安装RTX 4060显卡驱动完整教程
文章目录 概述一、定义介绍二、操作教程(一)、前期准备1.进入终端界面2.关闭界面显示器3.禁用其他显卡驱动4.卸载残余显卡驱动5.下载驱动(二)、安装驱动1.给驱动程序赋予权限2.安装驱动3.检查结果(三)、后续问题1.黑屏问题概述 本节详细介绍了如何在ubuntu18系统安装4060显卡的…...

Mermaid语法使用
Mermaid语法使用 1. 基础类1.1 流程图1.2 时序图 2. 工程图2.1 类图2.2 Git图 1. 基础类 1.1 流程图 graph TBid1(圆角矩形)--普通线-->id2[矩形];subgraph 子图id2粗线>id3{菱形}id3-. 虚线.->id4>右向旗帜]id3--无箭头---id5((圆形))end方向定义 用词含义TB从…...

[OnWork.Tools]系列 05-系统工具
简介 系统工具主要是将Window常用工具的快捷启动的集合 双击快速启动 计算器,记事本,截图,画图工具 控制面板,服务管理,关闭显示器,关机 启动文件夹,我的电脑,管理工具 右键菜单 添加快捷方式到桌面...

SOME/IP学习笔记1
SOA概念 在SOA中,每个服务就好像我们每一个人在社会中扮演的角色,在对别人提供着服务的同时,同时也享受着别人提供出来的服务,人与人之间,既是彼此独立的,又是需要互相通讯的。服务提供者将功能具象为一组接口,这样使用者就能知道如何调用服务,完成某件事情,得到某个…...

Effective Java笔记(26)请不要使用原生态类型
首先介绍一些术语 。 声明中具有一个或者多个类型参数( type parameter )的类或者接口,就是泛型( generic )类或者接口 。 例如,List 接口就只有单个类型参数 E ,表示列表的元素类型 。这个接口…...

linux 内存 - KO内存占用
说明 KO(kernel module)占用的内存分为两部分: 静态占用 :ko insmod时系统固定分配的内存。动态申请 :代码中动态申请的内存,由于申请方式不同,统计的方式也可能不同,例如:使用vmalloc和kmall…...

2023.8.7论文阅读
文章目录 CMUNeXt: An Efficient Medical Image Segmentation Network based on Large Kernel and Skip Fusion摘要本文方法实验结果 Boundary Difference Over Union Loss For Medical Image Segmentation(损失函数)摘要本文方法实验结果 CMUNeXt: An E…...
2023河南萌新联赛第(五)场:郑州轻工业大学 --Kruskal
题目描述 给定一张nnn个点的无向完全图,其中两点之间的路径边权为两点编号的按位与(编号为 (1,2,...,n)(1,2,...,n)(1,2,...,n)),即w(u,v)u&v(1≤u,v≤n)w\left(u, v \right )u\&v \left( 1 \le u, v \le n \right)w(u,v…...

Maven引入本地jar包
maven做为一种强大的依赖管理工具,可以帮助我们更方便的管理项目中的依赖;而在使用过程中我们难免会有需要引入本地jar包的需求,这里踩过坑之后我分享俩种引入方式; 1.上传jar到本地maven仓库,再引入 使用此方法后可…...

Java并发编程实战——结构化并发应用程序
文章目录 6 任务执行6.1 在线程中执行任务6.1.1 串行地执行任务6.1.2 显式地为任务创建线程6.1.3 无限制创建线程的不足 6.2 Executor框架6.2.1 示例:基于Executor的Web服务器6.2.2 执行策略6.2.3 线程池6.2.4 Executor的生命周期6.2.5 延迟任务与周期任务 6.3 找出…...

uniapp echarts 点击失效
这个问题网上搜了一堆,有的让你降版本,有的让你改源码。。。都不太符合预期,目前我的方法可以用最新的echarts。 这个方法就是由npm安装转为CDN,当然你可能会质疑用CDN这样会不稳定,那如果CDN的地址是本地呢࿱…...

手机开启应急预警通知 / 地震预警
前言 安卓手机在检测到地震时,将发送地震预警通知,但此设置是默认关闭的,原因是以防引发用户恐慌从而引发安全问题,且开启此设置需要完成指引教程,因此默认关闭此设置。下文介绍如何开启此设置。 开启方法 华为手机开…...

2020年12月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
一、单选题(共25题,每题2分,共50分) 第1题 执行语句print(10==10.0)的结果为? A:10 B:10.0 C:True D:False 正确的答案是 C:True。 解析:在Python中,比较运算符 “==” 用于比较两个值是否相等。在这个特定的比较中,整数10和浮点数10.0在数值上是相等的。…...

遇到无法复现的 Bug
当我们在软件开发过程中遇到无法复现的 Bug 时,这可能会让我们感到头疼和困惑。处理这种 Bug 需要一些技巧和方法来帮助我们更好地解决问题。本篇博客将为大家总结一些常用的技术手段和策略,希望能对开发者们在日常工作中遇到类似问题时提供一些帮助。 …...

虚拟列表的实现(简单易懂)
起因: app开发过程中遇到需要渲染3000行的列表,页面直接卡顿,所以开始研究起虚拟列表 实现前提条件: item项等高列表 实现思路: 首先是dom结构: 定义一个容器(固定高度)&#…...

【WordPress】如何在WordPress中实现真·页面路由
这篇文章也可以在我的博客中查看 页面路由 是什么 页面路由是指从url顺着网线砍到网站内容的途径,说人话就是地址与页面的映射。 就像真实世界的地址一样,我要找你,必须知道你的地址。 在网站中,通过地址找内容的机制…...

Android界面设计与用户体验
Android界面设计与用户体验 1. 引言 在如今竞争激烈的移动应用市场,提供优秀的用户体验成为了应用开发的关键要素。无论应用功能多么强大,如果用户界面设计不合理,用户体验不佳,很可能会导致用户流失。因此,在Androi…...

基于 FFmpeg 的跨平台视频播放器简明教程(八):音画同步
系列文章目录 基于 FFmpeg 的跨平台视频播放器简明教程(一):FFMPEG Conan 环境集成基于 FFmpeg 的跨平台视频播放器简明教程(二):基础知识和解封装(demux)基于 FFmpeg 的跨平台视频…...

【NLP pytorch】基于BiLSTM-CRF模型医疗数据实体识别实战(项目详解)
基于BiLSTM-CRF模型医疗数据实体识别实战 1数据来源与加载1.1 数据来源1.2 数据类别名称和定义1.3 数据介绍2 模型介绍2 数据预处理2.1 数据读取2.2 数据标注2.3 数据集划分2.4 词表和标签的生成3 Dataset和DataLoader3.1 Dataset3.2 DataLoader4 BiLSTM模型定义5 CRF模型6 模型…...

人工智能原理(1)
*请注意,本文仅供学习使用* 目录 一、人工智能发展 1、孕育期 2、摇篮期 3、形成期 4、发展期(1970-1979) 5、实用期 6、稳步发展期 二、何为人工智能 1、智能的主要观点 2、智能定义 3、人工智能定义 三、人工智能研究方法 1、…...

预测成真,国内传来三个消息,中国年轻人变了,创新力产品崛起
中国的年轻人真的变了! 最近,国内传来三个消息,让外媒的预测成真。 第一,奥迪要开始用国产车的平台了。这里需要说明的是新能源汽车,奥迪也曾多次公开表示,承认了当前中国新能源汽车核心技术上的领先。 第…...

维深(Wellsenn):2023中国消费端VR内容开发商调研报告(附下载
关于报告的所有内容,公众【营销人星球】获取下载查看 核心观点 国内互联网大厂商入局VR,字节跳动、网易表态明确。字节跳动2021年收购国内头部VR硬件厂商PICO后,加速构建VR内容生态,2021年 成立海南创见未来当前已推出VR视频应用…...

redis事务管理详解
事务管理 事务管理乐观锁与悲观锁watch命令实现乐观锁watch命令示例 事务管理 Redis 提供了事务管理功能,可以通过 Redis 的 MULTI、EXEC、WATCH 和 DISCARD 命令来实现。 开启事务: 使用 MULTI 命令开始一个事务,表示接下来执行的命令都属于…...