Browse Source

add models' alias to pdx.cls; add mobilenetV3_ssld

will-jl944 4 years ago
parent
commit
d5906ce1ee

+ 25 - 0
dygraph/paddlex/cls.py

@@ -12,6 +12,7 @@
 # See the License for the specific language governing permissions and
 # See the License for the specific language governing permissions and
 # limitations under the License.
 # limitations under the License.
 
 
+from . import cv
 from paddlex.cv.transforms import cls_transforms
 from paddlex.cv.transforms import cls_transforms
 
 
 
 
@@ -21,3 +22,27 @@ def __getattr__(attr):
 
 
 
 
 transforms = cls_transforms
 transforms = cls_transforms
+
+ResNet18 = cv.models.ResNet18
+ResNet34 = cv.models.ResNet34
+ResNet50 = cv.models.ResNet50
+ResNet101 = cv.models.ResNet101
+ResNet50_vd = cv.models.ResNet50_vd
+ResNet101_vd = cv.models.ResNet101_vd
+ResNet50_vd_ssld = cv.models.ResNet50_vd_ssld
+ResNet101_vd_ssld = cv.models.ResNet101_vd_ssld
+DarkNet53 = cv.models.DarkNet53
+MobileNetV1 = cv.models.MobileNetV1
+MobileNetV2 = cv.models.MobileNetV2
+MobileNetV3_small = cv.models.MobileNetV3_small
+MobileNetV3_large = cv.models.MobileNetV3_large
+MobileNetV3_small_ssld = cv.models.MobileNetV3_small_ssld
+MobileNetV3_large_ssld = cv.models.MobileNetV3_large_ssld
+Xception41 = cv.models.Xception41
+Xception65 = cv.models.Xception65
+DenseNet121 = cv.models.DenseNet121
+DenseNet161 = cv.models.DenseNet161
+DenseNet201 = cv.models.DenseNet201
+ShuffleNetV2 = cv.models.ShuffleNetV2
+HRNet_W18 = cv.models.HRNet_W18_C
+AlexNet = cv.models.AlexNet

+ 29 - 8
dygraph/paddlex/cv/models/classifier.py

@@ -34,10 +34,11 @@ __all__ = [
     "ResNet18_vd", "ResNet34_vd", "ResNet50_vd", "ResNet50_vd_ssld",
     "ResNet18_vd", "ResNet34_vd", "ResNet50_vd", "ResNet50_vd_ssld",
     "ResNet101_vd", "ResNet101_vd_ssld", "ResNet152_vd", "ResNet200_vd",
     "ResNet101_vd", "ResNet101_vd_ssld", "ResNet152_vd", "ResNet200_vd",
     "AlexNet", "DarkNet53", "MobileNetV1", "MobileNetV2", "MobileNetV3_small",
     "AlexNet", "DarkNet53", "MobileNetV1", "MobileNetV2", "MobileNetV3_small",
-    "MobileNetV3_large", "DenseNet121", "DenseNet161", "DenseNet169",
-    "DenseNet201", "DenseNet264", "HRNet_W18_C", "HRNet_W30_C", "HRNet_W32_C",
-    "HRNet_W40_C", "HRNet_W44_C", "HRNet_W48_C", "HRNet_W64_C", "Xception41",
-    "Xception65", "Xception71", "ShuffleNetV2", "ShuffleNetV2_swish"
+    "MobileNetV3_small_ssld", "MobileNetV3_large", "MobileNetV3_large_ssld",
+    "DenseNet121", "DenseNet161", "DenseNet169", "DenseNet201", "DenseNet264",
+    "HRNet_W18_C", "HRNet_W30_C", "HRNet_W32_C", "HRNet_W40_C", "HRNet_W44_C",
+    "HRNet_W48_C", "HRNet_W64_C", "Xception41", "Xception65", "Xception71",
+    "ShuffleNetV2", "ShuffleNetV2_swish"
 ]
 ]
 
 
 
 
@@ -66,7 +67,7 @@ class BaseClassifier(BaseModel):
 
 
     def build_net(self, **params):
     def build_net(self, **params):
         with paddle.utils.unique_name.guard():
         with paddle.utils.unique_name.guard():
-            net = architectures.__dict__[self.model_name](
+            net = architectures.__dict__[self.model_name.strip('_ssld')](
                 class_dim=self.num_classes, **params)
                 class_dim=self.num_classes, **params)
         return net
         return net
 
 
@@ -406,10 +407,9 @@ class ResNet50_vd(BaseClassifier):
 class ResNet50_vd_ssld(BaseClassifier):
 class ResNet50_vd_ssld(BaseClassifier):
     def __init__(self, num_classes=1000):
     def __init__(self, num_classes=1000):
         super(ResNet50_vd_ssld, self).__init__(
         super(ResNet50_vd_ssld, self).__init__(
-            model_name='ResNet50_vd',
+            model_name='ResNet50_vd_ssld',
             num_classes=num_classes,
             num_classes=num_classes,
             lr_mult_list=[.1, .1, .2, .2, .3])
             lr_mult_list=[.1, .1, .2, .2, .3])
