计算机

计算机 · 圈子

8557 位酷友已加入

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

关注推荐最新

热门标签

资源

基于TensorFlow的神经网络库

Sonnet Sonnet是在TensorFlow 2之上构建的库,旨在为机器学习研究进行简单可组合的抽象。 介绍 Sonnet是由DeepMind的研究人员设计构建的,它可以构造用于不同目的的神经网络(无/监督学习,强化学习等),我们发现这对我们的组织能够成功的抽象,你的也可以这样! 更具体地说,Sonnet提供了一个简单而强大的编程模型,该模型围绕一个概念:snt.Module。 模块可以保存对在用户输入上应用某些功能的参数,其他模块和方法的引用。 Sonnet附带了许多预定义的模块(例如snt.Linear,snt.Conv2D,snt.BatchNorm)和一些预定义的模块网络(例如snt.nets.MLP),同时也鼓励用户构建自己的模块。 与许多框架不同,Sonnet在如何使用模块方面毫无保留。 模块设计为自包含的并且彼此之间完全解耦。Sonnet没有附带训练框架,因此鼓励用户自己构建或采用他人构建的框架。 Sonnet的设计也易于理解,我们的代码清晰且重点突出。 在选择默认值(例如初始参数值的默认值)的地方,会尽量指出原因。 入门 例子 尝试Sonnet的最简单方法是使用Google Colab,它提供了一个免费的Python笔记本连接到GPU或TPU。 Predicting MNIST with an MLP Training a Little GAN on MNIST training with snt.distribute 安装 开始安装TensorFlow 2.0和Sonnet 2: 运行以下命令验证安装的东西: 使用现有模块 Sonnet随附了许多可以轻松使用的内置模块。 例如,要定义一个MLP,我们可以使用snt.Sequential模块调用模块序列,将给定模块的输出作为下一个模块的输入。 我们可以使用snt.Linear和tf.nn.relu实际定义我们的计算: 要使用我们的模块,需要“调用”它。 顺序模块(和大多数模块)定义了__call__方法,可以按名称调用它们: 为模块请求所有参数也是很常见的。 Sonnet中的大多数模块在第一次使用某些输入调用它们时都会创建它们的参数(因为在大多数情况下,参数的形状是输入的函数)。 Sonnet模块提供了两个用于访问参数的属性。 variables属性返回给定模块引用的所有tf.Variables: 值得注意的是tf.Variables不只是用于模型的参数。 例如,它们用于在snt.BatchNorm中使用的度量标准中保持状态。 在大多数情况下,用户检索模块变量以将其传递给优化器以进行更新。 在这种情况下,不可训练变量通常不应该在该列表中,因为它们是通过不同的机制更新的。 TensorFlow具有内置机制,可将变量标记为“可训练的”(模型参数)与“不可训练的”(其他变量)。 Sonnet提供了一种从模块收集所有可训练变量的机制,这可能是你想要传递给优化器的东西: 构建自己的模块 Sonnet强烈建议用户将snt.Module子类化以定义自己的模块。 让我们从创建一个名为MyLinear的简单线性层开始: 使用这个模块很简单: 通过子类化snt.Module,可以免费获得许多不错的属性。 例如,__repr__默认实现显示了构造函数参数(对于调试和自省非常有用): 还可以获得variables和trainable_variables属性: 你可能会在上面的变量上注意到my_linear前缀。 这是因为每当调用方法时,Sonnet模块也会进入模块名称范围。 通过输入模块名称范围,我们为TensorBoard之类的工具提供了更为有用的图形(例如,发生在my_linear中的所有操作都将在一个名为my_linear的组中)。 此外,你的模块现在将支持TensorFlow检查点和保存的模型,这是稍后介绍的高级功能。 序列化 Sonnet支持多种序列化格式。 我们支持的最简单的格式是Python的pickle,并且对所有内置模块进行了测试,以确保可以在同一Python进程中通过pickle保存/加载它们。 总的来说,我们不鼓励使用pickle,因为TensorFlow的许多部分都不能很好地支持它,并且根据我们的经验来说它可能不够稳定。 TensorFlow Checkpointing(TensorFlow检查点) 参考:https://www.tensorflow.org/alpha/guide/checkpoints TensorFlow Checkpointing可用于在训练期间定期保存参数值。 如果程序崩溃或停止,它将保存训练进度。 Sonnet旨在与TensorFlow Checkpointing完美协作: TensorFlow保存的模型 参考:https://www.tensorflow.org/alpha/guide/saved_model TensorFlow保存的模型可用于保存与Python源分离的网络副本。通过保存描述计算的TensorFlow图和包含权重值的检查点来启用此功能。 要创建保存的模型,要做的第一件事是创建要保存的snt.Module: 接下来,我们需要创建另一个模块来描述我们要导出的模型的特定部分。 我们建议这样做(而不是就地修改原始模型),可以对实际输出的内容进行细粒度的控制。 这通常可以避免创建非常大的已保存模型,这样一来,只共享模型中要共享的部分即可(例如,你只想共享GAN的生成器,同时使鉴别器不公开)。 现在,我们在/tmp/example_saved_model文件夹中有一个保存的模型: 加载此模型非常简单,无需在构建已保存模型的任何Python代码的情况下,即可在其他计算机上完成该加载: 注意,加载的对象不是Sonnet模块,它是一个容器对象,具有我们在上一个块中添加的特定方法(例如inference)和属性(例如all_variables)。 分布式训练 示例:https://github.com/deepmind/sonnet/blob/v2/examples/distributed_cifar10.ipynb Sonnet支持使用自定义TensorFlow分布策略进行分布式培训。 Sonnet与使用tf.keras进行的分布式训练之间的主要区别在于,在分配策略下运行时,Sonnet模块和优化器的行为不会有所不同(例如,我们不会平均梯度或同步批处理规范统计信息)。 我们认为,用户应该完全控制他们的训练的这些方面,不应将其拷到库中。 这里需要权衡的是,你需要在训练脚本中实现这些功能(通常,只有两行代码才能在应用优化程序之前全部减小梯度),或者在具有明确分布意识的模块中进行交换(例如snt.distribute.CrossReplicaBatchNorm)。 我们的分布式Cifar-10示例演示了如何使用Sonnet进行多GPU训练。 来源https://github.com/deepmind/sonnet

资源

基于CNN-RNN的中文文本分类

