毕业设计

毕业设计 · 圈子

5541 位酷友已加入

本圈子收集理工类毕业设计与毕业论文,本科、硕士、博士各阶段的都可以,上传时请尽量注明毕设的概述信息~加入圈子可以上传、下载资料,也可以使用提问来寻求资料或分享你认为有价值的站外链接~

关注推荐最新

热门标签

资源

【Demo】基于NLP方法的keyinfo提取的文本内容图示器

基于NLP方法的keyinfo提取的文本内容图示器,Text Content Grapher based on keyinfo extraction by NLP method。 输入一篇文档,将文档进行关键信息提取,进行结构化,并最终组织成图谱组织形式,形成对文章语义信息的图谱化展示。 项目介绍 如何用图谱和结构化的方式,即以简洁的方式对输入的文本内容进行最佳的语义表示是个难题。 本项目将对这一问题进行尝试,采用的方法为:输入一篇文档,将文档进行关键信息提取,并进行结构化,并最终组织成图谱组织形式,形成对文章语义信息的图谱化展示。 使用方式 结果保存在graph.html文件当中。 事件举例 1)中兴事件 2)魏则西事件 3)雷洋事件 4)同学杀人事件 总结 1)如何用图谱和结构化的方式,即以简洁的方式对输入的文本内容进行最佳的语义表示是个难题。 2)本项目采用了高频词,关键词,命名实体识别,主谓宾短语识别等抽取方式,并尝试将三类信息进行图谱组织表示,这种表示方式是一种尝试。 3)命名实体识别以及关键信息抽取受限于NLP的性能,在算法和方式上还存在多处不足。 来源https://github.com/liuhuanyong/TextGrapher

资源

【Demo】基于语义分割的矿区无人机影像地物提取实验

