8559 位酷友已加入
计算机圈子中包含常用的技术文档、源代码、模型、数据集、学习教程、技术报告等干货资料,加入圈子可以上传、下载资料,也可以使用提问来寻求资料或分享你认为有价值的站外链接~
介绍 近期,中山大学为VQA模型评估提出了一个基于常识的无偏视觉问答数据集(Knowledge-Routed Visual Question Reasoning,KRVQA)。考虑到理想的VQA模型应该正确地感知图像上下文,理解问题并整合其学习的知识,KRVQA数据集旨在切断当前深度模型所利用的快捷学习,并推动基于知识的视觉问题推理的边界研究。 具体而言,基于视觉基因组场景图和带有受控程序的外部知识库生成问题--答案对,可以将知识与其他偏差中分离出来。从图像场景图或知识库中选择一个或两个三元组进行多步推理,并平衡答案分布,避免答案歧义。与现有的VQA数据集相反,知识推理的两个主要约束为: 一个问题必须与知识库中的多个三元组相关,但只有一个三元组与图像对象有关。这强制VQA模型正确地感知图像,而不是仅仅基于给定的问题猜测知识。 所有问题都基于不同的知识库三元组,但是训练集和测试集的候选答案集合相同。 数据集 “question_answer_reason.json”是生成的问题答案对样本。它包含一个问题答案对样本列表。每个样本都有以下字段: “question”:问题原始文本。 “answer”:答案原始文本。 "level”:此问题的推断步骤。 “ KB”:0或1,指示是否使用外部知识库生成此问题。 “ qtype”:本文中描述的问题类型。 “reason”:一个列表,其中包含Visual Genome中使用的场景图三元组或FVQA中的知识三元组(“ all_fact_triples_release.json”)。 “ image_id”:视觉基因组的图像ID。 “ question_id”:此问题的ID问题。 “ splits.json”包含我们的训练/验证/测试分组的问题ID。包括: “train”:训练“ question_id”列表 “val”:验证“ question_id”列表 “test”:测试“ question_id”列表 图像的特征和场景图注释可以从Visual Genome官方网站下载。 基础知识由FVQA [1]提供,可以从dropbox下载。我们使用“ new_dataset_release / all_fact_triples_release.json”作为完整的外部知识库。 来源http://www.sysu-hcp.net/resources/
项目描述 这是 Leon A. Gatys,Alexander S. Ecker和Matthias Bethge撰写的论文“基于神经网络的艺术风格处理”的基于Torch的实现。 此文章提出了一种使用卷积神经网络将一幅图像的内容与另一幅图像的样式相结合的算法。这是一个将《星夜》的艺术风格映射 到斯坦福大学校园夜间照片的示例 : 将不同图像的样式应用于相同的内容图像可获得有趣的结果。 内容/风格权衡 该算法允许用户权衡样式和内容重建术语的相对权重,如本示例所示,在该示例中,将毕加索1907年自画像的样式移植到了布拉德·皮特照片上: 风格量表 通过在提取样式特征之前调整样式图像的大小,可以控制从样式图像转移来的艺术特征的类型。你可以使用该-style_scale标志控制此操作。下面会看到三个以“星夜”风格渲染金门大桥的示例。从上到下分别-style_scale是2.0、1.0和0.5。 样式插值 使用多个样式图像时,可以控制它们的融合程度: 转印风格但不彩色 如果添加标志,-original_colors 1则输出图像将保留原始图像的颜色 项目设置 基础: torch7 loadcaffe 可选依赖项: 对于CUDA后端: CUDA 6.5+ cunn 对于cuDNN后端: cudnn.torch 对于OpenCL后端: cltorch clnn 安装依赖项后,需要运行以下脚本来下载VGG模型: 此操作将下载原始的VGG-19模型。Leon Gatys提供了他们论文中使用的VGG-19模型的修改版本;这也将被下载。默认情况下,使用原始的VGG-19模型。 如果你的内存GPU较小,则使用NIN Imagenet模型会更好,但效果稍差。你可以从BVLC Caffe ModelZoo获得有关模型的详细信息,并可以从NIN-Imagenet下载文件。 可以在安装指南中找到有关Ubuntu的详细安装说明。 用法 基本用法: NCL模型对OpenCL的使用(这需要下载NIN Imagenet模型文件) 要使用多个样式的图像,需要传递以逗号分隔的列表,如下所示: 注意,图像路径不应包含~表示主目录的字符;应该改用相对路径或完整的绝对路径。 选项: image_size:生成的图像的最大边长(以像素为单位)。默认值为512。 style_blend_weights:用于混合多个样式图像的样式的权重,以逗号分隔的列表形式显示,例如-style_blend_weights 3,7。默认情况下,所有样式图像的权重均相等。 gpu:要使用的GPU的零索引ID;对于CPU模式设置-gpu为-1。 优化选项: content_weight:衡量内容重建术语的权重。默认值为5e0。 style_weight:衡量样式重建术语的权重。默认值为1e2。 tv_weight:总差异(TV)规范化的权重;有助于使图像平滑。默认值为1e-3。设置为0禁用电视正则化。 num_iterations:默认为1000。 init:生成图像的方法;一个random或image。默认值是random使用论文中的噪声初始化;image 用内容图像初始化。 optimizer:要使用的优化算法;任一lbfgs或adam; 默认值为lbfgs。L-BFGS倾向于提供更好的结果,但是会占用更多的内存。切换到ADAM将减少内存使用量。使用ADAM时,可能需要使用其他参数才能获得良好的效果,尤其是样式权重,内容权重和学习率;可能还需要在使用ADAM时对梯度进行归一化。 learning_rate:与ADAM优化器一起使用的学习率。默认值为1e1。 normalize_gradients:如果存在此标志,则来自每一层的样式和内容渐变将被标准化L1。来自andersbll / neural_artistic_style的想法。 输出选项: output_image:输出图像的名称。默认值为out.png。 print_iter:每次print_iter迭代打印进度。设置为0以禁用打印。 save_iter:每次save_iter迭代保存图像。设置为0以禁用保存中间结果。 图层选项: content_layers:用逗号分隔的图层名称列表,用于内容重建。默认值为relu4_2。 style_layers:以逗号分隔的图层名称列表,用于样式重建。默认值为relu1_1,relu2_1,relu3_1,relu4_1,relu5_1。 其他选择: style_scale:从样式图像中提取要素的比例。默认值为1.0。 original_colors:如果将此设置为1,则输出图像将保留内容图像的颜色。 proto_file:deploy.txtVGG Caffe模型文件的路径。 model_file:.caffemodelVGG Caffe模型文件的路径。默认为原始的VGG-19型号;你也可以尝试本文中使用的归一化VGG-19模型。 pooling:要使用的池化层的类型;一个max或avg。默认值为max。VGG-19模型使用最大池化层,但是本文提到用平均池化层替换这些层可以改善结果。无法使用平均池获得良好的结果,但是这里是选项。 backend:nn,cudnn,或clnn。默认值为nn。cudnn需要 cudnn.torch并可能减少内存使用。 clnn需要cltorch和clnn cudnn_autotune:使用cuDNN后端时,传递此标志以使用内置cuDNN自动调谐器为你的体系结构选择最佳卷积算法。这将使第一次迭代变慢,并可能占用更多的内存,但可能会大大加快cuDNN后端的速度。 经常问的问题 生成的图像具有饱和伪像: 解决方案:将image包更新为最新版本:luarocks install image 在没有GPU的情况下运行会提示错误消息,提示cutorch找不到 解决方案:-gpu -1在仅CPU模式下运行时 传递标志 程序内存不足并死亡 解决方案:尝试减小图像尺寸:(-image_size 256或更小)。需要注意的是不同的图像大小可能会需要非默认值-style_weight,并-content_weight以获得最佳效果。如果在GPU上运行,则也可以尝试使用-backend cudnn来减少内存使用。 得到以下错误消息: models/VGG_ILSVRC_19_layers_deploy.prototxt.cpu.lua:7: attempt to call method 'ceil' (a nil value) 解决方案:将nn软件包更新为最新版本:luarocks install nn 收到一条错误消息,错误paths.extname 解决方案:将torch.paths软件包更新为最新版本:luarocks install paths NIN Imagenet模型无法给出良好的结果。 解决方案:确保-proto_file选择了正确的。还要确保为-content_layers和-style_layers设置了正确的参数。(请参阅上面的OpenCL使用示例。) -backend cudnn比默认的NN后端慢 解决方案:添加标志-cudnn_autotune;这将使用内置的cuDNN自动调谐器选择最佳的卷积算法。 内存使用情况 默认情况下,neural-style将nn后端用于卷积,将L-BFGS用于优化。这些可以提供良好的结果,但是都可以占用大量内存。可以使用以下方法减少内存使用量: 使用cuDNN 添加标志-backend cudnn以使用cuDNN后端。这仅适用于GPU模式。 Use ADAM 添加标志-optimizer adam以使用ADAM代替L-BFGS。这将显着减少内存使用量,但可能需要调整其他参数才能获得良好结果。特别是,应该考虑学习率,内容权重,样式权重,并考虑使用梯度归一化。这些在CPU和GPU模式下均应工作。 缩小图像尺寸: 如果以上技巧还不够,可以缩小生成图像的尺寸;传递标志-image_size 256以生成默认大小一半的图像。 在默认设置下,neural-style的系统使用约3.5GB的GPU内存。切换到ADAM和cuDNN可以将GPU内存占用减少到大约1GB。 速度 速度会因后端和优化器而有很大差异。以下是-image_size=512在具有不同设置的Maxwell Titan X上运行500次迭代的一些时间: backend nn -optimizer lbfgs:62秒 backend nn -optimizer adam:49秒 backend cudnn -optimizer lbfgs:79秒 backend cudnn -cudnn_autotune -optimizer lbfgs:58秒 backend cudnn -cudnn_autotune -optimizer adam:44秒 backend clnn -optimizer lbfgs:169秒 backend clnn -optimizer adam:106秒 以下是在CUDA 8.0 RC上具有cuDNN 5.0的Pascal Titan X上的相同基准: backend nn -optimizer lbfgs:43秒 backend nn -optimizer adam:36秒 backend cudnn -optimizer lbfgs:45秒 backend cudnn -cudnn_autotune -optimizer lbfgs: 30秒 backend cudnn -cudnn_autotune -optimizer adam:22秒 多GPU缩放 可以使用多个GPU处理更高分辨率的图像。网络的不同层将在不同的GPU上进行计算。可以控制与该-gpu标志一起使用的GPU ,还可以控制如何使用该-multigpu_strategy标志在GPU之间拆分层。 例如,在具有四个GPU的服务器中,可以赋予该标志-gpu 0,1,2,3以依次处理GPU 0、1、2和3。通过提供标志,-multigpu_strategy 3,6,12指示应该在GPU 0上计算前两层,应该在GPU 1上计算第3至5层,应该在GPU 2上计算第6至11层,其余的应该在GPU上计算3.你需要调整-multigpu_strategy 设置以达到最大分辨率。 如Leon A.Gatys,Alexander S.Ecker,Matthias Bethge,Aaron Hertzmann和Eli Shechtman的论文《控制神经风格转移中的感知因素》所述,可以通过将多GPU处理与多尺度生成相结合来在高分辨率下获得非常高质量的结果。 。 这是在带有四个Pascal Titan X GPU的服务器上生成的3620 x 1905图像: 实施细节 图像以白噪声初始化并使用L-BFGS优化。 执行使用风格重建的conv1_1,conv2_1,conv3_1,conv4_1,和conv5_1层和使用内容重建conv4_2层。与本文一样,五种风格的重构损失具有相等的权重。 引文 如果你认为此代码对你的研究有用,请引用: 转载自:https://github.com/jcjohnson/neural-style
基于BERT 的中文数据集下的命名实体识别(NER) 基于tensorflow官方代码修改。 环境 Tensorflow: 1.13 Python: 3.6 tensorflow2.0 会报错。 搜狐比赛 https://www.biendata.com/competition/sohu2019/ 在搜狐这个文本比赛中写了一个baseline,使用了bert以及bert+lstm+crf来进行实体识别。 其后只使用BERT的结果如下,具体评测方案请看比赛说明,这里的话只做了实体部分,情感全部为POS进行的测试得分。 使用bert+lstm+crf 结果如下 训练验证测试 代码 在souhu文件下 souhu_util.py 文件是取得预测的label后,转换为实体的数据 处理代码。 lstm_crf_layer.py 是lstm+crf层的代码 run_souhu.py 只用bert的代码 run_souhuv2.py bert+lstm+crf 注意 因为在处理中文时,会有一些奇怪的符号,比如\u3000等,需要你提前处理,否则label_id和inputs_id对应不上,因为bert自带的tokenization会处理掉这些符号。所以可以使用bert自带的BasicTokenizer来先将数据文本预处理一下从而与label对应上。 二 基于上课老师课程作业发布的中文数据集下使用BERT来训练命名实体识别NER任务。 之前也用了Bi+LSTM+CRF进行识别,效果也不错,这次使用BERT来进行训练,也算是对BERT源码进行一个阅读和理解吧。 虽然之前网上也有很多使用BERT的例子和教程,但是我觉得都不是很完整,有些缺乏注释对新手不太友好,有些则是问题不同修改的代码也不同,自己也在路上遇到了不少的坑。所以记录一下。 数据集 tmp 文件夹下 如上图,对数据集进行了分割,其中source是训练集中文,target是训练集的label。 test1 测试集,test_tgt 测试集label。 dev 验证集 dev-lable 验证集label。 数据格式 注意 BERT分词器在对字符分词会遇到一些问题。 比如 输入叩 问 澳 门 =- =- =- 贺 澳 门 回 归 进 入 倒 计 时 ,label :O O B-LOC I-LOC O O O O B-LOC I-LOC O O O O O O O 会把输入的=- 处理成两个字符,所以会导致label对应不上,需要手动处理一下。比如如下每次取第一个字符的label。 其实这个问题在处理英文会遇到,WordPiece会将一个词分成若干token,所以需要手动处理(这只是一个简单处理方式)。 类别 其中共设置了10个类别,PAD是当句子长度未达到max_seq_length时,补充0的类别。 CLS是每个句首前加一个标志[CLS]的类别,SEP是句尾同理。(因为BERT处理句子是会在句首句尾加上这两个符号。) 代码 其实BERT需要根据具体的问题来修改相对应的代码,NER算是序列标注一类的问题,可以算分类问题吧。 然后修改的主要是run_classifier.py部分即可,我把修改下游任务后的代码放到了run_NER.py里。 代码中除了数据部分的预处理之外,还需要自己修改一下评估函数、损失函数。 训练 首先下载BERT基于中文预训练的模型(BERT官方github页面可下载),存放到BERT_BASE_DIR文件夹下,之后将数据放到NER_DIR文件夹下。即可开始训练。sh run.sh 实验结果 可以基于验证集看到的准确率召回率都在95%以上。 下面可以看看预测测试集的几个例子。 下图为使用BERT预测的类别。可以与真实的类别对比看到预测还是很准确的。 真实类别如下图。 总结 其实在读了BERT的论文后,结合代码进行下游任务的微调能够理解的更深刻。 其实改造下游任务主要是把自己数据改造成它们需要的格式,然后将输出类别根据需要改一下,然后修改一下评估函数和损失函数。 如下图根据具体的下游任务修改label即可。如下图的第四个就是在NER上进行修改, 之后会写一篇Attention is all you need 和 bert论文的详解,会结合代码来解释一下细节,比如Add & Norm是如何实现的,为什么要Add & Norm。 == 感觉不用写了 bert已经火遍大街了 不重复造轮子了。建议大家直接莽源代码和论文。 最后BERT还有很多奇淫技巧需要大家来探索,比如可以取中间层向量来拼接,再比如冻结中间层等等。 后来自己又用pytorch版本的BERT做了几个比赛和做实验发论文,个人觉得pytorch版本的bert更简单好用,更方便的冻结BERT中间层,还可以在训练过程中梯度累积,直接继承BERTmodel就可以写自己的模型了。 个人建议 如果自己做比赛或者发论文做实验用pytorch版本.. pytorch已经在学术界称霸了..但是工业界tensorflow还是应用很广。 参考 : https://github.com/google-research/bert https://github.com/kyzhouhzau/BERT-NER https://github.com/huggingface/transformers pytorch版本 来源https://github.com/xuanzebi/BERT-CH-NER
研究内容 APaaS平台通过为开发者提供可视化的应用开发环境,降低或去除应用开发对原生代码编写的需求量,进而实现便捷构建应用程序,具备低代码/零代码属性,可快速开发、测试、部署,并能够随时调整或更新,即使是非技术人员也能完成应用程序的开发,大大降低了软件开发平台的使用门槛,缩短软件开发周期。由于其丰富的应用场景和高性价比,APaaS行业快速发展近年来在资本市场备受关注。客户对APaaS产品需求迫切,但市场上针对产品的选型建议指引尚不充分,本报告通过定义APaaS平台并给出产品评价指标体系,指引客户根据自身需求进行核心模块筛选并依据规则进行打分,最后加权求和得到产品最终分数,为企业客户在选择不同APaaS产品时提供评价依据。 目录 APaaS行业概览 APaaS典型场景案例 APaaS标杆产品 APaaS产品评价指标 报告来源:艾瑞咨询 发布时间:2021年1月 转载自https://www.iresearch.com.cn/Detail/report?id=3717&isfree=0
研究方法 单因子测试 确定一个单因子测试文件,定义待测因子列表,执行多次单因子runtest。 保留回测报告,获取字段,保存在CSV文件。 结果可视化。 筛选得到最优因子。 因子做共线性分析,获取最终因子。 使用 auto-trader软件提取沪深300成分股的日频数据和因子数据,在每一个时间横截面上使用上述模型进行最小二乘回归(WLS)。使用当期股票因子暴露值和下一期股票收益率做线性拟合。在进行因子测试时,由于要求每月月初进行调仓,因此以上一个月的各股票的因子暴露值作为自变量(第 T 期),上一个月各股票月平均收益率为因变量(第 T + 1期),拟合得到一个线性模型,然后将本月月初的股票因子值输入到拟合完成的线性模型,输出的各股票本月平均收益率进行选股回测。 数据采集 根据点宽网的BP因子数据字典,使用auto-trader软件提取股票日频因子数据。 样本范围:沪深300成分股,剔除停牌的等不正常股票。 样本期:2016年1月1日至2018年9月30日,按月进行提取。 因子选择:具体测试了基础科目衍生类、质量类、收益风险类、情绪类、成长类、常用技术指标类、动量类、价值类、每股指标类、模式识别类、特色技术指标、行业与分析师类共十二大类因子。为每一类的因子随机挑选了10~20个因子进行测试。由于挑选因子较多以及本文篇幅有限,部分表现较优的因子定义将会在回测部分进行显示。 选用机器学习模型回测 特征和标签构建。 等权重线性模型。 建立baseline models,尝试使用多种模型。SVR,RNN(LSTM),xgboost, random_forest,adaboost... 交易逻辑确定。 回测结果记录,分析。 关于模型的一些设想: 可参考论文GBDT提取特征 + SVM二分类的方法 LSTM进行选股(在月频数据较少,可能效果不好) Adaboost, randomforest, svm(启发式),xgboost等等进行集成。如Stacking,bagging. 按照上述思路,从各大类因子中随机挑选小类因子进行因子回测,得到每一个因子相应的回测报告数据,主要涉及策略的年化夏普率(以月为单位,等于夏普率×√12),年化收益率,最大回撤率,信息比率等指标。在进行因子筛选时,主要考虑因素为年化夏普率,优先筛选每一类中年化夏普率最高的因子,当存在较多表现较优的因子时,综合各方面指标进行筛选。同时为了解决因子的多重共线性问题,本项目测试了各大类因子间各因子历史序列的相关性,得到相关性矩阵,辨别出相关性较高的因子,对于这一类因子,采用因子剔除的方式进行处理。 风险控制 风险模型:barra模型 择时模型:三均线择时策略 文件说明 data_exploration.ipynb: atrader API调用测试文件。 get_factor_report.py: 当单因子回测结束之后,执行文件,得到策略字段。 single_factor_test.py: 单因子测试文件。 find_factor.py: 自实现的因子绩效分析文件(已弃用) run_test.bat: 脚本自动化运行python程序,实现多次执行策略。 'factor_analysis': 类内因子共线性分析文件,绘制相关系数矩阵。 以模型名标识模型回测文件。 项目成果 最优的随机森林模型:累计收益60%左右,经择时策略风险控制后,最大回撤率控制在9%左右,夏普率为0.9左右。 转载自:https://github.com/JoshuaQYH/TIDIBEI
我想从Keras的imdb数据集中恢复imdb的原始文本。 首先,当我加载Keras的imdb数据集时,它返回单词索引序列: 我找到了imdb.get_word_index method(),它返回单词索引字典,例如{'create':984,'make':94,…}。为了进行转换,我创建了索引词字典。 然后,我尝试还原原始文本,如下所示。 所以为什么会这样呢?如何还原原始文字?
基于tensorflow的人脸检测MTCNN算法 人脸检测MTCNN算法,采用tensorflow框架编写,从理解到训练,中文注释完全,含测试和训练,支持摄像头,代码参考AITTSMD,做了相应删减和优化。 模型理解 MTCNN是目前比较流行的人脸检测方法,通过人脸检测可以进行更精准的人脸识别。模型主要通过PNet,RNet,ONet三个网络级联,一步一步精调来对人脸进行更准确的检测。论文中的模型图如下: 接下来我会从我在训练中的理解来解释MTCNN模型都干了什么。 三个模型要按顺序训练,首先是PNet,然后RNet,最后ONet。 PNet: PNet是全卷积网络,主要为了应对不同输入尺度,层数很浅,主要作用是尽可能多的把人脸框都选进来,宁愿错误拿来好多个,也不丢掉一个。训练数据由四部分组成:pos,part,neg,landmark,比例为1:1:3:1。数据是怎么来的呢? pos,part,neg是随机和人脸的数据裁剪得到的,裁剪图片与人脸框最大的iou值大于0.65的为pos图像,大于0.4的为part图像,小于0.3的为neg图像,landmark截取的是带有关键点的图像。其中pos,part的label含有它们的类别1,-1还有人脸框相对于图像左上角的偏移量,偏移量除以图像大小做了归一化;neg的label只含有类别0;landmark的label含有类别-2和5个关键点的坐标偏移也是进行了归一化的。 这四种图像都resize成12x12作为PNet的输入,通过PNet得到了是否有人脸的概率[batch,2],人脸框的偏移量[batch,4],关键点的偏移量[batch,10]。四种不同的数据该怎么训练呢? 对于是否存在人脸的类别损失只通过neg和pos数据来对参数进行更新,具体办法是通过label中的类别值做了一个遮罩来划分数据,只计算neg和pos的损失,不计算其他数据的损失;人脸框的损失只计算pos和part数据的;关键点的损失只计算landmark的。论文中有个小技巧就是只通过前70%的数据进行更新参数,说是模型准确率会有提升,在代码中也都有体现,具体实现可以参考代码。 RNet,ONet: RNet和ONet都差不多都是精修人脸框,放在一起解释。RNet的landmark数据和PNet一样,是对带有关键点的图像截取得到,但要resize成24x24的作为输入。 pos,part,neg的数据是通过PNet得到的。这里就可以理解为什么PNet的输入要是四种数据大小是12了,为了速度,也为了RNet的输入。一张图片输入到PNet中会得到[1,h,w,2],[1,h,w,4],[1,h,w,10]的label预测值,这有点像yolo的思想,如果不理解yolo的可以参考我的yolo介绍。 把一张图片像网格一样划分,每一个网格都预测它的人脸框,划分的图片包含的人脸有多有少,所以划分了neg,pos,part三种数据,landmark只是起辅助作用。图片还要以一定值来缩小尺度做成图像金字塔目的是获取更多可能的人脸框,人脸框中有人的概率大于一定阈值才保留,还要进行一定阈值的非极大值抑制,将太过重合的人脸框除掉,将PNet预测的人脸框于原图上截取,与真实人脸框的最大iou值来划分neg,pos,part数据,并resize成24作为RNet的输入。 RNet,ONet的损失函数和PNet相同,不同的是三种损失所占的比例不同。 ONet的输入是图片通过PNet金字塔得到的裁剪框再经过RNet的裁剪框裁剪的图片划分neg,pos,part三种数据resize成48作为输入,landmark与RNet相同只不过resize成48大小的了。 代码介绍 环境说明 ubuntu16.04 python3.6.5 tensorflow1.8.0 opencv3.4.3 pip install tqdm为了显示进度条 代码介绍 data下放置训练所用的原始数据和划分数据,生成的tfrecord等 detection下的fcn_detector.py主要用于PNet的单张图片识别,detector.py用于RNet和ONet的一张图片通过PNet截取的多个人脸框的批次识别,MtcnnDetector.py为识别人脸和生成RNet,ONet输入数据 graph里放置的是训练过程中生成的graph文件 output里放置识别图像或视频完成后存储放置的路径 picture里是要测试的图像放置路径 preprocess里是预处理数据程序, BBox_utils.py和utils.py,loader.py是一些辅助程序, gen_12net_data.py是生成PNet的pos,neg,part的程序, gen_landmark_aug.py是生成landmark数据的程序, gen_imglist_pnet.py是pnet的四种数据组合一起, gen_hard_example.py是生成rnet,onet的三种数据程序, gen_tfrecords.py是生成tfrecord文件的程序 train中的config是一些参数设定,大都文件夹我都直接写死了,所以里面参数能改的很少,model.py是模型,train.py是训练,train_model.py针对不同网络训练 test.py是测试代码 下载数据 将WIDERFace的训练数据下载解压,将里面的WIDER_train文件夹放置到data下,将Deep Convolutional Network Cascade for Facial Point Detection的训练集解压,将里面的lfw_5590和net_7876文件夹放置到data下。model文件夹下已存储好我训练的权值文件了。 运行 训练: 将目录cd到preprocess上, python gen_12net_data.py生成三种pnet数据, python gen_landmark_aug.py 12 生成pnet的landmark数据, python gen_imglist_pnet.py整理到一起, python gen_tfrecords.py 12生成tfrecords文件 将目录cd到train上python train.py 12 训练pnet 将目录cd到preprocess上, python gen_hard_example.py 12 生成三种rnet数据, python gen_landmark_aug.py 24 生成rnet的landmark数据, python gen_tfrecords.py 24生成tfrecords文件 将目录cd到train上python train.py 24 训练rnet 将目录cd到preprocess上, python gen_hard_example.py 24 生成三种onet数据, python gen_landmark_aug.py 48 生成onet的landmark数据, python gen_tfrecords.py 48生成tfrecords文件 将目录cd到train上python train.py 48 训练onet 测试: python test.py 一些建议 生成hard_example时间非常长需要三到四小时,所以如果你想从头训练请耐心等待,如果代码或理解有什么问题,欢迎批评指正。 结果展示 来源https://github.com/LeslieZhoa/tensorflow-MTCNN
Alto——可学习的对象 认识一下Alto,它是一个可学习的对象,Alto旨在通过构建一个可以自学的机器来展示机器学习(ML)最基本的方面。 Alto使用Coral USB Accelerator和Raspberry Pi来协助展示如何轻松地将机器学习功能添加到硬件项目中。 该资源库包含从头开始构建Alto的所有说明和文件。 最重要的是,Alto是完全开源的! 任何人都可以使用此代码、原理图和案例设计来创建学习对象。 要想更多地了解USB Accelerator中的Edge TPU可以做什么,并获得你自己项目的灵感,请访问Coral示例页面。 你在本文中可以找到什么 本文分为五个章节: 用户指南——解释Alto的界面以及Alto的使用方式。 制作自己的Alto——构建Alto的指南,内容包括设置软件,焊接电路以及构造Alto的纸板主体。 使用Alto进行实验——一组简单的实验可以帮助你了解Alto的工作原理,以及如何使用Alto向其他人介绍机器学习的一些基本概念。 破解Alto——简要介绍如何破解Alto以使其以不同外观和表现来适合你自己的应用程序。 技术概述——关于Alto的软件和电子设备及其功能的更详细的介绍。 用户指南 最简单的机器学习 Alto的正面有一个摄像头,两侧各有一个手臂和一个按钮。 Alto使用相机观察周围的世界。 这些按钮用来开始学习,当Alto看到已学会识别的内容时,它将用手臂指着。 Alto可以学习两种事物。 当Alto识别其中一个时,它将指向其对应的手臂。 Alto在最基础的水平上展示了机器学习:机器识别什么取决于你教什么。 教Alto 教Alto识别物体时,将物体放在Alto前面,然后按侧面的按钮之一。 当Alto拍摄图像以了解物体时,其手臂将慢慢抬起。 当Alto的手臂水平伸展时,学习过程就完成了。 现在,当同一对象放置在其前面时,Alto将指向该对象。 教Alto认识相同物体的次数越多,Alto识别该事物的能力就越高。 你可以随心所欲地教Alto,尝试通过旋转对象以显示不同的角度并将其放置在不同的距离上,每次按相同的按钮让Alto学习有关该对象更多的信息。 识别物体 首先,教Alto的每个手臂识别的不同对象,例如,教Alto学习水果类型之间的差异,一侧识别一个红苹果,另一侧识别一个香蕉。 识别类别 除了识别单个对象之外,你还可以教Alto识别对象的类别。 基于它对红苹果的了解,可以教它识别一般的红色物体而不仅仅是苹果。Alto学会了识别两个类别后,是否可以正确识别一个以前从未见过的新红色物体? 重置 如果你想教Alto一些新事物,可以通过同时按住两个按钮3秒钟来清除其记忆。 这将清除Alto两边所学习的一切,并且无法撤消。 要更详细地了解这些过程中的任何一个,请查看之后的“ Alto实验”部分。 制作你自己的Alto 以下步骤可以指导你组装自己的Alto:设置Raspberry Pi,焊接电子设备以及组装用于容纳所有组件的外壳。 要阅读每个步骤的更详细说明,请下载文件,其中包含对应的说明文档。 1.0:安装软件 第一步是为Alto设置软件环境,然后加载Alto的Python代码。 软件和操作系统部分列出整个过程的步骤,开始设置Raspberry Pi Zero,然后刷新SD卡并安装Alto应用程序软件。 详细步骤参考1.0-Set-up-the-software.md 2.0:搭建电子设备 Alto的电子设备设计尽可能简单和易于破解。 你只需要几个通用的组件和基本的焊接技能就可以组装所有东西。 该资料库的电子目录中包含完整的循序渐进指南,包括原理图和物料清单。 详细步骤参考2.0-Build-the-electronics.md 3.1:制作电子外壳 Alto的内部结构由折叠纸板制成,并与订书钉固定在一起。 Alto的所有组件都在这种结构中:伺服器,LED,照相机和内部电子组件都安装在纸板层中。 首先,您需要打印出PDF模板(即文件alto-paper-templates.pdf )并将其粘贴到你的材料上,这是将纸板切成正确形状的模板,所有标签均打印在模板本身上。 使用工具(例如工艺刀)需要大约45分钟完成此步骤,如果可以使用激光工具,则可以使用激光工具完成此步骤,这样速度会很快。 有关此阶段构建Alto的更多详细说明,请参阅电子设备外壳说明:3.1-Making-the-electronics-casing.md 3.2:制作Alto的外壳 Alto的外部结构是由卡片制成的,围绕Alto内部结构的接缝并折叠在一起。 该过程与之前类似,在外壳构建目录中进行了详细介绍。 白卡构成了Alto外部结构的大部分,并隐藏了其中的某些组件和电子设备。 我们可打印的彩色卡片附件,突出了黄色的眼睛(相机),红色的耳朵(按钮)和蓝色的臂(伺服电机臂)。 您还可以在此阶段自定义Alto的外观样式,以使你的Alto独一无二! 详细步骤见3.2-Making-altos-outer-shell.md 4.0:教Alto学习 现在你应该已经拥有了完整的Alto单元,下一步就是教它! 参见文件4.0-experiments-with-alto.md 拿来一些物体,将Alto插入电源,然后开始探索可以教Alto识别的内容。 如果您需要一些灵感来继续学习,请查看下面的“用Alto进行实验”部分。 Alto实验 Alto是理解机器学习基础的好方法。 本节包含许多实验,可以帮助你了解Alto的工作原理,并向其他人介绍机器学习的基础。 这些实验涵盖了从简单对象识别到引入k最近邻(kNN)算法的各个方面,为将Alto背后的概念变为现实提供了实用的方法。具体实现参考文件4.0-experiments-with-alto.md 破解Alto 详细见5.0-remixing-alto.md Alto的所有硬件和软件都是在考虑可破解的情况下创建的:机箱设计可以用不同的材料制成,也可以完全重构。 电子设备可以适应使用任何可用的组件; 伺服器可以替代任何类型的执行器; 并且该软件使用易于修改的高级语言(Python)编写。 以下是一些可以修改自己的Alto的方法: 破解软件 可以对现有代码进行一些细微调整,以更改Alto的置信度或行为。 破解硬件 超越伺服器,探索Alto展示其公认东西的新方法。 更改外观 Alto的外壳可以轻松更改,以适应您可能想到的任何应用。 可以通过简单的美学改变来改变Alto的外观,也可以改变手臂或身体的设计。 Hacking Alto是迈向构建自己的机器学习项目的重要一步。 如果你使用Coral USB Accelerator想到任何很棒的东西,请展示给我们! 并在此处将您的机器学习实验提交到Google实验平台。 技术概述 Alto具有三个主要要素:一台带有摄像头的Raspberry Pi Zero单板计算机;一台具有摄像头的单板计算机; ,用于加速设备上的机器学习的Coral USB Accelerator ; 以及一些用于用户界面的简单电子设备。 操作系统和计算机 Raspberry Pi Zero可以运行Raspberry Pi OS。它是负责与用户连接的硬件(通过GPIO连接),摄像头模块和Coral Edge TPU(通过USB连接)接口。该操作系统将自动启动,并充当运行Alto的软件应用程序的主机。 该系统通过将ML图形执行委托给Coral USB Accelerator上的Edge TPU来加速所有ML推断的(以及某些学习)。 Edge TPU是一种机器学习协处理器,它使像Raspberry Pi这样的低功率计算机能够以比CPU上更好的性能运行高级ML工作负载。 Alto执行的所有ML任务均使用Edge TPU在设备上(离线)完成。 尽管Edge TPU的Coral软件不能正式支持Raspberry Pi Zero(因为它具有ARMv6芯片组,但是Coral正式需要ARMv8),但是Edge TPU Runtime的Coral软件是开源的,并且已经成功地为Raspberry Pi Zero进行了编译。 你可以在Coral网站上找到有关Coral和Edge TPU硬件的更多信息。 软件 Alto软件应用程序是用Python编写的。 它从Raspberry Pi摄像头模块接收输入,准备通过Edge TPU模块进行分类,并与电子接口对接。 该应用程序使用k最近邻分类器模型(k-NN)来识别给定图像与其学习数据集中其他图像的近似度。 当Alto学习时,它将计算来自图像传感器的传入数据在其模型中的输入情况,并为其分配标签——对于Alto,此标签是其左臂或右臂。 当Alto处于识别模式时,确定来自图像传感器数据帧的输入情况,并计算它们与其他已知输入的接近度; 如果该物体在已标记输物体的一定距离内,则Alto会识别出某物,并用其相应的手臂指向它。 电子设备 Alto的电子设备设计尽可能灵活和易于破解。 它基于单个通孔原型板,可以很容易地手工组装。 该开发板连接到Raspberry Pi Zero的GPIO引脚,并断开Alto其他组件的插头:两个伺服器,两个按钮和一个LED。 这些项目中的每一项都很常见且易于获得。 另外,它们可以轻松替代其他零件,例如,如果你有不同的伺服器或可用的LED。 该设计和物料清单(BOM)包括一个预制的USB分支板,该板包括一个分立的功率调节电路,该电路将确保正常运行期间向Alto顺利传送足够的功率。 你可以在电子产品目录(即文件2.0-Build-the-electronics.md)中找到有关电子产品的更多信息,物料清单可在此处作为可下载的电子表格获得。 注释 这是Google Creative Lab和我们RRD Labs的合作伙伴之间的共同努力。 这不是Google的官方产品。 我们鼓励开源项目作为相互学习的方式。 分享这些作品并创作衍生作品时,请尊重我们和其他创作者的权利,包括版权和商标权(如果存在)。 如果您想了解有关Google政策的更多信息,可以在这里找到。 要为该项目做出贡献,请参考此存储库中的贡献文档。 来源https://github.com/googlecreativelab/alto
研究目标 具备可视化显示,以网页的形式有好的显示数据,并提供简单的搜索功能,能将数据简单分类,智能推荐 整合数据信息,并以json格式存储至Mongo,方面各个平台使用,通过脚本程序,迁移到Mysql为依赖关系较强的项目使用使网络爬虫高效灵活, 在主题网站中尽量全面的爬取信息,并且能够自动构造URL,递归调用自身,开启多线程快速的爬取,准确提取有效信息,存储到数据库对于网络延迟的处理,并且能够开启HTTPCHACHE,极大限度的提高爬取速度,伪造代理信息,表单等,让目标网站,认为你是安全的。 研究方法 Scrapy主要组件 • 引擎(Scrapy) 用来处理整个系统的数据流处理, 触发事务(框架核心) • 调度器(Scheduler) 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址 • 下载器(Downloader) 用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的) • 爬虫(Spiders) 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面 • 项目管道(Pipeline) 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。 • 下载器中间件(Downloader Middlewares) 位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。 • 爬虫中间件(Spider Middlewares) 介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。 • 调度中间件(Scheduler Middewares) 介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。 设计处理流程: 1、得到爬取种子(URL) 2、根据爬取种子下载资源(页面) 3、解析页面,提取更多的URL 4、对页面做持久化操作 5、根据提取的URL再进行下载操作 6、重复第2步到第5步 系统设计 控制器 1、 配置文件处理模块:从配置文件中读取配置项,提供配置项的提取接口 2、 URL维护模块:负责维护URL库,提供如下功能 a) 输入新的URL b) 输出一个未被抓取的URL c) 负责维护URL的抓取状态 3、 任务调度模块 a) 负责协调控制器的流程 b) 负责调用其他系统模块完成工作 c) 维护URL列表数据结构 页面抓取的处理流程 1、 得到一个新的URL 2、 URL进入抓取队列等待抓取 3、 从队列中得到一个URL,把其分配给一个下载器的实例 4、 得到下载器的处理状态(URL处理状态需要被改写,得到当前URL深度,得到当前资源类型假如下载成功) 5、 得到当前页面中存在的下一级URL列表 RL维护模块操作(对外接口) 1、添加新URL 2、使URL进入抓取队列 3、从抓取队列中移除一个URL 4、修改URL库中某一个URL的值 5、添加新URL的列表 日志工具 日志输出等级设计(5个等级) 0调试[debug]:仅仅用于调试 1普通信息[info]:可以让使用者了解的一些信息 2警告信息[warn]:意味着程序中出现了错误,但是并不严重 4错误信息[error]:意味着程序中发生了严重错误,根据实际情况可选择使程序继续运行或使程序终止 5 程序崩溃[crash] 插件框架设计 1、 动态载入.so文件 2、 维护.so文件中的接口函数 3、 设计入口函数指针原型 int(handle)(void); 设计初始化函数指针原型 int(init) 模块管理器设计 载入模块的操作 Int Load (char* path, charname); Module getModule(char* name); 载入模块操作的处理流程: 1通过路径找到模块文件(.so) 2调用dlopen打开动态库(.so) 3使用动态库 4关闭动态库文件 转载自:https://github.com/hanhuiATlocalhost/spider