GithubHelp home page GithubHelp logo

diversebranchblock's Issues

transIII_1x1_kxk does not behave as expected

Hi,

I verified like this:

conv1 = nn.Conv2d(32, 64, 1, 1, 0, bias=True)
conv2 = nn.Conv2d(64, 128, 3, 1, 1, bias=True)
conv = nn.Conv2d(32, 128, 3, 1, 1, bias=True)

k, b = transIII_1x1_kxk(conv1.weight, conv1.bias, conv2.weight, conv2.bias, 1)
conv.weight.copy_(k)
conv.bias.copy_(b)
inten = torch.randn(2, 32, 224, 224)
out1 = conv2(conv1(inten))
out2 = conv(inten)
print((out1 - out2).abs().max())

And the output is 0.11, which is much too great. Have you noticed this ?

mmsegmentation

Hi! Thanks for your excellent work! I have a question that if I want to use DBB in mmsegmentation, and what should I do? ^_^

MobileNet

目前只看到resnet,请问mobilenet什么时候有哈?

关于TRANS Ⅲ中的注意事项

您好!不好意思打扰您!!我最近拜读您的论文,看到了TRANS Ⅲ,不得不说这种变换确实很是新颖,但看到其中您提到的注意点,即如果第二层K*K 如果对输入做了0填充,那么公式8是不成立的,解决方案是用第一次等价过来的卷积的偏置 REP(b1) 作为填充,对这一点我有点不太理解,您能给详细解释一下不成立的原因以及解决方案的原因么?谢谢您!

Plug-in version implementation

hi @DingXiaoH , nice work !!! According to borrows your implementation, I'm has realized a plug-in version of DiverseBranchBlock

This plug-in version has the following advantages:

  1. Do not modify original model
  2. After training, can fuse DBB to original architecture
  3. Support mixed insert/fuse operations for ACBlock/RepVGGBlock/DBBlock

How to insert

Use Config FIle

see rd50_dbb_cifar100_224_e100_sgd_calr.yaml

...
MODEL:
  CONV:
    TYPE: 'Conv2d'
    ADD_BLOCKS: ('DiverseBranchBlock',)
...

build resnet50_d with DDB

from zcls.config import cfg
from zcls.model.recognizers.build import build_recognizer

cfg.merge_from_file(args.config_file)
model = build_recognizer(cfg, device=torch.device('cpu'))

Test

see test_dbblock.py

How to fuse

see model_fuse.py

$ python tools/model_fuse.py --help
usage: model_fuse.py [-h] [--verbose] CONFIG_FILE OUTPUT_DIR

Fuse block for ACBlock/RepVGGBLock/DBBlock

positional arguments:
  CONFIG_FILE  path to config file
  OUTPUT_DIR   path to output

optional arguments:
  -h, --help   show this help message and exit
  --verbose    Print Model Info

Other

Structural Parameterization is really a nice idea !!! By using ACBlock, I improved model precision in a Dataset that is more bigger than ImageNet, hope DBB can make better precision

Last, thanks you again

平均池化

您好,DBB模块中有一分支是平均池化,那数据下采样尺度变小了,怎么和11和kk的卷积加到一起呢?

3X3卷积串联3X3卷积

您好,我看您论文里面提到了1X1卷积串联3X3卷积,我想问一下3X3卷积串联3X3卷积从理论上能实现吗?如果对特征图不降尺寸,每个卷积都需要padding的话,又应该怎么做呢?

请教大佬

大佬,你DBB为啥不加identity呢? RepVGG里面就尝试了identity。 是有啥考虑吗?

训练和预测转化

请问作者,训练的模型不转化,直接用来预测、评估可以吗?

模型转换

请问作者大大如果把DBB模块替换了自己网络的某些位置的卷积块,应该怎样得到paper里的降低参数模型呢,我更改部分模块后参数由240M到330M左右,比较大。

转换模型

您好, 我在谷歌云盘/百度云下载模型时, 发现resnet18是一个文件夹, 文件夹内没有模型, resnet50有对应的模型, 但是在用convert.py进行转换时,第27行train_model.load_state_dict(ckpt)报错 ,会出现不匹配的key,报错信息如下(部分省略):
RuntimeError: Error(s) in loading state_dict for ResNet:
Missing key(s) in state_dict: "stage1.0.conv2.dbb_avg.bn.bn.weight", "stage1.0.conv2.dbb_avg.bn.bn.bias", "stage1.0.conv2.dbb_avg.bn.bn.running_mean", "stage1.0.conv2.dbb_avg.bn.bn.running_var", "
stage1.0.conv2.dbb_1x1_kxk.bn1.bn.weight", "stage1.0.conv2.dbb_1x1_kxk.bn1.bn.bias", "stage1.0.conv2.dbb_1x1_kxk.bn1.bn.running_mean", "stage1.0.conv2.dbb_1x1_kxk.bn1.bn.running_var", "stage1.1.conv2.dbb_avg.bn.bn.weight", "stage1.1.conv2.dbb_avg.bn.bn.bias", "stage1.1.conv2.dbb_avg.bn.bn.running_mean", "stage1.1.conv2.dbb_avg.bn.bn.running_var", "stage1.1.conv2.dbb_1x1_kxk.bn1.bn.weight", "stage1.1.conv2.dbb_1x1_kxk.bn1.bn.bias", "stage1.1.conv2.dbb_1x1_kxk.bn1.bn.running_mean", "stage1.1.conv2.dbb_1x1_kxk.bn1.bn.running_var", "stage1.2.conv2.dbb_avg.bn.bn.weight", "stage1.2.conv2.dbb_avg.bn.bn.bias", "stage1.2.conv2.dbb_avg.bn.bn.running_mean", "stage1.2.conv2.dbb_avg.bn.bn.running_var", "stage1.2.conv2.dbb_1x1_kxk.bn1.bn.weight", "stage1.2.conv2.dbb_1x1_kxk.bn1.bn.bias", "stage1.2.conv2.dbb_1x1_kxk.bn1.bn.running_mean", "stage1.2.conv2.dbb_1x1_kxk.bn1.bn.running_var"........

