MCPcopy Create free account
hub / github.com/InternRobotics/P3Former / _Transformer_Decoder

Class _Transformer_Decoder

p3former/decode_heads/p3former_head.py:104–161  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

102
103@MODELS.register_module()
104class _Transformer_Decoder(nn.Module):
105 def __init__(
106 self,
107 embed_dims,
108 cross_attn_cfg=dict(
109 type='_Masked_Focal_Attention',
110 act_cfg=dict(type='GELU'),
111 norm_cfg=dict(type='LN'),
112 ),
113 num_heads=8,
114 conv_kernel_size=1,
115 with_ffn=True,
116 feedforward_channels=2048,
117 num_ffn_fcs=2,
118 dropout=0.0,
119 ffn_act_cfg=dict(type='GELU'),
120 ):
121 super().__init__()
122 self.with_ffn = with_ffn
123
124 cross_attn_cfg['in_channels'] = embed_dims
125 cross_attn_cfg['feat_channels'] = embed_dims
126 cross_attn_cfg['out_channels'] = embed_dims
127 self.cross_attn = MODELS.build(cross_attn_cfg)
128 self.self_attn = MultiheadAttention(embed_dims * conv_kernel_size,
129 num_heads, dropout)
130 self.self_norm = build_norm_layer(
131 dict(type='LN'), embed_dims * conv_kernel_size)[1]
132 if self.with_ffn:
133 self.ffn = FFN(
134 embed_dims,
135 feedforward_channels,
136 num_ffn_fcs,
137 act_cfg=ffn_act_cfg,
138 ffn_drop=dropout)
139 self.ffn_norm = build_norm_layer(dict(type='LN'), embed_dims)[1]
140
141 def forward_single(self, queries, features, mask_preds):
142 queries = self.cross_attn(queries, features, mask_preds) # [N,1,C]
143 queries = self.self_norm(self.self_attn(queries))
144 queries = queries.permute(1, 0, 2) # [1,N,C]
145 if self.with_ffn:
146 queries = self.ffn_norm(self.ffn(queries))
147 queries = queries.squeeze(0) # [N,C]
148 return queries
149
150 def forward(self, queries, features, mask_preds):
151 """Update queries in batch level.
152 """
153 new_queries = []
154 for i in range(len(mask_preds)):
155 new_queries.append(
156 self.forward_single(
157 queries[i],
158 features[i],
159 mask_preds[i],
160 ))
161 return new_queries

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected