class_docstr: ESP block, principle: reduce -> split -> transform -> merge
  Args:
      in_channels (int): Number of input channels.
      out_channels (int): Number of output channels.
      residual (bool, optional): Add a residual connection through identity operation. Default: True.
class_docstr_tok: ["ESP","block",",","principle",":","reduce","-",">","split","-",">","transform","-",">","merge","Args",":","in_channels","(","int",")",":","Number","of","input","channels",".","out_channels","(","int",")",":","Number","of","output","channels",".","residual","(","bool",",","optional",")",":","Add","a","residual","connection","through","identity","operation",".","Default",":","True","."]
code: def forward(self, x):
      x_proj = self.conv1(x)
      d1 = self.d_conv1(x_proj)
      d2 = self.d_conv2(x_proj)
      d4 = self.d_conv4(x_proj)
      d8 = self.d_conv8(x_proj)
      d16 = self.d_conv16(x_proj)
  
      feat1 = d2
      feat2 = feat1 + d4
      feat3 = feat2 + d8
      feat4 = feat3 + d16
  
      feat = paddle.concat([d1, feat1, feat2, feat3, feat4], axis=1)
  
      if self.residual:
          feat = feat + x
      out = self.bn(feat)
      return out
  
imports: import paddle
  import paddle.nn
  import paddle.nn.functional
  from paddleseg.models import layers
  from paddleseg.cvlibs import manager
  from paddleseg.utils import utils
label_desc: Use image node_id 2 for calling the DilatedResidualBlock obj's underlying member method code with example usage: obj.forward(x) and returns: out