diff --git a/README.md b/README.md index 5266480208e5aeeaa3d4900c1f94d14527b75d27..0e58a9e5db946b3142a2b81d131241c8ed379231 100644 --- a/README.md +++ b/README.md @@ -6,15 +6,13 @@ PaddleClas is a toolset for image classification tasks prepared for the industry and academia. It helps users train better computer vision models and apply them in real scenarios. - **Recent update** +- 2020.09.17 Add `Res2Net50_vd_26w_4s_ssld` pretrained model, whose Top-1 Acc on ImageNet-1k dataset reaches 83.1%. Add `Res2Net101_vd_26w_4s_ssld` pretrained model, whose Top-1 Acc on ImageNet-1k dataset reaches 83.9%. - 2020.10.12 Add Paddle-Lite demo。 - 2020.10.10 Add cpp inference demo and improve FAQ tutorial. - 2020.09.17 Add `HRNet_W48_C_ssld` pretrained model, whose Top-1 Acc on ImageNet-1k dataset reaches 83.62%. Add `ResNet34_vd_ssld` pretrained model, whose Top-1 Acc on ImageNet-1k dataset reaches 79.72%. - 2020.09.07 Add `HRNet_W18_C_ssld` pretrained model, whose Top-1 Acc on ImageNet-1k dataset reaches 81.16%. - 2020.07.14 Add `Res2Net200_vd_26w_4s_ssld` pretrained model, whose Top-1 Acc on ImageNet-1k dataset reaches 85.13%. Add `Fix_ResNet50_vd_ssld_v2` pretrained model, whose Top-1 Acc on ImageNet-1k dataset reaches 84.00%. -- 2020.06.17 Add English documents. -- 2020.06.12 Add support for training and evaluation on Windows or CPU. - [more](./docs/en/update_history_en.md) diff --git a/README_cn.md b/README_cn.md index 98d2a5c200a515866cb2e959879f94bdeef334bb..7329a5a073e32adf39168a3c1b90ca80a2699a79 100644 --- a/README_cn.md +++ b/README_cn.md @@ -7,13 +7,12 @@ 飞桨图像分类套件PaddleClas是飞桨为工业界和学术界所准备的一个图像分类任务的工具集,助力使用者训练出更好的视觉模型和应用落地。 **近期更新** +- 2020.10.20 添加 `Res2Net50_vd_26w_4s_ssld `模型,在ImageNet-1k上Top-1 Acc可达83.1%;添加 `Res2Net101_vd_26w_4s_ssld `模型,在ImageNet-1k上Top-1 Acc可达83.9%。 - 2020.10.12 添加Paddle-Lite demo。 - 2020.10.10 添加cpp inference demo,完善`FAQ 30问`教程。 - 2020.09.17 添加 `HRNet_W48_C_ssld `模型,在ImageNet-1k上Top-1 Acc可达83.62%;添加 `ResNet34_vd_ssld `模型,在ImageNet-1k上Top-1 Acc可达79.72%。 - 2020.09.07 添加 `HRNet_W18_C_ssld `模型,在ImageNet-1k上Top-1 Acc可达81.16%;添加 `MobileNetV3_small_x0_35_ssld `模型,在ImageNet-1k上Top-1 Acc可达55.55%。 - 2020.07.14 添加 `Res2Net200_vd_26w_4s_ssld `模型,在ImageNet-1k上Top-1 Acc可达85.13%;添加 `Fix_ResNet50_vd_ssld_v2 `模型,在ImageNet-1k上Top-1 Acc可达84.0%。 -- 2020.06.17 添加英文文档。 -- 2020.06.12 添加对windows和CPU环境的训练与评估支持。 - [more](./docs/zh_CN/update_history.md) diff --git a/configs/EfficientNet/EfficientNetB0.yaml b/configs/EfficientNet/EfficientNetB0.yaml index 0925d3936ff61864a4ee84d26c140bebdb870320..c7b6705dd0941d646de8bab624f5051e33df245b 100644 --- a/configs/EfficientNet/EfficientNetB0.yaml +++ b/configs/EfficientNet/EfficientNetB0.yaml @@ -2,7 +2,6 @@ mode: 'train' ARCHITECTURE: name: "EfficientNetB0" params: - is_test: False padding_type : "SAME" override_params: drop_connect_rate: 0.1 diff --git a/docs/en/models/SEResNext_and_Res2Net_en.md b/docs/en/models/SEResNext_and_Res2Net_en.md index 7d614a0bfb6ca61842c491b871cf23e7fdf16246..6af2f33c6fd24d4eeeec5c53a7c2d24acdb1444b 100644 --- a/docs/en/models/SEResNext_and_Res2Net_en.md +++ b/docs/en/models/SEResNext_and_Res2Net_en.md @@ -30,8 +30,10 @@ At present, there are a total of 24 pretrained models of the three categories op |:--:|:--:|:--:|:--:|:--:|:--:|:--:| | Res2Net50_26w_4s | 0.793 | 0.946 | 0.780 | 0.936 | 8.520 | 25.700 | | Res2Net50_vd_26w_4s | 0.798 | 0.949 | | | 8.370 | 25.060 | +| Res2Net50_vd_26w_4s_ssld | 0.831 | 0.966 | | | 8.370 | 25.060 | | Res2Net50_14w_8s | 0.795 | 0.947 | 0.781 | 0.939 | 9.010 | 25.720 | | Res2Net101_vd_26w_4s | 0.806 | 0.952 | | | 16.670 | 45.220 | +| Res2Net101_vd_26w_4s_ssld | 0.839 | 0.971 | | | 16.670 | 45.220 | | Res2Net200_vd_26w_4s | 0.812 | 0.957 | | | 31.490 | 76.210 | | Res2Net200_vd_26w_4s_ssld | **0.851** | 0.974 | | | 31.490 | 76.210 | | ResNeXt50_32x4d | 0.778 | 0.938 | 0.778 | | 8.020 | 23.640 | diff --git a/docs/en/update_history_en.md b/docs/en/update_history_en.md index b5cc56820f08e1e3c268f687abc7b483811de4ea..83d63e6f8ceb1d43f202dc3d7eb011effd3d280e 100644 --- a/docs/en/update_history_en.md +++ b/docs/en/update_history_en.md @@ -1,5 +1,9 @@ # Release Notes +* 2020.10.20 + * Add `Res2Net50_vd_26w_4s_ssld` pretrained model, whose Top-1 Acc on ImageNet1k dataset reaches 83.1%. + * Add `Res2Net101_vd_26w_4s_ssld` pretrained model, whose Top-1 Acc on ImageNet1k dataset reaches 83.9%. + - 2020.10.12 * Add Paddle-Lite demo. diff --git a/docs/zh_CN/models/SEResNext_and_Res2Net.md b/docs/zh_CN/models/SEResNext_and_Res2Net.md index e3dbb99cd030557a20863d2c7b3f4ad5f30036e7..7754d2f7a87d320199f1bf55da258cd958586dee 100644 --- a/docs/zh_CN/models/SEResNext_and_Res2Net.md +++ b/docs/zh_CN/models/SEResNext_and_Res2Net.md @@ -29,8 +29,10 @@ Res2Net是2019年提出的一种全新的对ResNet的改进方案,该方案可 |:--:|:--:|:--:|:--:|:--:|:--:|:--:| | Res2Net50_26w_4s | 0.793 | 0.946 | 0.780 | 0.936 | 8.520 | 25.700 | | Res2Net50_vd_26w_4s | 0.798 | 0.949 | | | 8.370 | 25.060 | +| Res2Net50_vd_26w_4s_ssld | 0.831 | 0.966 | | | 8.370 | 25.060 | | Res2Net50_14w_8s | 0.795 | 0.947 | 0.781 | 0.939 | 9.010 | 25.720 | | Res2Net101_vd_26w_4s | 0.806 | 0.952 | | | 16.670 | 45.220 | +| Res2Net101_vd_26w_4s_ssld | 0.839 | 0.971 | | | 16.670 | 45.220 | | Res2Net200_vd_26w_4s | 0.812 | 0.957 | | | 31.490 | 76.210 | | Res2Net200_vd_26w_4s_ssld | **0.851** | 0.974 | | | 31.490 | 76.210 | | ResNeXt50_32x4d | 0.778 | 0.938 | 0.778 | | 8.020 | 23.640 | diff --git a/docs/zh_CN/update_history.md b/docs/zh_CN/update_history.md index 232c18b75151389c41ca4e80c13d3b26b5c00767..da2583125049fb203d2a7dfbf6a73c43005d4a35 100644 --- a/docs/zh_CN/update_history.md +++ b/docs/zh_CN/update_history.md @@ -1,5 +1,8 @@ # 更新日志 +- 2020.10.20 + * 添加Res2Net50_vd_26w_4s_ssld模型,在ImageNet上Top-1 Acc可达0.831;添加Res2Net101_vd_26w_4s_ssld模型,在ImageNet上Top-1 Acc可达0.839。 + - 2020.10.12 * 添加Paddle-Lite demo。 diff --git a/ppcls/modeling/architectures/efficientnet.py b/ppcls/modeling/architectures/efficientnet.py index eee1a76f97c6a81434316c46371c610014d1c27b..8b3c63df73cbd4cd0cbe3763d04863500e9bb5c3 100644 --- a/ppcls/modeling/architectures/efficientnet.py +++ b/ppcls/modeling/architectures/efficientnet.py @@ -518,7 +518,6 @@ class MbConvBlock(nn.Layer): use_se, name=None, drop_connect_rate=None, - is_test=False, model_name=None, cur_stage=None): super(MbConvBlock, self).__init__() @@ -530,7 +529,6 @@ class MbConvBlock(nn.Layer): self.id_skip = block_args.id_skip self.expand_ratio = block_args.expand_ratio self.drop_connect_rate = drop_connect_rate - self.is_test = is_test if self.expand_ratio != 1: self._ecn = ExpandConvNorm( @@ -583,7 +581,7 @@ class MbConvBlock(nn.Layer): self.block_args.stride == 1 and \ self.block_args.input_filters == self.block_args.output_filters: if self.drop_connect_rate: - x = _drop_connect(x, self.drop_connect_rate, self.is_test) + x = _drop_connect(x, self.drop_connect_rate, not self.training) x = paddle.elementwise_add(x, inputs) return x @@ -623,7 +621,6 @@ class ExtractFeatures(nn.Layer): _global_params, padding_type, use_se, - is_test, model_name=None): super(ExtractFeatures, self).__init__() @@ -661,7 +658,7 @@ class ExtractFeatures(nn.Layer): num_repeat=round_repeats(block_args.num_repeat, _global_params)) - drop_connect_rate = self._global_params.drop_connect_rate if not is_test else 0 + drop_connect_rate = self._global_params.drop_connect_rate if drop_connect_rate: drop_connect_rate *= float(idx) / block_size @@ -682,7 +679,7 @@ class ExtractFeatures(nn.Layer): block_args = block_args._replace( input_filters=block_args.output_filters, stride=1) for _ in range(block_args.num_repeat - 1): - drop_connect_rate = self._global_params.drop_connect_rate if not is_test else 0 + drop_connect_rate = self._global_params.drop_connect_rate if drop_connect_rate: drop_connect_rate *= float(idx) / block_size _mc_block = self.add_sublayer( @@ -711,7 +708,6 @@ class ExtractFeatures(nn.Layer): class EfficientNet(nn.Layer): def __init__(self, name="b0", - is_test=True, padding_type="SAME", override_params=None, use_se=True, @@ -724,7 +720,6 @@ class EfficientNet(nn.Layer): model_name, override_params) self.padding_type = padding_type self.use_se = use_se - self.is_test = is_test self._ef = ExtractFeatures( 3, @@ -732,7 +727,6 @@ class EfficientNet(nn.Layer): self._global_params, self.padding_type, self.use_se, - self.is_test, model_name=self.name) output_channels = round_filters(1280, self._global_params) @@ -785,14 +779,12 @@ class EfficientNet(nn.Layer): return x -def EfficientNetB0_small(is_test=True, - padding_type='DYNAMIC', +def EfficientNetB0_small(padding_type='DYNAMIC', override_params=None, use_se=False, **args): model = EfficientNet( name='b0', - is_test=is_test, padding_type=padding_type, override_params=override_params, use_se=use_se, @@ -800,14 +792,12 @@ def EfficientNetB0_small(is_test=True, return model -def EfficientNetB0(is_test=False, - padding_type='SAME', +def EfficientNetB0(padding_type='SAME', override_params=None, use_se=True, **args): model = EfficientNet( name='b0', - is_test=is_test, padding_type=padding_type, override_params=override_params, use_se=use_se, @@ -815,14 +805,12 @@ def EfficientNetB0(is_test=False, return model -def EfficientNetB1(is_test=False, - padding_type='SAME', +def EfficientNetB1(padding_type='SAME', override_params=None, use_se=True, **args): model = EfficientNet( name='b1', - is_test=is_test, padding_type=padding_type, override_params=override_params, use_se=use_se, @@ -830,14 +818,12 @@ def EfficientNetB1(is_test=False, return model -def EfficientNetB2(is_test=False, - padding_type='SAME', +def EfficientNetB2(padding_type='SAME', override_params=None, use_se=True, **args): model = EfficientNet( name='b2', - is_test=is_test, padding_type=padding_type, override_params=override_params, use_se=use_se, @@ -845,14 +831,12 @@ def EfficientNetB2(is_test=False, return model -def EfficientNetB3(is_test=False, - padding_type='SAME', +def EfficientNetB3(padding_type='SAME', override_params=None, use_se=True, **args): model = EfficientNet( name='b3', - is_test=is_test, padding_type=padding_type, override_params=override_params, use_se=use_se, @@ -860,14 +844,12 @@ def EfficientNetB3(is_test=False, return model -def EfficientNetB4(is_test=False, - padding_type='SAME', +def EfficientNetB4(padding_type='SAME', override_params=None, use_se=True, **args): model = EfficientNet( name='b4', - is_test=is_test, padding_type=padding_type, override_params=override_params, use_se=use_se, @@ -875,14 +857,12 @@ def EfficientNetB4(is_test=False, return model -def EfficientNetB5(is_test=False, - padding_type='SAME', +def EfficientNetB5(padding_type='SAME', override_params=None, use_se=True, **args): model = EfficientNet( name='b5', - is_test=is_test, padding_type=padding_type, override_params=override_params, use_se=use_se, @@ -890,14 +870,12 @@ def EfficientNetB5(is_test=False, return model -def EfficientNetB6(is_test=False, - padding_type='SAME', +def EfficientNetB6(padding_type='SAME', override_params=None, use_se=True, **args): model = EfficientNet( name='b6', - is_test=is_test, padding_type=padding_type, override_params=override_params, use_se=use_se, @@ -905,14 +883,12 @@ def EfficientNetB6(is_test=False, return model -def EfficientNetB7(is_test=False, - padding_type='SAME', +def EfficientNetB7(padding_type='SAME', override_params=None, use_se=True, **args): model = EfficientNet( name='b7', - is_test=is_test, padding_type=padding_type, override_params=override_params, use_se=use_se, diff --git a/ppcls/modeling/architectures/res2net_vd.py b/ppcls/modeling/architectures/res2net_vd.py index 4346ae74b2de9ee9ac7d2c9f6c368651cc9b70f4..60232d692c78c484e8a3ea0309726cbf03dd2fb7 100644 --- a/ppcls/modeling/architectures/res2net_vd.py +++ b/ppcls/modeling/architectures/res2net_vd.py @@ -57,7 +57,6 @@ class ConvBNLayer(nn.Layer): stride=stride, padding=(filter_size - 1) // 2, groups=groups, - act=None, weight_attr=ParamAttr(name=name + "_weights"), bias_attr=False) if name == "conv1": @@ -111,8 +110,7 @@ class BottleneckBlock(nn.Layer): act='relu', name=name + '_branch2b_' + str(s + 1))) self.conv1_list.append(conv1) - self.pool2d_avg = AvgPool2d( - kernel_size=3, stride=stride, padding=1, ceil_mode=True) + self.pool2d_avg = AvgPool2d(kernel_size=3, stride=stride, padding=1) self.conv2 = ConvBNLayer( num_channels=num_filters,