TSN-pytorch 实验记录

TSN-pytorch 实验记录

近期需要做动作识别,so选择一些经典网络进行测试。目前仅使用了RGB进行测试,optical flow 并未进行测试

TSN code:https://github.com/yjxiong/tsn-pytorch

TSN pre-train model:https://github.com/shuangshuangguo/caffe2pytorch-tsn

数据集:

dataset: ucf101

数据集处理使用mmaction2: https://github.com/open-mmlab/mmaction2

mmaction2的方式处理数据集即可,在我的实验过程中,服务器无法通过其sh文件下载数据集,所以去官网自行下载并按sh文件中规定路径,上传到指定位置。

这里有一点需要注意,就是数据标签、视频、图片以及train、val列表,均存放在mmaction2/data路径下,而sh文件操作路径是mmaction2/tools/data/路径下。

同时因为denseflow未安装成功,所以没有提取光流,仅仅通过opencv提取了RGB帧,具体方式见mmaction2.

测试:

代码采用TSN code所示代码,因为官方并未提供pytorch 的 pre-train model, 所以找到了第三方提供的(见上文TSN pre-train model)。

该模型由官方提供的caffe 模型转换而来,所以需要用其提供的test_models.py替换官方文件中的test_model.py

测试环境:NVIDIA V100显卡,消耗显存11781MB, ucf101 split1 测试时长3-4小时。

测试时, 采用如下指令进行测试,以ucf101数据集为例,其中mmaction2 和 tsn-pytorch文件在同级目录上。

CUDA_VISIBLE_DEVICES=3 python test_models.py ucf101 RGB ../mmaction2/data/ucf101/ucf101_val_split_1_rawframes.txt \
--arch BNInception ./checkpoints/ucf101_rgb.pth

--arch 需要选择BNInception,不可以选择resnet系列,模型会不匹配。

pytorch >= 0.4 版本,会出现size mismatch的错误,

报错如下:Error(s) in loading state_dict for BNInception:size mismatch for

解决方法:
解决前的代码是这样的:

self.load_state_dict(torch.utils.model_zoo.load_url(weight_url, model_dir='./TRN-pytorch-master/model_zoo'))


解决后:
 

        model_BNInception = torch.utils.model_zoo.load_url(weight_url, model_dir='./TRN-pytorch-master/model_zoo')
        for name, weights in model_BNInception.items():
            # print(name, weights.size())  可以查看模型中的模型名字和权重维度
            if len(weights.size()) == 2: #判断需要修改维度的条件
                model_BNInception[name] = weights.squeeze(0)  #去掉维度0,把(1,128)转为(128)
        self.load_state_dict(model_BNInception)

至于其他问题,肯定还有,不过印象深刻的都写下来的,剩下的多半根据报错直接百度都可以解决掉。

测试结果:Accuracy 85.82%

TSN-pytorch 实验记录_第1张图片

这一个东西搞了十来天,顶着老板的push,搞了好几个版本的tsn,最终以上述方式完成了测试,写下来希望大家再做上述工作的时候能少踩些坑,大家加油~

 

你可能感兴趣的:(深度学习,pytorch,caffe)