Skip to content

Commit b5c534c

Browse files
authored
add Lightweight backbone of centernet (PaddlePaddle#4586)
1 parent b1c36d9 commit b5c534c

9 files changed

Lines changed: 133 additions & 13 deletions

configs/centernet/README_cn.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@
2020
| DLA-34(paper) | 512x512 | 37.4 | - | - | - |
2121
| DLA-34 | 512x512 | 37.6 | - | [下载链接](https://bj.bcebos.com/v1/paddledet/models/centernet_dla34_140e_coco.pdparams) | [配置文件](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/centernet/centernet_dla34_140e_coco.yml) |
2222
| ResNet50 + DLAUp | 512x512 | 38.9 | - | [下载链接](https://bj.bcebos.com/v1/paddledet/models/centernet_r50_140e_coco.pdparams) | [配置文件](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/centernet/centernet_r50_140e_coco.yml) |
23-
23+
| GhostNet_x1_3 + DLAUp | 512x512 | 28.9 | - | [下载链接](https://paddledet.bj.bcebos.com/models/centernet_ghostnet_1_3x_140e_coco.pdparams) | [配置文件](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/centernet/centernet_ghostnet_1_3x_140e_coco.yml) |
24+
| PP-LCNet_x1_0 + DLAUp | 512x512 | 26.9 | - | [下载链接](https://paddledet.bj.bcebos.com/models/centernet_lcnet_1x_140e_coco.pdparams) | [配置文件](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/centernet/centernet_lcnet_1x_140e_coco.yml) |
25+
| MobileNetV1_1x + DLAUp | 512x512 | 28.2 | - | [下载链接](https://paddledet.bj.bcebos.com/models/centernet_mbv1_1x_140e_coco.pdparams) | [配置文件](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/centernet/centernet_mbv1_1x_140e_coco.yml) |
26+
| MobileNetV3_large_x1_0 + DLAUp | 512x512 | 27.1 | - | [下载链接](https://paddledet.bj.bcebos.com/models/centernet_mbv3_large_1x_140e_coco.pdparams) | [配置文件](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/centernet/centernet_mbv3_large_1x_140e_coco.yml) |
27+
| ShuffleNetV2_x1_0 + DLAUp | 512x512 | 23.8 | - | [下载链接](https://paddledet.bj.bcebos.com/models/centernet_shufflenetv2_1x_140e_coco.pdparams) | [配置文件](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/centernet/centernet_shufflenetv2_1x_140e_coco.yml) |
2428

2529
## 引用
2630
```
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
_BASE_: [
2+
'centernet_r50_140e_coco.yml'
3+
]
4+
5+
pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/GhostNet_x1_3_ssld_pretrained.pdparams
6+
weights: output/centernet_ghostnet_1_3x_140e_coco/model_final
7+
8+
CenterNet:
9+
backbone: GhostNet
10+
neck: CenterNetDLAFPN
11+
head: CenterNetHead
12+
post_process: CenterNetPostProcess
13+
14+
GhostNet:
15+
scale: 1.3
16+
conv_decay: 0.00004
17+
feature_maps: [4, 6, 12, 17]
18+
19+
TrainReader:
20+
batch_size: 32
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
_BASE_: [
2+
'centernet_r50_140e_coco.yml'
3+
]
4+
pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/LCNet_x1_0_pretrained.pdparams
5+
weights: output/centernet_lcnet_1x_140e_coco/model_final
6+
7+
CenterNet:
8+
backbone: LCNet
9+
neck: CenterNetDLAFPN
10+
head: CenterNetHead
11+
post_process: CenterNetPostProcess
12+
13+
LCNet:
14+
scale: 1.0
15+
feature_maps: [2, 3, 4, 5]
16+
17+
TrainReader:
18+
batch_size: 32
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
_BASE_: [
2+
'centernet_r50_140e_coco.yml'
3+
]
4+
5+
pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/MobileNetV1_pretrained.pdparams
6+
weights: output/centernet_mbv1_1x_140e_coco/model_final
7+
8+
CenterNet:
9+
backbone: MobileNet
10+
neck: CenterNetDLAFPN
11+
head: CenterNetHead
12+
post_process: CenterNetPostProcess
13+
14+
MobileNet:
15+
scale: 1.
16+
with_extra_blocks: false
17+
extra_block_filters: []
18+
feature_maps: [3, 5, 11, 13]
19+
20+
TrainReader:
21+
batch_size: 32
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
_BASE_: [
2+
'centernet_r50_140e_coco.yml'
3+
]
4+
5+
pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/MobileNetV3_large_x1_0_ssld_pretrained.pdparams
6+
weights: output/centernet_mbv3_large_1x_140e_coco/model_final
7+
8+
CenterNet:
9+
backbone: MobileNetV3
10+
neck: CenterNetDLAFPN
11+
head: CenterNetHead
12+
post_process: CenterNetPostProcess
13+
14+
MobileNetV3:
15+
model_name: large
16+
scale: 1.
17+
with_extra_blocks: false
18+
extra_block_filters: []
19+
feature_maps: [4, 7, 13, 16]
20+
21+
TrainReader:
22+
batch_size: 32
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
_BASE_: [
2+
'centernet_r50_140e_coco.yml'
3+
]
4+
5+
pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ShuffleNetV2_x1_0_pretrained.pdparams
6+
weights: output/centernet_shufflenetv2_1x_140e_coco/model_final
7+
8+
CenterNet:
9+
backbone: ShuffleNetV2
10+
neck: CenterNetDLAFPN
11+
head: CenterNetHead
12+
post_process: CenterNetPostProcess
13+
14+
ShuffleNetV2:
15+
scale: 1.0
16+
feature_maps: [5, 13, 17]
17+
act: leaky_relu
18+
19+
CenterNetDLAFPN:
20+
first_level: 0
21+
last_level: 3
22+
down_ratio: 8
23+
dcn_v2: False
24+
25+
TrainReader:
26+
batch_size: 32
27+
28+
TestReader:
29+
sample_transforms:
30+
- Decode: {}
31+
- WarpAffine: {keep_res: False, input_h: 512, input_w: 512}
32+
- NormalizeImage: {mean: [0.40789655, 0.44719303, 0.47026116], std: [0.2886383 , 0.27408165, 0.27809834]}
33+
- Permute: {}

deploy/python/keypoint_preprocess.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,10 @@ def get_affine_transform(center,
7777
np.ndarray: The transform matrix.
7878
"""
7979
assert len(center) == 2
80-
assert len(input_size) == 2
8180
assert len(output_size) == 2
8281
assert len(shift) == 2
83-
82+
if not isinstance(input_size, (np.ndarray, list)):
83+
input_size = np.array([input_size, input_size], dtype=np.float32)
8484
scale_tmp = input_size
8585

8686
shift = np.array(shift)

ppdet/modeling/backbones/mobilenet_v1.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ def __init__(self,
226226
norm_type=norm_type,
227227
name="conv2_1"))
228228
self.dwsl.append(dws21)
229-
self._update_out_channels(64, len(self.dwsl), feature_maps)
229+
self._update_out_channels(int(64 * scale), len(self.dwsl), feature_maps)
230230
dws22 = self.add_sublayer(
231231
"conv2_2",
232232
sublayer=DepthwiseSeparable(
@@ -242,7 +242,7 @@ def __init__(self,
242242
norm_type=norm_type,
243243
name="conv2_2"))
244244
self.dwsl.append(dws22)
245-
self._update_out_channels(128, len(self.dwsl), feature_maps)
245+
self._update_out_channels(int(128 * scale), len(self.dwsl), feature_maps)
246246
# 1/4
247247
dws31 = self.add_sublayer(
248248
"conv3_1",
@@ -259,7 +259,7 @@ def __init__(self,
259259
norm_type=norm_type,
260260
name="conv3_1"))
261261
self.dwsl.append(dws31)
262-
self._update_out_channels(128, len(self.dwsl), feature_maps)
262+
self._update_out_channels(int(128 * scale), len(self.dwsl), feature_maps)
263263
dws32 = self.add_sublayer(
264264
"conv3_2",
265265
sublayer=DepthwiseSeparable(
@@ -275,7 +275,7 @@ def __init__(self,
275275
norm_type=norm_type,
276276
name="conv3_2"))
277277
self.dwsl.append(dws32)
278-
self._update_out_channels(256, len(self.dwsl), feature_maps)
278+
self._update_out_channels(int(256 * scale), len(self.dwsl), feature_maps)
279279
# 1/8
280280
dws41 = self.add_sublayer(
281281
"conv4_1",
@@ -292,7 +292,7 @@ def __init__(self,
292292
norm_type=norm_type,
293293
name="conv4_1"))
294294
self.dwsl.append(dws41)
295-
self._update_out_channels(256, len(self.dwsl), feature_maps)
295+
self._update_out_channels(int(256 * scale), len(self.dwsl), feature_maps)
296296
dws42 = self.add_sublayer(
297297
"conv4_2",
298298
sublayer=DepthwiseSeparable(
@@ -308,13 +308,13 @@ def __init__(self,
308308
norm_type=norm_type,
309309
name="conv4_2"))
310310
self.dwsl.append(dws42)
311-
self._update_out_channels(512, len(self.dwsl), feature_maps)
311+
self._update_out_channels(int(512 * scale), len(self.dwsl), feature_maps)
312312
# 1/16
313313
for i in range(5):
314314
tmp = self.add_sublayer(
315315
"conv5_" + str(i + 1),
316316
sublayer=DepthwiseSeparable(
317-
in_channels=512,
317+
in_channels=int(512 * scale),
318318
out_channels1=512,
319319
out_channels2=512,
320320
num_groups=512,
@@ -326,7 +326,7 @@ def __init__(self,
326326
norm_type=norm_type,
327327
name="conv5_" + str(i + 1)))
328328
self.dwsl.append(tmp)
329-
self._update_out_channels(512, len(self.dwsl), feature_maps)
329+
self._update_out_channels(int(512 * scale), len(self.dwsl), feature_maps)
330330
dws56 = self.add_sublayer(
331331
"conv5_6",
332332
sublayer=DepthwiseSeparable(
@@ -342,7 +342,7 @@ def __init__(self,
342342
norm_type=norm_type,
343343
name="conv5_6"))
344344
self.dwsl.append(dws56)
345-
self._update_out_channels(1024, len(self.dwsl), feature_maps)
345+
self._update_out_channels(int(1024 * scale), len(self.dwsl), feature_maps)
346346
# 1/32
347347
dws6 = self.add_sublayer(
348348
"conv6",
@@ -359,7 +359,7 @@ def __init__(self,
359359
norm_type=norm_type,
360360
name="conv6"))
361361
self.dwsl.append(dws6)
362-
self._update_out_channels(1024, len(self.dwsl), feature_maps)
362+
self._update_out_channels(int(1024 * scale), len(self.dwsl), feature_maps)
363363

364364
if self.with_extra_blocks:
365365
self.extra_blocks = []

ppdet/modeling/necks/centernet_fpn.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,8 @@ def forward(self, body_feats):
270270
feat = ida_up_feats[-1]
271271
if self.with_sge:
272272
feat = self.sge_attention(feat)
273+
if self.down_ratio != 4:
274+
feat = F.interpolate(feat, scale_factor=self.down_ratio // 4, mode="bilinear", align_corners=True)
273275
return feat
274276

275277
@property

0 commit comments

Comments
 (0)