Unexpected key(s) in state_dict: "stage1.0.conv2.dbb_avg.bn.weight", "stage1.0.conv2.dbb_avg.bn.bias", "stage1.0.conv2.dbb_avg.bn.running_mean", "stage1.0.conv2.dbb_avg.bn.running_var",
"stage1.0conv2.dbb_avg.bn.num_batches_tracked", "stage1.0.conv2.dbb_1x1_kxk.bn1.weight", "stage1.0.conv2.dbb_1x1_kxk.bn1.bias", "stage1.0.conv2.dbb_1x1_kxk.bn1.running_mean", "stage1.0.conv2.dbb_1x1_kxk.bn1.running_var", "stage1.0.conv2.dbb_1x1_kxk.bn1.num_batches_tracked", "stage1.1.conv2.dbb_avg.bn.weight", "stage1.1.conv2.dbb_avg.bn.bias", "stage1.1.conv2.dbb_avg.bn.running_mean", "stage1.1.conv2.dbb_avg.bn.runing_var", "stage1.1.conv2.dbb_avg.bn.num_batches_tracked", "stage1.1.conv2.dbb_1x1_kxk.bn1.weight", "stage1.1.conv2.dbb_1x1_kxk.bn1.bias", "stage1.1.conv2.dbb_1x1_kxk.bn1.running_mean", "stage1.1.conv2.dbb_1x1_kxk.bn1.running_var", "stage1.1.conv2.dbb_1x1_kxk.bn1.num_batches_tracked", "stage1.2.conv2.dbb_avg.bn.weight", "stage1.2.conv2.dbb_avg.bn.bias", "stage1.2.conv2.dbb_avg.bn.running_mean", "stage1.conv2.dbb_avg.bn.running_var", "stage1.2.conv2.dbb_avg.bn.num_batches_tracked", "stage1.2.conv2.dbb_1x1_kxk.bn1.weight", "stage1.2.conv2.dbb_1x1_kxk.bn1.bias", "stage1.2.conv2.dbb_1x1_kxk.bn1.running_mean", "stage1.2.conv2.dbb_1x1_kxk.bn1.running_var", "stage1.2.conv2.dbb_1x1_kxk.bn1.num_batches_tracked", "stage2.0.conv2.dbb_avg.bn.weight", "stage2.0.conv2.dbb_avg.bn.bias", "stage2.0.conv2.dbb_avg.bn.runing_mean", "stage2.0.conv2.dbb_avg.bn.running_var".......

关于模型训练的疑问

您好!我想问下,我在尝试使用DBB模块去替换resnet50的shortcut结构,但是替换后,在加载您谷歌云上的预训练model时,出现了加载失败的情况,应该如何解决?
本人初涉这个领域,还望能给些建议。

应用于自己模型问题。

为什么在README中写道如果用于属于自己模型,实际上需要用DBB取代普通卷积层+BN层,而论文中说法是DBB能够取代单个普通卷积层?

DiverseBranchBlock

Hello author, I replaced DiverseBranchBlock with RepBlock in a model. The performance has been slightly improved, but the number of parameters has been greatly increased. Please ask the author for any suggestions.

关于DBB替换Res18的多分类表现

大佬您好,看了您的文章之后,我试着用使用DBB模块的Res18网络用于自己的多分类任务中, 使用方法如下:

import torch
import torch.nn as nn
from DiverseBranchBlock.convnet_utils import switch_deploy_flag, switch_conv_bn_impl, build_model

def Dbb_Res(num_classes,pretrained=True):

switch_deploy_flag(False)
switch_conv_bn_impl('DBB')
model = build_model('ResNet-18')

if pretrained ==True:

    model.load_state_dict(torch.load('DiverseBranchBlock\ResNet-18_DBB_7099.pth'))



in_features = model.linear.in_features
model.linear = nn.Linear(in_features, num_classes)
return model

但是在实战中效果却一塌糊涂,预训练res18能达到80%的准确率, 我是用如上方法构建的网络,精度只有6% - .-,请问是我这种方法调用不正确吗,如何调整, 麻烦您了!

两点疑问

  1. 下图在验证重参数化前后输出差异的时候,为什么需要先将BN权重初始化?
    image

  2. 如果dbb_1x1_kxk中将1x1个数增加(即纵向堆叠很多个1x1,最后一个是3x3),重参数化后误差是否会加大?

期待您的回复~

DiverseBranchBlock 在netron可视化出现的问题

你好,我拜读了你这篇文章和19年的文章,并且使用netron可视化了你的base、ACB和DBB模块结构,我发现base和ACB都可以正常显示,但是DBB不对劲,方便留个微信或者QQ解决下这个问题吗,谢谢。

关于TRANS Ⅲ的相关问题

大大您好,感谢您的nice work!
我有一个疑问,您在TRANS Ⅲ中是先1x1,再3x3,那么这时候是需要在1x1后用当前的bias进行padding的。那么可否先3x3,再1x1,那么应该就不需要padding了吧。请问您当时有尝试过吗?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.