计算机

计算机 · 圈子

8559 位酷友已加入

计算机圈子中包含常用的技术文档、源代码、模型、数据集、学习教程、技术报告等干货资料,加入圈子可以上传、下载资料,也可以使用提问来寻求资料或分享你认为有价值的站外链接~

关注推荐最新

热门标签

资源

基于Hadoop的图像检索之人脸识别系统

基于Hadoop的图像检索之人脸识别系统 基于计算机、网络传输以及图像处理等技术的视频监控系统被广泛应用于城市安防监控网络的建设中。一些视频处理技术,如人脸识别、车牌识别等的使用,使视频监控逐渐走向自动化、智能化,摆脱了传统视频监控中仅凭人肉眼观察不可靠的缺陷。 针对目前监控视频人脸识别系统存在两大问题: 当人脸数据库存在大量人脸数据时,人脸识别速度也会非常慢; 当监控视频资源库中视频数据增多时,检索某一目标人物在摄像头出现的相关信息的速度会越来越慢。  对于这两个问题,虽然能够通过优化算法和采用高性能的服务器来做出一定的缓解,但是,算法优化难度大、耗时,且高性能服务器价格高昂,这与人脸和监控视频数据会持续增多形成矛盾,无法从根本上解决问题。  该项目提出了将当前流行的Hadoop处理技术和监控视频人脸识别技术相结合,开发一套基于Hadoop视频图像检索的人脸识别系统。 主要完成了一下工作:  - 分析了国内外在人脸识别方面的现状,了解了人脸识别的原理。为本课题的探索和系统开发提供了理论和实践指导。  - 在Linux系统下搭建伪分布式的Hadoop运行环境。 Hadoop的设计初衷在于处理海量的结构化的文本数据,故无法处理非结构化的视频和图像数据。本项目在研究Hadoop的输入输出和数据类型的基础上,实现了图像和视频数据的处理,即使用FFmpeg对视频进行格式转换以及将视频按一定的帧速率转化成图片,并结合OpenCV识别技术完成了该系统。  基于以上工作,实现了一套基于Hadoop的视频图像检索的人脸识别系统。通过运行测试,可以较好的识别出视频中的人脸,在处理速度方面相比传统的人脸识别系统有了很大的改进,这将对治安管理、刑侦执法起到更多的辅助作用。 via:https://github.com/hadoopgithipi/Face-Recognition-Hadoop

资源

基于飞桨复现SRGAN模型-一种用于图像超分辨率的生成对抗网络

