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

您可以将生成的视频分类模型部署至PAI-EAS形成Restful API服务,其调用方式可以使用MaxCompute Console或Dataworks SQL节点,详情请参见服务方式

您可以下载本实验提供的测试数据、训练模型及配置文件,详情请参见视频分类相关下载

数据说明

视频分类相关算法支持.avi.mp4等常见视频格式的原始数据,本文进行视频分类模型训练的数据分别为eyemakeuplipsmakeup,详情请参见视频分类相关下载

数据格式转换

数据格式转换模块可以将原始视频文件转换为TFRecord格式,该格式的文件可以提高模型训练速度。数据转换的命令格式如下。
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://demo-yuze.oss-cn-beijing-internal.aliyuncs.com/vip/'
-Darn='acs:ram::******:role/aliyunodpspaidefaultrole'
-DossHost='oss-cn-beijing-internal.aliyuncs.com'
-Dcmd convert
-Dconvert_config='oss://demo-yuze.oss-cn-beijing-internal.aliyuncs.com/vip/ucf101_qince.config'
-Dlabel_file='oss://demo-yuze.oss-cn-beijing-internal.aliyuncs.com/vip/vip.csv'
-Doutput_tfrecord='oss://demo-yuze.oss-cn-beijing-internal.aliyuncs.com/vip/'
其中:
  • Dbuckets:OSS地址的根目录。
  • Darn:访问OSS的授权,其获取方式请参见PAI-TF任务参数介绍的IO相关参数说明部分。
  • DossHost:OSS的Host地址。
  • Dconvert_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
  • Dlabel_file:训练视频所在的OSS地址。需要将视频上传至OSS并在文件中注明路径,示例如下。
    #数据ID,原始数据,融合答案
    1,"{""tfspath"": ""oss://demo-yuze/data/eye/public_v_ApplyEyeMakeup_g01_c01.avi""}","{""option"": ""ApplyEyeMakeup""}"
    2,"{""tfspath"": ""oss://demo-yuze/data/eye/public_v_ApplyEyeMakeup_g02_c03.avi""}","{""option"": ""ApplyEyeMakeup""}"
    3,"{""tfspath"": ""oss://demo-yuze/data/eye/public_v_ApplyEyeMakeup_g02_c04.avi""}","{""option"": ""ApplyEyeMakeup""}"
    4,"{""tfspath"": ""oss://demo-yuze/data/eye/public_v_ApplyEyeMakeup_g03_c01.avi""}","{""option"": ""ApplyEyeMakeup""}"
    5,"{""tfspath"": ""oss://demo-yuze/data/eye/public_v_ApplyEyeMakeup_g04_c01.avi""}","{""option"": ""ApplyEyeMakeup""}"
    6,"{""tfspath"": ""oss://demo-yuze/data/lips/public_v_ApplyLipstick_g04_c02.avi""}","{""option"": ""ApplyEyeMakeup""}"
    7,"{""tfspath"": ""oss://demo-yuze/data/lips/public_v_ApplyLipstick_g05_c01.avi""}","{""option"": ""ApplyLipstick""}"
    8,"{""tfspath"": ""oss://demo-yuze/data/lips/public_v_ApplyLipstick_g07_c04.avi""}","{""option"": ""ApplyLipstick""}"
    9,"{""tfspath"": ""oss://demo-yuze/data/lips/public_v_ApplyLipstick_g01_c02.avi""}","{""option"": ""ApplyLipstick""}"
                            
    文件中的路径需要替换为实际OSS路径。
  • Doutput_tfrecord:TFRecord的输出路径。

视频分类模型训练

基于数据转换生成的数据,训练视频分类模型,其命令格式如下。
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
其中:
  • Dbackbone:选用的网络类型。
  • Dmodel_dir:输出的模型地址。
  • Dpretrained_model:上传的预训练模型地址。
  • Dtrain_data:训练数据转换生成的TFRecord文件。
  • Dtest_data:测试数据转换生成的TFRecord文件。
  • Dlabel_map_path:数据转换生成的.pbtxt文件。
  • Dnum_test_example:测试的样本数。
  • Dtrain_batch_size:每次参与训练的样本数。
  • Dbuckets:根目录。
  • Darn:访问OSS的授权,其获取方式请参见PAI-TF任务参数介绍的IO相关参数说明部分。
  • Dnum_classes:分类数量。

视频分类最终生成的模型为TensorFlow SaveModel格式,存储在Dmodel_dir路径下。您可以将该模型部署至PAI-EAS形成Restful API,详情请参见服务部署