基于语义分割的矿区无人机影像地物提取实验 1. 实验数据介绍 无人机拍摄的高分辨率矿区影像图 实验室进行标注的对应label v0219版本:进行裁剪后的640 x 640的图像与label数据 v0225&v0301版本及之后:进行裁剪后的320 x 320的图像与label数据,并更换测试集 v0607及所有详细数据调整情况:实验数据版本调整 2. 实验环境介绍 GPU等服务器资源不加介绍 Python3.6、Pytorch、OpenCV、torchvision、numpy等必备环境 图像切割工具包GDAL:仅在win系统下可运行 3. 实验流程介绍 原图数据和标注好的label数据,label是灰度的图像,且每个像素属于该类(0-3)共四类 切割原图和相应的label数据为640 x 640的图像,后期改为320大小进行实验 将切割好的原图和label对应好,使用代码进行可视化(因为标注的label是灰度,直观上看是黑色一片) 对数据进行数据增强,切割完成才有对应的几百张数据,增强至几千张 增强后的数据也要一对一对应好,建议一开始就取两者相同的图像名,使用可视化进行测试 数据划分,分为训练集、验证集、测试集;按照6:2:2的比例 搭建网络代码,使用Pytorch搭建网络,后期加入多种trick进行测试 编写train.py训练代码,写好训练流程、保存模型、保存loss等信息 训练完成之后,使用保存的模型进行预测,对预测出的图片进行涂色,使之可视化 根据预测结果进行kappa系数、mIoU指标的计算 4. 实验部分代码简介 数据简介:以一张大图和对应的label为例,可视化label以便查看原始数据 数据切割:介绍有关tif文件的切割,以及转换tif格式为png格式 灰度label可视化:由于label是1通道的图像,直观上是黑色图像,写代码使得同类别像素一个颜色进行可视化 数据增强_Data_Augmentation.py:离线数据增强,对图像进行随机旋转、颜色抖动、高斯噪声处理; 数据载入及数据划分:v0304版本之前的数据载入方式,使用简单留出法划分训练集、验证集 基于k折交叉验证方式的数据载入及数据划分:基于k折交叉验证,避免了因偶然因素引起的验证集的不同(验证集随机划分,每次实验结果都会有影响) deeplabv3.py:基于pytorch的deeplab_v3网络搭建代码 deeplabv3论文笔记:论文Rethinking Atrous Convolution for Semantic Image Segmentation的阅读笔记 train.py:v0304版本之前训练程序的代码,基于简单留出验证 train_kfold.py:基于交叉验证方式的训练程序的代码 predictv0217.py:使用生成的训练模型来预测,并给预测图片进行涂色显示 MIoU指标计算:使用PyTorch基于混淆矩阵计算MIoU、Acc、类别Acc等指标 Kappa系数计算:使用PyTorch基于混淆矩阵计算Kappa系数评价指标 5. 实验版本数据记录 本实验有多个版本,具体实验详情如下: 使用图像增强进行训练集的生成,640大小的图像:训练集1944张、验证集648张、测试集162张 v0225版本&v0301版本,320大小的图像:训练集9072张、验证集2268张、测试集378张 v0607版本之后:第三次调整数据;使用dataset3 v0923版本之后:加入dsm高程数据;使用dataset4 v1012版本之后:加入了新数据;使用dataset5 图像的预处理:无标准化、只进行了归一化 损失函数:CrossEntropyLoss 优化器:SGD、lr=1e-3、动量=0.9; v0219版本测试Adam优化器、lr=1e-3 v0225版本&v0301版本:Adam优化器、lr=1e-3 v0225版本:deeplabv3-resnet152 V3p-152: deeplabv3+-resnet152 + 5折交叉验证 DANet_res:danet-resnet152 + 5折交叉验证 Deeplabv3_dan:deeplabv3-dan-resnet152 + 5折交叉验证 CCNet0403:ccnet-resnet152 + 5折交叉验证 CCNet0509:deeplabv3-ccnet-resnet152 + 5折交叉验证 ResNeSt0518:deeplabv3-resnest152 + 5折交叉验证(此代码修改自resnest分类网络代码) ResNeSt0525:deeplabv3-resnest101 + 5折交叉验证(此代码修改自resnest用于分割的代码) CCNet0607: deeplabv3-ccnet-resnet152 + 5折交叉验证 + 第三次调整数据 + 使用weight减轻样本不均衡 ACNet0923: ACNet-resnet50 + 5折交叉验证 + 加入dsm高程信息 + 使用weight减轻样本不均衡 + 40 ACNet0925: ACNet-resnet101 + 5折交叉验证 + 加入dsm高程信息 + 使用weight减轻样本不均衡 + 40 ACNet0927: ACNet-resnet50 + CCNet替换decode的agant层 + 5折交叉验证 + 加入dsm高程信息 + 使用weight减轻样本不均衡 + 45 ACNet0928: ACNet-resnet50 + CCNet替换原通道注意力模块 + 5折交叉验证 + 加入dsm高程信息 + 使用weight减轻样本不均衡 + 45 ACNet0930: ACNet-resnet50 + CBAM替换原通道注意力模块 + 5折交叉验证 + 加入dsm高程信息 + 使用weight减轻样本不均衡 + 45 ACNet1002: ACNet-resnet50 + 5折交叉验证 + 加入dsm高程信息 + 使用weight减轻样本不均衡 + 40 + ACNet0923对照实验测试Focalloss效果 ACNet1004: ACNet_del_M_model-resnet50 + 5折交叉验证 + 加入dsm高程信息 + 使用weight减轻样本不均衡 + 40 ACNet1005: ACNet1004对照实验 + torch.cat代替+融合方式;比较两者融合的效果好坏 ACNet1006: ACNet1004对照实验 + CC_Moudle代替上采样过程中的4个agant层 ACNet1008: ACNet1004对照实验 + CC_Moudle代替上采样过程中的第1个agant层 ACNet1009: ACNet1004对照实验 + m0-m4融合的特征加入到RGB分支 ACNet1010: ACNet1004对照实验 + sk-resnet50网络替换se-resnet50 ACNet1012: ACNet0923网络结构 + 新的dataset5数据集 ACNet1014: ACNet1004网络结构 + 新的dataset5数据集 ACNet1016: ACNet1014对照实验 + 编码器的最后融合前添加ASPP模块 ACNet1021: ACNet1014对照实验 + 将高程数据的分支的通道注意力改为空间注意力 ACNet1023: ACNet1014对照实验 + 将RGB数据的分支的通道注意力改为通道与空间注意力串行 ACNet1025: ACNet1014对照实验 + 替换注意力机制中的一个卷积为两个卷积层 ACNet1029: ACNet1014对照实验 + 将RGB数据的分支的通道注意力改为通道与空间注意力并行 ACNet1101: ACNet1014对照实验 + 删除了第一个卷积层之后的注意力机制与融合 + 删除对下采样的指导 ACNet1103: ACNet1014对照实验 + 将之前的agant层替换为金字塔池化模块ppm + sizes==(1,2,5,10) ACNet1106: ACNet1014对照实验 + 将之前的agant层替换为金字塔池化模块ppm + sizes==(1,2,5) ACNet1110: ACNet1014对照实验 + 将RGB分支和高程分支的通道注意力改为通道与空间注意力并行 ACNet1113: ACNet1014对照实验 + 将RGB分支的通道注意力改为通道与空间注意力并行,高程分支为串行 5.1 实验版本记录 & 一些想法 数据增强加入随机裁剪操作,并双线性插值pad至320大小(不能pad,标签pad就不是真实值),投入训练 随机裁剪数据至192大小,没有pad,和320大小的数据一起当做训练集,出现错误提示:一个batch的数据,[B,C,H,W]必须一致,由于320和192大小的数据掺杂,所以报错。因为实验使用离线的数据增强 因数据集中样本数量不平衡,测试weighted Cross Entropy-Loss以及Focal-Loss 使用CCNet单独训练 v0403版本:只使用了ccnet注意力模块的输出上采样,结果为不收敛,但是使用epoch-8.pth测试有点效果 后期测试:将x与x_dsn特征融合,进行测试,测试结果如下,可以看出较danet单独训练结果稍好,车辆acc例外 CCNet与deeplabv3共同使用,将注意力模块加入deeplabv3 v0509版本:将ccnet模块与aspp模块并行,cat两个结果,最后进行分割。整体Acc、MIoU、Kappa都达到了最高 v0509版本:只有道路和车辆的准确率低于以往的实验 v0607版本:测试Cross Entropy-Loss加入权重[0.1, 0.8, 1.0, 1.0] 测试到epoch12,由于服务器原因程序中断,查看log,在训练集、验证集上的loss都较之前增大 修改权重,根据训练数据集,算出真正的像素比例值,调整权重,重新训练 此次效果很好,其中明显在预测图中【道路】的识别率增大,且指标上涨明显 DAN网络单独训练 danet_drn_v0408版本:output包括feat_sum、pam_out、cam_out,采用辅助loss训练,结果一塌糊涂 danet_v0408版本:更换backbone网络为resnet-152,替换deeplabv3的aspp模块,不使用辅助loss,使用feat_sum进行结果的分割,结果详见下表Danet0408 DAN模块并行加入deeplabv3网络中,实验数据如下所示 将deeplabv3的backbone网络Resnet换为ResNeSt,目前测试版本:resnest-v0518 此版本:根据代码修改,去除aspp后的层,模仿deeplabv3-resnet进行修改,效果一般,仅仅提升了道路的识别 根据@张航作者的代码进行更改得出,deeplabv3-resnest101,已测试 目前的实验目标:提高车辙的识别率(道路的标注中,有一部分是车轮轧过的车辙),最怀疑是数据量不够 思路1:加大数据量,如下进行的新的数据增强; 思路2:调整损失函数,加入weight权重,减轻样本数目不平衡问题; 实验结果有较大的提升,见下结果 关于数据的调整:重新审视了代码,测试了增强的结果;其中,颜色抖动、随机旋转有效;高斯噪声处理像素值改变小; 在原训练数据上新添加如下:左右翻转图像;上下翻转图像;其中各1890张,共3780张; 更新:删除了反转的图像中全黑的label,即全是背景的label;(减轻一下样本不均衡) 有关第三次数据调整,详见issue-数据调整汇总 5.2 基于RGB与高程数据的语义分割实验 数据处理部分 Depth原始数据(高程数据)是32位的tiff格式图像,需转换为8位的tiff格式图,使用python的代码直接转换会线性压缩图像的对比性,所以要先找到图像像素的极值,将其像素之间的差做出来,再使用代码转换为uint8文件。转换代码地址:32to8.py png切割代码:png_crop.py 在dataset3中有筛选出的特征较均衡的图像,使用代码筛选切割好的dsm高程数据;代码:file_find.py 基于dataset3加入dsm高程数据:dataset4的调整记录 代码详见上方链接 5.3 test测试数据集-各版本结果对比 版本&指标 Acc MIoU Kappa 背景 房屋 道路 车辆 V0225 0.9562 0.7864 0.8477 0.9847 0.8531 0.8898 0.7269 V0301 0.9545 0.7740 0.8429 0.9815 0.8849 0.9037 0.6313 V0304 0.9555 0.7777 0.8470 0.9816 0.8529 0.9086 0.7151 V3p-101 0.9544 0.7706 0.8427 0.9785 0.8704 0.9165 0.5758 V3p-152 0.9525 0.7582 0.8317 0.9860 0.8235 0.9111 0.6009 Danet0408 0.9294 0.6762 0.7347 0.9818 0.5991 0.8409 0.4458 Danet0420 0.9497 0.7611 0.8276 0.9732 0.8232 0.9101 0.6559 CCnet0403 0.9412 0.6846 0.7845 0.9876 0.7803 0.9252 0.4353 CCnet0509 0.9593 0.7947 0.8593 0.9863 0.8818 0.8856 0.6740 ResNeSt0518 0.9437 0.7143 0.8057 0.9765 0.8315 0.9184 0.4154 ResNeSt0525 0.9525 0.7601 0.8363 0.9763 0.8725 0.8192 0.5519 CCNet0607 0.9603 0.8057 0.8684 0.9722 0.8907 0.9216 0.7745 ACNet0923 0.9635 0.8220 0.8802 0.9710 0.9191 0.9588 0.8167 ACNet0925 0.9583 0.8016 0.8625 0.9716 0.9060 0.9002 0.7994 ACNet0927 0.9573 0.7935 0.8618 0.9677 0.9415 0.9521 0.8032 ACNet0928 0.9352 0.7172 0.7878 0.9491 0.8509 0.9534 0.6594 ACNet0930 0.9616 0.8192 0.8733 0.9744 0.9113 0.9472 0.8420 ACNet1002 0.9492 0.7681 0.8355 0.9634 0.8688 0.9394 0.7913 ACNet1004 0.9638 0.8204 0.8807 0.9713 0.9229 0.9643 0.8317 ACNet1005 0.9619 0.8065 0.8740 0.9715 0.9288 0.9425 0.7376 ACNet1006 0.9537 0.7853 0.8518 0.9585 0.9420 0.9505 0.7951 ACNet1008 0.9642 0.8175 0.8806 0.9771 0.9317 0.9386 0.7271 ACNet1009 0.9627 0.8099 0.8758 0.9760 0.8999 0.9133 0.7584 ACNet1010 0.9587 0.7969 0.8655 0.9710 0.9331 0.9376 0.7433 ACNet1012 0.9528 0.7844 0.8477 0.9720 0.9036 0.8208 0.8036 ACNet1014 0.9580 0.7948 0.8622 0.9753 0.9214 0.8318 0.7961 ACNet1016 0.9534 0.7837 0.8434 0.9750 0.8340 0.9580 0.7566 ACNet1021 0.9481 0.7560 0.8329 0.9588 0.9319 0.9375 0.6947 ACNet1023 0.9513 0.7653 0.8405 0.9673 0.9179 0.9373 0.7573 ACNet1025 0.9483 0.7635 0.8231 0.9764 0.7607 0.8985 0.7280 ACNet1029 0.9553 0.7863 0.8539 0.9738 0.9123 0.8204 0.7964 ACNet1101 0.9494 0.7685 0.8379 0.9603 0.9339 0.9377 0.7849 ACNet1103 0.9561 0.7816 0.8545 0.9722 0.8957 0.9162 0.7634 ACNet1106 0.9571 0.7802 0.8543 0.9800 0.8832 0.9148 0.6309 ACNet1110 0.9544 0.7848 0.8479 0.9733 0.8983 0.8243 0.8057 ACNet1113 0.9530 0.7833 0.8435 0.9676 0.8729 0.9304 0.7828 ACNet1117 0.9613 0.8102 0.8724 0.9774 0.9154 0.8719 0.8009 6. 实验分割结果展示 ACNet-0923版本实验预测图: 7. 实验优化问题记录 7.1 实验优化问题解决记录-MIoU-v0217 MIoU数据:MIoUData.py:读取label和predict图像,以tensor形式,batch_size=4传入----v0210 MIoU的计算:testMIoU.py:将传入的tensor转为np的array,再执行flatten()进行一维化,每4个图像进行计算miou,最后求平均的miou 问题:计算得到的MIoU都为1.0,怀疑原因,中间的float强转int,最后得到的数值都为1 解决v0217:修改读入方式,使用CV2直接读入,不变为tensor,详见MIoUCalv0217.py,MIoUDatav0217.py 7.3 预测问题-已解决v0217 v0217版本:修改预测方法,以一张一张读入进行预测,解决之前的大部分涂色失败问题。效果如下: 来源https://github.com/yearing1017/UAVI_Seg_Pytorch

