前言
在尝试用ECO Lite做视频分类的时候,使用了作者的Pytorch实现,然而Pytorch实现是基于Pytorch0.4的,我自己的Pytorch版本是1.4,所以在跑模型的时候出现了一些问题,这里记录一下。
问题
- 第一个问题就是前向传播的静态方法,报错如下:
RuntimeError: Legacy autograd function with non-static forward method is deprecated. Please use new-style autograd function with static forward method
解决
- 第一个问题的解决方法如下:
– 官方给出的simple是使用@staticmethod装饰器,将forward变为静态方法,但是这样无法使用类和实例的变量,这怎么行呢,没有对象的人不能放弃面向对象,所以放弃。
– 第二个方法是从SSD网络的bug借鉴过来的,目标检测的SSD pytorch实现也是有同样的问题,但是我不知道什么原理,解决措施如下:
- 首先,找到报错位置,我这里是在models.py最后加入代码测试的,加入的代码如下:
if __name__ == "__main__":
from torchsummary import summary
import time
model = TSN(2,12,'scratch','RGB',base_model='ECO',consensus_type='identity', dropout=0.4, partial_bn=not True)
x = torch.rand([12,3,224,224])
t1 = time.time()
with torch.no_grad():
f

博主在使用ECO Lite做视频分类时,因Pytorch版本差异(作者实现基于0.4,自己用1.4),跑模型出现问题。如前向传播的静态方法报错,官方用装饰器的方法不可行,后借鉴SSD网络bug解决措施,修改报错位置并在所有模型前向传播加forward解决问题。
最低0.47元/天 解锁文章
2547





