| 43 | |
| 44 | @TRANSFORMER_DECODER_REGISTRY.register() |
| 45 | class MaskDINODecoder(nn.Module): |
| 46 | @configurable |
| 47 | def __init__( |
| 48 | self, |
| 49 | in_channels, |
| 50 | mask_classification=True, |
| 51 | *, |
| 52 | num_classes: int, |
| 53 | hidden_dim: int, |
| 54 | num_queries: int, |
| 55 | nheads: int, |
| 56 | dim_feedforward: int, |
| 57 | dec_layers: int, |
| 58 | mask_dim: int, |
| 59 | enforce_input_project: bool, |
| 60 | learn_tgt: bool, |
| 61 | total_num_feature_levels: int = 4, |
| 62 | dropout: float = 0.0, |
| 63 | activation: str = 'relu', |
| 64 | nhead: int = 8, |
| 65 | dec_n_points: int = 4, |
| 66 | return_intermediate_dec: bool = True, |
| 67 | query_dim: int = 4, |
| 68 | dec_layer_share: bool = False, |
| 69 | ): |
| 70 | super().__init__() |
| 71 | self.num_feature_levels = total_num_feature_levels |
| 72 | self.num_layers = dec_layers |
| 73 | self.num_queries = num_queries |
| 74 | self.learn_tgt = learn_tgt |
| 75 | self.num_classes = num_classes |
| 76 | |
| 77 | self.enc_output = nn.Linear(hidden_dim, hidden_dim) |
| 78 | self.enc_output_norm = nn.LayerNorm(hidden_dim) |
| 79 | |
| 80 | self.decoder_norm = decoder_norm = nn.LayerNorm(hidden_dim) |
| 81 | decoder_layer = DeformableTransformerDecoderLayer(hidden_dim, dim_feedforward, |
| 82 | dropout, activation, |
| 83 | self.num_feature_levels, nhead, dec_n_points) |
| 84 | |
| 85 | self.decoder = TransformerDecoder(decoder_layer, self.num_layers, decoder_norm, |
| 86 | return_intermediate=return_intermediate_dec, |
| 87 | d_model=hidden_dim, query_dim=query_dim, |
| 88 | num_feature_levels=self.num_feature_levels, |
| 89 | dec_layer_share=dec_layer_share, |
| 90 | ) |
| 91 | self.hidden_dim = hidden_dim |
| 92 | self._bbox_embed = _bbox_embed = MLP(hidden_dim, hidden_dim, 4, 3) |
| 93 | box_embed_layerlist = [_bbox_embed for i in range(self.num_layers)] # share box prediction each layer |
| 94 | self.bbox_embed = nn.ModuleList(box_embed_layerlist) |
| 95 | self.decoder.bbox_embed = self.bbox_embed |
| 96 | |
| 97 | self.mask_embed = MLP(hidden_dim, hidden_dim, mask_dim, 3) |
| 98 | |
| 99 | if learn_tgt: |
| 100 | self.query_feat = nn.Embedding(num_queries, hidden_dim) |
| 101 | |
| 102 | self.class_embed = nn.Linear(hidden_dim, num_classes) |
nothing calls this directly
no outgoing calls
no test coverage detected