【原创内容,转载需作者同意】

以下内容为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部分翻译相关推荐

  1. 【Hadoop】YouTube 视频数据集分析实验 (原理+过程+代码)

    一.实验背景 随着近年来视频拍摄设备与视频处理技术的高速发展,对网络上海量视频的分析越来越受到关注与重视.本实验希望通过使用 Hadoop 实验数据集 -- Dataset for "Sta ...

  2. A Transformer-based Approach for Source code Summarization 翻译

    A Transformer-based Approach for Source Code Summarization 全文翻译 本文最佳阅读方式:读完一段中文内容快速阅读对应的英文部分 欢迎关注我的公 ...

  3. request failed with status code 500翻译_英语歌词的文言文翻译:文艺清新还是矫揉造作?...

    I like you,but just like you. 纵然万劫不复,纵然相思入骨,我也待你眉眼如初,岁月如故. 第一次读到这句文言文翻译的时候,感觉译文的很美,但这种美和英文原文却并没有太多的联 ...

  4. Visual Studio Code Docs 翻译目录(已完成到Get Started)

    Visual Studio Code 概述-overview 安装-setup 概述-OverView Linux macOS Window's 网络-Network 附加组件和工具-Addition ...

  5. ECCV2018论文,以及相关比赛地址

    原 ECCV 2018论文解读及资源集锦(10月17日更新,含全部论文下载链接) 2018年08月20日 17:41:38 extremevision 阅读数:8983 </div>< ...

  6. 视频分析与多模态融合之一,为什么需要多模态融合

    视频分析与多模态融合之一,为什么需要多模态融合 FesianXu 20210130 at Baidu search team 前言 在前文<万字长文漫谈视频理解>[1]中,笔者曾经对视频理 ...

  7. 【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: ...

  8. 语义分割-深度学习算法总结(2018)-论文翻译(附带相关数据集)

    太优秀了,收藏用!转载自:https://www.cnblogs.com/Jie-Liang/archive/2017/06/29/6902375.html 论文原文地址:https://arxiv. ...

  9. YouTube-8M视频数据集概览

    参考链接: 官网 https://www.kaggle.com/c/youtube8m-2018/overview 比赛官网:https://research.google.com/youtube8m ...

  10. 机器学习实战的数据集在哪找_在哪里找到很棒的机器学习数据集

    机器学习实战的数据集在哪找 Good machine learning research starts with an exceptional dataset. There is no need to ...

最新文章

  1. type和object
  2. 通过SQL存储过程删除过期的数据库Bak备份文件
  3. mysql数据库试题下载_MYSQL数据库2013-2014学年考试试卷
  4. QEMU 1.3 发布,模拟处理器
  5. 如何在SAP Cloud for Customer的Silverlight UI中找到后台错误的明细
  6. 转载:用大白话聊聊分布式系统
  7. 两次结果的绝对差值_你知道电子天平的检定和检定结果的影响因素有哪些吗?...
  8. 通过python基于netconf协议获取网络中网元的配置数据,助力企业网络控制自动化轻松实现!
  9. 【Kafka】kafka消费报错 no brokers found in zk
  10. python处理时间的标准函数库_使用Python的datetime库处理时间(RPA流程)
  11. 浏览器检测 vs 特性检测
  12. 绝地求生刺激战场辅助卧底外挂群,菜鸟一秒变高手
  13. ab性能测试工具使用
  14. 关于this指向问题及改变this指向的方法
  15. C语言之计算某天为一年中第几天
  16. 计算机音乐本质上,电脑音乐系统的本质特点.doc
  17. Win 10系统修复,DISM_se7en3_新浪博客
  18. linux(shell)查看文件时间戳
  19. css设置字体下划线与下划线颜色
  20. 国防科技大学计算机专业课代码,国防科技大学各省院校代码与专业代码的说明...

热门文章

  1. 【Code】8位编程语言的创始人,你知道几位?
  2. IDEA中配置类提示Spring Boot Configuration Annotation Processor not configured
  3. python: module ‘urllib‘ has no attribute ‘unquote‘(url解码)
  4. Python练手小程序—生成优惠券码写入mysql数据库中
  5. 计算机重做系统 d盘,pe重装系统后原c盘变称了d盘如何解决
  6. 正则表达式——特殊字符(MyBatis)
  7. 投票和排名系统C语言顺序表,电视大赛观众投票及排名系统C语言设计.docx
  8. 君康人寿2019年排名_2019中国保险公司竞争力报告出炉 君康人寿盈利能力排名第二...
  9. 关于人工智能数据标注学习
  10. 驱动读写应用程序内存