人工智能

人工智能 · 圈子

648 位酷友已加入

本圈子收集关于人工智能的各种技术资料,加入圈子可以上传、下载资料,也可以使用提问来寻求资料或分享你认为有价值的站外链接~

关注推荐最新

热门标签

资源

基于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

计算机

计算机·圈子   首发

阿托 更新了
资源

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

资源

【Demo】基于语料库与NLP方法的中文幽默计算与检测项目

项目介绍 幽默多指令人发笑的品质或者具有发笑的能力,它是一种特殊的语言表达方式,是生活中活跃气氛、化解尴尬的重要元素。近年来随着人工智能的快速发展,如何利用计算机技术识别和生成幽默逐渐称为自然语言处理领域研究热点之一,即幽默计算。幽默计算旨在赋予计算机识别、生成幽默的能力,它涉及信息科学、认知语言学、心理学等多个学科的交叉,在人类语言的理解乃至世界文化的交流方面,都具有重要的理论和应用价值。 幽默无处不在,计算机若能够理解各种幽默形式,将会极大程度地提高人机交互系统的性能。 本项目将从中文的幽默性出发,尝试完成以下两个目标: 1)建立起一个中文幽默文本语料库。 2)幽默计算模型的构建包括: 幽默等级识别模型 幽默类型识别模型 隐喻类型识别模型 隐喻情绪识别模型 中文幽默文本语料库的构建 程序主目录:BuildCorpus 语料收集:BuildCorpus/corpus_spider.py 语料整理:BuildCorpus/collect_news.py 相声小品语料:对话集,BuildCorpus/dialog 语料简介 数量:6032个剧本、也称话题集, 352834条对话 对话举例: 中文幽默计算模型 模型思想:采用四层双向lstm进行网络搭建,给出一个初步的baseline.以下是训练实际情况. 模型 训练集 测试集 训练集准确率 测试集准确率 备注 模型名称 幽默等级 6436 1610 0.8891 0.6137 5分类 BiLSTM 幽默类型 5938 1460 0.9357 0.7096 3分类 BiLSTM 幽默类型 5938 1460 0.9357 0.7356 3分类 CNN 幽默类型 5938 1460 0.9357 0.7103 3分类 CNN-ATT 隐喻类别 3515 879 0.9166 0.8089 2分类 BiLSTM 隐喻情绪 2904 726 0.8134 0.5399 7分类 BiLSTM 总结 一直在想如何更多地从社会语言学的角度去进行自然语言处理的研究和探索工作,幽默计算可以是其中一个,本项目是对该想法的一个实现. 本项目完成了幽默语料库的构建工作,并使用基本的双向lstm模型,训练了四个模型,准确率还有很大优化空间 本项目后期将逐步加入Attention等机制,对现有模型基础进行更新,尝试是否可以进一步提高准确性 本项目的受到大连理工大学信息检索实验室工作的启发. 来源https://github.com/liuhuanyong/ChineseHumorSentiment

资源

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

从简单到复杂的学习:用于神经对话生成的自适应多课程学习 此仓库包含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

计算机

计算机·圈子   首发

阿托 更新了
资源

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

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

计算机

计算机·圈子   首发

阿托 更新了
资源

【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

资源

个性化新闻推荐系统