基于飞桨复现SRGAN模型,对图像进行超分辨率重构 一种用于图像超分辨率(SR)的生成对抗网络(GAN),能够推断4倍放大因子的照片般逼真的自然图像。 文章来源:2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR) 下载链接:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network 前言 在GAN领域中,超分辨率复原一直是计算机视觉领域一个十分热门的研究方向,在商业上也有着很大的用武之地,随着2014年lan J. Ggoodflew那篇惊世骇俗的GAN发表出来,GAN伴随着CNN一起,可谓是乘风破浪,衍生出来琳琅满目的各种应用。 SRGAN,2017年CVPR中备受瞩目的超分辨率论文,把超分辨率的效果带到了一个新的高度,而2017年超分大赛NTIRE的冠军EDSR也是基于SRGAN的变体。对于此篇论文,据说这是第一篇将GAN网络应用到超分领域的论文,很多涉及到图像超分辨率重构的技术博客都有提到过它。其实它的难度并不大,但它的重构思想从学习的角度来说,是能够让我们有很大的收获的。 图像的超分辨率重构技术(Super-Resolution)指的是将给定的低分辨率图像通过算法恢复成相应的高分辨率图像,其主要分为两个大类:一类是使用单张低分辨率图像进行高分辨率图像的重建,一类是使用同一场景的多张低分辨率图像进行高分辨率图像的重建。此篇文章使用的是基于深度学习中的GAN网络对单张图像进行操作的超分辨率重构方法 超分辨重构和去噪、去网格、去模糊等问题是类似的。对于一张低分辨图像,可能会有多张高分辨图像与之对应,因此通常在求解高分辨率图像时会加一个先验信息进行规范化约束。在传统的方法中,通常会通过加入一些先验信息来恢复高分辨率图像,如,插值法、稀疏学习、还有基于回归方法的随机森林等。而基于深度学习的SR方法,则是通过神经网络直接进行从低分辨图像到高分辨图像的端到端的学习。 SRGAN不同于普通的GAN是通过噪声来生成一个真实图片,SRGAN的目的在于将一个低分辨率的图片转化为一个高分辨率的图片。利用感知损失(perceptual loss)和对抗损失(adversarial loss)来提升恢复出的图片的真实感。感知损失是利用卷积神经网络(VGG19)提取出的特征,通过比较生成图片的特征和与目标图片之间的特征差别,使生成图片和目标图片在语义和风格上更相似。简单来说通俗来讲,所要完成的工作就是:通过G网络使低分辨率的图像重建出一张高分辨率的图像,再由D网络判断拿到的生成图与原图之间的差别,当G网络的生成图能够很好的骗过D网络,使之相信此生成图即为原数据集中的图像之一,那么超分辨率重构的网络就实现了。 作者认为,这篇文章之前,主要重建工作都集中在最小化均方重建误差上,这篇文章是生成式对抗网络第一次应用于4倍下采样图像的超分辨重建工作。。由此得到的估计值具有较高的峰值信噪比,但它们通常缺少高频细节,并且在感觉上不令人满意,因为它们无法匹配在更高分辨率下预期的保真度。 为了达到能够在4倍放大因子下推断照片真实自然图像的目的,作者提出了一个由对抗性损失和内容损失组成的感知损失函数,该网络使用经过训练的VGG19网络来区分超分辨率图像和原始照片真实感图像,此外,在像素空间中,又使用了一个由感知相似度驱动的内容丢失,而不是像素空间中的相似性。作者的深度残差网络能够在公共基准上从大量减少采样的图像中恢复照片真实感纹理。用SRGAN获得的MOS分数比用任何最先进的方法得到的结果更接近原始高分辨率图像。 网络结构 SRGAN网络结构如下图(SRGAN还是用SRRESNET来进行超分工作 但增加了一个对抗网络来判断生成的图片是原图还是超分出来的图): 生成器网络的体系结构,每个卷积层对应的内核大小(k)、特征映射数(n)和步长(s)。 在生成网络中,输入是一个低分辨率的图像,先进行卷积、relu,又为了能够更好的网络架构和提取特征,还引入了残差模块,最后再通过特征提取、特征重构,得到输出结果。 鉴别器网络的体系结构,每个卷积层对应的内核大小(k)、特征映射数(n)和步长(s)。 在鉴别网络中,都是些常规的 Cnov、BN、Leaky_Relu、fc,为了对生成网络生成的图像数据进行判断,判断其是否是真实的训练数据中的数据。 为了尽可能地训练出模型的效果,在本项目中直接使用了飞桨的 VGG19网络实现代码,并使用飞桨官方提供的在ImageNet上预训练好的VGG预训练模型,该模型在ImageNet-2012验证集合上的top-1和top-5精度分别为72.56%、90.93%,性能优越。 在本项目的训练过程中能够起到精准提取图像特征信息的作用,缩小生成图与原图的差距,提升生成网络的生成图像效果。 损失函数 论文中还给出了生成器和判别器的损失函数的形式: 生成器的损失函数 $\hat{\theta }G = argmin{\theta_G}\frac{1}{N}\sum_{n=1}^{N}l^{SR}(G_{\theta_G}(I_n^{LR}),I_n^{HR})$ 其中,$l^{SR}()$为本文所提出的感知损失函数,$l^{SR}=l_{VGG}^{SR}+10^{-3}l_{Gen}^{SR}$ 。 内容损失 $l_{VGG}^{SR} = \frac{1}{WH} \sum_{x=1}^W\sum_{y=1}^H (\phi (I^{HR} ){x,y} - \phi (G{\theta {G} } (I^{LR} )){x,y})^2 $; 训练网络时使用均方差损失可以获得较高的峰值信噪比,一般的超分辨率重建方法中,内容损失都选择使用生成图像和目标图像的均方差损失(MSELoss),但是使用均方差损失恢复的图像会丢失很多高频细节。因此,本文先将生成图像和目标图像分别输入到VGG网络中,然后对他们经过VGG后得到的feature map求欧式距离,并将其作为VGG loss。 对抗损失 $l_{Gen}^{SR} = \sum_{n=1}^N (-log D_{\theta {D} }(G{\theta G}(I^{LR})))$; 为了避免当判别器训练较好时生成器出现梯度消失,本文将生成器的损失函数$l{Gen}^{SR}=\sum_{n=1}^N log(1-D_{\theta {D} }(G{\theta _G}(I^{LR})))$进行了修改。 判别器的损失函数为: $ \hat{\theta } {D} = E{p(I^{HR} )} [log D_{\theta {D} }(I^{LR} )]+ E{q(I^{LR} )} [log (1-D_{\theta {D} }(G{\theta _G}(I^{LR} )) )]$ 与普通的生成对抗网络判别器的的损失函数类似。 训练策略 先对 G 网络进行预训练,再将 G 和 D 网络一起训练 结果展示 心得体会 在此篇文章之前,CNN网络在传统的单帧超分辨率重建上就取得了非常好的效果,但是当图像下采样倍数较高时,重建的得到的图片会过于平滑,丢失细节。此篇文章提出的利用GAN来进行超分辨率重建的方法,是第一个能恢复4倍下采样图像的框架。SRGAN这个网络的最大贡献就是使用了生成对抗网络(Generative adversarial network)来训练SRResNet,使其产生的HR图像看起来更加自然,有更好的视觉效果,更接近自然HR图像。 转载自:https://github.com/Eric-Hjx/Paddle_SRGAN

