Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ModelZoo
SOLOv2-pytorch
Commits
527629fe
Commit
527629fe
authored
Apr 06, 2019
by
Kai Chen
Browse files
add DeformConvPack and refactoring
parent
ee7e679a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
47 additions
and
33 deletions
+47
-33
mmdet/ops/dcn/__init__.py
mmdet/ops/dcn/__init__.py
+5
-5
mmdet/ops/dcn/modules/deform_conv.py
mmdet/ops/dcn/modules/deform_conv.py
+42
-28
No files found.
mmdet/ops/dcn/__init__.py
View file @
527629fe
from
.functions.deform_conv
import
deform_conv
,
modulated_deform_conv
from
.functions.deform_conv
import
deform_conv
,
modulated_deform_conv
from
.functions.deform_pool
import
deform_roi_pooling
from
.functions.deform_pool
import
deform_roi_pooling
from
.modules.deform_conv
import
(
DeformConv
,
ModulatedDeformConv
,
from
.modules.deform_conv
import
(
DeformConv
,
ModulatedDeformConv
,
ModulatedDeformConvPack
)
DeformConvPack
,
ModulatedDeformConvPack
)
from
.modules.deform_pool
import
(
DeformRoIPooling
,
DeformRoIPoolingPack
,
from
.modules.deform_pool
import
(
DeformRoIPooling
,
DeformRoIPoolingPack
,
ModulatedDeformRoIPoolingPack
)
ModulatedDeformRoIPoolingPack
)
__all__
=
[
__all__
=
[
'DeformConv'
,
'Deform
RoIPooling'
,
'DeformRoIPoolingPack
'
,
'DeformConv'
,
'Deform
ConvPack'
,
'ModulatedDeformConv
'
,
'ModulatedDeform
RoIPoolingPack'
,
'ModulatedDeformConv
'
,
'ModulatedDeform
ConvPack'
,
'DeformRoIPooling'
,
'DeformRoIPoolingPack
'
,
'ModulatedDeform
Conv
Pack'
,
'deform_conv'
,
'ModulatedDeform
RoIPooling
Pack'
,
'deform_conv'
,
'modulated_deform_conv'
,
'modulated_deform_conv'
,
'deform_roi_pooling'
'deform_roi_pooling'
]
]
mmdet/ops/dcn/modules/deform_conv.py
View file @
527629fe
...
@@ -19,15 +19,16 @@ class DeformConv(nn.Module):
...
@@ -19,15 +19,16 @@ class DeformConv(nn.Module):
groups
=
1
,
groups
=
1
,
deformable_groups
=
1
,
deformable_groups
=
1
,
bias
=
False
):
bias
=
False
):
assert
not
bias
super
(
DeformConv
,
self
).
__init__
()
super
(
DeformConv
,
self
).
__init__
()
assert
not
bias
assert
in_channels
%
groups
==
0
,
\
assert
in_channels
%
groups
==
0
,
\
'in_channels {} cannot be divisible by groups {}'
.
format
(
'in_channels {} cannot be divisible by groups {}'
.
format
(
in_channels
,
groups
)
in_channels
,
groups
)
assert
out_channels
%
groups
==
0
,
\
assert
out_channels
%
groups
==
0
,
\
'out_channels {} cannot be divisible by groups {}'
.
format
(
'out_channels {} cannot be divisible by groups {}'
.
format
(
out_channels
,
groups
)
out_channels
,
groups
)
self
.
in_channels
=
in_channels
self
.
in_channels
=
in_channels
self
.
out_channels
=
out_channels
self
.
out_channels
=
out_channels
self
.
kernel_size
=
_pair
(
kernel_size
)
self
.
kernel_size
=
_pair
(
kernel_size
)
...
@@ -50,10 +51,34 @@ class DeformConv(nn.Module):
...
@@ -50,10 +51,34 @@ class DeformConv(nn.Module):
stdv
=
1.
/
math
.
sqrt
(
n
)
stdv
=
1.
/
math
.
sqrt
(
n
)
self
.
weight
.
data
.
uniform_
(
-
stdv
,
stdv
)
self
.
weight
.
data
.
uniform_
(
-
stdv
,
stdv
)
def
forward
(
self
,
input
,
offset
):
def
forward
(
self
,
x
,
offset
):
return
deform_conv
(
input
,
offset
,
self
.
weight
,
self
.
stride
,
return
deform_conv
(
x
,
offset
,
self
.
weight
,
self
.
stride
,
self
.
padding
,
self
.
padding
,
self
.
dilation
,
self
.
groups
,
self
.
dilation
,
self
.
groups
,
self
.
deformable_groups
)
self
.
deformable_groups
)
class
DeformConvPack
(
DeformConv
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
super
(
ModulatedDeformConvPack
,
self
).
__init__
(
*
args
,
**
kwargs
)
self
.
conv_offset
=
nn
.
Conv2d
(
self
.
in_channels
,
self
.
deformable_groups
*
2
*
self
.
kernel_size
[
0
]
*
self
.
kernel_size
[
1
],
kernel_size
=
self
.
kernel_size
,
stride
=
_pair
(
self
.
stride
),
padding
=
_pair
(
self
.
padding
),
bias
=
True
)
self
.
init_offset
()
def
init_offset
(
self
):
self
.
conv_offset
.
weight
.
data
.
zero_
()
self
.
conv_offset
.
bias
.
data
.
zero_
()
def
forward
(
self
,
x
):
offset
=
self
.
conv_offset
(
x
)
return
deform_conv
(
x
,
offset
,
self
.
weight
,
self
.
stride
,
self
.
padding
,
self
.
dilation
,
self
.
groups
,
self
.
deformable_groups
)
class
ModulatedDeformConv
(
nn
.
Module
):
class
ModulatedDeformConv
(
nn
.
Module
):
...
@@ -97,30 +122,19 @@ class ModulatedDeformConv(nn.Module):
...
@@ -97,30 +122,19 @@ class ModulatedDeformConv(nn.Module):
if
self
.
bias
is
not
None
:
if
self
.
bias
is
not
None
:
self
.
bias
.
data
.
zero_
()
self
.
bias
.
data
.
zero_
()
def
forward
(
self
,
input
,
offset
,
mask
):
def
forward
(
self
,
x
,
offset
,
mask
):
return
modulated_deform_conv
(
return
modulated_deform_conv
(
x
,
offset
,
mask
,
self
.
weight
,
self
.
bias
,
input
,
offset
,
mask
,
self
.
weight
,
self
.
bias
,
self
.
stride
,
self
.
stride
,
self
.
padding
,
self
.
dilation
,
self
.
padding
,
self
.
dilation
,
self
.
groups
,
self
.
deformable_groups
)
self
.
groups
,
self
.
deformable_groups
)
class
ModulatedDeformConvPack
(
ModulatedDeformConv
):
class
ModulatedDeformConvPack
(
ModulatedDeformConv
):
def
__init__
(
self
,
def
__init__
(
self
,
*
args
,
**
kwargs
):
in_channels
,
super
(
ModulatedDeformConvPack
,
self
).
__init__
(
*
args
,
**
kwargs
)
out_channels
,
kernel_size
,
stride
=
1
,
padding
=
0
,
dilation
=
1
,
groups
=
1
,
deformable_groups
=
1
,
bias
=
True
):
super
(
ModulatedDeformConvPack
,
self
).
__init__
(
in_channels
,
out_channels
,
kernel_size
,
stride
,
padding
,
dilation
,
groups
,
deformable_groups
,
bias
)
self
.
conv_offset_mask
=
nn
.
Conv2d
(
self
.
conv_offset_mask
=
nn
.
Conv2d
(
self
.
in_channels
//
self
.
groups
,
self
.
in_channels
,
self
.
deformable_groups
*
3
*
self
.
kernel_size
[
0
]
*
self
.
deformable_groups
*
3
*
self
.
kernel_size
[
0
]
*
self
.
kernel_size
[
1
],
self
.
kernel_size
[
1
],
kernel_size
=
self
.
kernel_size
,
kernel_size
=
self
.
kernel_size
,
...
@@ -133,11 +147,11 @@ class ModulatedDeformConvPack(ModulatedDeformConv):
...
@@ -133,11 +147,11 @@ class ModulatedDeformConvPack(ModulatedDeformConv):
self
.
conv_offset_mask
.
weight
.
data
.
zero_
()
self
.
conv_offset_mask
.
weight
.
data
.
zero_
()
self
.
conv_offset_mask
.
bias
.
data
.
zero_
()
self
.
conv_offset_mask
.
bias
.
data
.
zero_
()
def
forward
(
self
,
input
):
def
forward
(
self
,
x
):
out
=
self
.
conv_offset_mask
(
input
)
out
=
self
.
conv_offset_mask
(
x
)
o1
,
o2
,
mask
=
torch
.
chunk
(
out
,
3
,
dim
=
1
)
o1
,
o2
,
mask
=
torch
.
chunk
(
out
,
3
,
dim
=
1
)
offset
=
torch
.
cat
((
o1
,
o2
),
dim
=
1
)
offset
=
torch
.
cat
((
o1
,
o2
),
dim
=
1
)
mask
=
torch
.
sigmoid
(
mask
)
mask
=
torch
.
sigmoid
(
mask
)
return
modulated_deform_conv
(
return
modulated_deform_conv
(
x
,
offset
,
mask
,
self
.
weight
,
self
.
bias
,
input
,
offset
,
mask
,
self
.
weight
,
self
.
bias
,
self
.
stride
,
self
.
stride
,
self
.
padding
,
self
.
dilation
,
self
.
padding
,
self
.
dilation
,
self
.
groups
,
self
.
deformable_groups
)
self
.
groups
,
self
.
deformable_groups
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment