-
Notifications
You must be signed in to change notification settings - Fork 5.6k
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
reuse ConvNormActivation in some vision models #40431
reuse ConvNormActivation in some vision models #40431
Conversation
Thanks for your contribution! |
2c5d534
to
40dff20
Compare
235ce62
to
ddac292
Compare
已经使用 ConvNormActivation 替换掉其他 vision models 的 ConvBNLayer~麻烦有空 review 下下~ |
另外,我发现 ResNeXt 能够直接通过复用 ResNet 网络结构实现(torchvision 和 keras 都是这么做的),只需在 ResNet 网络结构上稍作改动即可,这样可以避免再额外在 resnext.py 中实现一遍网络结构 这个问题是上次做 WideResNet 时发现的,之后的 Hackathon 闭门会时也有其他开发者提及,但当时已经合入因此未做改动,当时刚做 ResNeXt 时候考虑不全面非常抱歉,请问是否可以直接复用 ResNet 来重新实现 ResNeXt 呢? 不过如果改动的话,也会同时移除掉 ResNeXt 这个 Layer API,仅保留 resnext_xxxx 这样的工厂函数 API,API 参数也会稍有变动,而且整体与本 PR 没什么关系,我觉得重新开一个 PR 比较好。(由于非常简单,目前已经尝试在 #40588 中实现了下~) 如果这是合适的话,我在本 PR 里 revert 掉对 resnext.py 的改动,避免重复对 resnext.py 的改动与权重变更~否则就直接 close 掉那个 PR 啦~ |
接口不变的情况下,resnext用更好的实现是鼓励的 |
emmm,应该做不到接口完全不变,目前 #40588 中的实现大概是这样的 原 API: # resnet.py
ResNet(block, depth=50, width=64, num_classes=1000, with_pool=True)
resnet50(pretrained=False, **kwargs)
resnet101(pretrained=False, **kwargs)
resnet152(pretrained=False, **kwargs)
wide_resnet50_2(pretrained=False, **kwargs)
wide_resnet101_2(pretrained=False, **kwargs)
# resnext.py
ResNeXt(depth=50, cardinality=32, num_classes=1000, with_pool=True)
resnext50_32x4d(pretrained=False, **kwargs)
resnext101_32x4d(pretrained=False, **kwargs)
resnext152_32x4d(pretrained=False, **kwargs)
resnext50_64x4d(pretrained=False, **kwargs)
resnext101_64x4d(pretrained=False, **kwargs)
resnext152_64x4d(pretrained=False, **kwargs) 修改后的 API: # resnet.py
ResNet(block, depth=50, groups=1, width_per_group=64, num_classes=1000, with_pool=True)
resnet50(pretrained=False, **kwargs)
resnet101(pretrained=False, **kwargs)
resnet152(pretrained=False, **kwargs)
wide_resnet50_2(pretrained=False, **kwargs)
wide_resnet101_2(pretrained=False, **kwargs)
resnext50_32x4d(pretrained=False, **kwargs)
resnext101_32x4d(pretrained=False, **kwargs)
resnext152_32x4d(pretrained=False, **kwargs)
resnext50_64x4d(pretrained=False, **kwargs)
resnext101_64x4d(pretrained=False, **kwargs)
resnext152_64x4d(pretrained=False, **kwargs) 整体 diff: - ResNeXt(depth=50, cardinality=32, num_classes=1000, with_pool=True)
- ResNet(block, depth=50, width=64, num_classes=1000, with_pool=True)
+ ResNet(block, depth=50, groups=1, width_per_group=64, num_classes=1000, with_pool=True) @LielinJiang 请问这是可以接受的嘛? |
看样子是可以统一的,ResNeXt(depth=50, cardinality=32, num_classes=1000, with_pool=True)这个就先保留,ResNet添加一个默认参数group,width这个参数不变,在文档中说明具体含义,这样是否可行 |
嗯嗯,我可以尝试做一下,之前主要是考虑到现在 ResNeXt 在最新的 release(2.2.2) 里还没有发布,因此以为这个 API 无需做兼容性考虑。 我已经在本 PR revert 掉了 resnext 相关变动啦,有时间可以 review 下本 PR 嘛? |
好的。resnext没有发布,那就不考虑了,可以随意改动 |
好哒~明白啦~ |
@LielinJiang 唔,可以 review 下这个 PR 嘛,这个 PR 没有任何 API 变动,只是复用了下 ConvNormActivation,不过需要更新下权重~ |
Sorry to inform you that 18b24a5's CIs have passed for more than 7 days. To prevent PR conflicts, you need to re-run all CIs manually. |
@LielinJiang 有时间上传下权重嘛 😂 |
抱歉,邮件漏了。一下是上传的链接,需要确认一下正确性: |
好哒~我检查下 hash,如果没问题就替换掉~ |
trigger CI trigger ci trigger ci
This reverts commit efa97dfcfc140ee964f84c2b0e20ca24e232d5e1.
18b24a5
to
e90262b
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
* reuse ConvNormActivation in some vision models
PR types
Others
PR changes
Others
Describe
背景:#38653 (comment)
由于目前
paddle.vision.models
中很多模块中都单独实现了ConvBNLayer
这一结构,因此我们完全可以将这一共有结构提取成一个单独的 Layer,此前在 #38653 中已经将该 Layer 提取到paddle.vision.ops.ConvNormActivation
,在本 PR 中将会在其余 5 个模型中复用该 Layer。需要重构的网络如下:
resnext.ConvBNLayer(6 个权重)其中 mobilenetv2 中 ConvBNLayer 与 ConvNormActivation 实现方式一致(nn.Sequential),因此无需更新权重,但其余模型权重均需更新。
resnext 将会在 #40588 修改,原因见下面的 comments
全部模型更新后均重新测试了 performance,均未发生下降的问题,测试详情见:https://aistudio.baidu.com/studio/project/partial/verify/3593768/f4038fdf8eb14cc698ca8dcccbcd363c