资源

【Demo】利用Python实现酒店评论的中文情感分析

利用Python实现酒店评论的情感分析 情感极性分析,即情感分类,对带有主观情感色彩的文本进行分析、归纳。情感极性分析主要有两种分类方法:基于情感知识的方法和基于机器学习的方法。基于情感知识的方法通过一些已有的情感词典计算文本的情感极性(正向或负向),其方法是统计文本中出现的正、负向情感词数目或情感词的情感值来判断文本情感类别;基于机器学习的方法利用机器学习算法训练已标注情感类别的训练数据集训练分类模型,再通过分类模型预测文本所属情感分类。本文采用机器学习方法实现对酒店评论数据的情感分类,利用Python语言实现情感分类模型的构建和预测,不包含理论部分,旨在通过实践一步步了解、实现中文情感极性分析。 开发环境准备 1.Python环境 在python官网https://www.python.org/downloads/ 下载计算机对应的python版本,本人使用的是Python2.7.13的版本。 2.第三方模块 本实例代码的实现使用到了多个著名的第三方模块,主要模块如下所示: 1)Jieba 目前使用最为广泛的中文分词组件。下载地址:https://pypi.python.org/pypi/jieba/ 2)Gensim 用于主题模型、文档索引和大型语料相似度索引的python库,主要用于自然语言处理(NLP)和信息检索(IR)。下载地址:https://pypi.python.org/pypi/gensim 本实例中的维基中文语料处理和中文词向量模型构建需要用到该模块。 3)Pandas 用于高效处理大型数据集、执行数据分析任务的python库,是基于Numpy的工具包。下载地址:https://pypi.python.org/pypi/pandas/0.20.1 4)Numpy 用于存储和处理大型矩阵的工具包。下载地址:https://pypi.python.org/pypi/numpy 5)Scikit-learn 用于机器学习的python工具包,python模块引用名字为sklearn,安装前还需要Numpy和Scipy两个Python库。官网地址:http://scikit-learn.org/stable/ 6)Matplotlib Matplotlib是一个python的图形框架,用于绘制二维图形。下载地址:https://pypi.python.org/pypi/matplotlib 7)Tensorflow Tensorflow是一个采用数据流图用于数值计算的开源软件库,用于人工智能领域。 官网地址:http://www.tensorfly.cn/ 下载地址:https://pypi.python.org/pypi/tensorflow/1.1.0 数据获取 1.停用词词典 本文使用中科院计算所中文自然语言处理开放平台发布的中文停用词表,包含了1208个停用词。下载地址:http://www.hicode.cc/download/view-software-13784.html 2.正负向语料库 文本从http://www.datatang.com/data/11936 下载“有关中文情感挖掘的酒店评论语料”作为训练集与测试集,该语料包含了4种语料子集,本文选用正负各1000的平衡语料(ChnSentiCorp_htl_ba_2000)作为数据集进行分析。 数据预处理 1.正负向语料预处理 下载并解压ChnSentiCorp_htl_ba_2000.rar文件,得到的文件夹中包含neg(负向语料)和pos(正向语料)两个文件夹,而文件夹中的每一篇评论为一个txt文档,为了方便之后的操作,需要把正向和负向评论分别规整到对应的一个txt文件中,即正向语料的集合文档(命名为2000_pos.txt)和负向语料的集合文档(命名为2000_neg.txt)。 具体Python实现代码如下所示: 运行完成后得到2000_pos.txt和2000_neg.txt两个文本文件,分别存放正向评论和负向评论,每篇评论为一行。文档部分截图如下所示: 2.中文文本分词 本文采用结巴分词分别对正向语料和负向语料进行分词处理。特别注意,在执行代码前需要把txt源文件手动转化成UTF-8格式,否则会报中文编码的错误。在进行分词前,需要对文本进行去除数字、字母和特殊符号的处理,使用python自带的string和re模块可以实现,其中string模块用于处理字符串操作,re模块用于正则表达式处理。 具体实现代码如下所示: 处理完成后,得到2000_pos_cut.txt和2000_neg_cut.txt两个txt文件,分别存放正负向语料分词后的结果。分词结果部分截图如下所示: 3.去停用词 分词完成后,即可读取停用词表中的停用词,对分词后的正负向语料进行匹配并去除停用词。去除停用词的步骤非常简单,主要有两个: 1)读取停用词表; 2)遍历分词后的句子,将每个词丢到此表中进行匹配,若停用词表存在则替换为空。 具体实现代码如下所示: 根据代码所示,停用词表的获取使用到了python特有的广播形式,一句代码即可搞定: 读取出的每一个停用词必须要经过去符号处理即w.strip(),因为读取出的停用词还包含有换行符和制表符,如果不处理则匹配不上。代码执行完成后,得到2000_neg_cut_stopword.txt和2000_pos_cut_stopword.txt两个txt文件。 由于去停用词的步骤是在句子分词后执行的,因此通常与分词操作在同一个代码段中进行,即在句子分词操作完成后直接调用去停用词的函数,并得到去停用词后的结果,再写入结果文件中。本文是为了便于步骤的理解将两者分开为两个代码文件执行,各位可根据自己的需求进行调整。 4.获取特征词向量 根据以上步骤得到了正负向语料的特征词文本,而模型的输入必须是数值型数据,因此需要将每条由词语组合而成的语句转化为一个数值型向量。常见的转化算法有Bag of Words(BOW)、TF-IDF、Word2Vec。本文采用Word2Vec词向量模型将语料转换为词向量。 由于特征词向量的抽取是基于已经训练好的词向量模型,而wiki中文语料是公认的大型中文语料,本文拟从wiki中文语料生成的词向量中抽取本文语料的特征词向量。Wiki中文语料的Word2vec模型训练在之前写过的一篇文章“利用Python实现wiki中文语料的word2vec模型构建” 中做了详尽的描述,在此不赘述。即本文从文章最后得到的wiki.zh.text.vector中抽取特征词向量作为模型的输入。 获取特征词向量的主要步骤如下: 1)读取模型词向量矩阵; 2)遍历语句中的每个词,从模型词向量矩阵中抽取当前词的数值向量,一条语句即可得到一个二维矩阵,行数为词的个数,列数为模型设定的维度; 3)根据得到的矩阵计算矩阵均值作为当前语句的特征词向量; 4)全部语句计算完成后,拼接语句类别代表的值,写入csv文件中。 主要代码如下图所示: 代码执行完成后,得到一个名为2000_data.csv的文件,第一列为类别对应的数值(1-pos, 0-neg),第二列开始为数值向量,每一行代表一条评论。结果的部分截图如下所示: 5.降维 Word2vec模型设定了400的维度进行训练,得到的词向量为400维,本文采用PCA算法对结果进行降维。具体实现代码如下所示: 运行代码,根据结果图发现前100维就能够较好的包含原始数据的绝大部分内容,因此选定前100维作为模型的输入。 分类模型构建 本文采用支持向量机(SVM)作为本次实验的中文文本分类模型,其他分类模型采用相同的分析流程,在此不赘述。 支持向量机(SVM)是一种有监督的机器学习模型。本文首先采用经典的机器学习算法SVM作为分类器算法,通过计算测试集的预测精度和ROC曲线来验证分类器的有效性,一般来说ROC曲线的面积(AUC)越大模型的表现越好。 首先使用SVM作为分类器算法,随后利用matplotlib和metric库来构建ROC曲线。具体python代码如下所示: 运行代码,得到Test Accuracy: 0.88,即本次实验测试集的预测准确率为88%,ROC曲线如下图所示。 来源https://github.com/AimeeLee77/senti_analysis

