SCNet icon indicating copy to clipboard operation
SCNet copied to clipboard

Question about out_a and out_b

Open LiDaiY opened this issue 4 years ago • 4 comments

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. https://github.com/MCG-NKU/SCNet/blob/c0b5bd6aa919c00afb5815b2810e645e6a4a5976/scnet.py#L103 Are there any differences between the two approaches?

LiDaiY avatar Jun 09 '20 11:06 LiDaiY

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.

backseason avatar Jun 10 '20 06:06 backseason

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.

WithWheat avatar Jul 11 '20 13:07 WithWheat

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.

backseason avatar Jul 12 '20 01:07 backseason

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?

WithWheat avatar Jul 13 '20 06:07 WithWheat