问答

为什么逻辑回归的损失函数具有对数表达式?

逻辑回归的损失函数为 我的问题是将对数表达式用作损失函数的基础是什么?为什么要用“ -log”.

计算机

计算机·圈子   首发

阿托 更新了
资源

SeetaFace2 人脸识别引擎

SeetaFace2 1. 简介 SeetaFace2 人脸识别引擎包括了搭建一套全自动人脸识别系统所需的三个核心模块,即:人脸检测模块 FaceDetector、面部关键点定位模块 FaceLandmarker 以及人脸特征提取与比对模块 FaceRecognizer。 已经两个辅助模块 FaceTracker 和 QualityAssessor 用于人脸跟踪和质量评估。 SeetaFace2 采用标准 C++ 开发,全部模块均不依赖任何第三方库,支持 x86 架构(Windows、Linux)和 ARM 架构(Android)。SeetaFace2 支持的上层应用包括但不限于人脸门禁、无感考勤、人脸比对等。 SeetaFace2 是面向于人脸识别商业落地的里程碑版本,其中人脸检测模块在 FDDB 上的 100 个误检条件下可达到超过 92% 的召回率,面部关键点定位支持 5 点和 81 点定位,1 比 N 模块支持数千人规模底库的人脸识别应用。 与 2016 年开源的 SeetaFace 1.0 相比,SeetaFace2 在速度和精度两个层面上均有数量级的提升。 知人识面辩万物,开源赋能共发展。SeetaFace2 致力于 AI 赋能发展,和行业伙伴一起共同推进人脸识别技术的落地。 2. 编译 2.1 编译依赖 编译工具 For linux GNU Make 工具 GCC 或者 Clang 编译器 For windows MSVC 或者 MinGW. CMake 依赖库 [可选] OpneCV 仅编译例子时需要 依赖架构 CPU 支持 SSE2 和 FMA [可选](x86)或 NENO(ARM)支持- 2.2 编译参数 BUILD_DETECOTOR: 是否编译人脸检测模块。ON:打开;OFF:关闭 BUILD_LANDMARKER: 是否编译面部关键点定位模块。ON:打开;OFF:关闭 BUILD_RECOGNIZER: 是否编译人脸特征提取与比对模块。ON:打开;OFF:关闭 BUILD_EXAMPLE: 是否编译例子。ON:打开;OFF:关闭,打开需要预先安装 OpneCV CMAKE_INSTALL_PREFIX: 安装前缀 SEETA_USE_FMA: 是否启用 FMA 指令。默认关闭。只有目标是x86架构是起作用 SEETA_USE_SSE2: 是否启用 SSE2 指令。window 和 unix 默认为 ON,其它默认为 OFF。 3. 目录结构 4. 模型下载 人脸检测模块 FaceDetector 模型下载链接: MD5 :E88669E5F1301CA56162DE8AEF1FD5D5 百度网盘:https://pan.baidu.com/s/1Dt0M6LXeSe4a0Pjyz5ifkg 提取码:fs8r Dropbox : https://www.dropbox.com/s/cemt9fl48t5igfh/fd_2_00.dat?dl=0 面部特征5点定位模块 FaceLandmarker 模型下载链接: MD5 :877A44AA6F07CB3064AD2828F50F261A 百度网盘:https://pan.baidu.com/s/1MqofXbmTv8MIxnZTDt3h5A 提取码:7861 Dropbox : https://www.dropbox.com/s/noy8tien1gmw165/pd_2_00_pts5.dat?dl=0 面部特征81点定位模块 FaceLandmarker 模型下载链接: MD5 :F3F812F01121B5A80384AF3C35211BDD 百度网盘:https://pan.baidu.com/s/1CCfTGaSg_JSY3cN-R1Myaw 提取码:p8mc Dropbox : https://www.dropbox.com/s/v41lmclaxpwow1d/pd_2_00_pts81.dat?dl=0 人脸特征提取和比对模块 FaceRecognizer 模型下载链接: MD5 :2D637AAD8B1B7AE62154A877EC291C99 百度网盘:https://pan.baidu.com/s/1y2vh_BHtYftR24V4xwAVWg 提取码:pim2 Dropbox : https://www.dropbox.com/s/6aslqcokpljha5j/fr_2_10.dat?dl=0 5. 示例 5.1 本项目自带示例 example/search/example.cpp 示例展示了一套简单且完整的人脸识别的流程,包括: 预注册图像中的人脸到人脸识别底库中(example 中默认注册了"1.jpg"中的人脸); 打开摄像头,检测摄像头画面中的人脸;3.对检测到人脸进行识别,确定所属人脸的身份。 测试者如果想在底库中成功识别出自己的人脸,需要在example.cpp的底库注册列表部分添加以自己名称命名的图片(名称 + .jpg), 并把自己名称命名的图片文件拷贝到程序的运行目录下,重新编译 example 并运行程序,测试识别效果即可。 5.2 已使用本项目的其它项目 FaceRecognizer: https://github.com/KangLin/FaceRecognizer SeetaFace2AndroidDemo: https://github.com/xiaoxiaoazhang/SeetaFace2AndroidDemo 来源https://github.com/seetafaceengine/SeetaFace2

资源

LipSync for Unity3D 根据语音生成口型动画

LipSync是什么? LipSync是一个基于Unity的独立、轻量化口型匹配解决方案。它可以帮助开发者在Unity上,用相对少的时间精力实现效果相对令人满意的“口型匹配”功能。LipSync可以运用已有的人物模型、口型动画以及语音资源,实现即时的口型匹配功能。你只需要告诉LipSync语音数据的来源、带有口型BlendShape的目标对象以及BlendShape属性名,并进行简单的设置,就能够让你的人物随着语音的播放动起他/她/它的嘴巴。 不过LipSync并不是万能的。为了能够愉快而有效地使用LipSync,你需要知道它目前做得到的事情有: 实时地分析语音数据,运用语音识别的一些理论,识别出某一时间帧中这段语音在日语或汉语 元音 事先分析好语音数据,把声学特征识别结果(也就是元音)作为资源文件存储在项目中,运行时直接读取这些数据 根据识别结果,生成动画权重数值,并把它们赋到目标对象上 让你的角色看起来真的像在说话一样 它目前做不到的事情有: 无中生有,在没有BlendShape的目标对象上实现口型匹配 识别出语音中的辅音 分析噪声过于严重的语音数据 分辨某一段声音是语音还是和语音不相关的其他声音 LipSync文件夹中的内容是本插件的主体部分,而UnityChan文件夹中的内容并不是本插件的一部分,是Unity Technology Japan为Unity开发的一个官方形象,它是为了演示LipSync的效果而附带的一套模型资源。 查看实现效果的展示视频, 点击这里, 笔者已经上传到B站。 使用LipSync前需要做什么准备? LipSync需要你提供以下资源: 1) 语音文件 角色使用的语音文件。 为了保证语音识别方面的可靠性,语音中的噪音不能特别大。些许的噪音可以接受,LipSync一定程度上可以帮助剔除。 语音中也不能包含其他非语音的声音,例如背景音乐,环境音效等等。 除此之外没有其他的强制要求,只要是语音都可以使用。日语和汉语的语音可以得到最佳的匹配效果,其他语言的语音也可以使用。对于文件资源的摆放位置,有一个非强制的推荐性要求,即把每一个人的所有语音放置在各自的一个文件夹中。这有利于提高烘焙功能的使用效率。 如果你的开发工程是基于fmod环境的,步骤参见install.md 2) 带有口型BlendShape的3D模型 角色的3D模型,并且需要包括口型的BlendShape。至少每一个元音要对应一个BlendShape属性值,也就是说,在对应日语的情况下,你需要5个BlendShape属性值,对应汉语则需要6个。如果你的语音是这两种语言以外的,可以使用汉语元音的标准。如果你不知道BlendShape是什么,可以结合演示场景参考UnityChan的模型。 如何使用LipSync? 你需要找到你的模型上带有口型BlendShape的那个GameObject。它在Unity里表现为SkinnedMeshRenderer组件。以UnityChan模型为例。把这个GameObject赋予到LipSync的TargetBlendShape上。为了阐述方便,后文我们就把这个“带有口型BlendShape的那个GameObject”称之为“目标对象”。 这里先观察一下这个目标对象,展开BlendShapes项,可以看到它提供的BlendShapes属性值。这个UnityChan模型中提供的口型BlendShape的属性值即为:blendShapes1.MTH_A,blendShapes1.MTH_I,blendShapes1.MTH_U,blendShapes1.MTH_E,blendShapes1.MTH_O,对应的正好是日语中的5个元音。接下来就把这5个属性名一一对应地填到LipSync中的VowelPropertyNames当中。 最后可以进行一些设置。首先是BlendShape属性值共用的最小值和最大值,即PropertyMinValue和PropertyMaxValue,默认值是0和100,你可以根据实际情况进行调整。其次是一些进阶选项,可以看到相较图1,图5中的“Advanced Options”被展开了。 WindowSize的含义是窗口大小,它决定一次性从整个语音数据中截取多长的语音帧进行分析。它必须是2的幂。一般来说,512或1024是比较令人满意的取值,前者性能更加而识别精度稍差,后者则反之。低于512的情况下,虽然性能提升比较明显,但识别精度会变得很低;高于1024的情况下,性能会变得非常差,然而识别精度也不会提高很多。 AmplitudeThreshold的含义是能量阈值,它决定一个数据帧中所有值的总和要大于多少,才会被判断为一个有语音信息的帧。这一设计的作用是剔除无声帧,以减少不必要的识别操作。对于有少量噪音的语音,如果将这个值设得稍大一点,一定程度上就可以起到降噪的作用。 MoveTowardsSpeed的含义是平滑过渡的速度。语音帧与语音帧之间的识别结果,并不是直接就赋予到BlendShape属性值上的,而是经过了平滑过渡操作,实际赋予的属性值是经过插值的。从效果上看,这个速度越低,角色的嘴巴就动得越慢,给人的感觉是不太灵活;反之则越快,给人感觉移动非常夸张。一般来说,这个值可以取在6到10之间。 完成了这些设置值之后,尝试运行一下,你应该就可以看到UnityChan随着语音的播放动起了她的嘴巴。例子中,所识别的语音是日语,正如RecognizerLanguage所示的Japanese。如果你需要识别汉语,可以把RecognizerLanguage项切换成Chinese,此时VowelPropertyNames中会多出一个“v”的元音。除此之外没有其他变化。 以上介绍的都是在运行时即时地进行口型匹配。而在这一类动画相关的技术中,有一个很常用的处理方式——烘焙。以一定的灵活性为代价,把动画信息在开发阶段全部准备好,在运行时直接读取,这样便可在运行时省去所有的识别运算,从而大幅提高性能。LipSync也提供了这样的功能。 首先,先把LipSync组件中的LipSyncMethod切换为Baked,此时你会看到如图的内容。 点击LipSync Baker按钮,会出现如图所示界面。 你可以导入一个文件夹里的语音文件,并把它们的口型匹配数据烘焙到本地文件上。这里利用了Unity的动画系统,输出的文件就是AnimationClip与AnimatorController。 先从AudioClipInputFolderPath开始,这里点击“Browse...”按钮可以选择一个路径。当然,你只能选择位于Assets文件夹内的路径。之后,LipSync会搜索该文件夹内所有的音频文件,并记录到AudioClipList中。AnimatorName是烘焙完毕后,生成的Animator的名称。你可以自行进行指定。TargetRelativePath是为了应对特殊情况,一般来说生成的Animator会被挂载在目标对象上,但是可能会因为某些原因,导致只能挂载在它的某一个父级GameObject。这个TargetRelativePath就是用来指定相对路径用的。通常情况下不会用到它,这里我们选择不填写。 另外,AdvancedOptions里也多出了一项ShiftStepSize,这决定了采样时数据帧与数据帧之间的间隔。在实时匹配时,由于LipSync可以直接采样当前帧(渲染意义上)正在播放的声音片段,所以不需要这一个属性,而烘焙时声音并没有被真正播放,所以需要指定这个值。一般来说,取窗口长度的一半可以得到非常精确的结果,小于这个值的意义不大,烘焙时间却会增长。 全部设置完毕后,你可以点击“Bake”按钮。选择一个Assets文件夹内的路径,即可开始烘焙工作。烘焙工作需要的时间比较长,限于目前采用的计算方法,可能会长于语音文件本身的时间长度,请耐心等待一下。经过漫长的等待后,你可以在刚才指定的路径中找到烘焙结果。 然后,在目标对象上新建一个Animator组件,并把生成的AnimatorController赋予到上面。回到LipSync组件上,将目标对象赋予到TargetAnimator上。最后应该像下图这样。 尝试运行一下,你应该可以看到UnityChan的嘴巴又动了起来。至此,你应该已经会使用LipSync几乎所有的功能了。 LipSync的原理是什么? 1、从AudioSource或者AudioClip处获取语音数据 从AudioSource处获取是实时匹配时采用的方法。AudioSource本身提供了一个GetOutputData函数,可以获取当前正在播放的语音数据段。 从AudioClip处获取是烘焙是采用的方法。AudioClip本身其实是对语音文件的一个封装,可以使用GetData函数直接获得语音数据。 这过程中也包含了分帧与窗口化的步骤。 2、剔除无声帧 从信号处理的角度上说,这一步是一种时域分析方法。对数据帧中的所有值进行求和,如果结果大于用户预设的一个阈值(也就是AmplitudeThreshold),那么就认为这一帧是没有声音的,不对它进行后续处理。这可以节省不必要的分析过程。如果适当调高阈值,一定程度上可以降噪。 3、获取语音数据的频域信息 你在使用一些音乐播放器时,有时候会看到一根根跳动的长条,这就是“频谱”的一种表现方式,频域信息指的就是频谱。这对于语音识别来说是非常重要的信息。实时匹配时,AudioSource的GetSpecturmData函数带来了极大的帮助,这个函数本身可以高效地获取当前播放的语音数据频谱。 然而在烘焙时,并没有这样便利的函数可以用。所以,LipSync借助了一个数学工具——离散余弦变换(DCT),它可以用来获取一个时域信息段的频域信息。它与另一个著名的数学工具——傅里叶变换是等价的,所不同的是余弦变换只获取频率信息,而舍弃了相位信息。实际上这就够了,我们并不需要相位信息。这个数学工具的实现可以在MathToolBox.DiscreteCosineTransform中找到。 4、提取共振峰 人在发声时,肺部收缩送出一股直流空气,经器官流至喉头声门处(即声带),使声带产生振动,并且具有一定的振动周期,从而带动原先的空气发生振动,这可以称为气流的激励过程。之后,空气经过声带以上的主声道部分(包括咽喉、口腔)以及鼻道(包括小舌、鼻腔),不同的发音会使声道的肌肉处在不同的部位,这形成了各种语音的不同音色,这可以称为气流在声道的冲激响应过程。 对于语音识别来说,重要的部分是第二个过程,因为“口型”就是声道形状的一部分。而这一冲激响应过程,在频谱上的表现为若干个凸起的包络峰。这些包络峰出现的频率,就被称为“共振峰频率”,简称为“共振峰”。 一般来说,通过求得一段语音数据的第一、第二共振峰,就可以非常精确地得知这段语音的“元音”是什么。只求第一共振峰,也可以知道大致结果。 LipSync的核心步骤正是如此。提取共振峰的方法是,在前一步骤中获取的频谱上求出局部最大值的最大值,具体实现在MathToolBox.FindLocalLargestPeaks中可以找到。 5、把共振峰映射为元音特征值,进行平滑过渡处理,再赋予到目标对象上 后续步骤则比较容易理解,无非是一些映射操作与平滑过渡处理。平滑过渡的方法直接使用了Mathf.MoveTowards。 我想要改进LipSync,可以做些什么? 目前,有以下几个可以改进的方向: 1、更优化的DCT算法 目前采用的DCT算法,是单线程直接计算了所有需要计算的值,时间复杂度为O(n^2)。这也是为什么烘焙的速度非常慢。一方面,可以考虑借鉴快速傅里叶变换所采用的算法(比如蝶形变换),把时间复杂度降到O(nlogn);另一方面,可以考虑利用多线程计算。还可以考虑对余弦计算结果进行缓存。 2、整体数学运算优化 这可以说是上一个问题的泛化版本。笔者在撰写数学函数时,几乎没有考虑步骤上的优化,所有步骤都很耿直地写上去了,所以应该有许多可以优化的地方。 另外,由于存在着各种浮点运算,对GPU的利用也是一个考虑方向。 3、元音项的数据化,或者是更好的管理方法 如果你阅读过语音识别部分的代码,你可以看到所支持的两种语言的元音项都是写死的,显然这不太“优雅”。笔者的打算是把它们数据化,写到本地文件中,使用时动态进行读取,这既有利于管理,也有利于对更多的语言进行支持。 当然这不一定是最好的管理方法,如果你有什么高见,希望能够提出来。 4、更加精确的语音识别方法 如果你对语音识别有一些研究,你应该知道,目前的语音识别方法中并没有去除基频的影响。如果基频的能量很高,会明显影响共振峰的识别。 来源https://github.com/huailiang/LipSync

