音频标签化2:youtube-8m项目的训练、评估与测试
之前小程介绍了使用机器学习的办法来解决“音频标签化”的问题,并且提到了训练样本audioset跟youtube-8m的dataset,而训练模型上也提到了youtube-8m的模型。
本文对youtube-8m的模型做进一步讲解,重点介绍如何使用youtube-8m进行训练、评估与测试。
(一)youtube-8m是什么?
机器学习离不开训练样本跟训练模型,对于“音频标签化”,小程多次提到youtube-8m的训练模型, 那这个youtube-8m到底是什么?在下面这个项目的介绍里面,可以完整地了解youtube-8m到底是什么:
https://github.com/google/youtube-8m
小程用自己的话,再翻译一下。youtube-8m是google开源出来的一个用于视频标签化的启动项目,这个项目已经实现使用youtube-8m dataset(以下简称为8m-dataset)来训练、评估与测试的框架。但是,对于具体的业务需求,或者为了追求更好的训练结果(甚至可以参加比赛),读者应该基于这个框架,扩展出自己的训练模型。
所以,youtube-8m是一个基于tensorflow的机器学习的训练框架,而且已经可以使用8m-dataset样本。
(二)如何使用youtube-8m?
既然youtube-8m是一个启动项目, 那么怎么使用youtube-8m来满足自己的业务需求呢? 并非所有业务需求都适合使用youtube-8m,但这里讲的是“音频标签化”也就是音频分类的业务需求是适合使用youtube-8m的。
同样,对于youtube-8m的使用,在其项目关联页面,也有介绍,读者可以详细阅读:
https://github.com/google/youtube-8m
(1)环境
环境上,首先要安装了python2.7+,并且安装了tensorflow1.8+。
可以这样检测python跟tensorflow的版本信息:
python --version
python -c 'import tensorflow as tf; print(tf.__version__)'
对于python2.7的macos,可以这样安装tensorflow(需在FQ状态;可优先考虑在虚拟环境中安装tf):
pip install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.8.0-py2-none-any.whl
关于python以及tensorflow的安装,读者可以关注“广州小程”微信公众号,并在相应的菜单项中(比如“平台开发”或“机器学习”)查阅相关的文章(比如python语言1)。
接下来具体讲解youtube-8m的使用。
(2)样本
youtube-8m框架,既可以使用8m-dataset,也可以使用audioset样本(代码做一些修改就可以使用audioset),这里以8m-dataset进行训练。
跟audioset一样,8m-dataset样本也只是特征的数据集,并非原始的视频或音频数据。
8m-dataset样本,按特征的处理,划分为两类,一类是基于帧的样本(frame-level),一类是基于视频的样本(video-level)。
基于帧的样本的特征内容是这样的:

基于视频的样本的特征内容是这样的:

可以看出,video-level样本是对整个视频的特征作了平均,而frame-level则按帧记录了特征。这里使用机器学习的目的是实现音频标签化,可以使用每一帧的音频特征来训练,所以这里选择基于帧的样本,即frame-level的样本。
作为示范,这里并不使用全部8m-dataset样本,而只是下载其中一部分样本。
按项目的介绍,可以这样下载8m-dataset样本(网络在FQ状态):
curl data.yt8m.org/download.py | shard=1,1000 partition=2/frame/train mirror=us python
curl data.yt8m.org/download.py | shard=1,1000 partition=2/frame/validate mirror=us python
curl data.yt8m.org/download.py | shard=1,1000 partition=2/frame/test mirror=us python
使用了http://data.yt8m.org/download.py这个脚本来下载,shard参数指定了下载数量的比例,shard=1,1000表示下载千分之一的数量,去掉这个参数则表示全部下载。
分别执行以上三个下载命令,可以下载到三部分样本,分别用于训练、评估(校验)与测试,比如小程下载到的内容是这样的:

对于样本下载存放的目录,可以参考youtube-8m项目介绍的那样来创建。
然后就可以使用这些样本,分别进行训练、评估与测试。
(3)训练
先把youtube-8m项目clone下来:
git clone https://github.com/google/youtube-8m.git
这时可以看到youtube-8m项目的目录结构是这样的:

对于每个文件的作用,读者也可以在项目的介绍页面中查阅。
接下来,训练基于帧(frame-level)的模型:
python train.py --frame_features --model=FrameLevelLogisticModel --feature_names='rgb,audio' --feature_sizes='1024,128' --train_data_pattern="../../v2/frame/train*.tfrecord" --train_dir ../../v2/models/frame/sample_model --start_new_model
参数train_data_pattern为训练样本所在目录,train_dir为生成模型所存放的目录。
对于train.py使用的参数,可以这样查看:
python train.py --help
可以看到这样的信息:

需要注意,训练这一步,最好用gpu来运行,才能保证较好的执行速度,如果在一般的机器上运行,很可能时间漫长且极占资源。
训练结束后(或被中断),在训练参数中指定的模型存放的目录中,可以看到这样的文件:

可以看到,训练过程中生成了两组模型文件,比如model.ckpt-10.xx等,而其中的inference_model.xxx文件,是小程执行了下面介绍的“评估”这一步后生成的文件。
可以看到,在训练的过程中会生成很多checkpoint文件(预测模型),评定哪一个是最佳的预测模型也是一个工作。
(4)评估
可以这样进行评估:
python eval.py --eval_data_pattern="../../v2/frame/validate*.tfrecord" --train_dir ../../v2/models/frame/sample_model
参数train_dir指定了训练模型所在目录,eval.py会根据checkpoint文件加载“最新的”模型进行评估(也可以指定加载哪一组模型)。
执行评估,可以看到这样的输出(基于小程下载的样本以及训练的结果):

同时会生成一组新的模型(inference_model.xxx),读者可以参考上面训练结果的截图。
(5)测试
测试就是应用模型进行实际的使用(也可以评估预测模型的准确度等),可以这样进行测试:
python inference.py --train_dir ../../v2/models/frame/sample_model --output_file=test.csv --input_data_pattern="../../v2/frame/test*.tfrecord"
参数train_dir跟评估的使用类似,参数output_file指定测试结果的保存文件,参数input_data_pattern指定测试样本。
执行测试,可以看到这样的输出:

然后,可以查看测试结果,这里保存在test.csv文件中,csv文件是纯文本文件,一般用于保存记录。测试结果类似这个截图:

从测试结果中可以看到,已经有分类的结果,每一个分类都有对应的预测比例。但是,要想得到准确率与召回率较高的结果,还需要做更多的工作。
总结一下,本文主要介绍了如何使用youtube-8m这个项目,包括训练、评估与测试。对于训练的参数、随机性,以及如何取得较好的训练结果等,以后再作介绍。
音频标签化2:youtube-8m项目的训练、评估与测试的更多相关文章
- 音频标签化3:igor-8m项目的训练、评估与测试
上一节介绍了youtube-8m项目,这个项目以youtube-8m dataset(简称8m-dataset)样本集为基础,进行训练.评估与测试.youtube-8m设计用于视频特征样本,但实际也适 ...
- 音频标签化1:audioset与训练模型 | 音频特征样本
随着机器学习的发展,很多"历史遗留"问题有了新的解决方案.这些遗留问题中,有一个是音频标签化,即如何智能地给一段音频打上标签的问题,标签包括"吉他"." ...
- 初探React,将我们的View标签化
前言 我之前喜欢玩一款游戏:全民飞机大战,而且有点痴迷其中,如果你想站在游戏的第一阶梯,便需要不断的练技术练装备,但是腾讯的游戏一般而言是有点恶心的,他会不断的出新飞机.新装备.新宠物,所以,很多时候 ...
- H5 音频标签自定义样式修改以及添加播放控制事件
说明: 需求要求这个音频标签首先要是可适配移动端浏览器的,音频样式就是参考微信做的. 最终效果如下: 具体实现 思路: H5 的 <audio> 标签是由浏览器负责实现默认样式的.所以不同 ...
- 让资源管理器变得像Chrome一样标签化
让资源管理器变得像Chrome一样标签化 前段时间WIn10开发者预览版发布了更新通知,其中一个主要特性就是给资源管理器添加了标签化的功能. 习惯了各种浏览器便捷的标签化管理,早就想要这个实用的功能了 ...
- HTML5视音频标签参考
本文将介绍HTML5中的视音频标签和对应的DOM对象.是相关资料的中文化版本,可以作为编写相关应用的简易中文参考手册. 一些约定 所有浏览器:指支持HTML5的常见桌面浏览器,包括IE9+.Firef ...
- H5 <audio> 音频标签自定义样式修改以及添加播放控制事件
H5 <audio> 音频标签自定义样式修改以及添加播放控制事件 Dandelion_drq 关注 2017.08.28 14:48* 字数 331 阅读 2902评论 3喜欢 3 说明: ...
- HTML5新增的音频标签、视频标签
我们所说的H5就是我们所说的HTML5中新增的语言标准 一.音频标签 在HTML5当中有一个叫做audio的标签,可以直接引入一段音频资源放到我们的网页当中 格式: <audio autopla ...
- IIS 配置 FTP 网站 H5 音频标签自定义样式修改以及添加播放控制事件
IIS 配置 FTP 网站 在 服务器管理器 的 Web服务器IIS 上安装 FTP 服务 在 IIS管理器 添加FTP网站 配置防火墙规则 说明:服务器环境是Windows Server 200 ...
随机推荐
- easyui Tree树形控件的异步加载
Tree控件 $('#partyOrgTree').tree({ checkbox: false, url: getDataUrl, onClick: function (node) { getDiv ...
- maven 监理web war 项目
- 关闭浏览器时提示的javascript事件
onbeforeunload事件 它是这样用的: <script language="javascript"> g_blnCheckUnload = true; fun ...
- JavaScript 函数定义和调用
普通的函数定义方法: function abs(x):{ if (x >= 0){ return x; }else { return -x ; } } 两种方法是等价的 var abs = fu ...
- C语言中,int型函数返回值可以为bool型。
参考:https://bbs.csdn.net/topics/360116265. 问题: 如一个函数如下: int aa( int a, int b ) //举个例子,不要纠结功能. { if(a ...
- EF6学习笔记(六续) 复杂数据模型建表测试
测试以下几种模型关系: 1对1或0 . 1对多 . 多对多 1 对 1 或 0 如果直接定义两个模型,相互直接增加导航属性,会提示错误,必须为这个对应关系设定主副关系: public class ...
- java安全与加解密
1 安全 安全性相关内容分为认证.授权和审计(发现安全问题时可以查看相关历史记录) 用户认证 java API表示主体的是javax.security.auth.Subject类型,表示用户身份标识的 ...
- JSP的分页技术
在实际应用中,如果从数据库中查询的记录特别的多,甚至超过了显示屏的显示范围,这个时候可将结果进行分页显示. 假设总记录数为intRowCount,每页显示的数量为inPageSize,总页数为intP ...
- nginx 502 bad gateway 问题处理集锦
一般看来, 这种情况可能是由于nginx默认的fastcgi进程响应的缓冲区太小造成的, 这将导致fastcgi进程被挂起, 如果你的fastcgi服务对这个挂起处理的不好, 那么最后就极有可能导致5 ...
- 如何修改config?
这几天在做给WCF做加密传输,结果当然是实现了加密传输,同时也发现了一个问题,有没有大神来答疑解惑一下. 事情是这样的. 在客户端的配置中,需要加入一个behavior,在config文件中是这样的. ...