diff --git a/docs/appendix/model_zoo.md b/docs/appendix/model_zoo.md index c75f41729d60761f326284839f3a9dd2addeaddc..026aab79baad01f919718089bafc1c1541284be0 100644 --- a/docs/appendix/model_zoo.md +++ b/docs/appendix/model_zoo.md @@ -6,28 +6,28 @@ | 模型 | 模型大小 | 预测速度(毫秒) | Top1准确率(%) | Top5准确率(%) | | :----| :------- | :----------- | :--------- | :--------- | -| ResNet18| 46.9MB | 1.499 | 71.0 | 89.9 | -| ResNet34| 87.5MB | 2.272 | 74.6 | 92.1 | -| ResNet50| 102.7MB | 2.939 | 76.5 | 93.0 | -| ResNet101 |179.1MB | 5.314 | 77.6 | 93.6 | -| ResNet50_vd |102.8MB | 3.165 | 79.1 | 94.4 | -| ResNet101_vd| 179.2MB | 5.252 | 80.2 | 95.0 | -| ResNet50_vd_ssld |102.8MB | 3.165 | 82.4 | 96.1 | -| ResNet101_vd_ssld| 179.2MB | 5.252 | 83.7 | 96.7 | -| DarkNet53|166.9MB | 3.139 | 78.0 | 94.1 | -| MobileNetV1 | 16.0MB | 32.523 | 71.0 | 89.7 | -| MobileNetV2 | 14.0MB | 23.318 | 72.2 | 90.7 | -| MobileNetV3_large| 21.0MB | 19.308 | 75.3 | 93.2 | -| MobileNetV3_small | 12.0MB | 6.546 | 68.2 | 88.1 | -| MobileNetV3_large_ssld| 21.0MB | 19.308 | 79.0 | 94.5 | -| MobileNetV3_small_ssld | 12.0MB | 6.546 | 71.3 | 90.1 | -| Xception41 |92.4MB | 4.408 | 79.6 | 94.4 | -| Xception65 | 144.6MB | 6.464 | 80.3 | 94.5 | -| DenseNet121 | 32.8MB | 4.371 | 75.7 | 92.6 | -| DenseNet161|116.3MB | 8.863 | 78.6 | 94.1 | -| DenseNet201| 84.6MB | 8.173 | 77.6 | 93.7 | -| ShuffleNetV2 | 9.0MB | 10.941 | 68.8 | 88.5 | -| HRNet_W18 | 21.29MB | 7.368 (V100 GPU) | 76.9 | 93.4 | +| ResNet18| 46.9MB | - | 71.0 | 89.9 | +| ResNet34| 87.5MB | - | 74.6 | 92.1 | +| ResNet50| 102.7MB | - | 76.5 | 93.0 | +| ResNet101 |179.1MB | - | 77.6 | 93.6 | +| ResNet50_vd |102.8MB |- | 79.1 | 94.4 | +| ResNet101_vd| 179.2MB | - | 80.2 | 95.0 | +| ResNet50_vd_ssld |102.8MB | - | 82.4 | 96.1 | +| ResNet101_vd_ssld| 179.2MB | - | 83.7 | 96.7 | +| DarkNet53|166.9MB | - | 78.0 | 94.1 | +| MobileNetV1 | 16.0MB | - | 71.0 | 89.7 | +| MobileNetV2 | 14.0MB | - | 72.2 | 90.7 | +| MobileNetV3_large| 21.0MB | - | 75.3 | 93.2 | +| MobileNetV3_small | 12.0MB | - | 68.2 | 88.1 | +| MobileNetV3_large_ssld| 21.0MB | - | 79.0 | 94.5 | +| MobileNetV3_small_ssld | 12.0MB | - | 71.3 | 90.1 | +| Xception41 |92.4MB | - | 79.6 | 94.4 | +| Xception65 | 144.6MB | - | 80.3 | 94.5 | +| DenseNet121 | 32.8MB | - | 75.7 | 92.6 | +| DenseNet161|116.3MB | - | 78.6 | 94.1 | +| DenseNet201| 84.6MB | - | 77.6 | 93.7 | +| ShuffleNetV2 | 9.0MB | - | 68.8 | 88.5 | +| HRNet_W18 | 21.29MB | - | 76.9 | 93.4 | ## 目标检测模型 diff --git a/paddlex/cv/models/hrnet.py b/paddlex/cv/models/hrnet.py index 0eec2be561911fd18bed97eef3e49b897c60510a..304cf0b1568d473df615e12ffbaa96e9d681af20 100644 --- a/paddlex/cv/models/hrnet.py +++ b/paddlex/cv/models/hrnet.py @@ -77,6 +77,7 @@ class HRNet(DeepLabv3p): self.class_weight = class_weight self.ignore_index = ignore_index self.labels = None + self.fixed_input_shape = None def build_net(self, mode='train'): model = paddlex.cv.nets.segmentation.HRNet( @@ -86,7 +87,8 @@ class HRNet(DeepLabv3p): use_bce_loss=self.use_bce_loss, use_dice_loss=self.use_dice_loss, class_weight=self.class_weight, - ignore_index=self.ignore_index) + ignore_index=self.ignore_index, + fixed_input_shape=self.fixed_input_shape) inputs = model.generate_inputs() model_out = model.build_net(inputs) outputs = OrderedDict() @@ -170,6 +172,6 @@ class HRNet(DeepLabv3p): return super(HRNet, self).train( num_epochs, train_dataset, train_batch_size, eval_dataset, save_interval_epochs, log_interval_steps, save_dir, - pretrain_weights, optimizer, learning_rate, lr_decay_power, - use_vdl, sensitivities_file, eval_metric_loss, early_stop, + pretrain_weights, optimizer, learning_rate, lr_decay_power, use_vdl, + sensitivities_file, eval_metric_loss, early_stop, early_stop_patience, resume_checkpoint) diff --git a/paddlex/cv/models/load_model.py b/paddlex/cv/models/load_model.py index 5138445afcd8c8fd8f4d0d396703b3280d4e3e51..87b30ac47c206f0b3723ffcf353d95078feeb892 100644 --- a/paddlex/cv/models/load_model.py +++ b/paddlex/cv/models/load_model.py @@ -116,20 +116,7 @@ def fix_input_shape(info, fixed_input_shape=None): resize = {'ResizeByShort': {}} padding = {'Padding': {}} if info['_Attributes']['model_type'] == 'classifier': - crop_size = 0 - for transform in info['Transforms']: - if 'CenterCrop' in transform: - crop_size = transform['CenterCrop']['crop_size'] - break - assert crop_size == fixed_input_shape[ - 0], "fixed_input_shape must == CenterCrop:crop_size:{}".format( - crop_size) - assert crop_size == fixed_input_shape[ - 1], "fixed_input_shape must == CenterCrop:crop_size:{}".format( - crop_size) - if crop_size == 0: - logging.warning( - "fixed_input_shape must == input shape when trainning") + pass else: resize['ResizeByShort']['short_size'] = min(fixed_input_shape) resize['ResizeByShort']['max_size'] = max(fixed_input_shape) diff --git a/paddlex/cv/models/slim/prune_config.py b/paddlex/cv/models/slim/prune_config.py index 65baefa96a42c86c4a1b6ad5797e58b2c2ea5420..49430e9bfb1dcc47fb93aa9fc7d05ceb21e2b9e8 100644 --- a/paddlex/cv/models/slim/prune_config.py +++ b/paddlex/cv/models/slim/prune_config.py @@ -142,13 +142,16 @@ def get_prune_params(model): program = model.test_prog if model_type.startswith('ResNet') or \ model_type.startswith('DenseNet') or \ - model_type.startswith('DarkNet'): + model_type.startswith('DarkNet') or \ + model_type.startswith('AlexNet'): for block in program.blocks: for param in block.all_parameters(): pd_var = fluid.global_scope().find_var(param.name) pd_param = pd_var.get_tensor() if len(np.array(pd_param).shape) == 4: prune_names.append(param.name) + if model_type == 'AlexNet': + prune_names.remove('conv5_weights') elif model_type == "MobileNetV1": prune_names.append("conv1_weights") for param in program.global_block().all_parameters(): diff --git a/paddlex/cv/nets/segmentation/hrnet.py b/paddlex/cv/nets/segmentation/hrnet.py index 65f3bfbc2514a325da28c022b2ae2c434d7a2eb4..b0bf10d5dd172851b12234a0e07a059f58b82773 100644 --- a/paddlex/cv/nets/segmentation/hrnet.py +++ b/paddlex/cv/nets/segmentation/hrnet.py @@ -38,7 +38,8 @@ class HRNet(object): use_bce_loss=False, use_dice_loss=False, class_weight=None, - ignore_index=255): + ignore_index=255, + fixed_input_shape=None): # dice_loss或bce_loss只适用两类分割中 if num_classes > 2 and (use_bce_loss or use_dice_loss): raise ValueError( @@ -66,6 +67,7 @@ class HRNet(object): self.use_dice_loss = use_dice_loss self.class_weight = class_weight self.ignore_index = ignore_index + self.fixed_input_shape = fixed_input_shape self.backbone = paddlex.cv.nets.hrnet.HRNet( width=width, feature_maps="stage4") @@ -131,8 +133,16 @@ class HRNet(object): def generate_inputs(self): inputs = OrderedDict() - inputs['image'] = fluid.data( - dtype='float32', shape=[None, 3, None, None], name='image') + + if self.fixed_input_shape is not None: + input_shape = [ + None, 3, self.fixed_input_shape[1], self.fixed_input_shape[0] + ] + inputs['image'] = fluid.data( + dtype='float32', shape=input_shape, name='image') + else: + inputs['image'] = fluid.data( + dtype='float32', shape=[None, 3, None, None], name='image') if self.mode == 'train': inputs['label'] = fluid.data( dtype='int32', shape=[None, 1, None, None], name='label')