Text Classification with CNN and RNN 使用卷积神经网络以及循环神经网络进行中文文本分类 CNN做句子分类的论文可以参看: Convolutional Neural Networks for Sentence Classification 还可以去读dennybritz大牛的博客:Implementing a CNN for Text Classification in TensorFlow 以及字符级CNN的论文:Character-level Convolutional Networks for Text Classification 本文是基于TensorFlow在中文数据集上的简化实现,使用了字符级CNN和RNN对中文文本进行分类,达到了较好的效果。 文中所使用的Conv1D与论文中有些不同,详细参考官方文档:tf.nn.conv1d 环境 Python 2/3 TensorFlow 1.3以上 numpy scikit-learn scipy 数据集 使用THUCNews的一个子集进行训练与测试,数据集请自行到THUCTC:一个高效的中文文本分类工具包下载,请遵循数据提供方的开源协议。 本次训练使用了其中的10个分类,每个分类6500条数据。 类别如下: 体育, 财经, 房产, 家居, 教育, 科技, 时尚, 时政, 游戏, 娱乐 这个子集可以在此下载:链接: https://pan.baidu.com/s/1hugrfRu 密码: qfud 数据集划分如下: 训练集: 5000*10 验证集: 500*10 测试集: 1000*10 从原数据集生成子集的过程请参看helper下的两个脚本。其中,copy_data.sh用于从每个分类拷贝6500个文件,cnews_group.py用于将多个文件整合到一个文件中。执行该文件后,得到三个数据文件: cnews.train.txt: 训练集(50000条) cnews.val.txt: 验证集(5000条) cnews.test.txt: 测试集(10000条) 预处理 data/cnews_loader.py为数据的预处理文件。 read_file(): 读取文件数据; build_vocab(): 构建词汇表,使用字符级的表示,这一函数会将词汇表存储下来,避免每一次重复处理; read_vocab(): 读取上一步存储的词汇表,转换为{词:id}表示; read_category(): 将分类目录固定,转换为{类别: id}表示; to_words(): 将一条由id表示的数据重新转换为文字; process_file(): 将数据集从文字转换为固定长度的id序列表示; batch_iter(): 为神经网络的训练准备经过shuffle的批次的数据。 经过数据预处理,数据的格式如下: CNN卷积神经网络 配置项 CNN可配置的参数如下所示,在cnn_model.py中。 CNN模型 具体参看cnn_model.py的实现。 大致结构如下: 训练与验证 运行 python run_cnn.py train,可以开始训练。 若之前进行过训练,请把tensorboard/textcnn删除,避免TensorBoard多次训练结果重叠。 在验证集上的最佳效果为94.12%,且只经过了3轮迭代就已经停止。 准确率和误差如图所示: 测试 运行 python run_cnn.py test 在测试集上进行测试。 在测试集上的准确率达到了96.04%,且各类的precision, recall和f1-score都超过了0.9。 从混淆矩阵也可以看出分类效果非常优秀。 RNN循环神经网络 配置项 RNN可配置的参数如下所示,在rnn_model.py中。 RNN模型 具体参看rnn_model.py的实现。 大致结构如下: 训练与验证 这部分的代码与 run_cnn.py极为相似,只需要将模型和部分目录稍微修改。 运行 python run_rnn.py train,可以开始训练。 若之前进行过训练,请把tensorboard/textrnn删除,避免TensorBoard多次训练结果重叠。 运行结果: Configuring RNN model... Configuring TensorBoard and Saver... Loading training and validation data... Time usage: 0:00:14 Training and evaluating... Epoch: 1 Iter: 0, Train Loss: 2.3, Train Acc: 8.59%, Val Loss: 2.3, Val Acc: 11.96%, Time: 0:00:08 * Iter: 100, Train Loss: 0.95, Train Acc: 64.06%, Val Loss: 1.3, Val Acc: 53.06%, Time: 0:01:15 * Iter: 200, Train Loss: 0.61, Train Acc: 79.69%, Val Loss: 0.94, Val Acc: 69.88%, Time: 0:02:22 * Iter: 300, Train Loss: 0.49, Train Acc: 85.16%, Val Loss: 0.63, Val Acc: 81.44%, Time: 0:03:29 * Epoch: 2 Iter: 400, Train Loss: 0.23, Train Acc: 92.97%, Val Loss: 0.6, Val Acc: 82.86%, Time: 0:04:36 * Iter: 500, Train Loss: 0.27, Train Acc: 92.97%, Val Loss: 0.47, Val Acc: 86.72%, Time: 0:05:43 * Iter: 600, Train Loss: 0.13, Train Acc: 98.44%, Val Loss: 0.43, Val Acc: 87.46%, Time: 0:06:50 * Iter: 700, Train Loss: 0.24, Train Acc: 91.41%, Val Loss: 0.46, Val Acc: 87.12%, Time: 0:07:57 Epoch: 3 Iter: 800, Train Loss: 0.11, Train Acc: 96.09%, Val Loss: 0.49, Val Acc: 87.02%, Time: 0:09:03 Iter: 900, Train Loss: 0.15, Train Acc: 96.09%, Val Loss: 0.55, Val Acc: 85.86%, Time: 0:10:10 Iter: 1000, Train Loss: 0.17, Train Acc: 96.09%, Val Loss: 0.43, Val Acc: 89.44%, Time: 0:11:18 * Iter: 1100, Train Loss: 0.25, Train Acc: 93.75%, Val Loss: 0.42, Val Acc: 88.98%, Time: 0:12:25 Epoch: 4 Iter: 1200, Train Loss: 0.14, Train Acc: 96.09%, Val Loss: 0.39, Val Acc: 89.82%, Time: 0:13:32 * Iter: 1300, Train Loss: 0.2, Train Acc: 96.09%, Val Loss: 0.43, Val Acc: 88.68%, Time: 0:14:38 Iter: 1400, Train Loss: 0.012, Train Acc: 100.00%, Val Loss: 0.37, Val Acc: 90.58%, Time: 0:15:45 * Iter: 1500, Train Loss: 0.15, Train Acc: 96.88%, Val Loss: 0.39, Val Acc: 90.58%, Time: 0:16:52 Epoch: 5 Iter: 1600, Train Loss: 0.075, Train Acc: 97.66%, Val Loss: 0.41, Val Acc: 89.90%, Time: 0:17:59 Iter: 1700, Train Loss: 0.042, Train Acc: 98.44%, Val Loss: 0.41, Val Acc: 90.08%, Time: 0:19:06 Iter: 1800, Train Loss: 0.08, Train Acc: 97.66%, Val Loss: 0.38, Val Acc: 91.36%, Time: 0:20:13 * Iter: 1900, Train Loss: 0.089, Train Acc: 98.44%, Val Loss: 0.39, Val Acc: 90.18%, Time: 0:21:20 Epoch: 6 Iter: 2000, Train Loss: 0.092, Train Acc: 96.88%, Val Loss: 0.36, Val Acc: 91.42%, Time: 0:22:27 * Iter: 2100, Train Loss: 0.062, Train Acc: 98.44%, Val Loss: 0.39, Val Acc: 90.56%, Time: 0:23:34 Iter: 2200, Train Loss: 0.053, Train Acc: 98.44%, Val Loss: 0.39, Val Acc: 90.02%, Time: 0:24:41 Iter: 2300, Train Loss: 0.12, Train Acc: 96.09%, Val Loss: 0.37, Val Acc: 90.84%, Time: 0:25:48 Epoch: 7 Iter: 2400, Train Loss: 0.014, Train Acc: 100.00%, Val Loss: 0.41, Val Acc: 90.38%, Time: 0:26:55 Iter: 2500, Train Loss: 0.14, Train Acc: 96.88%, Val Loss: 0.37, Val Acc: 91.22%, Time: 0:28:01 Iter: 2600, Train Loss: 0.11, Train Acc: 96.88%, Val Loss: 0.43, Val Acc: 89.76%, Time: 0:29:08 Iter: 2700, Train Loss: 0.089, Train Acc: 97.66%, Val Loss: 0.37, Val Acc: 91.18%, Time: 0:30:15 Epoch: 8 Iter: 2800, Train Loss: 0.0081, Train Acc: 100.00%, Val Loss: 0.44, Val Acc: 90.66%, Time: 0:31:22 Iter: 2900, Train Loss: 0.017, Train Acc: 100.00%, Val Loss: 0.44, Val Acc: 89.62%, Time: 0:32:29 Iter: 3000, Train Loss: 0.061, Train Acc: 96.88%, Val Loss: 0.43, Val Acc: 90.04%, Time: 0:33:36 No optimization for a long time, auto-stopping... 在验证集上的最佳效果为91.42%,经过了8轮迭代停止,速度相比CNN慢很多。 准确率和误差如图所示: 测试 运行 python run_rnn.py test 在测试集上进行测试。 在测试集上的准确率达到了94.22%,且各类的precision, recall和f1-score,除了家居这一类别,都超过了0.9。 从混淆矩阵可以看出分类效果非常优秀。 对比两个模型,可见RNN除了在家居分类的表现不是很理想,其他几个类别较CNN差别不大。 还可以通过进一步的调节参数,来达到更好的效果。 预测 为方便预测,repo 中 predict.py 提供了 CNN 模型的预测方法. 转载自:https://github.com/gaussic/text-classification-cnn-rnn

资源

百度的开源情感分析系统

简介 情感分析旨在自动识别和提取文本中的倾向、立场、评价、观点等主观信息。它包含各式各样的任务,比如句子级情感分类、评价对象级情感分类、观点抽取、情绪分类等。情感分析是人工智能的重要研究方向,具有很高的学术价值。同时,情感分析在消费决策、舆情分析、个性化推荐等领域均有重要的应用,具有很高的商业价值。 近日,百度正式发布情感预训练模型SKEP(Sentiment Knowledge Enhanced Pre-training for Sentiment Analysis)。SKEP利用情感知识增强预训练模型, 在14项中英情感分析典型任务上全面超越SOTA,此工作已经被ACL 2020录用。 论文地址:https://arxiv.org/abs/2005.05635 为了方便研发人员和商业合作伙伴共享效果领先的情感分析技术,本次百度在Senta中开源了基于SKEP的情感预训练代码和中英情感预训练模型。而且,为了进一步降低用户的使用门槛,百度在SKEP开源项目中集成了面向产业化的一键式情感分析预测工具。用户只需要几行代码即可实现基于SKEP的情感预训练以及模型预测功能。 SKEP SKEP是百度研究团队提出的基于情感知识增强的情感预训练算法,此算法采用无监督方法自动挖掘情感知识,然后利用情感知识构建预训练目标,从而让机器学会理解情感语义。SKEP为各类情感分析任务提供统一且强大的情感语义表示。 百度研究团队在三个典型情感分析任务,句子级情感分类(Sentence-level Sentiment Classification),评价对象级情感分类(Aspect-level Sentiment Classification)、观点抽取(Opinion Role Labeling),共计14个中英文数据上进一步验证了情感预训练模型SKEP的效果。实验表明,以通用预训练模型ERNIE(内部版本)作为初始化,SKEP相比ERNIE平均提升约1.2%,并且较原SOTA平均提升约2%,具体效果如下表: 任务 数据集合 语言 指标 原SOTA SKEP 数据集地址 句子级情感分类 SST-2 英文 ACC 97.50 97.60 下载地址 句子级情感分类 Amazon-2 英文 ACC 97.37 97.61 下载地址 句子级情感分类 ChnSentiCorp 中文 ACC 95.80 96.50 下载地址 句子级情感分类 NLPCC2014-SC 中文 ACC 78.72 83.53 下载地址 评价对象级的情感分类 Sem-L 英文 ACC 81.35 81.62 下载地址 评价对象级的情感分类 Sem-R 英文 ACC 87.89 88.36 下载地址 评价对象级的情感分类 AI-challenge 中文 F1 72.87 72.90 暂未开放 评价对象级的情感分类 SE-ABSA16_PHNS 中文 ACC 79.58 82.91 下载地址 评价对象级的情感分类 SE-ABSA16_CAME 中文 ACC 87.11 90.06 下载地址 观点抽取 MPQA-H 英文 b-F1/p-F1 83.67/77.12 86.32/81.11 下载地址 观点抽取 MPQA-T 英文 b-F1/p-F1 81.59/73.16 83.67/77.53 下载地址 观点抽取 COTE_BD 中文 F1 82.17 84.50 下载地址 观点抽取 COTE_MFW 中文 F1 86.18 87.90 下载地址 观点抽取 COTE_DP 中文 F1 84.33 86.30 下载地址 代码结构 一键化工具 为了降低用户的使用门槛,百度在SKEP开源项目中集成了面向产业化的一键式情感分析预测工具。具体安装和使用方法如下: 安装方法 本仓库支持pip安装和源码安装两种方式,使用pip或者源码安装时需要先安装PaddlePaddle,PaddlePaddle安装请参考安装文档。 pip安装 源码安装 使用方法 详细使用说明 项目下载 代码下载 下载代码库到本地 模型下载 下载情感分析预训练SKEP的中文模型和英文模型(本项目中开放了以ERNIE 1.0 large(中文)、ERNIE 2.0 large(英文)和RoBERTa large(英文)作为初始化,训练的中英文情感预训练模型) demo数据下载 下载demo数据用作SKEP训练和情感分析任务训练 环境安装 PaddlePaddle 安装 本项目依赖于 PaddlePaddle 1.6.3,PaddlePaddle安装后,需要及时的将 CUDA、cuDNN、NCCL2 等动态库路径加入到环境变量 LD_LIBRARY_PATH 之中,否则训练过程中会报相关的库错误。具体的paddlepaddle配置细节请查阅这里 安装文档。 推荐使用pip安装方式 senta项目python包依赖 支持Python 3 的版本要求 3.7; 项目中其他python包依赖列在根目录下的requirements.txt文件中,使用以下命令安装: 环境变量添加 在./env.sh中修改环境变量,包括python、CUDA、cuDNN、NCCL2、PaddlePaddle相关环境变量,PaddlePaddle环境变量说明请参考 PaddlePaddle环境变量说明 模型训练和预测 Pre-train训练 Finetune训练和预测句子级情感分类任务 Finetune训练和预测评价对象级的情感分类任务 Finetune训练和预测观点抽取或标注任务 该代码同时支持用户进一步开发使用,可以根据配置文件中设置相关数据、模型、优化器,以及修改模型的超参数进行二次开发训练。 本代码库目前仅支持基于SKEP情感预训练模型进行训练和预测,如果用户希望使用Bow、CNN、LSTM等轻量级模型,请移步至Senta v1使用。 Demo数据集说明 该项目中使用的各数据集的说明、下载方法及使用样例如下: 句子级情感分类数据集 ChnSentiCorp是中文句子级情感分类数据集,包含酒店、笔记本电脑和书籍的网购评论。为方便使用demo数据中提供了完整数据,数据示例: SST-2是英文句子情感分类数据集,主要由电影评论构成。为方便使用demo数据中提供了完整数据,数据集下载地址,数据示例: 评价对象级情感分类数据集 SE-ABSA16_PHNS是中文评价对象级情感分类数据集,主要由描述手机类别某个属性的商品用户评论构成。为方便使用demo数据中提供了完整数据,数据集下载地址,数据集示例如下: Sem-L数据集是英文评价对象级情感分类数据集,主要由描述笔记本电脑类别某个属性的商品用户评论构成。为方便使用demo数据中提供了完整数据,数据集下载地址,数据集示例如下: 观点抽取抽取数据集 COTE-BD数据集是中文互联网评论数据集。为方便使用demo数据中提供了完整数据,数据集下载地址,数据集使用例子如下,其中为了方便模型使用,下面数据是将文本进行分词处理后结果,标签用BIO标记评论实体或者事件。 MPQA数据集是英文互联网评论数据集。为方便使用demo数据中提供了完整数据,数据集下载地址,数据集使用例子如下,其中为了方便模型使用需要将文本进行分词处理,标签用BIO标记评论内容、评论实体和实体内容表达主体。 论文效果复现 基于该项目可以实现对于论文 Sentiment Knowledge Enhanced Pre-training for Sentiment Analysis 效果的复现。下面给出论文效果的复现方法示例: 注:如需要复现论文数据集结果,请参考论文修改对应任务的参数设置。 来源https://github.com/baidu/Senta

资源

基于深度学习的图片验证码的解决方案

