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

增加卷积层性能下降 #31

Closed
mamingfa opened this issue Sep 19, 2021 · 4 comments
Closed

增加卷积层性能下降 #31

mamingfa opened this issue Sep 19, 2021 · 4 comments

Comments

@mamingfa
Copy link

mamingfa commented Sep 19, 2021

您好!
很抱歉打扰到您,我想请问一下为什么我在PatchEmbed_overlap块增加convolution了以后性能大幅下降,我没有更改其他代码,只是将卷积层增加到了四层。这是我的部分代码:
self.conv1 = nn.Conv2d(in_chans, 128, kernel_size=7, stride=2, padding=3, bias=False)
self.bn1 = nn.BatchNorm2d(128)
self.relu = nn.ReLU(inplace=True)
self.proj = nn.Conv2d(128, embed_dim, kernel_size=new_patch_size, stride=new_patch_size)
def forward(self, x):
x = self.conv1(x)
x = self.bn1(x)
x = self.relu(x)

@michuanhaohao
Copy link
Collaborator

michuanhaohao commented Sep 22, 2021

同学你好,关于convolution stem的使用需要考虑到两点:

  1. convolution stem本身结构是有效的,当然现在比较好的设计是volo里面的堆叠三层conv bn relu,你这个一层效果不会特别显著
  2. 最根本的原因在于你新加的conv层没有预训练而是随机初始化,而vit的其他层全部都是ImageNet预训练的,导致网络输入全部错乱了,因此产生了掉点

你可以做以下实验来验证一下:

  1. 均不用ImageNet预训练参数,全部从头随机初始化来训练,看看加入conv之后是否有效
  2. 按照vit官方训练代码,加入conv之后你在ImageNet重新预训练模型,看看加入conv之后是否有效

另外额外补充一下,我们近期的工作表明,patch embed里面bn+relu是帮助vit训练的关键,conv层作用反而不是那么大,可以参考我们最近的论文:Scaled ReLU Matters for Training Vision Transformers

@ljwwwiop
Copy link

ljwwwiop commented Oct 7, 2021

个人一点点分析
1 首先你的卷积核还是比较大的,在overlap时候可能会丢失部分感受野中比较重要的特征块,可以尝试使用的更小的卷积一块一块有的滑动处理操作更符合patch embed的特点。而且patch embed中最后的conv主要是用于通道修改操作。
2 个人觉得可以在这里可以尝试一下max Pooling 或者avg pooling替换卷积试试。

@LiYanchao-lab
Copy link

请问如果想在ImageNet重新预训练模型,有官方教程地址吗?感谢感谢

@michuanhaohao
Copy link
Collaborator

请问如果想在ImageNet重新预训练模型,有官方教程地址吗?感谢感谢

可以用timm库,很多人都用这个。

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

4 participants