|
| 1 | +import os |
1 | 2 | from typing import List, Tuple
|
2 | 3 |
|
3 | 4 | from mindspore import Tensor, nn, ops
|
|
7 | 8 | from ..utils.attention_cells import SEModule
|
8 | 9 | from .asf import AdaptiveScaleFusion
|
9 | 10 |
|
| 11 | +OFFLINE_MODE = os.getenv("OFFLINE_MODE", None) |
10 | 12 |
|
11 |
| -def _resize_nn(x: Tensor, scale: int = 0, shape: Tuple[int] = None): |
12 |
| - if scale == 1 or shape == x.shape[2:]: |
13 |
| - return x |
14 | 13 |
|
15 |
| - if scale: |
16 |
| - shape = (x.shape[2] * scale, x.shape[3] * scale) |
17 |
| - return ops.ResizeNearestNeighbor(shape)(x) |
| 14 | +if OFFLINE_MODE is None: |
| 15 | + def _resize_nn(x: Tensor, scale: int = 0, shape: Tuple[int] = None): |
| 16 | + if scale == 1 or shape == x.shape[2:]: |
| 17 | + return x |
| 18 | + |
| 19 | + if scale: |
| 20 | + shape = (x.shape[2] * scale, x.shape[3] * scale) |
| 21 | + return ops.ResizeNearestNeighbor(shape)(x) |
| 22 | +else: |
| 23 | + def _resize_nn(x: Tensor, shape: Tensor): |
| 24 | + return ops.ResizeNearestNeighborV2()(x, shape) |
18 | 25 |
|
19 | 26 |
|
20 | 27 | class FPN(nn.Cell):
|
@@ -64,11 +71,18 @@ def construct(self, features: List[Tensor]) -> Tensor:
|
64 | 71 | for i, uc_op in enumerate(self.unify_channels):
|
65 | 72 | features[i] = uc_op(features[i])
|
66 | 73 |
|
67 |
| - for i in range(2, -1, -1): |
68 |
| - features[i] += _resize_nn(features[i + 1], shape=features[i].shape[2:]) |
| 74 | + if OFFLINE_MODE is None: |
| 75 | + for i in range(2, -1, -1): |
| 76 | + features[i] += _resize_nn(features[i + 1], shape=features[i].shape[2:]) |
| 77 | + |
| 78 | + for i, out in enumerate(self.out): |
| 79 | + features[i] = _resize_nn(out(features[i]), shape=features[0].shape[2:]) |
| 80 | + else: |
| 81 | + for i in range(2, -1, -1): |
| 82 | + features[i] += _resize_nn(features[i + 1], shape=ops.dyn_shape(features[i])[2:]) |
69 | 83 |
|
70 |
| - for i, out in enumerate(self.out): |
71 |
| - features[i] = _resize_nn(out(features[i]), shape=features[0].shape[2:]) |
| 84 | + for i, out in enumerate(self.out): |
| 85 | + features[i] = _resize_nn(out(features[i]), shape=ops.dyn_shape(features[0])[2:]) |
72 | 86 |
|
73 | 87 | return self.fuse(features[::-1]) # matching the reverse order of the original work
|
74 | 88 |
|
|
0 commit comments