资源

用于神经对话生成的自适应多课程学习的代码库

从简单到复杂的学习:用于神经对话生成的自适应多课程学习 此仓库包含AAAI2020论文的初步代码,该论文名为“从简单学习到复杂:用于神经对话生成的自适应多课程学习”。 该代码库建立在ParlAI项目的基础上。检查parlai/agents/adaptive_learning实验模型的实现。基于RL的多课程学习在于parlai/tasks/adaptive_learning。可以在中找到正在运行的脚本projects/adaptive_learning。 框架概述 环境要求 Python3 Pytorch 1.2或更高版本 核心模块的依赖关系列在require.txt中。 数据 放入data/并使用解压缩tar -xzvf AdaptiveLearning.tar.gz 下载地址:https://drive.google.com/file/d/1Lj9R55u-xk1IVJ6uNXOUU0YjKvIURJAY/view?usp=sharing 运行 最后一行projects/adaptive_learning/shell/run.sh指定了训练的初步论点: 此运行将Seq2seq使用数据集将多课程学习框架应用于模型PersonaChat。课程学习的持续时间是11000步骤。 将单一specificity课程对话学习应用到CVAE使用数据集的模型上DailyDialog,课程学习持续时间为8000: train_model cvae daily_dialog specificity 8000 -1 0.2 30 引文 转载自:https://github.com/hengyicai/Adaptive_Multi-curricula_Learning_for_Dialog