个性化新闻推荐系统 说明 本推荐系统使用的推荐算法包括协同过滤(Collaborative Filtering)、基于内容相似度的推荐(Content-based Recommendation)与热点新闻推荐(Hot News Recommendation): 协同过滤的实现依托于Mahout的提供库; 基于内容的相似度推荐在原始算法上基于相关论文做了自主的改进; 热点新闻推荐顾名思义是取最近被最多用户浏览过的新闻进行推荐。 主要使用的库(Lib): Ansj:基于内容的推荐部分用以分词,以及其内含的TFIDF算法。 Quartz:推荐系统定时运行的设定。 Mahout:使用内置的协同过滤算法。 Jfinal:使用内置的ActiveRecord与Db工具,对推荐系统中的数据库表做了实体类映射,以简化数据库相关操作。 本推荐系统需要基于【新闻模块】使用,此处对于【新闻模块】的定义是:**有规律地进行新闻采集,并通过公共平台对用户进行新闻展示与推送的应用。**当然,这是实际应用的需求,如果只是自己做研究或者实验的话,可以只使用测试数据即可。 使用 预备工作 数据库配合 (该步骤主要是为了说明推荐系统要求交互的数据。真实建库的话,直接在新建的数据库中运行测试数据,即可完成所有建表工作,附带提供的测试数据。) 本推荐系统目前只支持与MYSQL数据库进行交互 本系统需要与五个表进行交互:用户表(users),新闻表(news),新闻模块表(newsmodules),浏览记录表(newslogs),推荐结果表(Recommendations)。 用户表users 存储用户基本信息的表。要求至少拥有两个字段:用户id(id:bigint),用户喜好关键词列表(pref_list:json),用户最近登录时间(latest_log_time:timestamp)。 新闻表news 存储新闻基本信息的表。要求至少拥有三个字段:新闻id(id:bigint),新闻文本内容(content:text),所属模块(module_id)。 新闻模块表newsmodules 存储新闻模块信息的表。要求至少拥有两个字段:模块id(id:int),模块名称(name:text),抓取时间/新闻日期(news_time:timestamp)。 浏览记录表newslogs 存储用户浏览新闻记录的表。要求至少拥有三个字段:记录id(id:bigint),用户id(user_id:bigint),新闻id(news_id:bigint),浏览时间(view_time:timestamp),用户对新闻的偏好程度(prefer_degree[0:仅仅浏览,1:评论,2:收藏])。 推荐结果表Recommendations 存储推荐系统为用户生成的推荐结果及用户反馈的表。要求至少拥有五个字段:推荐结果id(id:bigint),用户id(user_id:bigint),新闻id(news_id:bigint),推荐结果生成时间戳(derive_time:timestamp),用户反馈(feedback:bit[0:用户未浏览,1:用户进行了浏览]),结果生成的对应推荐算法(derive_algorithm:int[0:协同过滤,1:基于内容的推荐,2:热点新闻推荐]) 数据库连接配置 在项目根目录下的res目录下,修改dbconfig.properties文件中有关数据库的配置: 注意,数据库的编码设置应为utf8mb4。(mb4支持emoji字符) 系统启动-Quick Start 完成数据库配置后,依次四个步骤: 1.在com.qianxinyao.TomNewsRecommender包下,找到类Main; 2.选择推荐算法。设置boolean类型的enableCB,enableCF,enableHR变量,分别代表推荐过程中是否启用协同过滤推荐算法、基于内容的推荐算法、基于热点新闻的推荐算法。若均设为true,表示三种算法均工作,一起为用户生成推荐结果; 3.选择推荐对象。推荐对象分为三种:全体用户,活跃用户(最近一段时间有登录行为)与自定义用户(自己指定的用户),若选择自定义用户,需要构建包含目标用户id(long)的List; 4.选择系统运行方式。运行方式分为两种:一次运行和定时运行。一次运行即只为用户进行一次推荐生成,生成结束后则系统停止,若要再生成推荐,需要重新启动系统。而定时运行则可以定时为用户生成推荐结果,若不强制停止系统,则系统会一直运行下去。(定时运行时间在paraConfig.properties文件中设定) 以下是示例代码: 日常使用 系统运行的各类参数都可以在根目录下src/main/res目录下的paraConfig.properties文件中进行配置。默认配置是推荐配置。 若需要推荐系统能在每次生成有效的推荐,只要【新闻模块】保持以一定频率抓取一定量的新闻并入库news表。(最好与推荐系统定时推荐的频率相同,并在推荐系统运行之前完成一次抓取,推荐每天抓取一次新闻,并进行一次推荐生成。) 注意:入库的新闻要标注module_id,详情可参见数据库表与com.qianxinyao.TomNewsRecommender包下的NewsScraper类中的代码。 测试数据 在Mysql数据库中运行data.sql中的sql语句,可生成数据库结构与测试数据。 测试数据中包含以下几个部分: users表:7个测试用户 news表:306个2017-12-12日从网易首页抓取的测试新闻 newsmodules表:17个测试模块 newslogs:测试推荐算法效果用的9条浏览记录 要查看推荐系统在测试数据上运行的效果,只需在Main类下执行: 预期的推荐生成结果如下: 若对测试数据进行一次协同过滤,将生成0条推荐。 若对测试数据进行一次基于内容的推荐,将为用户1(id=1)推荐85,87,89,104这四条新闻(有重复标题的新闻,新闻标题中的“合同”关键词匹配上了用户的喜好关键词),为用户2推荐89新闻(重复标题的新闻),推荐用户3推荐87,85,100这三条新闻(新闻标题中的“合同”关键词匹配上了用户的喜好关键词)。 若对测试数据进行一次基于热点新闻的推荐,将分别为用户1推荐103,104,为用户2推荐100,104,为用户3推荐100,101,因为最近被浏览得最多的新闻就是这三个拥有浏览记录的用户看过的那些新闻(100,101,102,103,104)。 额外说明 1.com.qianxinyao.TomNewsRecommender下的NewsScraper类是抓取网易的测试新闻时用的类,大家也可以用这个类继续采集新闻。该类默认对网易新闻首页的所有新闻进行一次抓取入库。 2.协同过滤的效果目前不太稳定/可控,因为采用的是Mahout内置的协同过滤工具。一般来说,新闻模块的活跃用户越多,则协同过滤效果越好,也越明显。若有需求,我会在后期自己实现能稳定生成指定数量的推荐结果的协同过滤算法。 3.一般当协同过滤与基于内容的推荐算法生成的推荐数目不足时,可以用基于热点新闻的推荐进行数量补充。 转载自:https://github.com/bluemapleman/NewsRecommendSystem

资源

基于tensorflow深度学习的中文的命名实体识别

NER 当前版本基于双向循环神经网络(BiRNN) + 条件随机场(CRF)来完成实体的标注。 基本思路是利用深度神经网络提取特征,从而避免了手动提取特征的麻烦。 第二部和传统的方式一样,使用CRF在做最后的标注。 该程序使用Tensorflow完成,使用了当前较新的DataSet API,使数据预处理和feed更优雅。 由于使用了新的API, Tensorflow版本必须大于1.2.0,代码升级后使用的是TensorFlow1.4,不确定原来Tensorflow1.2是否还兼容。 如何使用? 建议安装tensorflow >= 1.4.1 提供训练所需的数据,具体格式在resource文件夹里有展示。但是需要自行分词。只需提供3个文件: source.txt target.txt 和 预训练的词向量。 训练词向量,训练工具可以是gensim的word2vector或者glove等等,然后将词和对应的词向量以以下格式保存。 具体格式是: 单词A:0.001,0.001,0.001,.... 单词B:0.001,0.001,0.001,.... 单词C:0.001,0.001,0.001,.... . . . 有些训练工具得出的文件结果就是以上格式不需要修改. 程序默认embedding size是300, 可以按需求做更改 (注意:训练词向量的数据量越大越好,不只限于当前语聊,如果需要训练好的词向量可以联系作者。) 修改config.py里的文件存路径,所有的配置都在这个文件里。 训练:修改config.py tf.app.flags.DEFINE_string("action", 'train', "train | predict") $ python rnn.py

资源

基于字符级卷积神经网络的细粒度的中文情感分析以及具体的应用

C-CNN-for-Chinese-Sentiment-Analysis 一个简单的NLP项目(文本情感分析)的flask后端API,修改了全局model load的方式,增加了模型推理的速度,使用nginx搭配Gunicorn启动Flask,使用虚拟环境搭配sh的启动方式,可以直接对model进行一键重启,并有错误日志监控。 使用方法 首先在服务器上部署虚拟环境 ,假设虚拟环境在/home,cd /home 进入home 在hoem文件夹中使用python3 -m venv v1创建虚拟环境,v1就是虚拟环境的名字,然后使用souce v1/bin/activate加载虚拟环境 在虚拟环境下使用pip install -r requirement.txt 安装所需要的库,然后使用chmod +777 restart.sh部署模型的后端 使用ip:8000/predict是post的地址,使用python C-CNN-SA-client.py即可模拟请求,注意模型第一次初始化的时间因为需要加载预训练模型,推理速度有些慢,目前单机单线曾运行的正常推理速度在100ms之内,多进程部署会继续提速 代码结构:使用前后分离的结构,完全使用Python实现 C-CNN-SA-server.py表示后端的model api,直接通过get传参的形式进行,直接搭配nginx+Gunicorn部署即可 C-CNN-SA-client.py表示模型前端的调用,传入用户的UGC内容,然后使用TextCNN的模型进行识别,模型第一次初始化的时间因为需要加载预训练模型,推理速度有些慢,目前单机单线曾运行的正常推理速度在100ms之内,多进程部署会继续提速 后端启动打印的log: 前端启动打印的结果: Jupyter notebook 打印的结果: 本地Pycharm输出的结果: 基于字符级卷积神经的中文情感分析: 1.将顾客打分和评论情感进行两极映射,使用数据自动标注和基于弱监督预训练的数据增强方式自动扩充和优化数据集,实验证实了在情感分类中,使用本文的字符级卷积神经网络(C-CNN-SA)可以在不依赖分词的情况下,达到的精度和 F 值均高于词级粒度 2.在字符级向量化分类模型中,结果显示卷积神经网络在短文本情感分类中效果最好,字符级卷积神经网络在训练速度和效果上优势明显 3.模型的最后一层改写输出为积极标签的概率,这种输出方式符合情感强度的表达,即输出0.9位这段文字的情感强度,一般大于0.5即视为积极,数字越大,强度越强烈,反则反之,文本分数为0.1的则为消极情感,极性较强 转载自:https://github.com/CarryChang/C-CNN-for-Chinese-Sentiment-Analysis

  • 1
  • 21
  • 22
  • 23
  • 46
前往