沃尔夫勒姆研究公司

3D-Inflated ResNet-50公司培训时间: 动力学400数据

确定视频中的主要动作

该模型应用3D膨胀技术从2D ResNet-50架构引导3D卷积网络的内核,直接利用视频应用在图像域架构上多年的进步。通过沿时间维度复制ResNet-50的2D滤波器来初始化3D卷积滤波器的权重,这可以被视为对由跨时间复制的静态ImageNet图像组成的视频数据集的隐式预训练。

训练集信息

型号信息

示例

资源检索

获取预先训练过的网:

在[1]中:=
NetModel[“动力学400数据训练的3D-Inflated ResNet-50”]
输出[1]=

基本用法

对视频进行分类:

在[2]中:=
video=ResourceData[“示例视频:阅读书籍”]
输出[2]=
在[3]中:=
pred=NetModel[“动力学400数据训练的3D-Inflated ResNet-50”][视频]
输出[3]=

获得网络预测的概率:

在[4]中:=
NetModel(网络模型)[“3D充气ResNet-50在动力学400数据上训练”][视频,{“TopProbabilities”,5}]
输出[4]=

特征提取

删除训练后的网络的最后两层,以便网络生成图像的矢量表示:

在[5]中:=
提取器=NetDrop[NetModel[“根据动力学400数据训练的3D-Inflated ResNet-50”],-2]
输出[5]=

获取一组视频:

在[6]中:=
videos=加入[ResourceData[“啦啦队视频示例”],ResourceData]“刷牙视频示例”]];

可视化一组视频的功能:

在[7]中:=
FeatureSpacePlot[视频,FeatureExtractor->(提取器[{#,#}]&),LabelingFunction->(已放置[缩略图@视频帧列表[#1,1][[1]],中心]&),标签大小->50,图像大小->500,方法->“TSNE”]
输出[7]=

转移学习

使用预先训练的模型来构建分类器,用于区分数据集中不存在的两个动作类的图像。创建测试集和培训集:

在[8]中:=
视频=<|VideoTrim[ResourceData[“示例视频:公园里的野鸭”],10]->“公园里的野鸭子”,VideoTrim[ResoourceData[“样例视频:冻结气泡”],10]->“冻结气泡”|>;
在[9]中:=
帧速率=8;采样率=8;maxFrameNumber=帧速率*采样速率;
在[10]中:=
数据集=联接@@KeyValueMap[表[VideoTrim[#1,{数量[i,“帧数”],数量[i+maxFrameNumber-1,“帧”]}]->#2,{i,1,信息[#1、“帧计数”][[1]]-Mod[信息[#1,“帧数”][[1]],maxFrameNumber],四舍五入[maxFrame编号/4]}]&,视频];
在[11]中:=
{train,test}=ResourceFunction[“TrainTestSplit”][RandomSample[数据集],“TrainingSetSize”->0.7];

去除预处理网的最后两层:

在[12]中:=
tempNet=NetDrop[NetModel[“根据动力学400数据训练的3D-Inflated ResNet-50”],-2]
输出[12]=

创建一个新的网络,由预处理网络、线性层、聚合层和softmax层组成:

在[13]中:=
newNet=NetJoin[tempNet,NetChain[{“Linear”->LinearLayer[2,“Input”->{2048}],“SoftMax”->SoftmaxLayer[]}],”Output“->NetDecoder[{”Class“,{”Freezing Bubble“,”Wild Ducks in the Park“}}]];

对数据集进行训练,冻结除“线性”层中的权重之外的所有权重(使用目标设备->“GPU”用于在GPU上进行培训):

在[14]中:=
trainedNet=NetTrain[newNet,train,LearningRateMultipler->{“Linear”->1,_->0},ValidationSet->Scaled[0.1],MaxTrainingRounds->2]
输出[14]=

在测试集上获得了完美的精确度:

在[15]中:=
分类器测量[trainedNet,test,“准确性”]
输出[15]=

净信息

检查网络中所有阵列的参数数量:

在[16]中:=
信息[NetModel(网络模型)[“3D-Inflated ResNet-50 Trained on Kinetics 400 Data”],“ArraysElementCounts”]
输出[16]=

获取参数总数:

在[17]中:=
信息[NetModel(网络模型)[“3D-Inflated ResNet-50 Trained on Kinetics 400 Data”],“ArraysTotalElementCount”]
输出[17]=

获取层类型计数:

在[18]中:=
信息[NetModel(网络模型)[“3D-Inflated ResNet-50 Trained on Kinetics 400 Data”],“LayerTypeCounts”]
退出[18]=

显示摘要图形:

在[19]中:=
信息[NetModel(网络模型)[“3D充气ResNet-50在动力学400数据上训练”],“SummaryGraphic”]
输出[19]=

资源历史记录

参考