项目介绍 基于深度学习的图片验证码的解决方案 - 该项目能够秒杀字符粘连重叠/透视变形/模糊/噪声等各种干扰情况,足以解决市面上绝大多数复杂的验证码场景,目前也被用于其他OCR场景。 该项目基于 TensorFlow 1.14 开发,旨在帮助中小企业或个人用户快速构建图像分类模型并投入生产环境使用,降低技术应用门槛。 编译版见附件2 网络结构 其使用的网络结构主要包含三部分,从下至上依次为: 输入OP: input , 输出OP: dense_decoded 卷积层:从输入图像中提取特征序列; 循环层,预测从卷积层获取的特征序列的标签(真实值)分布; 转录层,把从循环层获取的标签分布通过去重整合等操作转换成最终的识别结果; 可视化模型配置 为每个图像分类任务创建一个独立的项目,每个项目拥有完全独立的管理空间,方便多任务切换和管理。全程无需修改一行代码,根据模板生成模型配置,生成的配置文件可直接用模型部署服务。 本项目对应的部署服务支持同时部署多套模型,模型支持热拔插,版本迭代等,业务层可拓展颜色提取,算术运算等常见的验证码解决方案。 详情可参考:https://github.com/kerlomz/captcha_platform 特性 目前支持Windows平台的GPU编译版,无需安装环境,0基础建模。 项目化管理,适合容易被任务优先级安排的程序员们,同一份代码,不同的项目,随心切换,互不干扰。 新增样本集无需重新打包,可直接增量添加新的样本集,每个训练任务支持加载多个TFRecords文件。 解除循环层依赖的必须性,支持CNN5/ResNet50/DenseNet+CrossEntropy的怀旧组合模式。 提供智能建议性配置功能,选择样本源路径时可根据样本特性自动推荐字符集,设置尺寸,标签数等。 支持不定宽[-1, HEIGHT]的网络输入,在样本尺寸多样的场景下自动按比例缩放。 支持训练中的数据增广,如:指定范围的二值化/模糊/旋转/椒盐噪声等。 模板参数介绍 基本操作流程介绍 GPU环境 注意:如果你使用笔者编译好的版本,只需更新显卡驱动至最新,可以无视2.1、2.2的环境安装步骤。 如果你准备使用GPU训练,请先更新显卡驱动并安装CUDA和cuDNN,可以了解下官方测试过的编译版本对应: https://www.tensorflow.org/install/install_sources#tested_source_configurations Github上可以下载到第三方编译好的TensorFlow的WHL安装包: Windows : https://github.com/fo40225/tensorflow-windows-wheel Linux: https://github.com/mind/wheels CUDA下载地址:https://developer.nvidia.com/cuda-downloads cuDNN下载地址:https://developer.nvidia.com/rdp/form/cudnn-download-survey (需要注册账号) 笔者使用的版本为:CUDA10 + cuDNN7.6 + TensorFlow 1.14,此种组合可使用pip安装无需下载第三方编译的whl安装包。 Python环境 安装Python 3.7 环境(包含pip),可用conda替换。 安装虚拟环境 virtualenv pip3 install virtualenv 为该项目创建独立的虚拟环境: 安装本项目的依赖列表:pip install -r requirements.txt 建议开发者们使用 PyCharm 作为Python IDE 采集标注样本 笔者这个项目的初衷其实是爬虫遭遇各种验证码,验证码无处不在且需求堆积如山,由此,懒诞生了创造力。 图像分类问题,以验证码为例,用深度学习来解决无非就是训练标注样本。那么样本从何而来?这就是建模流程的第一步。 采集样本: 一般可以通过抓包得到对方网站的接口请求及参数,通过构造请求采集样本。 标注样本: 标注渠道是有一定讲究的,一般采用多个渠道组合,因为现在大多是机器识别,导致保存过滤下来的正确样本可能存在特征缺失,举个例子,这个渠道把所有的b都识别成a,为了避免这种情况建议通过多个渠道组合采集样本,以此保证图片特征的覆盖率。 验证样本:如何提交验证?比如如何从登录页面中获取样本,其实大多时候后端设计都会为了避免过多恶意的数据库访问而先验证验证码的准确性,例如可以提交明显错误的信息,输入不存在的用户名,将对方网站返回的“用户名不存在”作为验证码正确性的判断条件,当验证码错误时如返回“验证码错误”,则验证样本的流程便成立了。 打包样本 本框架喂数据只接收从TFRecords中读取,也就是样本需要先打包成TFRecords文件格式,样本打包的源目录路径关联的参数为: 打包完的TFRecords文件的路径关联的参数为: 项目配置好之后 ,可通过两种方法进行打包 make_dataset.py 打包 运行python make_dataset.py 项目名 方式打包,则需要加启动参数指定训练项目,请确保 projects/项目名 路径下存放各个项目的 model.yaml 配置文件。 app.py训练: 在界面中选择欲使用的网络结构,输入项目名并[回车]或者点击空白处 创建一个新项目 或者 选择一个已有的项目 ,通过 [Browse] 选择训练集路径 后,点击 [Make Dataset] 开始打包 ,中途若终止进程文件将损坏,需要手动至项目路径中删除其未打包完成的样本集,[Validation Path] 可以不选,如若不选,系统将根据 [Validation Set Num] 配置的参数自动分配该数量的验证集, 注意:手动配置训练集的时候请保证验证集的随机性以及特征覆盖率,如若不明笔者所语,请勿手动配置 设置训练配置 使用app.py运行的界面化配置生成器在选择样本源的时候会自动进行基本的配置如:[Resize],[Size],[Label Num] 等。至于 [Label Num] 只在使用CrossEntropy为损失函数时有效。 Resize的使用 因为网络为多标签而设计,卷积层的输出 outputs 经过了以下变换: 为了保证运算 int(outputs_shape[1] / label_num) 能够取得正整数,也意味着他们之间存在某种关系,对于CNN5+Cross Entropy的网络结构,Conv2D层的步长皆为1,那么需要保证以下关系成立: $$ mod(\frac{输入宽度\times输入高度\times输出层参数}{池化步长^{池化层数}\times标签数})= 0 $$ 所以有时候需要Resize网络输入的Shape 例如使用CNN5+CrossEntropy组合,则输入宽度与输入高度需要满足: $$ mod(\frac{输入宽度\times输入高度\times64}{16\times标签数})= 0 $$ 同理如果CNN5+RNN+CTC,卷积层之后的输出经过以下变换: 原输出(batch_size, outputs_shape[1], outputs_shape[2], outputs_shape[3]),RNN层的输入输出要求为(batch, timesteps, num_classes),为了接入RNN经过以上操作,那么又引出一个Time Step的概念,所以timesteps的值也是 outputs_shape[1],而CTC Loss要求的输入为 [batch_size, frames, num_labels],若是 timesteps 小于标签数则无法计算损失,也就无法找损失函数中找到极小值,梯度何以下降。timesteps 最合理的值一般是标签数的2倍,为了达到目的,也可以通过Resize网络输入的Shape解决,一般情况timesteps直接关联于图片宽度。 ExtractRegex 参数: 正则匹配,请各位采集样本的时候,尽量和我给的示例保持一致吧,正则问题请谷歌,如果是为1111.jpg这种命名的话,这里提供了一个批量转换的代码: 开始训练 trains.py训练: 如果单独调用 python trains.py 项目名 方式训练,则需要加启动参数指定训练项目,请确保 projects/项目名 路径下存放各个项目的 model.yaml 配置文件。 app.py训练: 在界面中配置好参数后,点击 [Start Training] 开始训练,中途若需终止训练可点击 [Stop] 停止,若是未达到结束条件而终止任务,可以手动点击 [Compile] 编译。 项目结构 注意事项 如何使用CPU训练: 本项目默认安装TensorFlow-GPU版,建议使用GPU进行训练,如需换用CPU训练请替换 requirements.txt 文件中的tensorflow-gpu==1.14.0 为tensorflow==1.14.0,其他无需改动。 参数修改: 切记,[ModelName] 是绑定一个模型的唯一标志,如果修改了训练参数如:[Resize],[Category],[CNNNetwork],[RecurrentNetwork],[UnitsNum] 这类影响计算图的参数,需要删除model路径下的旧文件,重新训练,或者使用新的 [ModelName] 重新训练,否则默认作为断点续练。 在可视化版本中,[Neural Net] 组中的配置,除了学习率 [Learning Rate] 和图片尺寸 [Size] 设置以外,任何改动都需要先 [Reset History] 转载自:https://github.com/kerlomz/captcha_trainer

资源

发票识别系统

项目介绍 识别类型:预定电子普通票,替换普通票,预定专用票;识别区分为:机票代码,票务号码,开票日期,补码,税后金额等。 环境要求 python3.5 / 3.6 依赖项安装:pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 有GPU环境的可修改安装requirements.txt对应版本的tensorflow-gpu,config.py文件中控制GPU的开关 模型架构 YOLOv3 + CRNN + CTC 模型 模型下载地址:链接:下载 将下载完成的模型文件夹models放置于项目根目录下 服务启动 python3 app.py 可以可自行修改 服务调用地址:http:// 。。。:[端口号] / invoice-ocr,例:http : //127.0.0.1 :11111/invoice-ocr 测试demo 测试工具:postman,可自行下载安装 扩展电子普票测试结果 扩展专用普票测试结果 补充普通普票测试结果 参考 https://github.com/chineseocr/chineseocr 转载自:https://github.com/guanshuicheng/invoice

计算机

计算机·圈子   首发

侧卫 更新了
资源

2020年AI新基建白皮书-国家工业信息安全发展研究中心-2021年1月

内容 当前,“十四五”进入开局之年,全球疫情持续影响、宏观环境复杂多变,我国正处于经济结构调整、产业转型升级的关键时期。以 AI 新基建为代表的新型基础设施能够对冲疫情影响、拉动经济发展、助力满足人民日益增长的美好生活需要,是打通国内国际“双循环”的重要着力点。 在各级政府、行业企业、资本市场、科研机构的合力推动下,我国 AI 新基建呈现蓬勃发展态势。一方面,通过智算中心、公共数据集、开源框架、开放平台等基础设施发挥平台支撑作用,有力支撑人工智能发展;另一方面,通过人工智能的技术赋能性,推动制造、医疗、交通、能源、金融等传统行业转型升级,有力支撑智能经济发展。 与此同时,我国 AI 新基建在技术、数据、融合、安全等方面仍面临着一定挑战,应加大力度筑牢基础、激发活力,加快核心技术攻关、推动应用深化落地、构建公共服务平台、加强安全风险管理,进一步发挥 AI 新基建的技术赋能作用 和公共基础作用,驱动产业转型升级、助力经济高质量发展。 目录 一、AI 新基建的内涵及作用 (一)AI 新基建的内涵 (二)AI 新基建的作用 1.内生动力:AI 算力、数据、算法支撑人工智能持续创新发展 2.外部赋能:AI 应用解决方案推动传统行业转型升级 二、AI 新基建发展现状 (一)总体态势 1.我国高度重视 AI 新基建发展 2.地方政府积极布局 AI 新基建 3.AI 新基建投资市场不断升温 4.AI 新基建成为重点科研方向 5.各类企业主体发力 AI 新基建 (二)细分领域 1.AI 算力成为重点发力方向,市场规模不断增长 2.AI 数据逐步迈向开放化、专业化,高质量数据集成为重点 3.AI 算法持续深化赋能,开源生态初步显现 4.“AI+制造”热度不断攀升,各类主体同发力 5.“AI+医疗”发展环境逐步成熟,应用进程不断加速 6.“AI+交通”加速落地,呈现“三足鼎立”的市场竞争格局 7.“AI+能源”市场需求旺盛,行业巨头纷纷入局..33 8.“AI+金融”正式步入落地阶段,应用不断纵深发展 三、AI 新基建发展面临的挑战 (一)AI 算力、算法对外依存度较高,基础技术仍有不足 (二)AI 数据采集、流通和使用仍有壁垒,数据价值释放不足 (三)AI 赋能路径、规则和人才存在制约,融合发展仍待深化 (四)AI“双刃剑”问题进一步叠加放大,风险管理亟需增强 四、AI 新基建发展对策建议 (一)加强高端芯片、核心算法等基础技术攻关 (二)进一步发挥 AI 应用解决方案赋能作用 (三)加大力度构建人工智能基础资源公共服务平台 (四)加强人工智能安全风险管理体系建设 发布单位:国家工业信息安全发展研究中心 发布时间:2021年1月

计算机

计算机·圈子   首发

侧卫 更新了
资源

全球AI技术趋势发展演进-机器之心-2021

内容 2017 年,机器之心就发布了《机器之心人工智能技术趋势报告》,系统介绍了人工智能领域(AI)下不同的技术分支,并以定性分析的方法讨论了各分支技术当时所处的发展阶段、瓶颈以及未来发展方向,帮助读者理解飞速发展中的AI 领域内各项技术的概况和层出不穷的新鲜技术内涵。在初版报告发布至今的这三年里,越来越多的 AI 技术实现了商业落地,但也有不少深度学习方法开始触碰到技术自身的天花板,亟需突破。在这个可能是 AI 技术发展的关键拐点,我们发布《2020-2021 全球 AI 技术趋势发展报告》,兼顾 2017 年初版报告定性分析方法的同时,重点加强了数据层面的挖掘、分析和探索,更加侧重对具体技术趋势的挖掘以及量化分析指标的形成。定量研究方面,本报告基于近五年的开源论文与专利语料,结合机器之心自有的新闻舆论以及模型最佳表现(SOTA)等相关数据库进行了探索性数据分析,并形成了用以帮助技术趋势判定的量化指标 Synced Indicator;定性研究方面,机器之心邀请了近 100 位专家学者通过问卷形式了解其对具体技术成熟情况的分析判断。报告分 Lite(简要版)与 Plus(完整版)两个版本。当前的 Lite 版涵盖“顶会趋势(NeurIPS)分析”、“2020-2021 技术趋势总结”两个主要部分,同时包含“参考文献”、“近年技术领域相关大事件”以及“Synced Indicator 技术指标”的附录供参考。另有 Plus 版在 Lite 版的基础上增加了包含完整数据和丰富图表的各技术领域趋势分析细节,同时在附录介绍了具体的数据来源、分析方法、研究局限以及未来研究方向供参考。 目录 前言 章节一:顶会趋势(NeurIPS)分析 1-1 发表论文作者相关数据情况 1-2 发表论文机构相关数据情况 1-3 趋势分析 1-3-1 论文热门主题 1-3-2 知名机构关注论文主题 1-3-3 报告相关热门技术 1-3-4 趋势小结 章节二:2020~2021 技术趋势总结 2-1 背景 2-2 人工智能技术总趋势 2-3 人类语言技术趋势 2-4 计算机视觉技术趋势 2-5 机器人与自动化技术趋势 2-6 机器学习技术趋势 2-7 智能基础设施技术趋势 2-8 数据智能技术趋势 2-9 前沿智能技术趋势 章节三:2020~2021 技术趋势分析详解 3-1 人类语言技术 3-2 计算机视觉 3-3 机器人与自动化技术 3-4 机器学习 3-5 智能基础设施 46 3-6 数据智能技术 3-7 前沿智能技术 附录 I:技术趋势分析方法、数据及局限 附录 II:技术领域相关大事件 (2015~2020) 附录 III:Synced Indicators 附录 IV:参考文献 发布单位:机器之心 发布时间:2021年1月

资源

【demo】基于paddle的YOLOv3车辆检测和类型识别

yolov3-vehicle-detection-paddle vehicle-detection based on yolov3(基于paddle的YOLOv3车辆检测和车辆类型识别) 使用 Paddle 开源的两个工具:PaddleDetection 和 X2Paddle 来进行一个车辆检测和类型识别的小demo~ 最终检测效果如图: PaddleDetection 简介 源码地址:https://github.com/PaddlePaddle/PaddleDetection 官方文档:https://paddledetection.readthedocs.io/ PaddleDetection 创立的目的是为工业界和学术界提供丰富、易用的目标检测模型。不仅性能优越、易于部署,而且能够灵活的满足算法研究的需求。 简而言之就是,该工具使用百度开源的 Paddle 框架,集成了多种图像识别和目标检测框架,并且提供了相应的训练、推理和部署工具,使得用户可以自己 DIY 数据集和模型细节,实现深度学习落地应用的快速部署。 特点: 1.易部署:PaddleDetection的模型中使用的核心算子均通过C++或CUDA实现,同时基于PaddlePaddle的高性能推理引擎可以方便地部署在多种硬件平台上。 2.高灵活度:PaddleDetection通过模块化设计来解耦各个组件,基于配置文件可以轻松地搭建各种检测模型。 3.高性能:基于PaddlePaddle框架的高性能内核,在模型训练速度、显存占用上有一定的优势。例如,YOLOv3的训练速度快于其他框架,在Tesla V100 16GB环境下,Mask-RCNN(ResNet50)可以单卡Batch Size可以达到4 (甚至到5)。 支持的主流模型包括: 并且支持多拓展性: 该工具使得开发者只需修改相应的 yml 格式参数文件,即可一键 DIY 并训练自己的模型: 配置环境并安装 Paddle (本机配置:1050Ti,CUDA10.0) 安装 anaconda: 创建 python 环境: conda create -n paddle_env python=3.6 激活环境: conda activate paddle_env 使用清华源安装依赖库(如opencv-python,matplotlib,Cython等): pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U 库名 --default-time=1000 --user 安装 paddlepaddle: python -m pip install paddlepaddle-g 清华源安装也可以: 进入 python 环境并测试: python 安装 PaddleDetetion 新建一个文件夹,在该目录激活环境: 克隆 PaddleDetection 模型库: 再次安装依赖库: 指定当前 Python 路径然后测试: 调试 YOLOv3 代码: 安装 cocotools: 下载模型的权重文件,地址: https://github.com/PaddlePaddle/PaddleDetection/blob/release/0.2/docs/featured_model/CONTRIB_cn.md 解压到文件目录: 检测这里的几张图片: 检测结果保存在 contrib\VehicleDetection\demo 目录下: YOLO 系列算法详解: YOLO算法采用一个单独的卷积神经网络实现了端到端的的目标检测[3],其算法的基本流程为:首先将输入图片通过双线性插值的方法放缩到统一大小(文中使用448×448大小)并划分成互不重叠的网格,然后将放缩后的图像矩阵送入卷积神经网络提取高维语义特征,最后通过全连接层预测每个网格内存在目标的概率,并预测目标的坐标框位置。由于无需RPN网络提取感兴趣区域,所以YOLO的网络结构十分简洁,如图所示: YOLO的卷积神经网络(也称之为主干网络)将输入的图片分割成大小相同、互不重叠的单元格,然后每个单元格在卷积提取特征的过程中同时参与计算。提取特征后,每个单元格对应特整层上的特征向量通过全连接层负责去检测那些中心点落在该单元格内的目标,从而输出相应位置存在目标类别的概率和目标的预测坐标,如图所示: YOLO将原图化分车7×7的49个单元格,主干网络依然采用了分类网络,但最后两层使用了全卷积层,最终输出一个 7×7×30 的特征层,其中每个特征点包含的特征向量代表了每个单元格的特征。这样对于每个区域的特征向量,YOLO分别使用全连接层输出预测,相应的预测值包括: 该区域可能包含的相应目标的个坐标框的4个预测坐标值(文中 B=2),分别为{x,y,w,h},同时输出这B个预测框的置信度,选取置信度最高的那个预测框作为最终的结果; 该区域可能包含的目标的分类置信度,该置信度记为C,是一个长度为分类书的概率向量,使用softmax函数作为激活函数; 其置信度定义为: IOU即相应物体预测框与真值框的交并比。因此每个区域生成30个预测值,最后全连接层的输出大小为S×S×30。这里使用B个预选框并生成置信度,是为了使得网络能够在同一个单元格内预测重叠目标,从而提高预测结果的容错率。增大B可以提高模型的鲁棒性,但相应的全连接层的计算复杂度也会大大提高。 此外,为了避免使用Relu函数激活而造成的特征丢失问题,作者在YOLO中将所有的Relu改为Leacky Relu激活: 最终的网络结构如图所示: YOLOv2: YOLO算法采用网格划分来检测不同区域的目标,但是由于网络结构较为简单,保证检测速度下精度还有很大的提升空间。因此作者在 YOLO 的基础上,使用了批量标准化来规范特征数据分布并加速收敛;使用高分辨率的图像作为分类器的输入,从而提高检测的精度;加入预选框的概念,提高小目标的检测精度。由此提出了一个更为高效的目标检测算法,称之为YOLO v2。并在此基础上,使用联合训练(Joint Training)算法,能够在有大量分类的图像识别数据集训练目标检测任务(只有分类的loss参与梯度下降),由此训练出的YOLO 9000能够识别和检测超过9000个物体类别。 Batch Normalization在Inception V2中提出的方法,用来替代ResNet使用的残差结构,防止梯度消失的问题。该算法将一个批次的特征值矩阵,通过简单的线性变换,转换为均值为0、方差为1的正太分布上,从而使网络中每一层的特征值大体分布一致。因此每层的梯度不会随着网络结构的加深发生太大变化,从而避免发生梯度爆炸或者梯度消失等问题。因此作者在YOLO中大量使用了Batch Normalization,使得相比原来的YOLO算法mAP上升了2%。计算过程为: (1)计算数据的均值u; (2)计算数据的方差σ^2; (3)通过公式 x’=(x-u)/√(σ^2+ε)标准化数据; (4)通过公式 y=γx’+β 进行缩放平移; 为了解决预测框对于小目标和重叠目标检测精度缺失的问题,作者不再使用YOLO采用网格分割+全连接预测坐标的方法,而是采用了跟SSD、 Faster-RCNN等相似的预选框的方法。 因此YOLOv2中移除了全连接层和最后一个下采样层,来最终得到一个较大的特整层。并且为了使图像最后的预测具有单中心网格,作者使用了416×416 大小作为输入,下采样参数为32,最后得到了一个 13×13大小的特征层;在使用Anchor Boxes之后,虽然mAP下降了0.3%,但是召回率从81%上升到了88%。 并且为了融合目标分类需要的高层语义特征和目标检测需要的低层轮廓特征,YOLOv2还设计了Pass Through层,即取出了最后一个池化层的特整层,(大小为 26×26×512),将每个2×2局部空间区域转换成通道特征,最后得到了一个13×13×4048的用于预测的特征层。 作者在训练时采用了 32 倍数的输入大小为,分别为:320,352,...,608,每 10 个 epoch 重新随机选取一个输入大小; YOLOv3: YOLOv3在网络结构上并没有太大改动,主要是将YOLOv2提出后目标检测领域提出的一些模型结构和训练技巧融合到了YOLO框架中。 作者首先在主干网络DarkNet-19的基础上加入了残差结构,使得它在 ImageNet上的表现跟ResNet-101相差无几,但是处理速度却快得多。 此外YOLOv3中,每个单元格对应使用了三个不同比率和大小的预选框,并且还构建了跟FPN目标检测算法相似的特征金字塔,利用不同大小、不同深度的特整层进行不同大小目标的预测。 在特征金字塔中,YOLOv3共选出了3个通过反卷积得到的特征层去检测不同大小的物体,这三个特征层大小分别为:13,26,52。特征金字塔使用卷积网络生成的金字塔型的特征层(左),生成一个融合了高度语义信息和低维特征信息的特征金字塔(右),再在这些特征金字塔的不同层上,使用不共享权重的不同卷积层预测目标的类别和检测框坐标: 检测自己的数据: 使用 VSCode,选择好配置的环境: 测试图片 将图片路径修改为自己的路径即可: 测试视频 将图片视频修改为自己的路径即可: 使用 X2Paddle 进行模型转换 这里本项目使用的是 torch 的开源车辆类型识别模型,并使用 X2Paddle 工具将其转换为 Paddle 模型; X2Paddle 源码地址: https://github.com/PaddlePaddle/X2Paddle 深度学习的应用主要包括两个部分,一是通过深度学习框架训练出模型,二是利用训练出来的模型进行预测。 开发者基于不同的深度学习框架能够得到不同的训练模型,如果想要基于一种框架进行预测,就必须要解决不同框架的模型之间的匹配问题。基于这种考虑,也为了帮助用户快速从其他框架迁移,PaddlePaddle开源了模型转换工具X2Paddle。 它可以将TensorFlow、Caffe 的模型转换为PaddlePaddle的核心框架Paddle Fluid可加载的格式。同时X2Paddle还支持ONNX格式的模型转换,这样也相当于支持了众多可以转换为ONNX格式的框架,比如PyTorch、MXNet、CNTK等。 下载 torch 源码: 源码地址:https://github.com/Sharpiless/Paddle-Car-type-recognition 下载解压: 下载权重文件,放到 src 文件夹下面: 链接:https://pan.baidu.com/s/1fBwOr9PM9S7LmCgRddX0Gg 提取码:pv6e 首先运行 torch2onnx.py,将 pth 模型转换为 onnx 中间模型: 然后运行: x2paddle --framework=onnx --model=classifier.onnx --save_dir=pd_model 可以看到生成了相应的 Paddle 模型; 此时将 model.py 替换为: 然后创建调用 Paddle 模型的 test_img.py: 运行测试: 转载自:https://github.com/Sharpiless/yolov3-vehicle-detection-paddle

资源

基于TensorFlow2.0的中文汉字手写体识别

TensorFlow 2.0 中文手写字识别(汉字OCR) 让我们来看一下,相比于简单minist识别,汉字识别具有哪些难点: 搜索空间空前巨大,使用的数据集1.0版本汉字就多大3755个,如果加上1.1版本一起,总共汉字可以分为多达7599+个类别!这比10个阿拉伯字母识别难度大很多! -数据集处理挑战更大,相比于mnist和fasionmnist来说,汉字手写字体识别数据集非常少,而且仅有的数据集数据预处理难度非常大,非常不直观。 汉字识别更考验选手的建模能力,还在分类花?分类猫和狗?随便搭建的几层在搜索空间巨大的汉字手写识别里根本不work!模型太简单和太复杂都不好,甚至会发散! 本项目实现了基于CNN的中文手写字识别,并且采用标准的tensorflow 2.0 api 来构建!相比对简单的字母手写识别,本项目更能体现模型设计的精巧性和数据增强的熟练操作性,并且最终设计出来的模型可以直接应用于工业场合,比如 票据识别, 手写文本自动扫描 等,相比于百度api接口或者QQ接口等,具有可优化性、免费性、本地性等优点。 数据准备 在开始之前,先介绍一下本项目所采用的数据信息。本项目的数据全部来自于CASIA的开源中文手写字数据集,该数据集分为两部分: CASIA-HWDB:离线的HWDB,本项目仅仅使用1.0-1.2,这是单字的数据集,2.0-2.2是整张文本的数据集,本项目暂时不用,单字里面包含了约7185个汉字以及171个英文字母、数字、标点符号等; CASIA-OLHWDB:在线的HWDB,格式一样,包含了约7185个汉字以及171个英文字母、数字、标点符号等,本项目不用。 其实你下载1.0的train和test差不多已经够了,可以直接运行 dataset/get_hwdb_1.0_1.1.sh 下载。原始数据下载链接点击这里. 由于原始数据过于复杂,本项目使用一个类来封装数据读取过程. 看到这么密密麻麻的文字相信连人类都.... 开始头疼了,这些复杂的文字能够通过一个神经网络来识别出来??答案是肯定的.... 不有得感叹一下神经网络的强大。。上面的部分文字识别出来的结果是这样的: 关于数据的处理部分,从服务器下载到的原始数据是 trn_gnt.zip 解压之后是 gnt.alz, 需要再次解压得到一个包含 gnt文件的文件夹。里面每一个gnt文件都包含了若干个汉字及其标注。直接处理比较麻烦,也不方便抽取出图片再进行操作,虽然转为图片存入文件夹比较直观,但是不适合批量读取和训练, 后面本项目统一转为tfrecord进行训练。 更新: 实际上,由于单个汉字图片其实很小,差不多也就最大80x80的大小,这个大小不适合转成图片保存到本地,因此本项目将hwdb原始的二进制保存为tfrecord。同时也方便后面训练,可以直接从tfrecord读取图片进行训练。 在存储完成的时候大概处理了89万个汉字,总共汉字的空间是3755个汉字。由于暂时仅仅使用了1.0,所以还有大概3000个汉字没有加入进来,但是处理是一样。使用本仓库来生成你的tfrecord步骤如下: cd dataset && python3 - ---convert_to_tfrecord.py, 请注意使用的是tf2.0; 你需要修改对应的路径,等待生成完成,大概有89万个example,如果1.0和1.1都用,那估计得double。 模型构建 采用的OCR模型的构建,本想怒构建了3个模型分别做测试,三个模型的复杂度逐渐的复杂,网络层数逐渐深入。但是到最后发现,最复杂的那个模型竟然不收敛。这个其中一个稍微简单模型的训练过程: 大家可以看到,准确率可以在短时间内达到87%非常不错,测试集的准确率大概在40%,由于测试集中的样本在训练集中完全没有出现,相对训练集的准确率来讲偏低。可能原因无外乎两个,一个事模型泛化性能不强,另外一个原因是训练还不够。 不过好在这个简单的模型也能达到训练集90%的准确率,it's a good start. 让我们来看一下如何快速的构建一个OCR网络模型: 这是使用keras API构建的一个模型,它足够简单,仅仅包含两个卷积层以及两个maxpool层。即便是再简单的模型,有时候也能发挥出巨大的用处,对于某些特定的问题可能比更深的网络更有用途。关于这部分模型构建大家只要知道这么几点: 如果你只是构建序列模型,没有太fancy的跳跃链接,你可以直接用keras.Sequential 来构建你的模型; Conv2D中最好指定每个参数的名字,不要省略,否则别人不知道你的写的事输入的通道数还是filters。 数据输入 其实最复杂的还是数据准备过程啊。这里着重说一下,本项目的数据存入tfrecords中的事image和label,也就是这么一个example: 然后读取的时候相应的读取即可,这里告诉大家几点坑爹的地方: 将numpyarray的bytes存入tfrecord跟将文件的bytes直接存入tfrecord解码的方式事不同的,由于本项目的图片数据不是来自于本地文件,所以本项目使用了一个tobytes()方法存入的事numpy array的bytes格式,它实际上并不包含维度信息,所以这就是坑爹的地方之一,如果你不同时存储width和height,你后面读取的时候便无法知道维度,存储tfrecord顺便存储图片长宽事一个好的习惯. 关于不同的存储方式解码的方法有坑爹的地方,比如这里本项目存储numpy array的bytes,通常情况下,你很难知道如何解码。 最后load tfrecord也就比较直观了: 这个v2的版本就是兼容了新的存入长宽的方式 注意这行代码: 它是对raw bytes进行解码,这个解码跟从文件读取bytes存入tfrecord的有着本质的不同。同时注意type的变化,这里以unit8的方式解码,因为存储进去的就是uint8. 训练过程 一开始写了一个很复杂的模型,训练了大概一个晚上结果准确率0.00012, 发散了。后面改成了更简单的模型才收敛。整个过程的训练pipleline: 以下为应该遵守几条准则: 自动寻找之前保存的最新模型; 自动保存模型; 捉ctrl + c事件保存模型。 支持断点续训练 训练结果: 模型测试 这是大概2000次训练的结果, 基本上能识别出来了 转载自:https://github.com/jjcheer/ocrcn_tf2

资源

豆瓣电影推荐系统

DoubanMovieRecommendationSystem 介绍 豆瓣电影推荐系统——通过爬取电影数据和用户数据,再利用所爬取的数据设计并实现相关推荐算法对用户进行电影推荐。然后设计出图形用户界面(GUI)进行交互,封装成电影推荐软件,针对数据集中的用户推荐相关电影。 主要分为三大模块: 爬虫模块:request 库、json 库、MySQL 推荐系统模块:基于物品的协同过滤算法(ItemCF 算法) GUI 模块:PyQt5 操作说明 运行 GUI 文件夹中的 main.py 文件即可。 算法 ItemCF 算法不利用物品的内容属性计算物品之间的相似度,而是通过分析用户的行为记录计算物品之间的相似度。ItemCF 算法认为,物品 A 和物品 B 具有很大的相似度是因为喜欢物品 A 的用户大都也喜欢物品 B。 ItemCF 算法步骤: 计算物品之间的相似度。 根据物品的相似度和用户的历史行为给用户生成推荐列表。 简单来说,ItemCF 算法给用户推荐那些和他们之前喜欢的物品相似的物品。 举个例子: 说明 登录注册界面 登录注册界面是经典的用户图形界面,在 QQ 等平台都有类似的界面,在 users_info.csv 数据集中随便选取一名用户的用户名和密码输入,即可成功登录。 用户主界面 电影搜索界面 进入用户主界面之后,通过点击“电影搜索”按钮,可以进入电影搜索界面,该搜索界面支持模糊搜索。例如输入复仇者联盟,即可看到复仇者联盟这一系列的电影。 电影详情界面 在用户主界面中,通过点击“电影详细页面”按钮,可以进入电影详细信息的搜索界面,通过输入完整的电影名称(例如:千与千寻),我们可以了解电影的详细信息,如导演、编剧、主演、电影简介等信息都可以看到。 用户个人界面 进入主界面后,有一个“个人主页”按钮,点击之后,简单的个人信息显示如下 优化 用户的冷启动问题 用户新注册时,会弹出一个窗口,询问用户喜欢的电影类型,此处输入“喜剧”进行测试,可以看到,根据用户喜欢的电影类型给用户进行了个性化推荐。 转载自:https://github.com/Giyn/DoubanMovieRecommendationSystem

资源

用于年龄估算的紧凑型软件阶段回归网络

SSR网络 [IJCAI18] SSR-Net:用于年龄估算的紧凑型软件阶段回归网络 具有0.32MB的实时年龄估算模型。 还添加了性别回归! https://github.com/b02901145/SSR-Net_megaage-asian 提供了Megaage-Asian https://github.com/shamangary/Keras-to-coreml-multiple-inputs-example 中提供了Coreml模型(0.17MB) 结果展示 参考论文 作者:Tsun-Yi Yang, Yi-Husan Huang, Yen-Yu Lin, Pi-Cheng Hsiu, and Yung-Yu Chuang 论文摘要 本文提出了一种新颖的CNN模型,称为“软分段回归网络(SSR-Net)”,用于从具有紧凑模型尺寸的单个图像进行年龄估算。受DEX启发,本项目通过执行多类别分类然后通过计算期望值将分类结果转换为回归来解决年龄估计问题。SSR-Net采用从粗到精的策略,并执行多个阶段的多类分类。每个阶段仅负责完善前一阶段的决策。因此,每个阶段执行的任务很少,而且所需的神经元也很少,从而大大减小了模型的大小。为了解决将年龄分组到类别中引入的量化问题,SSR-Net通过允许根据输入的面部图像进行移动和缩放来为每个年龄类别分配动态范围。多阶段策略和动态范围都被纳入到软阶段回归的公式中。提出了一种新颖的网络架构来进行软件的逐步回归。生成的SSR-Net模型非常紧凑,仅需0.32 MB。尽管具有紧凑的尺寸,但SSR-Net的性能仍能与模型尺寸大1500倍的最新方法相媲美。 平台 Keras Tensorflow GTX-1080Ti Ubuntu 依赖 A guide for most dependencies. (in Chinese) http://shamangary.logdown.com/posts/3009851 Anaconda OpenCV dlib MTCNN for demo pip install mtcnn MobileNet (already in the codes) https://github.com/fchollet/keras/blob/master/keras/applications/mobilenet.py DenseNet (already in the codes) https://github.com/titu1994/DenseNet Face alignment (already in the codes) https://github.com/xyfeng/average_portrait Others 代码 该项目分为三个不同的部分。 数据预处理 培训与测试 视频演示部分我们将在以下各节中详细介绍。 该存储库适用于IMDB,WIKI和Morph2数据集。 数据预处理 从https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/ 下载IMDB-WIKI数据集(仅面部)。 Morph2数据集需要申请表格 https://www.faceaginggroup.com/?page_id=1414 https://ebill.uncw.edu/C20231_ustores/web/classic/product_detail.jsp?PRODUCTID=8 将它们解压缩到“ ./data”下 运行以下代码进行数据集预处理。 训练和测试 通过随机选择80%的数据集作为训练和20%的数据集作为验证(或测试)来完成实验。本文中每个数据集中的设置详细信息。 对于MobileNet和DenseNet: 对于SSR-Net: 请注意,在此代码中提供了几种不同的超参数组合。如果只需要单个超参数集,请在“ run_ssrnet.sh”中更改命令。 绘制结果: 例如,在训练IMDB数据集之后,想要绘制曲线和结果。将“ plot.sh”,“ ssrnet_plot.sh”和“ plot_reg.py”复制到“ ./imdb_models”中。以下命令应标出训练过程的结果。 视频演示部分 纯CPU演示命令: 注意:你可以选择其他预先训练的模型。但是,morph2数据集处于良好控制的环境中,并且比IMDB和WIKI小得多,来自morph2的预训练模型可能在野外图像上表现出色。因此,对于野外图像或视频演示,建议使用IMDB或WIKI预训练模型。 由于面部数据井井有条,因此本项目在上一个实验部分中使用了dlib检测和面部对齐。但是,dlib无法为野生视频提供令人满意的人脸检测。因此,在演示部分中,本项目将mtcnn用作检测过程。 实时摄像头演示 考虑到人脸检测过程(MTCNN或Dlib)还不够快,无法进行实时演示。本项目通过使用lbp人脸检测器显示实时网络摄像头版本。 请注意,当使用MTCNN,Dlib或LBP时,面部检测的覆盖区域是不同的。你应该在推理和训练之间选择相似的大小。 同样,预训练的模型主要用于数据集的评估。它们并非真正用于真实世界的图像。你应该始终通过自己的数据集重新训练模型。在网络摄像头演示中,发现morph2预训练模型实际上比wiki预训练模型表现更好。讨论将包含在项目的未来工作中。 如果是亚洲人,则可能要使用megaage_asian预训练模型。 Morph2预先训练的模型非常适合网络摄像头,但是性别模型过拟合且不实用。 扩展 训练性别模型 可以将二进制分类问题重新构造为回归问题,并且可以使用SSR-Net来预测置信度。例如,本项目在扩展代码中提供了性别回归和演示。 训练性别网络: 分数可以在[0,1]之间,并且对于一般提议回归,可以将SSR-Net内部的'V'更改为1。 第三方 MXNET: https://github.com/wayen820/gender_age_estimation_mxnet pytorch: https://github.com/oukohou/SSR_Net_Pytorch Pytorch: https://github.com/CrazySummerday/SSR-Net 转载自:https://github.com/shamangary/SSR-Net

  • 1
  • 93
  • 94
  • 95
  • 168
前往