Safemotion Lib
Loading...
Searching...
No Matches
smreid
fastreid
layers
pooling.py
Go to the documentation of this file.
1
# encoding: utf-8
2
"""
3
@author: l1aoxingyu
4
@contact: sherlockliao01@gmail.com
5
"""
6
7
import
torch
8
import
torch.nn.functional
as
F
9
from
torch
import
nn
10
11
__all__ = [
"Flatten"
,
12
"GeneralizedMeanPooling"
,
13
"GeneralizedMeanPoolingP"
,
14
"FastGlobalAvgPool2d"
,
15
"AdaptiveAvgMaxPool2d"
,
16
"ClipGlobalAvgPool2d"
,
17
]
18
19
20
class
Flatten
(nn.Module):
21
def
forward
(self, input):
22
return
input.view(input.size(0), -1)
23
24
25
class
GeneralizedMeanPooling
(nn.Module):
26
r"""Applies a 2D power-average adaptive pooling over an input signal composed of several input planes.
27
The function computed is: :math:`f(X) = pow(sum(pow(X, p)), 1/p)`
28
- At p = infinity, one gets Max Pooling
29
- At p = 1, one gets Average Pooling
30
The output is of size H x W, for any input size.
31
The number of output features is equal to the number of input planes.
32
Args:
33
output_size: the target output size of the image of the form H x W.
34
Can be a tuple (H, W) or a single H for a square image H x H
35
H and W can be either a ``int``, or ``None`` which means the size will
36
be the same as that of the input.
37
"""
38
39
def
__init__
(self, norm=3, output_size=1, eps=1e-6):
40
super(GeneralizedMeanPooling, self).
__init__
()
41
assert
norm > 0
42
self.
p
= float(norm)
43
self.
output_size
= output_size
44
self.
eps
= eps
45
46
def
forward
(self, x):
47
x = x.clamp(min=self.
eps
).pow(self.
p
)
48
return
torch.nn.functional.adaptive_avg_pool2d(x, self.
output_size
).pow(1. / self.
p
)
49
50
def
__repr__
(self):
51
return
self.__class__.__name__ +
'('
\
52
+ str(self.
p
) +
', '
\
53
+
'output_size='
+ str(self.
output_size
) +
')'
54
55
56
class
GeneralizedMeanPoolingP
(
GeneralizedMeanPooling
):
57
""" Same, but norm is trainable
58
"""
59
60
def
__init__
(self, norm=3, output_size=1, eps=1e-6):
61
super(GeneralizedMeanPoolingP, self).
__init__
(norm, output_size, eps)
62
self.
p
p
= nn.Parameter(torch.ones(1) * norm)
63
64
65
class
AdaptiveAvgMaxPool2d
(nn.Module):
66
def
__init__
(self):
67
super(AdaptiveAvgMaxPool2d, self).
__init__
()
68
self.
gap
=
FastGlobalAvgPool2d
()
69
self.
gmp
= nn.AdaptiveMaxPool2d(1)
70
71
def
forward
(self, x):
72
avg_feat = self.
gap
(x)
73
max_feat = self.
gmp
(x)
74
feat = avg_feat + max_feat
75
return
feat
76
77
78
class
FastGlobalAvgPool2d
(nn.Module):
79
def
__init__
(self, flatten=False):
80
super(FastGlobalAvgPool2d, self).
__init__
()
81
self.
flatten
= flatten
82
83
def
forward
(self, x):
84
if
self.
flatten
:
85
in_size = x.size()
86
return
x.view((in_size[0], in_size[1], -1)).mean(dim=2)
87
else
:
88
return
x.view(x.size(0), x.size(1), -1).mean(-1).view(x.size(0), x.size(1), 1, 1)
89
90
91
class
ClipGlobalAvgPool2d
(nn.Module):
92
def
__init__
(self):
93
super().
__init__
()
94
self.
avgpool
=
FastGlobalAvgPool2d
()
95
96
def
forward
(self, x):
97
x = self.
avgpool
(x)
98
x = torch.clamp(x, min=0., max=1.)
99
return
x
fastreid.layers.pooling.AdaptiveAvgMaxPool2d
Definition
pooling.py:65
fastreid.layers.pooling.AdaptiveAvgMaxPool2d.forward
forward(self, x)
Definition
pooling.py:71
fastreid.layers.pooling.AdaptiveAvgMaxPool2d.gmp
gmp
Definition
pooling.py:69
fastreid.layers.pooling.AdaptiveAvgMaxPool2d.gap
gap
Definition
pooling.py:68
fastreid.layers.pooling.AdaptiveAvgMaxPool2d.__init__
__init__(self)
Definition
pooling.py:66
fastreid.layers.pooling.ClipGlobalAvgPool2d
Definition
pooling.py:91
fastreid.layers.pooling.ClipGlobalAvgPool2d.forward
forward(self, x)
Definition
pooling.py:96
fastreid.layers.pooling.ClipGlobalAvgPool2d.avgpool
avgpool
Definition
pooling.py:94
fastreid.layers.pooling.ClipGlobalAvgPool2d.__init__
__init__(self)
Definition
pooling.py:92
fastreid.layers.pooling.FastGlobalAvgPool2d
Definition
pooling.py:78
fastreid.layers.pooling.FastGlobalAvgPool2d.forward
forward(self, x)
Definition
pooling.py:83
fastreid.layers.pooling.FastGlobalAvgPool2d.__init__
__init__(self, flatten=False)
Definition
pooling.py:79
fastreid.layers.pooling.FastGlobalAvgPool2d.flatten
flatten
Definition
pooling.py:81
fastreid.layers.pooling.Flatten
Definition
pooling.py:20
fastreid.layers.pooling.Flatten.forward
forward(self, input)
Definition
pooling.py:21
fastreid.layers.pooling.GeneralizedMeanPooling
Definition
pooling.py:25
fastreid.layers.pooling.GeneralizedMeanPooling.__repr__
__repr__(self)
Definition
pooling.py:50
fastreid.layers.pooling.GeneralizedMeanPooling.__init__
__init__(self, norm=3, output_size=1, eps=1e-6)
Definition
pooling.py:39
fastreid.layers.pooling.GeneralizedMeanPooling.eps
eps
Definition
pooling.py:44
fastreid.layers.pooling.GeneralizedMeanPooling.p
p
Definition
pooling.py:42
fastreid.layers.pooling.GeneralizedMeanPooling.forward
forward(self, x)
Definition
pooling.py:46
fastreid.layers.pooling.GeneralizedMeanPooling.output_size
output_size
Definition
pooling.py:43
fastreid.layers.pooling.GeneralizedMeanPoolingP
Definition
pooling.py:56
fastreid.layers.pooling.GeneralizedMeanPoolingP.p
p
Definition
pooling.py:62
fastreid.layers.pooling.GeneralizedMeanPoolingP.__init__
__init__(self, norm=3, output_size=1, eps=1e-6)
Definition
pooling.py:60
Generated by
1.10.0