资源

使用 Keras 和 tensorflow 实现的Transformer模型

介绍 使用 keras+tensorflow 实现论文"Attention Is All You Need"中的模型Transformer。 数据预处理 这将会把原始分离的英语句子和德语句子进行组装,生成下面的文件: data/en2de.s2s.txt data/en2de.s2s.valid.txt 数据来源:WMT'16 Multimodal Translation: Multi30k (de-en) (http://www.statmt.org/wmt16/multimodal-task.html). 生成字典 examples/tokenizer_test.py 这会生成以下的字典文件: data/dict_en.json data/dict_de.json 注意:默认生成的字典过滤掉了词频数小于5的词语,你可以进行修改。 训练 examples/train_test.py 训练参数和配置可在文件 train_test.py 中找到, 默认模型配置如下: 解码/翻译 可以使用以下方式进行解码: 1.beam_search_text_decode 2.decode_text_fast 3.decode_text 详情见: examples/decode_test.py. 效果 训练效果 以下为使用SGDR作为学习率变化策略,迭代32次的训练效果图: 可以发现迭代30次后,验证集精度达到了70%,由于数据集很小,通过缩小模型规模,应该能得到更高的精确度(如,设置model_dim=256)。 解码效果 1.直接解码decode_text_fast 2.束搜索beam_search_text_decode 源句子如下: `"Two women wearing red and a man coming out of a port @-@ a @-@ potty ." 符号@-@表示这是一个连接左右两词的连接符,即port @-@ a @-@ potty是一个词port-a-potty。这么做只是为了方便训练。 目标句子如下: "Zwei Frauen in Rot und ein Mann , der aus einer transportablen Toilette kommt ." 以束宽3经束搜索后的结果如下: 性能 性能测试时模型使用的配置与默认配置相同 训练时性能 数据集包括 29000 个训练样例, 1014 个验证样例。 解码/翻译性能 注意:最大耗时一般只发生在模型未训练时,即使用一个完全未训练的模型进行解码。 掩码可视化 example/mask_test.py 位置编码可视化 example/position_encoding_test.py 参考 1.https://github.com/Lsdefine/attention-is-all-you-need-keras 2.Transformer 模型的 PyTorch 实现 3.https://www.jiqizhixin.com/articles/Synced-github-implement-project-machine-translation-by-transformer 4.Setting the learning rate of your neural network 转载自:https://github.com/GlassyWing/transformer-keras

资源

java版jieba分词

简介 支持分词模式 搜索模式,用于对用户查询词分词 索引模式,用于对索引文档分词 特性 支持多种分词模式 全角统一转成半角 用户词典功能 conf目录有整理的搜狗细胞词库 因为性能原因,最新的快照版本去除词性标注,也希望有更好的Pull Request可以提供该功能。 新特性:tfidf算法提取关键词 如何使用 演示版 算法 基于trie树结构实现高效词图扫描 生成所有切词可能的有向无环图 DAG 采用动态规划算法计算最佳切词组合 基于HMM模型,采用Viterbi(维特比)算法实现未登录词识别 性能评估 测试机配置 测试文本 测试结果(单线程,对测试文本逐行分词,并循环调用上万次) 转载自:https://github.com/huaban/jieba-analysis

计算机

计算机·圈子   首发

阿托 更新了
资源

【Demo】 AI魔法声音——一个结合AI的变声器

AiSound AiSound AI魔法声音 是一个结合AI的变声器,基于fmod实现,使用fmod来处理音频的变声效果, 支持试听和保存音效文件 核心库 库名 版本 下载地址 fmod 1.10.15 https://fmod.com/download 点击下载 预览 下载 扫码 or 点击下载 来源https://github.com/microshow/AiSound

问答

如何自动调整图像大小使其适合div container?

如何自动调整大图像的大小,使其适合较小的div container,同时保持其宽高比? 比如:当图像插入到编辑器面板上且图像太大而无法容纳在页面上时,图像将自动调整大小。

计算机

计算机·圈子   首发

阿托 更新了
资源

【Demo】疫情期间网民情绪识别比赛baseline

疫情期间网民情绪识别比赛baseline BERT进行端到端的fine-tuning,平台评测F1值0.716。 础的基线,只用了labeled数据,没有利用unlabeled数据,没有调参。 Preinstallation Before launch the script install these packages in your Python3 environment: tensorflow 1.11 建议使用Conda安装 :) 下载Bert中文模型至本地,并更改bert/run.sh中的BERT_BASE_DIR路径。 在datafountain平台上下载数据,解压至本地目录。将数据由gbk转为utf-8编码(vscode或linux shell的iconv命令) 运行数据预处理脚本dataprocess/data_process.py,将数据处理成bert的输入格式。(注意更改代码中的输出路径,并保持输出路径与bert/run.sh中的NCOV_DIR路径一致。 更改bert/run.sh中的OUTPUT_DIR路径为模型及结果输出路径。 Launch the script 环境配好,模型下好之后便可以运行代码了! Links https://github.com/google-research/bert 来源https://github.com/zhengyima/ncov_sentiment

资源

【Demo】通过机器智能生成的音乐和艺术

Magenta是一个研究项目,旨在探索机器学习在艺术和音乐创作过程中的作用。 首先,这涉及开发新的深度学习和强化学习算法,用来生成歌曲,图像,绘图和其他材料。 这是构建智能工具和界面的一种探索,该工具和界面允许艺术家和音乐家使用这些模型扩展(而不是替换!)他们的过程。 Magenta由Google Brain团队的一些研究人员和工程师创立,还有许多人也对该项目做出了重大贡献。 我们使用TensorFlow并在此GitHub上以开源形式发布模型和工具。 如果你想了解有关Magenta的更多信息,请访此博客,我们在该博客中发布技术详细信息。 你也可以加入讨论组。 入门 看看我们针对各种模型的 colab notebooks,其中包括入门笔记。 Magenta.js是不错的模型资源,可以在浏览器中运行和演示。 博客文章和Ableton Live插件在内的更多内容可以在https://magenta.tensorflow.org上找到。 Magenta Repo 安装 使用 开发环境 安装 Magenta使用pip 安装包以便于安装。 建议使用Anaconda进行安装,它可以在任何标准的Python环境中使用。 支持Python 3(> = 3.5)。 本篇说明基于假定你使用得是Anaconda。 自动安装(使用/ Anaconda) 如果你运行的是Mac OS X或Ubuntu,可以尝试使用我们的自动安装脚本。 只需将以下命令粘贴到终端即可。 脚本完成后,打开一个新的终端窗口,保证环境变量的更改生效。 现在可以在Python程序和Jupyter笔记本中使用Magenta库,并且Magenta脚本已在路径中安装。 请注意,每次打开新的终端窗口时,都将需要运行source activate magenta来使用Magenta。 手动安装(不带Anaconda) 如果自动脚本安装失败,或者你想手动安装,请执行以下步骤。 安装Magenta的pip包: 注意:为了安装我们依赖的rtmidi软件包,可能需要安装一些声音库的标头。 在Ubuntu Linux上,以下命令用来安装必要的软件包: 在Fedora Linux上,使用 现在可以在Python程序和Jupyter笔记本中使用Magenta库,并且在路径中已经安装完成Magenta脚本! 使用Magenta 现在可以训练我们的各种模型,并使用它们来生成音乐,音频和图像。也可以通过浏览models目录找到每个模型的说明。 开发环境 如果要在Magenta上进行开发,则需要设置完整的开发环境。 首先,克隆此存储库: 接下来,通过切换到基本目录并执行setup命令来安装依赖项: 现在,你可以照常调用Python来编辑文件并运行脚本。 例如,下边是从基本目录运行melody_rnn_generate脚本的方式: 你也可以使用以下方法安装(可能经过修改的)软件包: 在创建请求请求之前,还请使用以下命令测试您的更改: PIP Release 要为pip构建新版本,请修改该版本,然后运行: 来源https://github.com/magenta/magenta

  • 1
  • 95
  • 96
  • 97
  • 168
前往