diff --git a/dygraph/paddleseg/models/backbones/resnet_vd.py b/dygraph/paddleseg/models/backbones/resnet_vd.py
index 89a9048ef57bd1e060edcb33fa8bcda2a5c59a09..bddd6a1391cb2e9935a015da95b3f00efdd9d3bf 100644
--- a/dygraph/paddleseg/models/backbones/resnet_vd.py
+++ b/dygraph/paddleseg/models/backbones/resnet_vd.py
@@ -21,13 +21,11 @@ import math
 
 import numpy as np
 import paddle
+import paddle.nn as nn
+import paddle.nn.functional as F
 from paddle.nn import SyncBatchNorm as BatchNorm
-from paddle.nn import Conv2d
-
-import paddle.fluid as fluid
-from paddle.fluid.param_attr import ParamAttr
-from paddle.fluid.layer_helper import LayerHelper
-from paddle.fluid.dygraph.nn import Pool2D, Linear, Dropout
+from paddle.nn import Conv2d, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
 
 from paddleseg.utils import utils
 from paddleseg.models.common import layer_utils
@@ -38,7 +36,7 @@ __all__ = [
 ]
 
 
-class ConvBNLayer(fluid.dygraph.Layer):
+class ConvBNLayer(nn.Layer):
     def __init__(
             self,
             in_channels,
@@ -54,12 +52,8 @@ class ConvBNLayer(fluid.dygraph.Layer):
         super(ConvBNLayer, self).__init__()
 
         self.is_vd_mode = is_vd_mode
-        self._pool2d_avg = Pool2D(
-            pool_size=2,
-            pool_stride=2,
-            pool_padding=0,
-            pool_type='avg',
-            ceil_mode=True)
+        self._pool2d_avg = AvgPool2d(
+            kernel_size=2, stride=2, padding=0, ceil_mode=True)
         self._conv = Conv2d(
             in_channels=in_channels,
             out_channels=out_channels,
@@ -68,16 +62,12 @@ class ConvBNLayer(fluid.dygraph.Layer):
             padding=(kernel_size - 1) // 2 if dilation == 1 else 0,
             dilation=dilation,
             groups=groups,
-            weight_attr=ParamAttr(name=name + "_weights"),
             bias_attr=False)
         if name == "conv1":
             bn_name = "bn_" + name
         else:
             bn_name = "bn" + name[3:]
-        self._batch_norm = BatchNorm(
-            out_channels,
-            weight_attr=ParamAttr(name=bn_name + '_scale'),
-            bias_attr=ParamAttr(bn_name + '_offset'))
+        self._batch_norm = BatchNorm(out_channels)
         self._act_op = layer_utils.Activation(act=act)
 
     def forward(self, inputs):
@@ -90,7 +80,7 @@ class ConvBNLayer(fluid.dygraph.Layer):
         return y
 
 
-class BottleneckBlock(fluid.dygraph.Layer):
+class BottleneckBlock(nn.Layer):
     def __init__(self,
                  in_channels,
                  out_channels,
@@ -143,8 +133,7 @@ class BottleneckBlock(fluid.dygraph.Layer):
         # If given dilation rate > 1, using corresponding padding
         if self.dilation > 1:
             padding = self.dilation
-            y = fluid.layers.pad(
-                y, [0, 0, 0, 0, padding, padding, padding, padding])
+            y = F.pad(y, [0, 0, 0, 0, padding, padding, padding, padding])
         #####################################################################
         conv1 = self.conv1(y)
         conv2 = self.conv2(conv1)
@@ -154,12 +143,11 @@ class BottleneckBlock(fluid.dygraph.Layer):
         else:
             short = self.short(inputs)
 
-        y = fluid.layers.elementwise_add(x=short, y=conv2)
-        layer_helper = LayerHelper(self.full_name(), act='relu')
-        return layer_helper.append_activation(y)
+        y = paddle.elementwise_add(x=short, y=conv2, act='relu')
+        return y
 
 
-class BasicBlock(fluid.dygraph.Layer):
+class BasicBlock(nn.Layer):
     def __init__(self,
                  in_channels,
                  out_channels,
@@ -202,13 +190,12 @@ class BasicBlock(fluid.dygraph.Layer):
             short = inputs
         else:
             short = self.short(inputs)
-        y = fluid.layers.elementwise_add(x=short, y=conv1)
+        y = paddle.elementwise_add(x=short, y=conv1, act='relu')
 
-        layer_helper = LayerHelper(self.full_name(), act='relu')
-        return layer_helper.append_activation(y)
+        return y
 
 
-class ResNet_vd(fluid.dygraph.Layer):
+class ResNet_vd(nn.Layer):
     def __init__(self,
                  backbone_pretrained=None,
                  layers=50,
@@ -264,8 +251,7 @@ class ResNet_vd(fluid.dygraph.Layer):
             stride=1,
             act='relu',
             name="conv1_3")
-        self.pool2d_max = Pool2D(
-            pool_size=3, pool_stride=2, pool_padding=1, pool_type='max')
+        self.pool2d_max = MaxPool2d(kernel_size=3, stride=2, padding=1)
 
         # self.block_list = []
         self.stage_list = []
@@ -330,23 +316,6 @@ class ResNet_vd(fluid.dygraph.Layer):
                     shortcut = True
                 self.stage_list.append(block_list)
 
-        self.pool2d_avg = Pool2D(
-            pool_size=7, pool_type='avg', global_pooling=True)
-
-        self.pool2d_avg_channels = num_channels[-1] * 2
-
-        stdv = 1.0 / math.sqrt(self.pool2d_avg_channels * 1.0)
-
-        self.out = Linear(
-            self.pool2d_avg_channels,
-            class_dim,
-            param_attr=ParamAttr(
-                initializer=fluid.initializer.Uniform(-stdv, stdv),
-                name="fc_0.w_0"),
-            bias_attr=ParamAttr(name="fc_0.b_0"))
-
-        self.init_weight(backbone_pretrained)
-
     def forward(self, inputs):
         y = self.conv1_1(inputs)
         y = self.conv1_2(y)
@@ -358,33 +327,10 @@ class ResNet_vd(fluid.dygraph.Layer):
         for i, stage in enumerate(self.stage_list):
             for j, block in enumerate(stage):
                 y = block(y)
-                #print("stage {} block {}".format(i+1, j+1), y.shape)
             feat_list.append(y)
 
-        y = self.pool2d_avg(y)
-        y = fluid.layers.reshape(y, shape=[-1, self.pool2d_avg_channels])
-        y = self.out(y)
         return feat_list
 
-    # def init_weight(self, pretrained_model=None):
-
-    #     if pretrained_model is not None:
-    #         if os.path.exists(pretrained_model):
-    #             utils.load_pretrained_model(self, pretrained_model)
-
-    def init_weight(self, pretrained_model=None):
-        """
-        Initialize the parameters of model parts.
-        Args:
-            pretrained_model ([str], optional): the path of pretrained model. Defaults to None.
-        """
-        if pretrained_model is not None:
-            if os.path.exists(pretrained_model):
-                utils.load_pretrained_model(self, pretrained_model)
-            else:
-                raise Exception('Pretrained model is not found: {}'.format(
-                    pretrained_model))
-
 
 @manager.BACKBONES.add_component
 def ResNet18_vd(**args):
diff --git a/dygraph/paddleseg/models/fcn.py b/dygraph/paddleseg/models/fcn.py
index 12ebfed993bc584608875ac7d5aea27e2822060c..52d9c106f13e9b52cdad6bb8c9819cb34c85eef3 100644
--- a/dygraph/paddleseg/models/fcn.py
+++ b/dygraph/paddleseg/models/fcn.py
@@ -16,13 +16,9 @@ import math
 import os
 
 import paddle
+import paddle.nn as nn
+import paddle.nn.functional as F
 from paddle.nn import Conv2d
-
-import paddle.fluid as fluid
-from paddle.fluid.param_attr import ParamAttr
-from paddle.fluid.layer_helper import LayerHelper
-from paddle.fluid.dygraph.nn import Pool2D, Linear
-from paddle.fluid.initializer import Normal
 from paddle.nn import SyncBatchNorm as BatchNorm
 
 from paddleseg.cvlibs import manager
@@ -39,7 +35,7 @@ __all__ = [
 
 
 @manager.MODELS.add_component
-class FCN(fluid.dygraph.Layer):
+class FCN(nn.Layer):
     """
     Fully Convolutional Networks for Semantic Segmentation.
     https://arxiv.org/abs/1411.4038
@@ -96,7 +92,7 @@ class FCN(fluid.dygraph.Layer):
         x = fea_list[self.backbone_indices[0]]
         x = self.conv_last_2(x)
         logit = self.conv_last_1(x)
-        logit = fluid.layers.resize_bilinear(logit, input_shape)
+        logit = F.resize_bilinear(logit, input_shape)
         return [logit]
 
     def init_weight(self):
@@ -128,7 +124,7 @@ class FCN(fluid.dygraph.Layer):
             logger.warning('No pretrained model to load, train from scratch')
 
 
-class ConvBNLayer(fluid.dygraph.Layer):
+class ConvBNLayer(nn.Layer):
     def __init__(self,
                  in_channels,
                  out_channels,