资源

【Demo】使用Dlib从相机进行人脸识别

使用Dlib从相机进行人脸识别 介绍 调用摄像头进行人脸识别,支持多张人脸同时识别; 摄像头人脸录入 / Face register 请不要离摄像头过近,人脸超出摄像头范围时会有 "OUT OF RANGE" 提醒; 提取特征建立人脸数据库 利用摄像头进行人脸识别 单张人脸 利用 OT 对于单张人脸追踪 多张人脸 利用 OT 来实现 定制显示名字, 可以写中文 关于精度: 当使用0.6的距离阈值时,dlib模型在标准LFW人脸识别基准上可获得99.38%的精度。 关于算法: 基于 Residual Neural Network / 残差网络的 CNN 模型; 该模型是一个具有29个转换层的ResNet网络。 它本质上是He,Zhang,Ren和Sun的论文《深度残差学习进行图像识别》中ResNet-34网络的一个版本,删除了几层,每层的过滤器数量减少了一半。 概述 此项目中人脸识别的实现流程 (no OT, 每一帧都进行检测+识别) 实现流程(with OT, 初始帧进行检测+识别,后续帧检测+质心跟踪) 如果利用 OT 来跟踪,可以大大提高 FPS, 因为做识别时候需要提取特征描述子的耗时很多; 流程 安装依赖库 下载源码 进行人脸信息采集录入 提取所有录入人脸数据存入 "features_all.csv" 调用摄像头进行实时人脸识别 或者利用 OT 算法,调用摄像头进行实时人脸识别 关于源码 Repo 的 tree / 树状图: 用到的 Dlib 相关模型函数: Dlib 正向人脸检测器 (based on HOG), output: <class 'dlib.dlib.rectangles'> Dlib 人脸 landmark 特征点检测器, output: <class 'dlib.dlib.full_object_detection'>, will use shape_predictor_68_face_landmarks.dat Dlib 特征描述子 Face recognition model, the object maps human faces into 128D vectors Python 源码介绍如下: get_face_from_camera.py: 进行 Face register / 人脸信息采集录入 请注意存储人脸图片时,矩形框不要超出摄像头范围,要不然无法保存到本地; 超出会有 "out of range" 的提醒; features_extraction_to_csv.py: 从上一步存下来的图像文件中,提取人脸数据存入CSV; 会生成一个存储所有特征人脸数据的 "features_all.csv"; size: n*128 , n means n people you registered and 128 means 128D features of the face face_reco_from_camera.py: 这一步将调用摄像头进行实时人脸识别; / This part will implement real-time face recognition; Compare the faces captured from camera with the faces you have registered which are saved in "features_all.csv" 将捕获到的人脸数据和之前存的人脸数据进行对比计算欧式距离, 由此判断是否是同一个人; face_reco_from_camera_ot_single_person/multi_people.py: 区别于 face_reco_from_camera.py (对每一帧都进行检测+识别),只会对初始帧做检测+识别,对后续帧做检测+质心跟踪; (optional) face_descriptor_from_camera.py 调用摄像头进行实时特征描述子计算; / Real-time face descriptor computation; Tips: 如果希望详细了解 dlib 的用法,请参考 Dlib 官方 Python api 的网站 / You can refer to this link for more information of how to use dlib: http://dlib.net/python/index.html Windows下建议不要把代码放到 C:\, 可能会出现权限读取问题 / In windows, we will not recommend that running this repo in dir C:\ 代码最好不要有中文路径 人脸录入的时候先建文件夹再保存图片, 先 N 再 S 关于人脸识别卡顿 FPS 低问题, 原因是特征描述子提取很费时间, 光跑 face_descriptor_from_camera.py 中 face_reco_model.compute_face_descriptor 在 CPU: i7-8700K 得到的最终 FPS: 5~6 (检测在 0.03s, 特征描述子提取在 0.158s, 和已知人脸进行遍历对比在 0.003s 左右), 所以主要提取特征时候耗资源, 可以用 OT 去做追踪,而不是对每一帧都做检测+识别 来源https://github.com/coneypo/Dlib_face_recognition_from_camera

