def forward(self, inputs):
        """
        Forward pass for the UNet model.

        This method processes the input tensor through the encoder-decoder architecture,
        applying convolutional layers, FSMNs, and SE layers. Skip connections are used
        to merge features from the encoder to the decoder.

        Args:
            inputs (torch.Tensor): Input tensor of shape (batch_size, channels, height, width).

        Returns:
            torch.Tensor: Output tensor after processing, representing the computed features.
        """
        x = inputs  # Initialize input tensor
        xs = []  # List to store input tensors for skip connections
        xs_se = []  # List to store outputs after applying SE layers
        xs_se.append(x)  # Add the initial input to the SE outputs list

        # Forward pass through the encoder layers
        for i, encoder in enumerate(self.encoders):
            xs.append(x)  # Store the current input for skip connections
            if i > 0:
                x = self.fsmn_enc[i](x)  # Apply FSMN if not the first encoder
            x = encoder(x)  # Apply the encoder layer
            xs_se.append(self.se_layers_enc[i](x))  # Apply SE layer and store the result

        x = self.fsmn(x)  # Apply the final FSMN after all encoders
        p = x  # Initialize output tensor for decoders

        # Forward pass through the decoder layers
        for i, decoder in enumerate(self.decoders):
            p = decoder(p)  # Apply the decoder layer
            if i < self.model_length - 1:
                p = self.fsmn_dec[i](p)  # Apply FSMN if not the last decoder
            if i == self.model_length - 1:
                break  # Stop processing at the last decoder layer
            if i < self.model_length - 2:
                p = self.se_layers_dec[i](p)  # Apply SE layer for intermediate decoders
            p = torch.cat([p, xs_se[self.model_length - 1 - i]], dim=1)  # Concatenate skip connection

        # Final output processing
        # cmp_spec: [batch, 1, 513, 64, 2]
        cmp_spec = self.linear(p)  # Apply linear transformation to produce final output
        return cmp_spec  # Return the computed output tensor

        Forward pass for the UNet model.

        This method processes the input tensor through the encoder-decoder architecture,
        applying convolutional layers, FSMNs, and SE layers. Skip connections are used
        to merge features from the encoder to the decoder.

        Args:
            inputs (torch.Tensor): Input tensor of shape (batch_size, channels, height, width).

        Returns:
            torch.Tensor: Output tensor after processing, representing the computed features.
        
clearvoice/clearvoice/models/frcrn_se/unet.py