YouTube-8M数据集starter code部分翻译
【原创内容,转载需作者同意】
以下内容为Youtube-8M开源示范代码的README翻译,原文来自:https://github.com/google/youtube-8m
翻译本意是为了让自己更了解这个数据集,若有翻译错误,请指教。
YouTube-8M Tensorflow Starter Code
该repo包含基于YouTube-8m数据集的训练和评估机器学习模型的起始代码。这些代码用于第二届YouTube8M视频理解大赛以及是2018欧洲ECCV精选沿途会议的一部分。代码提供了端到端的工作示范,包括数据读取,训练一个TensorFlow模型,以及评估一个模型的性能。这些代码方便使用,您能够训练多个基于帧级或者视频级的模型框架。此外,代码也能够轻易扩展来实用于您自己的定制模型。
一、 如何在个人电脑(服务器)运行代码
1.条件
起始代码需要用到TensorFlow。如果你还未安装,请按照tensorflow官方网站的说明进行安装。代码已经在tensorflow1.8(最新版本)下测试过了。未来,我们也将致力于使代码能够在最新版本下的tensoeflow下运行。
请通过如下命令行确认您已经安装了Python2.7+ 和tensorflow 1.8或者更新版本
python --version
python -c 'import tensorflow as tf; print(tf.__version__)'
2.批量下载数据集
您能够在YouTube-8M网站上得到关于下载数据集的完整说明。我们建议您按照自己的需求下载数据集的一部分。例如,您可以通过如下命令行下载数据集的1/100视频数据及其特征:
# Video-level
mkdir -p ~/yt8m/v2/video
cd ~/yt8m/v2/video
curl data.yt8m.org/download.py | shard=1,100 partition=2/video/train mirror=us python
curl data.yt8m.org/download.py | shard=1,100 partition=2/video/validate mirror=us python
curl data.yt8m.org/download.py | shard=1,100 partition=2/video/test mirror=us python# Frame-level
mkdir -p ~/yt8m/v2/frame
cd ~/yt8m/v2/frame
curl data.yt8m.org/download.py | shard=1,100 partition=2/frame/train mirror=us python
curl data.yt8m.org/download.py | shard=1,100 partition=2/frame/validate mirror=us python
curl data.yt8m.org/download.py | shard=1,100 partition=2/frame/test mirror=us python
注意:本说明文件假设以~/yt8m作为存储数据,代码,以及训练模型的路径。你也可以使用其他路径。此外,如果您以~/yt8m作为路径就能够直接复制页面上的命令行到本地终端。
上述命令行将会从US镜像上下载所有的视频级训练集。若您在南美以外的区域,您可以更改‘mirror’的参数为‘eu’(欧洲)或者‘asia’(亚洲)来加速传输。
3.尝试运行代码
复制起始代码命令:
mkdir -p ~/yt8m/code
cd ~/yt8m/code
git clone https://github.com/google/youtube-8m.git
(1)进行视频级的训练
python train.py --feature_names='mean_rgb,mean_audio' --feature_sizes='1024,128' --train_data_pattern=${HOME}/yt8m/v2/video/train*.tfrecord --train_dir ~/yt8m/v2/models/video/sample_model --start_new_model
--start_new_model表示从头开始训练。若您想继续train_dir的训练,就不要加该参数。
训练完毕后,您能够在验证集数据上进行代码评估:
python eval.py --eval_data_pattern=${HOME}/yt8m/v2/video/validate*.tfrecord --train_dir ~/yt8m/v2/models/video/sample_model
注意:以上命令将会“持续”运行(即持续监测最新的模型,若模型变动则重新进行评估)。若希望只进行一次评估,需要加上 --run_once参数,且终端会输出以下信息:
INFO:tensorflow:examples_processed: 298 | global_step 10 | Batch Hit@1: 0.513 | Batch PERR: 0.359 | Batch Loss: 2452.698 | Examples_per_sec: 2708.994
若您参与了Kaggle竞赛,您需要将预测结果输出为CSV文件(例如 kaggle_solution.csv):
python inference.py --train_dir ~/yt8m/v2/models/video/sample_model --output_file=kaggle_solution.csv --input_data_pattern=${HOME}/yt8m/v2/video/test*.tfrecord
之后,将输出文件上传到Kaggle平台。此外,若您想获奖,您需要确保模型检查点低于1GB。我们要求所有参赛者上传自己的模型(只需上传graph和checkpoint,不需要源代码)以便于检查参赛者的模型是否足够小。您可以通过如下代码将模型打包未.tgz文件:
python inference.py --train_dir ~/yt8m/v2/models/video/sample_model --output_file=kaggle_solution.csv --input_data_pattern=${HOME}/yt8m/v2/video/test*.tfrecord --output_model_tgz=my_model.tgz
之后将输出文件上传到Kaggle平台
(2)帧级模型训练
使用train.py进行训练,选择一个帧集模型(例如 FrameLevelLogisticModel),并且用--frame_features来指定模型,TLDR-frame-level被压缩了,--frame_features能够对它进行解压缩。
python train.py --frame_features --model=FrameLevelLogisticModel --feature_names='rgb,audio' --feature_sizes='1024,128' --train_data_pattern=${HOME}/yt8m/v2/frame/train*.tfrecord --train_dir ~/yt8m/v2/models/frame/sample_model --start_new_model
(3)评估模型
python eval.py --eval_data_pattern=${HOME}/yt8m/v2/frame/validate*.tfrecord --train_dir ~/yt8m/v2/models/frame/sample_model
生成预测结果的CSV文件(kaggle_solution.csv):
python inference.py --train_dir ~/yt8m/v2/models/frame/sample_model --output_file=kaggle_solution.csv --input_data_pattern=${HOME}/yt8m/v2/frame/test*.tfrecord
与以上相似,你也能够打包自己的模型通过参数:--output_model_tgz=my_model.tgz
4.下载整个数据集
若您已经下载了一部分数据并且测试代码能够正常工作,就可以开始下载所有数据并且提出最近的视频分类模型!
下载这个歌数据集,需要重复上述的download.py命令行,去除shard变量。通过如下命令您能够下载视频级的完整训练集:
curl data.yt8m.org/download.py | partition=2/video/train mirror=us python
上述命令行将会从US镜像上下载所有的视频级训练集,大小为18GB。若您在南美以外的区域,您可以更改‘mirror’的参数为‘eu’(欧洲)或者‘asia’(亚洲)来加速传输。
改变‘train’为‘validate’/‘test’并且重新运行命令行能够下载数据集的其他子集。改变‘video’为‘frame’能够下载帧级的特征。整个数据集一共是1.53TB,您能够通过‘shard’变量为‘m,n’来下载数据集的m/n。
5.Tensorboard
您能够使用TensorBoard来对比您的帧级或者视频级模型,例如:
MODELS_DIR=~/yt8m/v2/models
tensorboard --logdir frame:${MODELS_DIR}/frame,video:${MODELS_DIR}/video
我们发现该命令在我们训练和评估不同模型时,能够有效地让tensorboard持续运行。
6.训练细节
train.py,evaluate.py,inference.py需要用--tain_dir来指定。模型正在训练时,train.python将把TensorFlowgraph,以及模型的checkpoint输出到--train_dir。同时它也将输出一个Json文件。
您能够通过使用--model指定模型。例如,您能够使用LogisticModel(默认)通过:
YT8M_DIR=~/yt8m/v2
python train.py --train_data_pattern=${YT8M_DIR}/video/train*.tfrecord --model=LogisticModel --train_dir ~/yt8m/v2/models/logistic
由于数据集被分割为3844个个体文件,我们可以用*来指代所有文件。
默认情况下,训练代码将频繁地输出checkpoint文件,例如当前迭代下的所有训练参数。这些也将输出到--train_dir。如果您重新使用一个--train_dir,训练器将恢复该目录存储的最新checkpoint。上述情况只在checkpoint和graph结构相匹配的情况下才发生。若您处于开发或者调试阶段,可以用--start_new_model来运行您的运行配置
(1)评估和预测
评估模型,使用如下命令:
python eval.py --eval_data_pattern=${YT8M_DIR}/v2/video/validate*.tfrecord --train_dir ~/yt8m/v2/models/logistic --run_once=True
若您对自己的模型很满意,您可以生产预测结果的CSV文件:
python inference.py --output_file predictions.csv --input_data_pattern=${YT8M_DIR}/v2/video/test*.tfrecord' --train_dir ~/yt8m/v2/models/logistic
这将会输出模型对每个测试视频的前20个预测标签到prediction.csv。
(2)使用帧级特征
和上述方法相似,对train.py追加--frame_features=True--model=FrameLevelLogisticModel --feature_names="rgb"--feature_sizes="1024"以及更改--train_dir。
FrameLevelLogisticModel旨在达到与基于视频级特征训练的逻辑回归模型的等效结果。请查看models.py来了解如何实现您的模型。
(3)使用音频特征
特征文件(帧级或者视频级)包含两种特征集。1.可视化特征;2.音频特征。代码在默认情况下只使用了可视化特征,但也可以只用音频特征或者两者都用。为了指定特征,您必须设置--feature_names和--feature_sizes。可视化特征和音频特征分别称为‘rgb’和‘audio’且分别有1024和128个维度。可视化特征和音频特征使用以逗号分隔的值列表来指定。例如:
--feature_names="mean_rgb,mean_audio"--feature_sizes="1024,128"
相似的,使用帧级的音频特征:
--feature_names="rgb,audio"--feature_sizes="1024,128"
注意:确保name和sizes中值一一对应。
7.使用GPUs
若您的TensorFlow为GPU版本,代码将使用您的可用GPUs,您能够运行一下命令来确认您的安装。
python -c 'import tensorflow as tf; tf.Session()'
这将会输出您的每一个可用GPU信息,例如:
I tensorflow/core/common_runtime/gpu/gpu_init.cc:102] Found device 0 with properties:
name: Tesla M40
major: 5 minor: 2 memoryClockRate (GHz) 1.112
pciBusID 0000:04:00.0
Total memory: 11.25GiB
Free memory: 11.09GiB
...
如果至少有一个可用GPU,则将使用GPU计算前向和后向通道,而CPU将主要用于输入和输出管道。如果您有多个GPU,则当前的默认行为是仅使用其中的一个。
8.Ground-TruthLabel Files
我们也提供了训练集和验证集的真实标签信息的CSV文件。这些文件能够通过如下命令下载:
gsutil cp gs://us.data.yt8m.org/2/ground_truth_labels/train_labels.csv /destination/folder/
gsutil cp gs://us.data.yt8m.org/2/ground_truth_labels/validate_labels.csv /destination/folder/
或者直接使用如下链接:
http://us.data.yt8m.org/2/ground_truth_labels/train_labels.csv
http://us.data.yt8m.org/2/ground_truth_labels/validate_labels.csv
文件中的每一行都以视频ID开头,后面跟着与该视频对应的真实标签列表。例如,对于ID为'VIDEO_ID',带有两个标签'LABEL1'和'LABEL2'的视频,存储了:
VIDEO_ID,LABEL1 LABEL2
9.模型概述
此示例代码包含YouTube-8M技术报告中给出的模型的实现。
(1)视频级模型:
LogisticModel: 将输出要素线性投影到标签空间中,然后使用sigmoid函数将logit值转换为概率。
MoeModel:在可配置数量的逻辑分类器上做每类softmax分布。其中一个分类器未经过训练,并且预测值总是为0
(2)帧级模型:
LstmModel:使用多层LSTM神经网络处理每个帧的特征。LSTM的最终内部状态被输入到视频级模型中进行分类。请注意,使用此模型时需要将学习速率更改为0.001。
DbofModel:将每个帧的特征投影到更高维度的“聚类”空间中,并在该空间中的帧之间进行池化,然后使用视频级模型对现在聚合的特征进行分类。
FrameLevelLogisticModel:相当于'LogisticModel',但是通过帧级别的特征而不是使用预先聚合的特征来执行平均池化。
10.创建自己的数据集
您可以从您自己的视频创建数据集文件。我们的feature extractor代码能够创建tfrecord文件,提取的特征与我们的数据集相同。您可以使用我们的代码来训练特征提取器输出的tfrecord文件。此外,您能够在您的新数据集上微调您的YouTube-8M模型。
11.文件概览
训练:
train.py:训练模型的主要脚本。
losses.py:包含损失函数的定义。
models.py:包含用于定义完整模型的基类。
video_level_models.py:包含将聚合要素作为输入的模型的定义。
frame_level_models.py:包含将帧级要素作为输入的模型的定义。
model_util.py:包含用于实现模型的通用实用程序。
export_model.py:提供一个类,用于在培训期间导出模型,以便稍后用于批量预测。
readers.py:包含Video数据集和Frame数据集阅读器的定义。
评估
eval.py:评估模型的主要脚本。
eval_util.py:提供一个计算所有评估指标的类。
average_precision_calculator.py:用于计算平均精度的函数。
mean_average_precision_calculator.py:用于计算平均平均精度的函数。
预测
inference.py:通过一组视频生成包含模型预测的输出CSV文件。它可以选择生成模型的压缩文件。
其他
README.md:这个文档。
utils.py:常用函数。
convert_prediction_from_json_to_csv.py:将批量预测的JSON输出转换为CSV文件以供提交。
YouTube-8M数据集starter code部分翻译相关推荐
- 【Hadoop】YouTube 视频数据集分析实验 (原理+过程+代码)
一.实验背景 随着近年来视频拍摄设备与视频处理技术的高速发展,对网络上海量视频的分析越来越受到关注与重视.本实验希望通过使用 Hadoop 实验数据集 -- Dataset for "Sta ...
- A Transformer-based Approach for Source code Summarization 翻译
A Transformer-based Approach for Source Code Summarization 全文翻译 本文最佳阅读方式:读完一段中文内容快速阅读对应的英文部分 欢迎关注我的公 ...
- request failed with status code 500翻译_英语歌词的文言文翻译:文艺清新还是矫揉造作?...
I like you,but just like you. 纵然万劫不复,纵然相思入骨,我也待你眉眼如初,岁月如故. 第一次读到这句文言文翻译的时候,感觉译文的很美,但这种美和英文原文却并没有太多的联 ...
- Visual Studio Code Docs 翻译目录(已完成到Get Started)
Visual Studio Code 概述-overview 安装-setup 概述-OverView Linux macOS Window's 网络-Network 附加组件和工具-Addition ...
- ECCV2018论文,以及相关比赛地址
原 ECCV 2018论文解读及资源集锦(10月17日更新,含全部论文下载链接) 2018年08月20日 17:41:38 extremevision 阅读数:8983 </div>< ...
- 视频分析与多模态融合之一,为什么需要多模态融合
视频分析与多模态融合之一,为什么需要多模态融合 FesianXu 20210130 at Baidu search team 前言 在前文<万字长文漫谈视频理解>[1]中,笔者曾经对视频理 ...
- 【2017】Learnable pooling with Context Gating for videoclassification借助Context Gating进行可学习的池化以进行视频分类
intro: CVPR17 Youtube 8M workshop. Kaggle 1st place arxiv: https://arxiv.org/abs/1706.06905 github: ...
- 语义分割-深度学习算法总结(2018)-论文翻译(附带相关数据集)
太优秀了,收藏用!转载自:https://www.cnblogs.com/Jie-Liang/archive/2017/06/29/6902375.html 论文原文地址:https://arxiv. ...
- YouTube-8M视频数据集概览
参考链接: 官网 https://www.kaggle.com/c/youtube8m-2018/overview 比赛官网:https://research.google.com/youtube8m ...
- 机器学习实战的数据集在哪找_在哪里找到很棒的机器学习数据集
机器学习实战的数据集在哪找 Good machine learning research starts with an exceptional dataset. There is no need to ...
最新文章
- type和object
- 通过SQL存储过程删除过期的数据库Bak备份文件
- mysql数据库试题下载_MYSQL数据库2013-2014学年考试试卷
- QEMU 1.3 发布,模拟处理器
- 如何在SAP Cloud for Customer的Silverlight UI中找到后台错误的明细
- 转载:用大白话聊聊分布式系统
- 两次结果的绝对差值_你知道电子天平的检定和检定结果的影响因素有哪些吗?...
- 通过python基于netconf协议获取网络中网元的配置数据,助力企业网络控制自动化轻松实现!
- 【Kafka】kafka消费报错 no brokers found in zk
- python处理时间的标准函数库_使用Python的datetime库处理时间(RPA流程)
- 浏览器检测 vs 特性检测
- 绝地求生刺激战场辅助卧底外挂群,菜鸟一秒变高手
- ab性能测试工具使用
- 关于this指向问题及改变this指向的方法
- C语言之计算某天为一年中第几天
- 计算机音乐本质上,电脑音乐系统的本质特点.doc
- Win 10系统修复,DISM_se7en3_新浪博客
- linux(shell)查看文件时间戳
- css设置字体下划线与下划线颜色
- 国防科技大学计算机专业课代码,国防科技大学各省院校代码与专业代码的说明...
热门文章
- 【Code】8位编程语言的创始人,你知道几位?
- IDEA中配置类提示Spring Boot Configuration Annotation Processor not configured
- python: module ‘urllib‘ has no attribute ‘unquote‘(url解码)
- Python练手小程序—生成优惠券码写入mysql数据库中
- 计算机重做系统 d盘,pe重装系统后原c盘变称了d盘如何解决
- 正则表达式——特殊字符(MyBatis)
- 投票和排名系统C语言顺序表,电视大赛观众投票及排名系统C语言设计.docx
- 君康人寿2019年排名_2019中国保险公司竞争力报告出炉 君康人寿盈利能力排名第二...
- 关于人工智能数据标注学习
- 驱动读写应用程序内存