资源

【毕业设计】基于爬虫的房源数据分析系统

基于Python的南京二手房数据采集及可视化分析 内容简介 首先通过爬虫采集链家网上所有南京二手房的房源数据,并对采集到的数据进行清洗;然后,对清洗后的数据进行可视化分析,探索隐藏在大量数据背后的规律;最后,采用一个聚类算法对所有二手房数据进行聚类分析,并根据聚类分析的结果,将这些房源大致分类,以对所有数据的概括总结。通过上述分析,我们可以了解到目前市面上二手房各项基本特征及房源分布情况,帮助我们进行购房决策。 应用技术介绍 Python网络爬虫技术 Requests Beautifulsoup Python数据分析技术 Numpy Matplotlib Pandas 数据处理 来源https://github.com/zqm233/HouseAnalysis

资源

【Demo】基于 TensorFlow Lite 的 Android 端中文语音识别

基于 TensorFlow Lite 的 Android 端中文语音识别 声学模型来源于:ASRT_SpeechRecognition 使用的模型版本:ASRT version 0.4.2 released 系统结构/类的说明 MainActivity 为 Android 程序入口,初始化 UI 控件与其监听函数所在,肩负生成 TensorFlowInferenceInterface 对象与读取标签文件列表的任务、避免重复读取文件。 DreamCarcher 调用网络开源 api、其中通过 Android 官方提供的 AudioCapturer 提供录音功能与文件流,默认地将语音数据保存至手机指定目录下 farewell.wav 处。 Chain 调用 InitialDream 类的对象以获取处理好的语音数据,输入模型以得到返还的概率矩阵,通过 Argmax 函数识别出拼音序列下标后,传入标签文件列表得到最终结果,返还给 MainActivity 的 TextView 控件以显示于应用界面。 InitialDream 为数据读取与处理功能提供支持,在 Chian 的预测函数启动时会自动地初始化并运行,内部实现对 Wave 文件的读取、对其数据进行加窗处理,最终生成模型所需识别输入的操作。 AnnaUtil 包含 4 种静态变量与 4 种静态函数,前者用于提供录音标准帧速率与文件路径,后者包含对复数求模、对数组求 log(n+1),整型数据转浮点数和一维数组内求 Max 数值下标,协助上述各类进行工作。 APP 使用说明 通过下拉控件可选择测试已存在的 thchs30 train/test 数据集文件,用于数据集测试的 wave 文件需要手动放置于手机指定目录(也可使用其它语音文件,请依照 AnnaUtil 内变量修改语音文件名/修改功能对应变量)。 测试语句将显示范例句、识别结果并提供错误率检测;实时录音仅显示识别结果。 按 START 按钮开始测试,按 STOP 按钮结束录音、查看语音识别结果,按 PLAY 按钮播放对应语音文件。 注意 该项目存在许多功能性与代码书写规范问题 不支持识别时长过长(>1600)的语音数据。 暂无拼音译为汉字功能,需要语言模型模块。 生成 TensorFlowInferenceInterface 对象与读取标签文件列表的任务,应当交由单独的类来处理。 来源https://github.com/AnnaClancy/AndroidSpeechRecognition

资源

【Demo】使用请求登录某些网站的API

使用请求登录某些网站的API 文件资料 中文 英文 支持网站 网站 PC模式 移动模式 ScanQR模式 中文 Weibo ✓ ✓ ✓ 新浪微博 Douban ✓ ✗ ✗ 豆瓣 Github ✓ ✗ ✗ Github Music163 ✓ ✗ ✗ 网易云音乐 Zt12306 ✓ ✗ ✗ 中国铁路12306 QQZone ✗ ✗ ✓ QQ空间 QQQun ✗ ✗ ✓ QQ群 QQId ✗ ✗ ✓ 我的QQ中心 Zhihu ✗ ✗ ✓ 知乎 Bilibili ✓ ✓ ✗ B站 Toutiao ✗ ✗ ✗ 今日头条 Taobao ✗ ✗ ✓ 淘宝 Jingdong ✗ ✗ ✓ 京东 Ifeng ✓ ✗ ✗ 凤凰网 Sohu ✗ ✓ ✗ 搜狐 Zgconline ✓ ✗ ✗ 中关村在线 Lagou ✗ ✗ ✗ 拉勾网 Twitter ✗ ✓ ✗ 推特 Vultr ✓ ✗ ✗ Vultr eSurfing ✓ ✗ ✗ 天翼 Renren ✓ ✗ ✗ 人人网 W3Cschool ✓ ✗ ✗ W3Cschool(编程狮) Fishc ✓ ✗ ✗ 鱼C论坛 Youdao ✓ ✗ ✗ 有道 Baidupan ✓ ✗ ✗ 百度网盘 Stackoverflow ✓ ✗ ✗ Stackoverflow CodaLab ✓ ✗ ✗ CodaLab PyPi ✓ ✗ ✗ PyPi Xiami ✓ ✗ ✗ 虾米音乐 Douyu ✗ ✗ ✓ 斗鱼直播 Migu ✓ ✗ ✗ 咪咕音乐 Qunar ✓ ✗ ✗ 去哪儿旅行 Mieshop ✓ ✗ ✗ 小米商城 Mpweixin ✓ ✗ ✗ 微信公众号 Baidutieba ✗ ✗ ✓ 百度贴吧 Dazhongdianping ✗ ✗ ✓ 大众点评 Jianguoyun ✓ ✗ ✗ 坚果云 Cloud189 ✓ ✗ ✗ 天翼云盘 QQMusic ✗ ✗ ✓ QQ音乐 Ximalaya ✗ ✗ ✓ 喜马拉雅 使用DecryptLogin的一些情况 名称 介绍 代码 中文 weiboMonitor click click 微博监控 QQReport click click 生成QQ个人专属报告 bilibiliDownloadUserVideos click click 下载B站指定UP主的所有视频 NeteaseSongListDownloader click click 网易云个人歌单下载器 NeteaseListenLeaderboard click click 网易云个人听歌排行榜 userWeiboSpider click click 下载指定微博用户的所有微博数据 NeteaseSignin click click 网易云音乐自动签到 weiboEmoji click click 微博表情包爬取 weiboSender click click 大吼一声发微博 tbgoods click click 淘宝商品数据小爬虫 jdgoods click click 京东商品数据小爬虫 delallweibos click click 批量删除微博 ClearQzone click click 批量删除QQ空间说说 NeteaseEveryday click click 在终端看网易云每日歌曲推荐 NeteaseClickPlaylist click click 网易云音乐刷歌曲播放量 安装 pip安装 源代码安装 快速开始 来源https://github.com/CharlesPikachu/DecryptLogin

