raoyongming / DynamicViT

[NeurIPS 2021] [T-PAMI] DynamicViT: Efficient Vision Transformers with Dynamic Token Sparsification
https://dynamicvit.ivg-research.xyz/
MIT License
576 stars 72 forks source link

关于训练和测试阶段裁剪token的策略 #15

Closed 1171000410 closed 2 years ago

1171000410 commented 2 years ago

作者您好,据我的理解,训练时候不同图片裁剪的token数目不同,是通过网络学出来的,而测试的时候裁剪的比例是固定的。

那么会不会导致训练测试阶段不一致呢?而且测试阶段的裁剪比例影响是不是也挺大的?

raoyongming commented 2 years ago

你好,感谢对我们工作的关注。

为解决这个问题,我们设计了一个ratio loss(见论文中公式15),监督训练时的剪枝比例等于一个预先定义的比例,然后再测试时候直接应用这个比例。在模型收敛后,我们观察到ratio loss非常小,说明此时训练和测试的情况已经基本一致了。

1171000410 commented 2 years ago

谢谢作者回复! 我还想追问一下。我现在做的任务测试的时候可能没办法固定比例裁剪,请问作者试过以下方式吗,训练的时候不设定比例,让网络自己学习出裁剪的方式,然后测试阶段也是不同数据预测出不同的裁剪方式。

raoyongming commented 2 years ago

我简单试过这个方案,大概和固定比例准确率差不多,但是会导致batch无法并行,很难实现在gpu上的加速,所以我们最终没有继续探索这个方向。我觉得如果训练得当,不固定比例的方法上限是更高的。

kaikai23 commented 2 years ago

请问不设定预定比例,不使用ratio loss的情况下,学出来的裁剪比例大概是什么样呀? 我的场景需要用到一个类似的模型和gumbel softmax,但模型会渐渐学成裁剪掉所有token,不知道您有没有什么建议。还有我的应用只关心batch size=1 的情况,所以不在意batch无法并行的问题。

raoyongming commented 2 years ago

@kaikai23,我的建议是各种情况都应该加入ratio loss,但是可能计算方法不太一样。比如可以约束整个batch的平均剪枝比例,先对batch内剪枝比例取平均,再监督mse,或者设计其他的方式。

kaikai23 commented 2 years ago

谢谢回复!