-        self.model_name = 'ResNet50_vd_ssld'
 
 
 
 
 class ResNet101_vd(BaseClassifier):
 class ResNet101_vd(BaseClassifier):
@@ -424,7 +424,6 @@ class ResNet101_vd_ssld(BaseClassifier):
             model_name='ResNet101_vd_ssld',
             model_name='ResNet101_vd_ssld',
             num_classes=num_classes,
             num_classes=num_classes,
             lr_mult_list=[.1, .1, .2, .2, .3])
             lr_mult_list=[.1, .1, .2, .2, .3])
-        self.model_name = 'ResNet101_vd_ssld'
 
 
 
 
 class ResNet152_vd(BaseClassifier):
 class ResNet152_vd(BaseClassifier):
@@ -505,6 +504,22 @@ class MobileNetV3_small(BaseClassifier):
         model_name = 'MobileNetV3_small_x' + str(float(scale)).replace('.',
         model_name = 'MobileNetV3_small_x' + str(float(scale)).replace('.',
                                                                        '_')
                                                                        '_')
         super(MobileNetV3_small, self).__init__(
         super(MobileNetV3_small, self).__init__(
+            model_name=model_name,
+            num_classes=num_classes,
+            lr_mult_list=[.1, .1, .2, .2, .3])
+
+
+class MobileNetV3_small_ssld(BaseClassifier):
+    def __init__(self, num_classes=1000, scale=1.0):
+        supported_scale = [.35, 1.0]
+        if scale not in supported_scale:
+            logging.warning(
+                "scale={} is not supported by MobileNetV3_small_ssld, "
+                "scale is forcibly set to 1.0".format(scale))
+            scale = 1.0
+        model_name = 'MobileNetV3_small_x' + str(float(scale)).replace(
+            '.', '_') + '_ssld'
+        super(MobileNetV3_small_ssld, self).__init__(
             model_name=model_name, num_classes=num_classes)
             model_name=model_name, num_classes=num_classes)
 
 
 
 
@@ -521,6 +536,12 @@ class MobileNetV3_large(BaseClassifier):
             model_name=model_name, num_classes=num_classes)
             model_name=model_name, num_classes=num_classes)
 
 
 
 
+class MobileNetV3_large_ssld(BaseClassifier):
+    def __init__(self, num_classes=1000):
+        super(MobileNetV3_large_ssld, self).__init__(
+            model_name='MobileNetV3_large_x1_0_ssld', num_classes=num_classes)
+
+
 class DenseNet121(BaseClassifier):
 class DenseNet121(BaseClassifier):
     def __init__(self, num_classes=1000):
     def __init__(self, num_classes=1000):
         super(DenseNet121, self).__init__(
         super(DenseNet121, self).__init__(

+ 6 - 0
dygraph/paddlex/utils/checkpoint.py

@@ -124,12 +124,16 @@ imagenet_weights = {
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x2_0_pretrained.pdparams',
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x2_0_pretrained.pdparams',
     'MobileNetV3_small_x0_35_IMAGENET':
     'MobileNetV3_small_x0_35_IMAGENET':
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x0_35_pretrained.pdparams',
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x0_35_pretrained.pdparams',
+    'MobileNetV3_small_x0_35_ssld_IMAGENET':
+    'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x0_35_ssld_pretrained.pdparams',
     'MobileNetV3_small_x0_5_IMAGENET':
     'MobileNetV3_small_x0_5_IMAGENET':
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x0_5_pretrained.pdparams',
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x0_5_pretrained.pdparams',
     'MobileNetV3_small_x0_75_IMAGENET':
     'MobileNetV3_small_x0_75_IMAGENET':
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x0_75_pretrained.pdparams',
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x0_75_pretrained.pdparams',
     'MobileNetV3_small_x1_0_IMAGENET':
     'MobileNetV3_small_x1_0_IMAGENET':
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x1_0_pretrained.pdparams',
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x1_0_pretrained.pdparams',
+    'MobileNetV3_small_x1_0_ssld_IMAGENET':
+    'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x1_0_ssld_pretrained.pdparams',
     'MobileNetV3_small_x1_25_IMAGENET':
     'MobileNetV3_small_x1_25_IMAGENET':
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x1_25_pretrained.pdparams',
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x1_25_pretrained.pdparams',
     'MobileNetV3_large_x0_35_IMAGENET':
     'MobileNetV3_large_x0_35_IMAGENET':
@@ -142,6 +146,8 @@ imagenet_weights = {
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x1_0_pretrained.pdparams',
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x1_0_pretrained.pdparams',
     'MobileNetV3_large_x1_25_IMAGENET':
     'MobileNetV3_large_x1_25_IMAGENET':
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x1_25_pretrained.pdparams',
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x1_25_pretrained.pdparams',
+    'MobileNetV3_large_x1_0_ssld':
+    'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x1_0_ssld_pretrained.pdparams',
     'AlexNet_IMAGENET':
     'AlexNet_IMAGENET':
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/AlexNet_pretrained.pdparams',
     'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/AlexNet_pretrained.pdparams',
     'DarkNet53_IMAGENET':
     'DarkNet53_IMAGENET':