资源

【Demo】基于LaserTagger的中文文本数据增强

文本复述——基于LaserTagger的中文文本数据增强 一.概述 文本复述任务是指把一句/段文本A改写成文本B,要求文本B采用与文本A略有差异的表述方式来表达与之意思相近的文本。 改进谷歌的LaserTagger模型,使用LCQMC等中文语料训练文本复述模型,即修改一段文本并保持原有语义。 复述的结果可用于数据增强,文本泛化,从而增加特定场景的语料规模,提高模型泛化能力。 二.模型介绍 谷歌在文献《Encode, Tag, Realize: High-Precision Text Editing》中采用序列标注的框架进行文本编辑,在文本拆分和自动摘要任务上取得了最佳效果。 在同样采用BERT作为编码器的条件下,本方法相比于Seq2Seq的方法具有更高的可靠度,更快的训练和推理效率,且在语料规模较小的情况下优势更明显。 谷歌公开了本文献对应的代码,但是原有任务与当前任务有一定的差异性,需要修改部分代码,主要修改如下: A.分词方式:原代码针对英文,以空格为间隔分成若干词。现在针对中文,分成若干字。 B.推理效率:原代码每次只对一个文本进行复述,改成每次对batch_size个文本进行复述,推理效率提高6倍。 三.文件说明和实验步骤 1.安装python模块 参见"requirements.txt", "rephrase.sh" 2.训练和评测模型 文件需求 bert预训练的tensorflow 模型 采用RoBERTa-tiny-clue(中文版)预训练模型。 网址 如果想采用其他预训练模型,请修改“configs/lasertagger_config.json". 代码跑通顺序: 第一种方法: 修改运行rephrase.sh 第二种方法详解: 第一步:制作训练测试验证集 python get_pairs_chinese/get_text_pair_lcqmc.py 获得lcqmc中的文本复述语料(语义一致的文本对,且字面表述差异不能过大,第三列为最长公共子串长度与总长度的比值) 只需要修改lcqmc的目录位置即可 python get_pairs_chinese/get_text_pair.py 可根据自己的预料获得文本复述语料(第三列为最长公共子串长度与总长度的比值) 再运行merge_split_corpus.py 将 结果数据 按比例划分 训练、测试、验证集 第二步:短语_词汇表_优化 第三步: 1、制作后续训练模型的验证集 2、制作后续训练模型的训练集 第四步: 1、训练模型 2、 模型整理 第五步 根据test文件进行预测 第六步 对第五步预测的文件进行打分。 3.启动文本复述服务 根据自己需要,可选 根据自己情况修改"rephrase_server.sh"文件中几个文件夹的路径,使用命令"sh rephrase_server.sh"可以启动一个文本复述的API服务 本API服务可以接收一个http的POST请求,解析并对其中的文本进行泛化,具体接口请看“rephrase_server/rephrase_server_flask.py" 有几个脚本文件如rephrase_for_qa.sh,rephrase_for_chat.sh,rephrase_for_skill.sh是作者自己办公需要的,可以忽略 四.实验效果 1.在公开数据集Wiki Split上复现模型: Wiki Split数据集是英文语料,训练模型将一句话拆分成两句话,并保持语义一致,语法合理,语义连贯通顺,如下图所示。 Exact score=15,SARI score=61.5,KEEP score=93,ADDITION score=32,DELETION score=59, 基本与论文中的Exact score=15.2;SARI score=61.7一致(这些分数均为越高越好)。 2.在自己构造的中文数据集训练文本复述模型: (1)语料来源 (A)一部分语料来自于LCQMC语料中的正例,即语义接近的一对文本; (B)另一部分语料来自于宝安机场用户QA下面同一答案的问题。; 因为模型的原理,要求文本A和B在具有一定的重合字数,故过滤掉上述两个来源中字面表述差异大的文本,如“我要去厕所”与“卫生间在哪里”。对语料筛选后对模型进行训练和测试。 (2)测试结果 对25918对文本进行复述和自动化评估,评测分数如下(越高越好): Exact score=29,SARI score=64,KEEP score=84,ADDITION score=39,DELETION score=66. CPU上耗时0.5小时,平均复述一句话需要0.72秒。 可能是语言和任务不同,在中文文本复述上的评测分数比公开数据集高一些。 五.一些trick 1.可以设定对于某些字或词不做修改 如对实体识别NER的语料泛化,需要保证模型不能修改其中的实体; 对业务语料泛化,也可以根据情况保证模型不能修改其中的关键字 如日期,航班号等; 目前,是通过正则的方式定位这些不能被模型修改的位置,然后将这些位置的location设置为1,具体实现参见tagging.py. 2.增加复述文本与原文本的差异度 可以对训练语料中的text_a先进行随机的swag操作,相应地脚本中enable_swap_tag改为true,再训练模型将其改写为text_b; 实际应用或测试时同样将原始文本text_a先进行随机的swag操作,然后利用模型改写为text_b; 因为训练语料中text_a是不通顺,但text_b是通顺的,所以实际应用或测试时仍然会得到通顺的复述结果。 六.数据集 You can download LCQMC data set from https://download.csdn.net/download/tcd1112/12357994 ,But other data is the company data can't give you. You can also leave your E-mail, I will send you LCQMC data 七.文件 tree树如下: 文件框架格局如下: ├── chat_rephrase │ ├── init.py │ ├── predict_for_chat.py │ └── score_for_qa.txt ├── configs │ ├── lasertagger_config_base.json │ └── lasertagger_config.json ├── data │ ├── LCQMC │ │ ├── dev.txt │ │ ├── test.txt │ │ └── train.txt │ └── QQ │ └── Q_Q.txt ├── domain_rephrase │ ├── init.py │ ├── predict_for_domain.py │ └── rephrase_for_domain.sh ├── get_pairs_chinese │ ├── curLine_file.py │ ├── get_text_pair_lcqmc.py │ ├── get_text_pair.py │ ├── get_text_pair_shixi.py │ ├── get_text_pair_sv.py │ ├── init.py │ └── merge_split_corpus.py ├── official_transformer │ ├── attention_layer.py │ ├── beam_search.py │ ├── embedding_layer.py │ ├── ffn_layer.py │ ├── init.py │ ├── model_params.py │ ├── model_utils.py │ ├── README │ ├── tpu.py │ └── transformer.py ├── qa_rephrase │ ├── init.py │ └── predict_for_qa.py ├── rephrase_server │ ├── init.py │ ├── rephrase_server_flask.py │ └── test_server.py ├── skill_rephrase │ ├── init.py │ └── predict_for_skill.py ├── AR_architecture.png ├── bert_example.py ├── compute_lcs.py ├── CONTRIBUTING.md ├── curLine_file.py ├── init.py ├── LICENSE ├── output ├── phrase_vocabulary_optimization.py ├── prediction.txt ├── predict_main.py ├── predicts.py ├── predict_utils.py ├── preprocess_main.py ├── README.md ├── rephrase.sh ├── requirements.txt ├── run_lasertagger.py ├── run_lasertagger_utils.py ├── sari_hook.py ├── score_lib.py ├── score_main.py ├── sentence_fusion_task.png ├── tagging_converter.py ├── tagging.py ├── transformer_decoder.py └── utils.py 来源https://github.com/tongchangD/text_data_enhancement_with_LaserTagger

资源

【Demo】基于mtcnn与facenet实现人脸登录系统

基于mtcnn与facenet实现人脸登录系统 本文主要介绍了系统涉及的人脸检测与识别的详细方法,该系统基于python2.7.10/opencv2/tensorflow1.7.0环境,实现了从摄像头读取视频,检测人脸,识别人脸的功能 由于模型文件过大,git无法上传,整个项目放在百度云盘,地址:https://pan.baidu.com/s/1TaalpwQwPTqlCIfXInS_LA 人脸识别是计算机视觉研究领域的一个热点。目前,在实验室环境下,许多人脸识别已经赶上(超过)人工识别精度(准确率:0.9427~0.9920),比如face++,DeepID3,FaceNet等(详情可以参考:基于深度学习的人脸识别技术综述)。但是,由于光线,角度,表情,年龄等多种因素,导致人脸识别技术无法在现实生活中广泛应用。 本文基于python/opencv/tensorflow环境,采用FaceNet(LFW:0.9963 )为基础来构建实时人脸检测与识别系统,探索人脸识别系统在现实应用中的难点。下文主要内容如下 : 利用htm5 video标签打开摄像头采集头像并使用jquery.faceDeaction组件来粗略检测人脸 将人脸图像上传到服务器,采用mtcnn检测人脸 利用opencv的仿射变换对人脸进行对齐,保存对齐后的人脸 采用预训练的facenet对检测的人脸进行embedding,embedding成512维度的特征; 对人脸embedding特征创建高效的annoy索引进行人脸检测 人脸采集 采用html5 video标签可以很方便的实现从摄像头读取视频帧,下文代码实现了从摄像头读取视频帧,faceDection识别人脸后截取图像上传到服务器功能 在html文件中添加video,canvas标签 打开网络摄像头 利用jquery的facetDection组件检测人脸 $('#canvas').faceDetection() 检测出人连脸的话截图,并把图片转换为base64的格式,方便上传 将base64格式的图片上传到服务器 图片服务器接受代码,php语言实现 人脸检测 人脸检测方法有许多,比如opencv自带的人脸Haar特征分类器和dlib人脸检测方法等。 对于opencv的人脸检测方法,有点是简单,快速;存在的问题是人脸检测效果不好。正面/垂直/光线较好的人脸,该方法可以检测出来,而侧面/歪斜/光线不好的人脸,无法检测。因此,该方法不适合现场应用。对于dlib人脸检测方法 ,效果好于opencv的方法,但是检测力度也难以达到现场应用标准。 本文中,我们采用了基于深度学习方法的mtcnn人脸检测系统(mtcnn:Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Neural Networks)。mtcnn人脸检测方法对自然环境中光线,角度和人脸表情变化更具有鲁棒性,人脸检测效果更好;同时,内存消耗不大,可以实现实时人脸检测。 本文中采用mtcnn是基于python和tensorflow的实现(代码来自于davidsandberg,caffe实现代码参见:kpzhang93) 具体代码参考fcce_detect.py 人脸对齐 有时候我们截取的人脸了头像可能是歪的,为了提升检测的质量,需要把人脸校正到同一个标准位置,这个位置是我们定义的,假设我们设定的标准检测头像是这样的 假设眼睛,鼻子三个点的坐标分别是a(10,30) b(20,30) c(15,45),具体设置可参看config.ini文件alignment块配置项 采用opencv仿射变换进行对齐,获取仿射变换矩阵 仿射变换: img_new = cv2.warpAffine(img, tranform, imagesize) 具体代码参考face_alignment.py文件 产生特征 对齐得到后的头像,放入采用预训练的facenet对检测的人脸进行embedding,embedding成512维度的特征,以(id,vector)的形式保存在lmdb文件中 具体代码可参看face_encoder.py 人脸特征索引: 人脸识别的时候不能对每一个人脸都进行比较,太慢了,相同的人得到的特征索引都是比较类似,可以采用KNN分类算法去识别,这里采用是更高效annoy算法对人脸特征创建索引,annoy索引算法的有个假设就是,每个人脸特征可以看做是在高维空间的一个点,如果两个很接近(相识),任何超平面都无法把他们分开,也就是说如果空间的点很接近,用超平面去分隔,相似的点一定会分在同一个平面空间(具体参看:https://github.com/spotify/annoy) 具体代码可参看face_annoy.py 人脸识别 经过上面三个步骤后,得到人脸特征,在索引中查询最近几个点并就按欧式距离,如果距离小于0.6(更据实际情况设置的阈值)则认为是同一个人,然后根据id在数据库查找到对应人的信息即可 具体代码可参看face_annoy.py 安装部署 建表,用于存在用户注册信息,并在web/DqMysql.php 中配置数据库信息 系统采用有两个模块组成: face_web:提供用户注册登录,人脸采集,php语言实现 face_server: 提供人脸检测,裁剪,对齐,识别功能,python语言实现 模块间采用socket方式通信通信格式为: length+content face_server相关的配置在config.ini文件中 使用镜像 face_serverdocker镜像: shareclz/python2.7.10-face-image face_web镜像: skiychan/nginx-php7 假设项目路径为/data1/face-login 安装face_server容器 3.安装face_web容器 最终效果: face_server加载mtcnn模型和facenet模型后等待人脸请求 未注册识别失败 人脸注册 注册后登录成功 参考 https://zhuanlan.zhihu.com/p/25025596 https://github.com/spotify/annoy https://blog.csdn.net/just_sort/article/details/79337526 https://blog.csdn.net/oTengYue/article/details/79278572 来源https://github.com/chenlinzhong/face-login

资源

【Demo】人脸反欺骗攻击检测挑战的代码

