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

Question about out_a and out_b #6

Open
LiDaiY opened this issue Jun 9, 2020 · 4 comments
Open

Question about out_a and out_b #6

LiDaiY opened this issue Jun 9, 2020 · 4 comments

Comments

@LiDaiY
Copy link

LiDaiY commented Jun 9, 2020

In Figure2 in the paper, it seems you directly get two new feature('X1','X2') by split the 'InputX' in two portions without extra params. But in the code, you get them by two convolutions.

SCNet/scnet.py

Line 103 in c0b5bd6

out_a= self.conv1_a(x)

Are there any differences between the two approaches?

@backseason
Copy link
Collaborator

The operation of two separate convolutions in the code is identical to a convolution firstly and then followed by splitting.
The only difference is that now it requires two different BN layers rather than only one.

@WithWheat
Copy link

Actually, this two implementations have different computational complexity. BTW, I wonder that the computational complexity and accuracy reported in the paper is based on which implementation? Thanks.

@backseason
Copy link
Collaborator

This is a misunderstanding. In Figure.2, the 1x1 convolutions before and after the 3x3 convolution in the bottleneck structure are omitted. Self-calibrated convolution is to replace the 3x3 convolution. Thus the implementation is identical to the paper and the computational complexities are roughly the same. The computational complexity and accuracy reported in the paper are obtained with exactly the same code we released here.

@WithWheat
Copy link

Okay, I see. You mean this implementation splits the first 1x1 convolution in the original bottleneck into two 1x1 convolutions. In this way, two BN+ReLU layers are required. Thanks for your reply and now it's clear to me.
Besides, if someone want to apply SCConv to other structures without pre-convolution layer, feature splitting would be a more general way to do it, right?

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

3 participants