Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

按照paper给出的初始化方案、相应的参数设置,在UCF101上进行训练,发现loss下降速度非常慢,甚至到了100个epoch时,top-1的acc才勉强到10%。。。 #47

Closed
Ontheway361 opened this issue May 27, 2019 · 16 comments

Comments

@Ontheway361
Copy link

No description provided.

@chen-ming2019
Copy link

这么慢吗?你加载预训练模型了吗?用kinetics预训练模型,20epoch基本上ok了,我跑的。

@Ontheway361
Copy link
Author

Ontheway361 commented May 31, 2019 via email

@yeyuanzheng177
Copy link

@chen-ming2019 你好 我利用ECO模型训练时 加载了models/eco_lite_rgb_16F_kinetics_v3.pth.tar ,代码如下:
constant(new_state_dict[k], 0)
elif 'finetune'==pretrained_parts:

        pretrained_dict = torch.load("models/eco_lite_rgb_16F_kinetics_v3.pth.tar")
    # # pretrained_on_kin = torch.utils.model_zoo.load_url(weight_url)
        new_state_dict = {k: v for k, v in pretrained_dict['state_dict'].items() if (k in model_dict) and (v.size() == model_dict[k].size())}
        un_init_dict_keys = [k for k in model_dict.keys() if k not in new_state_dict]

        print(un_init_dict_keys)

        std = 0.001
        for k in un_init_dict_keys:
            new_state_dict[k] = torch.DoubleTensor(model_dict[k].size()).zero_()
            if 'weight' in k:
                normal(new_state_dict[k], 0, std)
            elif 'bias' in k:
                constant(new_state_dict[k], 0)
        print(("=> loading model-finetune-url: '{}'".format("models/eco_lite_rgb_16F_kinetics_v3.pth.tar")))
        print("*" * 50)
        print("Start finetuning ..")

    self.load_state_dict(new_state_dict)

但是训练的时候一直不收敛 loss一直是4.61左右,例子如下:

Time 1.450 (1.450) Loss 4.6444 (4.6444) Prec@1 0.000 (0.000) Prec@5 0.000 (0.000)

这是怎么回事呀 当我从头训练时 也是这个结果。

@chen-ming2019
Copy link

@ yeyuanzheng177 你训练了多少epoch, 一直是这样吗?看你写的初始化(un_init_keys 部分)和原来的不一样,你试过他原来的初始化方法吗?

@yeyuanzheng177
Copy link

@chen-ming2019 您好 当我使用原来的初始化方法加载eco_lite_rgb_16F_kinetics_v3.pth.tar模型的时候 报维度不一致的错误。代码如下:
pretrained_on_kin = torch.load("models/eco_lite_rgb_16F_kinetics_v3.pth.tar")
new_state_dict = {k[18:]: v for k, v in pretrained_on_kin['state_dict'].items() if k[18:] in model_dict}

        # init the layer names which is not in pretrained model dict
        un_init_dict_keys = [k for k in model_dict.keys() if k not in new_state_dict]

        print(un_init_dict_keys)

        std = 0.001
        for k in un_init_dict_keys:
            new_state_dict[k] = torch.DoubleTensor(model_dict[k].size()).zero_()
            if 'weight' in k:
                normal(new_state_dict[k], 0, std)
            elif 'bias' in k:
                constant(new_state_dict[k], 0)

        self.load_state_dict(new_state_dict)