代码和数据集存放 获取数据集,即CASIA-SURF文件夹,里面包含phase1和phase2两个文件夹,进入phase1,解压train.zip和valid.zip文件,得到Training文件夹,train_list.txt文件、Val文件夹、val_public_list.txt文件; 将本项目整个文件夹casia-surf-2019-codes拷贝到CASIA-SURF目录里面,保证和phase1同目录; 获得phase2阶段的测试数据集,Testing文件夹和test_public_list.txt文件放在phase2目录下; 最终目录结构如下: 环境安装(ubuntu 16.04): 打开命令终端,cd到casia-surf-2019-codes目录,执行: 数据集预处理: 打开命令终端,cd到casia-surf-2019-codes目录,依次执行: 模型训练 打开命令终端,cd到casia-surf-2019-codes目录: 第一步:使用29266的训练数据集进行训练, 第二步:使用29266的训练数据集进行训练, 第三步:使用15460和38208两种样本均衡的数据集分别尝试进行微调训练, 测试 按我提供的百度网盘链接,下载训练好的模型,解压后放入casia-surf-2019-codes目录; 打开命令终端,cd到casia-surf-2019-codes目录,执行: 第一阶段预测: 注: 程序执行完后,会在当前目录下生成 commit_phase1_depth_%Y-%m-%d_server_{load-epoch}.txt 格式的结果文件 commit.py 第一个参数为待提交成绩的list文件,第二个参数load-epoch:表示加载第load-epoch数的模型进行预测。 第二阶段预测: 注: 程序执行完后,会在当前目录下生成 commit_phase2_depth_%Y-%m-%d_server_{load-epoch}.txt 格式的结果文件 commit.py 第一个参数为待提交成绩的list文件,第二个参数load-epoch:表示加载第load-epoch数的模型进行预测。 来源https://github.com/zzzkk2009/casia-surf-2019-codes

资源

【Demo】基于Bert进行知识蒸馏的预训练语言模型

基于Bert进行知识蒸馏的预训练语言模型 本项目是基于华为的TinyBert进行修改的,简化了数据读取的过程,方便我们利用自己的数据进行读取操作。 TinyBert的训练过程: 用通用的Bert base进行蒸馏,得到一个通用的student model base版本; 用相关任务的数据对Bert进行fine-tune得到fine-tune的Bert base模型; 用2得到的模型再继续蒸馏得到fine-tune的student model base,注意这一步的student model base要用1中通用的student model base去初始化;(词向量loss + 隐层loss + attention loss) 重复第3步,但student model base模型初始化用的是3得到的student模型。(任务的预测label loss) General Distillation (通用版预训练语言模型蒸馏) 预训练 Task Distillation (fine-tune版预训练语言模型蒸馏) 预训练 数据格式 数据增强 参数说明: python data_augmentation.py \ --pretrained_bert_model /nas/pretrain-bert/pretrain-pytorch/bert-base-uncased \ # bert预训练模型 --data_path data/en_data.txt \ # 需要增强的数据路径 --glove_embs /nas/lishengping/datas/glove.6B.300d.txt \ # glove词向量文件 --M 15 \ # 从文本中选择M个词可能被替换 --N 30 \ # 通过bert mask预测的概率前N个词去替换 --p 0.4 \ # 某个词被替换的概率 3>&2 2>&1 1>&3 | tee logs/data_augmentation.log 论文在fine-tune阶段采用了数据增强的策略,从后面的实验中可以看出,数据增强起到了很重要的作用。 数据扩充的过程如下: 对于特定任务的数据中每一条文本,首先使用bert自带的方式进行bpe分词,bpe分词之后是完整单词(single-piece word),用[MASK]符号代替,然后使用bert进行预测并选择其对应的候选词N个;如果bpe(就是BertTokenizer)分词之后不是完整单词,则使用Glove词向量以及余弦相似度来选择对应的N个候选词,最后以概率p选择是否替换这个单词,从而产生更多的文本数据。 数据 因为懒得找中文的词向量下载,暂时用英文的glove文件和英文原始数据。中文的话只需要把预训练模型改为中文bert,glove改为中文的词向量文件即可。原始数据样式和增强后的数据样式在data/en_data.txt和data/aug_en_data.txt 官方版本 =====1st version to reproduce our results in the paper ====== General_TinyBERT(4layer-312dim) General_TinyBERT(6layer-768dim) =====2nd version (2019/11/18) trained with more (book+wiki) and no [MASK] corpus ===== General_TinyBERT_v2(4layer-312dim) General_TinyBERT_v2(6layer-768dim) We here also provide the distilled TinyBERT(both 4layer-312dim and 6layer-768dim) of all GLUE tasks for evaluation. Every task has its own folder where the corresponding model has been saved. TinyBERT(4layer-312dim) TinyBERT(6layer-768dim) 来源https://github.com/Lisennlp/TinyBert

资源

【Demo】基于深度学习的中文语音识别系统

基于深度学习的中文语音识别系统 包括基于深度学习的声学模型和基于深度学习的语言模型 1. Introduction 该系统实现了基于深度框架的语音识别中的声学模型和语言模型建模,其中声学模型包括CNN-CTC、GRU-CTC、CNN-RNN-CTC,语言模型包含transformer、CBHG,数据集包含stc、primewords、Aishell、thchs30四个数据集。 本系统更整体介绍:https://blog.csdn.net/chinatelecom08/article/details/82557715 本项目现已训练一个迷你的语音识别系统,将项目下载到本地上,下载thchs数据集并解压至data,运行test.py,不出意外能够进行识别,结果如下: 若自己建立模型则需要删除现有模型,重新配置参数训练,具体实现流程参考本页最后。 2. 声学模型 声学模型采用CTC进行建模,采用CNN-CTC、GRU-CTC、FSMN等模型model_speech,采用keras作为编写框架。 论文地址:http://www.infocomm-journal.com/dxkx/CN/article/openArticlePDFabs.jsp?id=166970 tutorial:https://blog.csdn.net/chinatelecom08/article/details/85013535 3. 语言模型 新增基于self-attention结构的语言模型model_language\transformer.py,该模型已经被证明有强于其他框架的语言表达能力。 论文地址:https://arxiv.org/abs/1706.03762。 tutorial:https://blog.csdn.net/chinatelecom08/article/details/85051817 基于CBHG结构的语言模型model_language\cbhg.py,该模型之前用于谷歌声音合成,移植到该项目中作为基于神经网络的语言模型。 原理地址:https://github.com/crownpku/Somiao-Pinyin tutorial:https://blog.csdn.net/chinatelecom08/article/details/85048019 4. 数据集 包括stc、primewords、Aishell、thchs30四个数据集,共计约430小时, 相关链接:http://www.openslr.org/resources.php Name train dev test aishell 120098 14326 7176 primewords 40783 5046 5073 thchs-30 10000 893 2495 st-cmd 10000 600 2000 数据标签整理在data路径下,其中primewords、st-cmd目前未区分训练集测试集。 若需要使用所有数据集,只需解压到统一路径下,然后设置utils.py中datapath的路径即可。 与数据相关参数在utils.py中: data_type: train, test, dev data_path: 对应解压数据的路径 thchs30, aishell, prime, stcmd: 是否使用该数据集 batch_size: batch_size data_length: 我自己做实验时写小一些看效果用的,正常使用设为None即可 shuffle:正常训练设为True,是否打乱训练顺序 5. 配置 使用train.py文件进行模型的训练。 声学模型可选cnn-ctc、gru-ctc,只需修改导入路径即可: 语言模型可选transformer和cbhg: 模型识别 使用test.py检查模型识别效果。 模型选择需和训练一致。 一个简单的例子 1. 声学模型训练 train.py文件 2.语言模型训练 3. 模型测试 整合声学模型和语言模型 test.py文件 定义解码器 准备测试数据 加载声学模型和语言模型 使用语音识别系统 来源:https://github.com/audier/DeepSpeechRecognition

  • 1
  • 13
  • 14
  • 15
  • 27
前往