PAI视频分类

PAI平台提供视频分类相关算法,支持千万级别超大规模的视频样本训练。本文为您介绍如何基于短视频数据生成视频分类模型。

数据说明

视频分类相关算法支持.avi.mp4等常见视频格式的原始数据,本文进行视频分类模型训练的数据分别为eyemakeuplipsmakeup,您可以下载本实验提供的测试数据、训练模型及配置文件,详情请参见视频分类相关下载

数据格式转换

数据格式转换模块可以将原始视频文件转换为TFRecord格式,该格式的文件可以提高模型训练速度。数据转换的命令格式如下。您可以使用SQL脚本组件进行PAI命令调用,也可以使用MaxCompute客户端或DataWorks的开发节点进行PAI命令调用,详情请参见使用本地客户端(odpscmd)连接开发ODPS SQL任务

pai -name easy_vision_ext
-project algo_public
-Dbuckets='oss://{bucket_name}.{oss_host}/{path}/'
-Darn='acs:ram::*******:role/aliyunodpspaidefaultrole'
-DossHost='{oss_host}'
-Dcmd convert
-Dconvert_config='{bucket_name}.{oss_host}/{path}/{config_file}'
-Dlabel_file='{bucket_name}.{oss_host}/{path}/{config_file}/{label_file}'
-Doutput_tfrecord='{bucket_name}.{oss_host}/{path}/'

具体的数据转换示例如下。

pai -name easy_vision_ext
-project algo_public
-Dbuckets='oss://examplebucket.oss-cn-beijing-internal.aliyuncs.com/vip/'
-Darn='acs:ram::******:role/aliyunodpspaidefaultrole'
-DossHost='oss-cn-beijing-internal.aliyuncs.com'
-Dcmd convert
-Dconvert_config='oss://examplebucket.oss-cn-beijing-internal.aliyuncs.com/vip/ucf101_qince.config'
-Dlabel_file='oss://examplebucket.oss-cn-beijing-internal.aliyuncs.com/vip/vip.csv'
-Doutput_tfrecord='oss://examplebucket.oss-cn-beijing-internal.aliyuncs.com/vip/'

其中:

  • buckets:OSS地址的根目录,必须以正斜线(/)结尾。

  • arn:访问OSS的授权。您可以登录PAI控制台,在全部产品依赖页面的Designer区域,单击操作列下的查看授权信息,获取arn,具体操作请参见云产品依赖与授权:Designer

  • ossHost:OSS访问域名,详情请参见访问域名和数据中心

  • convert_config:配置文件,需要标记类别种类。本文的数据说明部分提供了下载地址,配置文件的示例如下。

    class_map {
      label_name: "ApplyEyeMakeup"
    }
    class_map {
      label_name: "ApplyLipstick"
    }
    model_type: VIDEO_CLASSIFICATION
    converter_class: "QinceConverter"
    write_thread_num: 8
    part_record_num: 64
    test_ratio: 0.0
  • label_file:训练视频所在的OSS地址。需要将视频上传至OSS并在文件中注明路径,示例如下。

    #数据ID,原始数据,融合答案
    1,"{""tfspath"": ""oss://examplebucket/data/eye/public_v_ApplyEyeMakeup_g01_c01.avi""}","{""option"": ""ApplyEyeMakeup""}"
    2,"{""tfspath"": ""oss://examplebucket/data/eye/public_v_ApplyEyeMakeup_g02_c03.avi""}","{""option"": ""ApplyEyeMakeup""}"
    3,"{""tfspath"": ""oss://examplebucket/data/eye/public_v_ApplyEyeMakeup_g02_c04.avi""}","{""option"": ""ApplyEyeMakeup""}"
    4,"{""tfspath"": ""oss://examplebucket/data/eye/public_v_ApplyEyeMakeup_g03_c01.avi""}","{""option"": ""ApplyEyeMakeup""}"
    5,"{""tfspath"": ""oss://examplebucket/data/eye/public_v_ApplyEyeMakeup_g04_c01.avi""}","{""option"": ""ApplyEyeMakeup""}"
    6,"{""tfspath"": ""oss://examplebucket/data/lips/public_v_ApplyLipstick_g04_c02.avi""}","{""option"": ""ApplyEyeMakeup""}"
    7,"{""tfspath"": ""oss://examplebucket/data/lips/public_v_ApplyLipstick_g05_c01.avi""}","{""option"": ""ApplyLipstick""}"
    8,"{""tfspath"": ""oss://examplebucket/data/lips/public_v_ApplyLipstick_g07_c04.avi""}","{""option"": ""ApplyLipstick""}"
    9,"{""tfspath"": ""oss://examplebucket/data/lips/public_v_ApplyLipstick_g01_c02.avi""}","{""option"": ""ApplyLipstick""}"
                            

    文件中的路径需要替换为实际OSS路径。

  • output_tfrecord:TFRecord的输出路径。

视频分类模型训练

基于数据转换生成的数据,训练视频分类模型,其命令格式如下。您可以使用SQL脚本组件进行PAI命令调用,也可以使用MaxCompute客户端或DataWorks的开发节点进行PAI命令调用,详情请参见使用本地客户端(odpscmd)连接开发ODPS SQL任务

pai -name ev_video_classification_ext
-project algo_public
-Dbackbone='resnet_3d_50'
-Dnum_epochs=50
-Ddecay_epochs=5
-Dsave_checkpoints_epochs=1
-Dmodel_dir='{bucket_name}.{oss_host}/{output_model_path}/'
-Duse_pretrained_model=true
-Dpretrained_model='{bucket_name}.{oss_host}/{model_path}/resent_3d_50_model.ckpt'
-Dtrain_data='{bucket_name}.{oss_host}/{path}/data_train_0_0.tfrecord'
-Dtest_data='{bucket_name}.{oss_host}/{path}/data_train_0_0.tfrecord'
-Dlabel_map_path='{bucket_name}.{oss_host}/{path}/data_label_map.pbtxt'
-Dnum_test_example=10
-Dtrain_batch_size=2
-Dtest_batch_size=2
-Dbuckets='{bucket_name}.{oss_host}/{path}'
-Darn='acs:ram::*********:role/aliyunodpspaidefaultrole'
-DossHost='{oss_host}'
-Dinitial_learning_rate=0.0001
-Dstaircase=false
-DgpuRequired=100
-Dnum_classes=2

具体的视频分类训练示例如下。

pai -name ev_video_classification_ext
-project algo_public
-Dbackbone='resnet_3d_50'
-Dnum_epochs=50
-Ddecay_epochs=5
-Dsave_checkpoints_epochs=1
-Dmodel_dir='oss://demo-yuze.oss-cn-beijing-internal.aliyuncs.com/model/'
-Duse_pretrained_model=true
-Dpretrained_model='oss://demo-yuze.oss-cn-beijing-internal.aliyuncs.com/model/resent_3d_50_model.ckpt'
-Dtrain_data='oss://demo-yuze.oss-cn-beijing-internal.aliyuncs.com/vip/data_train_0_0.tfrecord'
-Dtest_data='oss://demo-yuze.oss-cn-beijing-internal.aliyuncs.com/vip/data_train_0_0.tfrecord'
-Dlabel_map_path='oss://demo-yuze.oss-cn-beijing-internal.aliyuncs.com/vip/data_label_map.pbtxt'
-Dnum_test_example=10
-Dtrain_batch_size=2
-Dtest_batch_size=2
-Dbuckets='oss://demo-yuze.oss-cn-beijing-internal.aliyuncs.com/vip/'
-Darn='acs:ram::********:role/aliyunodpspaidefaultrole'
-DossHost='oss-cn-beijing-internal.aliyuncs.com'
-Dinitial_learning_rate=0.0001
-Dstaircase=false
-DgpuRequired=100
-Dnum_classes=2

其中:

  • backbone:选用的网络类型。

  • model_dir:输出的模型地址。

  • pretrained_model:上传的预训练模型地址。

  • train_data:训练数据转换生成的TFRecord文件。

  • test_data:测试数据转换生成的TFRecord文件。

  • label_map_path:数据转换生成的.pbtxt文件。

  • num_test_example:测试的样本数。

  • train_batch_size:每次参与训练的样本数。

  • buckets:根目录。

  • arn:访问OSS的授权。您可以登录PAI控制台,在全部产品依赖页面的Designer区域,单击操作列下的查看授权信息,获取arn,具体操作请参见云产品依赖与授权:Designer

  • num_classes:分类数量。

视频分类最终生成的模型为TensorFlow SaveModel格式,存储在model_dir路径下。您可以将该模型部署至EAS,详情请参见服务部署:控制台