报错如下:RuntimeError: Error(s) in loading state_dict for ECO:
size mismatch for res3a_2.weight: copying a param with shape torch.Size([128, 96, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([128, 128, 3, 3, 3]).
请问您是怎么加载预训练模型的呢?

@yeyuanzheng177
Copy link

yeyuanzheng177 commented Jul 15, 2019

@chen-ming2019 为了解决维度不一致 的问题 我只有这样写:
new_state_dict = {k[18:]: v for k, v in pretrained_on_kin['state_dict'].items() if(k[18:] in model_dict) and (v.size() == model_dict[k[18:]].size())}
然后现在正在训练中,,,,,, loss一直上下跳,top1的正确率在[0,25]之间跳跃,我现在已经懵X了,请问你的loss 训练最后是多少,我能不能看看您的超参数设定和怎么样加载模型的代码 。

@chen-ming2019
Copy link

@yeyuanzheng177 我用它的预训练模型大概微调了50 epoch左右,在ucf101 验证集上(split1)loss大概在0.3左右,准确率和论文中的差不多91% 多一点。超参数我采用的是他resposity中最新版本的(pretrained_parts 选择finetune)https://github.com/mzolfaghari/ECO-pytorch/blob/master/opts.py,我直接跑的他给的代码。

@yeyuanzheng177
Copy link

@chen-ming2019 十分感谢你 现在代码已经收敛 并且 我还添加了测试代码和cam实时测试代码 能很好的工作。

@accountcwd

This comment has been minimized.

@Fovever1
Copy link

@chen-ming2019 你复现的那个准确率是top5还是top1?论文里面的准确率是指的top5还是top1?

@bravewhh
Copy link

@yeyuanzheng177 我用它的预训练模型大概微调了50 epoch左右,在ucf101 验证集上(split1)loss大概在0.3左右,准确率和论文中的差不多91% 多一点。超参数我采用的是他resposity中最新版本的(pretrained_parts 选择finetune)https://github.com/mzolfaghari/ECO-pytorch/blob/master/opts.py,我直接跑的他给的代码。

您好,我用您说的方法,但是程序显示有bug,能加一下您的联系方式交流一下吗~~万分感谢。

@Rayaction
Copy link

我用的原作的k400的预训练模型,ECO-full 24segments版本fc层替换掉,split1数据集,第一个epoch结束后top1 acc可达到0.8左右,5个epoch训练就快饱和了,但是test精度没有达到93,最多只有81%。十分尴尬。

@accountcwd
Copy link

我用的原作的k400的预训练模型,ECO-full 24segments版本fc层替换掉,split1数据集,第一个epoch结束后top1 acc可达到0.8左右,5个epoch训练就快饱和了,但是test精度没有达到93,最多只有81%。十分尴尬。

参考这个#53 (comment)

@Rayaction
Copy link

我用的原作的k400的预训练模型,ECO-full 24segments版本fc层替换掉,split1数据集,第一个epoch结束后top1 acc可达到0.8左右,5个epoch训练就快饱和了,但是test精度没有达到93,最多只有81%。十分尴尬。

参考这个#53 (comment)

提好了你在线,这条我有看到过,我用的是官方提供的split1的list。方便加我下吗?想深入探讨一下,我wx raywzs

@Rayaction
Copy link

@yeyuanzheng177 我用它的预训练模型大概微调了50 epoch左右,在ucf101 验证集上(split1)loss大概在0.3左右,准确率和论文中的差不多91% 多一点。超参数我采用的是他resposity中最新版本的(pretrained_parts 选择finetune)https://github.com/mzolfaghari/ECO-pytorch/blob/master/opts.py,我直接跑的他给的代码。

地址404了,能否发我一下你的参数?另外是多少f 下的91

@Liquor520
Copy link

这么慢吗?你加载预训练模型了吗?用kinetics预训练模型,20epoch基本上ok了,我跑的。

@chen-ming2019 你好 我利用ECO模型训练时 加载了models/eco_lite_rgb_16F_kinetics_v3.pth.tar ,代码如下:
constant(new_state_dict[k], 0)
elif 'finetune'==pretrained_parts:

        pretrained_dict = torch.load("models/eco_lite_rgb_16F_kinetics_v3.pth.tar")
    # # pretrained_on_kin = torch.utils.model_zoo.load_url(weight_url)
        new_state_dict = {k: v for k, v in pretrained_dict['state_dict'].items() if (k in model_dict) and (v.size() == model_dict[k].size())}
        un_init_dict_keys = [k for k in model_dict.keys() if k not in new_state_dict]

        print(un_init_dict_keys)

        std = 0.001
        for k in un_init_dict_keys:
            new_state_dict[k] = torch.DoubleTensor(model_dict[k].size()).zero_()
            if 'weight' in k:
                normal(new_state_dict[k], 0, std)
            elif 'bias' in k:
                constant(new_state_dict[k], 0)
        print(("=> loading model-finetune-url: '{}'".format("models/eco_lite_rgb_16F_kinetics_v3.pth.tar")))
        print("*" * 50)
        print("Start finetuning ..")

    self.load_state_dict(new_state_dict)

但是训练的时候一直不收敛 loss一直是4.61左右,例子如下:

Time 1.450 (1.450) Loss 4.6444 (4.6444) Prec@1 0.000 (0.000) Prec@5 0.000 (0.000)

这是怎么回事呀 当我从头训练时 也是这个结果。

请问 你的预训练模型在哪儿下载的呀~ 可以分享下吗 万分感谢! qq2538784404

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants