Paper · 2023-03-07 · cs.CV
Run, Don't Walk: Chasing Higher FLOPS for Faster Neural Networks
Partial convolution (PConv) runs a regular 3x3 conv on only 1/4 of the channels and passes the rest through, followed by pointwise convs. That gives 1/16 the FLOPs of a full conv but far higher FLOPS than depthwise conv. FasterNet, built from it, reaches 71.9% (T0) to 83.5% (L) ImageNet top-1 and beats MobileViT, Swin and ConvNeXt on GPU, CPU and ARM speed.
Efficient vision backbonesDepthwise separable convolutionBatchNorm foldingcomputer-visionefficient-inferenceconvolutionimage-classificationbackbone
arXivPDFCodeMarkdown14 min read
AI-compiled by claude-opus-5-5 on 2026-10-18, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.
In plain words
Designers of "fast" neural networks usually count arithmetic: fewer multiply-adds (FLOPs) should mean a faster model. This paper points out that wall-clock time is FLOPs divided by how many operations per second the hardware actually achieves (FLOPS). Many popular lightweight building blocks, especially the depthwise convolution, do very little arithmetic per byte they move. The chip spends its time waiting on memory, so cutting FLOPs often barely cuts latency.
The fix is a block called partial convolution. Instead of filtering every channel of a feature map, it runs an ordinary convolution on only a quarter of the channels and leaves the other three quarters untouched. A cheap 1x1 convolution afterwards mixes information across all channels. Think of it as sending only a few scouts to look around while everyone else waits, then holding a meeting where everyone shares notes. The idea relies on different channels carrying a lot of the same information.
Stacking these blocks gives FasterNet, a family of plain convolutional networks. In the authors' measurements, FasterNet runs faster than mobile networks, vision transformers and MLP models of similar accuracy on a GPU, a desktop CPU and an ARM chip. The smallest variant beats MobileViT-XXS in both speed and accuracy, and the largest matches Swin-B's accuracy with higher GPU throughput. The lesson for engineers: measure achieved speed on the target device, not just operation counts.
TL;DR
Latency = FLOPs / FLOPS eq. 1, and depthwise/group convolutions get low FLOPS because they are memory-bound §3.1, tab. 1. PConv applies a regular k\times k conv to the first (or last) c_p = c/4 channels and copies the rest through, giving 1/16 the FLOPs and about 1/4 the memory access of a full conv §3.2, eq. 4, eq. 5. A FasterNet block is PConv → 1×1 conv (expand ×2) → BN → activation → 1×1 conv, with a residual shortcut and no norm/activation elsewhere in the block §3.4, tab. 8. Six variants (T0, T1, T2, S, M, L) span 0.34 to 15.5 GFLOPs and 71.9% to 83.5% ImageNet-1k top-1 tab. 3. Read it if you design or deploy CNN backbones where measured latency, not FLOPs, is the target.
Problem
Fast-network work such as MobileNets, ShuffleNets and GhostNet lowers FLOPs mainly through depthwise (DWConv) or group convolution (GConv), plus extra data manipulation (concatenation, shuffling, pooling) §1. Mobile ViTs combine DWConv with modified attention and costly normalization and activation layers §1. These reductions often do not turn into lower latency because the achieved FLOPS drops. For example, CycleMLP-B1 has half the FLOPs of ResNet50 yet runs slower on CPU, 116.1 ms vs 73.0 ms §1, tab. 3. On an Intel CPU, many such networks reach lower FLOPS than ResNet50 §1, fig. 2.
The authors trace the low FLOPS to frequent memory access §1, §3.1. DWConv has only h \times w \times k^2 \times c FLOPs, but to recover accuracy networks widen it to c' > c channels (×6 in MobileNetV2 inverted residuals), which raises memory access above that of a regular conv §3.1, eq. 2, eq. 3.
Method
Notation. Input and output \mathbf{I}, \mathbf{O} \in \mathbb{R}^{c \times h \times w}, kernel size k, partial channels c_p, partial ratio r = c_p / c §3.1, §3.2. FLOPs here means the number of multiply-adds §1, footnote.
Why DWConv is slow §3.1. Memory access for a widened DWConv and for a regular Conv:
h \times w \times 2c' + k^2 \times c' \approx h \times w \times 2c' eq. 2
h \times w \times 2c + k^2 \times c^2 \approx h \times w \times 2c eq. 3
The h \times w \times 2c' term is input/output I/O, which the authors consider already minimal and hard to reduce §3.1.
Partial convolution (PConv) §3.2, fig. 1. Feature maps are highly redundant across channels (visualized for an intermediate ResNet50 layer) §3.2, fig. 3. PConv applies a regular Conv to a contiguous block of c_p channels, the first or the last ones, chosen for contiguous memory access. The remaining c - c_p channels are kept unchanged, not dropped, because the following pointwise conv needs them §3.2. Input and output channel counts are equal §3.2.
\text{FLOPs}_{\text{PConv}} = h \times w \times k^2 \times c_p^2 eq. 4
\text{MemAccess}_{\text{PConv}} = h \times w \times 2c_p + k^2 \times c_p^2 \approx h \times w \times 2c_p eq. 5
With r = 1/4 that is 1/16 of a regular Conv's FLOPs and 1/4 of its memory access §3.2.
PConv + PWConv ≈ T-shaped Conv §3.3, fig. 5. A PConv followed by a 1×1 pointwise conv (PWConv) has an effective receptive field shaped like a "T": a full k\times k window on c_p channels plus the centre position on all channels. To justify the extra weight on the centre, the authors compute the per-position Frobenius norm of each 3\times3 filter \mathbf{F} \in \mathbb{R}^{k^2 \times c}, \|\mathbf{F}_i\| = \sqrt{\sum_{j=1}^{c} |f_{ij}|^2}, take the argmax position as "salient", and histogram it over a pre-trained ResNet18. The centre (position 5) is most often salient in all four stages §3.3, fig. 6. Implementing the T-shape as PConv + PWConv is cheaper than a direct T-shaped conv:
\text{FLOPs}_{\text{T-shaped}} = h \times w \times \left(k^2 \times c_p \times c + c \times (c - c_p)\right) eq. 6
\text{FLOPs}_{\text{PConv+PWConv}} = h \times w \times \left(k^2 \times c_p^2 + c^2\right) eq. 7
Eq. 6 exceeds eq. 7 when (k^2 - 1)c > k^2 c_p, e.g. c_p = c/4, k = 3 §3.3.
FasterNet architecture §3.4, fig. 4, tab. 8.
Algorithm: FasterNet forward (classification) [§3.4, fig. 4, tab. 8]
Input: image x (3 × h × w); variant gives width c, depths (b1..b4), activation Acti
1. Embedding: Conv 4×4, stride 4, c output channels; BN -> c × h/4 × w/4
2. Stage 1: b1 FasterNet blocks at width c
3. Merging: Conv 2×2, stride 2, 2c output channels; BN -> 2c × h/8 × w/8
4. Stage 2: b2 blocks at width 2c
5. Merging: Conv 2×2, stride 2, 4c; BN -> 4c × h/16 × w/16
6. Stage 3: b3 blocks at width 4c
7. Merging: Conv 2×2, stride 2, 8c; BN -> 8c × h/32 × w/32
8. Stage 4: b4 blocks at width 8c
9. Classifier: global average pool -> Conv 1×1 to 1280 -> Acti -> FC to 1000
Output: logits
FasterNet block (width d) [§3.4, tab. 8]
y = PConv 3×3, stride 1, r = 1/4 on x # no norm / activation
y = Conv 1×1, d -> 2d
y = BN(y); y = Acti(y) # the block's only norm + activation
y = Conv 1×1, 2d -> d
return x + y # shortcut reuses the inputDesign choices §3.4:
- More blocks go into stages 3 and 4, because blocks there use less memory access and reach higher FLOPS §3.4, tab. 1.
- Norm and activation appear only after the middle PWConv. The stated reasons are feature diversity and lower latency §3.4. The appendix adds that removing activations between PConv and PWConv keeps the pair closer to a regular Conv app. E.
- BatchNorm is used instead of LayerNorm, GroupNorm or InstanceNorm because BN can be folded into the adjacent conv at inference §3.4. All benchmarks fold BN where applicable §4.
- Activation: GELU for T0/T1, ReLU for T2/S/M/L, chosen empirically §3.4, §4.5, tab. 8.
- Downstream detection drops the classifier app. D.
Variant configurations tab. 8 (FLOPs at 224×224):
| Variant | Embed channels c | Blocks b_1,b_2,b_3,b_4 | Acti | FLOPs (G) | Params (M) |
|---|---|---|---|---|---|
| T0 | 40 | 1, 2, 8, 2 | GELU | 0.34 | 3.9 |
| T1 | 64 | 1, 2, 8, 2 | GELU | 0.85 | 7.6 |
| T2 | 96 | 1, 2, 8, 2 | ReLU | 1.90 | 15.0 |
| S | 128 | 1, 2, 13, 2 | ReLU | 4.55 | 31.1 |
| M | 144 | 3, 4, 18, 3 | ReLU | 8.72 | 53.5 |
| L | 192 | 3, 4, 18, 3 | ReLU | 15.49 | 93.4 |
PConv approximation experiment §4.2. Four datasets are built by running ImageNet-1k val images through a pre-trained ResNet50 and recording the feature maps before and after the first 3×3 conv of each stage. Each is split 70/10/20 into train/val/test. A PConv + PWConv network is trained with MSE loss to map input to output, and DWConv + PWConv and GConv + PWConv are trained the same way for comparison §4.2. Optimizer and epochs for this experiment: not stated.
Hyperparameters
ImageNet-1k training §4.3, tab. 6:
| Name | T0 | T1 | T2 | S | M | L | Where |
|---|---|---|---|---|---|---|---|
| train resolution | 192 for epochs 1–280, 224 for 281–300 | §4.3 tab. 6 | |||||
| test resolution / crop ratio | 224 / 0.9 (center crop) | §4.3 tab. 6 | |||||
| epochs | 300 | tab. 6 | |||||
| "# of forward pass" | 188k | tab. 6 | |||||
| batch size | 4096 | 4096 | 4096 | 4096 | 2048 | 2048 | tab. 6 |
| optimizer | AdamW, momentum 0.9/0.999 | tab. 6 | |||||
| peak LR | 0.004 | 0.004 | 0.004 | 0.004 | 0.002 | 0.002 | tab. 6; rule 0.001 \cdot \text{batch}/1024 §4.3 |
| LR schedule | cosine, 20 epochs linear warmup | §4.3 tab. 6 | |||||
| weight decay | 0.005 | 0.01 | 0.02 | 0.03 | 0.05 | 0.05 | tab. 6 |
| label smoothing | 0.1 | tab. 6 | |||||
| dropout | none | tab. 6 | |||||
| stochastic depth | none | 0.02 | 0.05 | 0.1 | 0.2 | 0.3 | tab. 6 |
| repeated aug | none | tab. 6 | |||||
| gradient clipping | none | none | none | none | 1 | 0.01 | tab. 6 |
| horizontal flip, random resized crop | yes | tab. 6 | |||||
| RandAugment | none | 3/0.5 | 5/0.5 | 7/0.5 | 7/0.5 | 7/0.5 | tab. 6; meaning of the two numbers not stated |
| AutoAugment, random erasing, color jitter, PCA lighting | none | tab. 6 | |||||
| Mixup alpha | 0.05 | 0.1 | 0.1 | 0.3 | 0.5 | 0.7 | tab. 6 |
| CutMix alpha | 1.0 | tab. 6 | |||||
| SWA, EMA, layer scale | none | tab. 6 | |||||
| loss | cross-entropy (no BCE) | tab. 6 | |||||
| mixed precision | yes | tab. 6 | |||||
| knowledge distillation, NAS | not used | §4.3 | |||||
| partial ratio r | 1/4 | §4.5 tab. 8 | |||||
| MLP expansion (middle PWConv) | 2× | tab. 8 | |||||
| head width | 1280 | tab. 8 | |||||
| weight initialization | not stated |
COCO detection / instance segmentation with Mask R-CNN §4.4, app. B, tab. 7. Settings follow PoolFormer without further tuning §4.4.
| Name | S | M | L | Where |
|---|---|---|---|---|
| resolution (train and test) | shorter side 800, longer ≤ 1333 | tab. 7 | ||
| batch size | 16 (2 per GPU) | tab. 7 | ||
| optimizer | AdamW | tab. 7 | ||
| schedule | 1× (12 epochs) | tab. 7 | ||
| weight decay | 0.0001 | tab. 7 | ||
| warmup | linear, 500 iterations | tab. 7 | ||
| LR decay | step at epochs 8 and 11, factor 0.1 | tab. 7 | ||
| LR | 0.0002 | 0.0001 | 0.0001 | tab. 7 |
| stochastic depth | 0.15 | 0.2 | 0.3 | tab. 7 |
| init | backbone from ImageNet-1k weights; add-on layers Xavier | app. B |
Benchmark protocol §4: GPU = RTX 2080Ti; CPU = Intel i9-9900X, single thread; ARM = Cortex-A72, single thread. Latency uses batch size 1 and throughput batch size 32. BN is folded at inference. Software stack (framework, runtime, precision): not stated.
Results
All numbers are author-reported.
Operator FLOPS §4.1, tab. 1. 10 stacked layers of each operator; FLOPs are the total for the 10 layers. Only the averages over the four feature-map sizes are shown here.
| Operator | FLOPs (M) ×10 layers | GPU FLOPS (G/s) | CPU FLOPS (G/s) | ARM FLOPS (G/s) |
|---|---|---|---|---|
| Conv 3×3 | 2601 | 10151 | 71.89 | 3.95 |
| GConv 3×3 (16 groups) | 162 | 1833 | 25.93 | 1.92 |
| DWConv 3×3 | 27.09 → 3.38 | 313 | 6.42 | 0.12 |
| PConv 3×3 (r=1/4) | 162 | 3274 | 39.91 | 2.73 |
Full per-size table tab. 1 (GPU throughput fps / CPU latency ms / ARM latency ms):
| Operator | 96×56×56 | 192×28×28 | 384×14×14 | 768×7×7 |
|---|---|---|---|---|
| Conv 3×3 | 3010 / 35.67 / 779.57 | 4893 / 28.41 / 619.64 | 4558 / 31.85 / 595.09 | 3159 / 62.71 / 662.17 |
| GConv 3×3 (16 g) | 2888 / 21.90 / 166.30 | 10811 / 7.58 / 96.22 | 15534 / 4.40 / 63.57 | 16000 / 4.28 / 65.20 |
| DWConv 3×3 | 11940 / 3.59 / 108.70 | 23358 / 1.97 / 82.01 | 46377 / 1.06 / 94.89 | 88889 / 0.68 / 150.89 |
| PConv 3×3 | 9215 / 5.46 / 85.30 | 14360 / 3.09 / 66.46 | 24408 / 3.58 / 49.98 | 32866 / 5.02 / 48.30 |
PConv reaches 10.5×, 6.2× and 22.8× the FLOPS of DWConv on GPU, CPU and ARM §4.1.
Approximating a regular 3×3 conv (test MSE on ResNet50 feature maps) §4.2, tab. 2:
| Stage | DWConv+PWConv | GConv+PWConv (16 groups) | PConv+PWConv (r=1/4) |
|---|---|---|---|
| 1 | 0.0089 | 0.0065 | 0.0069 |
| 2 | 0.0158 | 0.0137 | 0.0136 |
| 3 | 0.0214 | 0.0202 | 0.0172 |
| 4 | 0.0130 | 0.0128 | 0.0115 |
| Average | 0.0148 | 0.0133 | 0.0123 |
ImageNet-1k §4.3, tab. 3. 224×224 except MobileViT and EdgeNeXt at 256×256; OOM = out of memory.
| Network | Params (M) | FLOPs (G) | GPU throughput (fps) ↑ | CPU latency (ms) ↓ | ARM latency (ms) ↓ | Top-1 (%) |
|---|---|---|---|---|---|---|
| ShuffleNetV2 ×1.5 | 3.5 | 0.30 | 4878 | 12.1 | 266 | 72.6 |
| MobileNetV2 | 3.5 | 0.31 | 4198 | 12.2 | 442 | 72.0 |
| MobileViT-XXS | 1.3 | 0.42 | 2393 | 30.8 | 348 | 69.0 |
| EdgeNeXt-XXS | 1.3 | 0.26 | 2765 | 15.7 | 239 | 71.2 |
| FasterNet-T0 | 3.9 | 0.34 | 6807 | 9.2 | 143 | 71.9 |
| GhostNet ×1.3 | 7.4 | 0.24 | 2988 | 17.9 | 481 | 75.7 |
| ShuffleNetV2 ×2 | 7.4 | 0.59 | 3339 | 17.8 | 403 | 74.9 |
| MobileNetV2 ×1.4 | 6.1 | 0.60 | 2711 | 22.6 | 650 | 74.7 |
| MobileViT-XS | 2.3 | 1.05 | 1392 | 40.8 | 648 | 74.8 |
| EdgeNeXt-XS | 2.3 | 0.54 | 1738 | 24.4 | 434 | 75.0 |
| PVT-Tiny | 13.2 | 1.94 | 1266 | 55.6 | 708 | 75.1 |
| FasterNet-T1 | 7.6 | 0.85 | 3782 | 17.7 | 285 | 76.2 |
| CycleMLP-B1 | 15.2 | 2.10 | 865 | 116.1 | 892 | 79.1 |
| PoolFormer-S12 | 11.9 | 1.82 | 1439 | 49.0 | 665 | 77.2 |
| MobileViT-S | 5.6 | 2.03 | 1039 | 56.7 | 941 | 78.4 |
| EdgeNeXt-S | 5.6 | 1.26 | 1128 | 39.2 | 743 | 79.4 |
| ResNet50 | 25.6 | 4.11 | 959 | 73.0 | 1131 | 78.8 |
| FasterNet-T2 | 15.0 | 1.91 | 1991 | 33.5 | 497 | 78.9 |
| CycleMLP-B2 | 26.8 | 3.90 | 528 | 186.3 | 1502 | 81.6 |
| PoolFormer-S24 | 21.4 | 3.41 | 748 | 92.8 | 1261 | 80.3 |
| PoolFormer-S36 | 30.9 | 5.00 | 507 | 138.0 | 1860 | 81.4 |
| ConvNeXt-T | 28.6 | 4.47 | 657 | 86.3 | 1889 | 82.1 |
| Swin-T | 28.3 | 4.51 | 609 | 122.2 | 1424 | 81.3 |
| PVT-Small | 24.5 | 3.83 | 689 | 89.6 | 1345 | 79.8 |
| PVT-Medium | 44.2 | 6.69 | 438 | 143.6 | 2142 | 81.2 |
| FasterNet-S | 31.1 | 4.56 | 1029 | 71.2 | 1103 | 81.3 |
| PoolFormer-M36 | 56.2 | 8.80 | 320 | 215.0 | 2979 | 82.1 |
| ConvNeXt-S | 50.2 | 8.71 | 377 | 153.2 | 3484 | 83.1 |
| Swin-S | 49.6 | 8.77 | 348 | 224.2 | 2613 | 83.0 |
| PVT-Large | 61.4 | 9.85 | 306 | 203.4 | 3101 | 81.7 |
| FasterNet-M | 53.5 | 8.74 | 500 | 129.5 | 2092 | 83.0 |
| PoolFormer-M48 | 73.5 | 11.59 | 242 | 281.8 | OOM | 82.5 |
| ConvNeXt-B | 88.6 | 15.38 | 253 | 257.1 | OOM | 83.8 |
| Swin-B | 87.8 | 15.47 | 237 | 349.2 | OOM | 83.5 |
| FasterNet-L | 93.5 | 15.52 | 323 | 219.5 | OOM | 83.5 |
Headline claims §4.3: against MobileViT-XXS, FasterNet-T0 gains 2.9 points of accuracy and a speedup of 2.8× (GPU), 3.3× (CPU) and 2.4× (ARM). FasterNet-L matches Swin-B at 83.5%, with 36% higher GPU throughput and 37% less CPU time than Swin-B. Against ConvNeXt-B (83.8%) the margins are 28% and 15%. Full accuracy–throughput/latency curves are in fig. 7 and fig. 8.
Baseline caveat app. A: ShuffleNetV2, MobileNetV2 and GhostNet were trained without the advanced training techniques FasterNet uses, so the authors call the comparison against them "not totally fair".
COCO, Mask R-CNN 1× §4.4, tab. 4. FLOPs at 1280×800.
| Backbone | Params (M) | FLOPs (G) | GPU latency (ms) | AP^b | AP^b_50 | AP^b_75 | AP^m | AP^m_50 | AP^m_75 |
|---|---|---|---|---|---|---|---|---|---|
| ResNet50 | 44.2 | 253 | 54.9 | 38.0 | 58.6 | 41.4 | 34.4 | 55.1 | 36.7 |
| PoolFormer-S24 | 41.0 | 233 | 111.0 | 40.1 | 62.2 | 43.4 | 37.0 | 59.1 | 39.6 |
| PVT-Small | 44.1 | 238 | 89.5 | 40.4 | 62.9 | 43.8 | 37.8 | 60.1 | 40.3 |
| FasterNet-S | 49.0 | 258 | 54.3 | 39.9 | 61.2 | 43.6 | 36.9 | 58.1 | 39.7 |
| ResNet101 | 63.2 | 329 | 68.9 | 40.4 | 61.1 | 44.2 | 36.4 | 57.7 | 38.8 |
| ResNeXt101-32×4d | 62.8 | 333 | 80.5 | 41.9 | 62.5 | 45.9 | 37.5 | 59.4 | 40.2 |
| PoolFormer-S36 | 50.5 | 266 | 146.9 | 41.0 | 63.1 | 44.8 | 37.7 | 60.1 | 40.0 |
| PVT-Medium | 63.9 | 295 | 117.3 | 42.0 | 64.4 | 45.6 | 39.0 | 61.6 | 42.1 |
| FasterNet-M | 71.2 | 344 | 71.4 | 43.0 | 64.4 | 47.4 | 39.1 | 61.5 | 42.3 |
| ResNeXt101-64×4d | 101.9 | 487 | 112.9 | 42.8 | 63.8 | 47.3 | 38.4 | 60.6 | 41.3 |
| PVT-Large | 81.0 | 358 | 152.2 | 42.9 | 65.0 | 46.6 | 39.5 | 61.9 | 42.5 |
| FasterNet-L | 110.9 | 484 | 93.8 | 44.0 | 65.6 | 48.2 | 39.9 | 62.3 | 43.0 |
FasterNet-L cuts PVT-Large's GPU latency by 38% (152.2 → 93.8 ms) with +1.1 box AP and +0.4 mask AP §4.4. Note that FasterNet-S trails PVT-Small and PoolFormer-S24 in AP, and wins only on latency tab. 4.
Ablation (T0 base; T0* = T0 with modified width and depth, not specified) §4.5, tab. 5:
| Ablation | Variant | GPU fps | CPU ms | ARM ms | Top-1 (%) |
|---|---|---|---|---|---|
| Partial ratio | T0* r=1/2 | 6626 | 9.6 | 145 | 71.7 |
| T0 r=1/4 (default) | 6807 | 9.2 | 143 | 71.9 | |
| T0* r=1/8 | 6204 | 8.9 | 140 | 71.3 | |
| Normalization | T0 BN (default) | 6807 | 9.2 | 143 | 71.9 |
| T0 LN | 5515 | 10.7 | 159 | 71.9 | |
| Activation | T0 ReLU | 6929 | 8.2 | 114 | 71.3 |
| T0* ReLU | 5866 | 9.3 | 143 | 71.7 | |
| T0 GELU (default) | 6807 | 9.2 | 143 | 71.9 | |
| T2 ReLU (default) | 1991 | 33.5 | 497 | 78.9 | |
| T2 GELU | 1985 | 35.4 | 557 | 78.7 |
Paper vs code
Not checked yet. The abstract links the official repository p. 1, and its owner matches the first author. It was not cloned when this card was compiled, so code_commit and code_license are not recorded and nothing on this card has been verified against the code.
Pitfalls
- FLOPs = multiply-adds §1, footnote. FLOPS in tab. 1 appears to be FLOPs × throughput, so it is also in multiply-adds per second and not directly comparable with vendor peak FLOP/s figures that count a multiply-add as 2 ops.
- The "1/4 memory access" claim assumes an in-place write. Eq. 5 counts only the c_p channels. An implementation that splits the tensor and concatenates it back (needed for autograd if you overwrite in place) also copies the c - c_p untouched channels, so the measured saving depends on the implementation. The paper does not say which form produced its numbers.
- Stride must be 1. The untouched channels keep their resolution, so PConv cannot downsample. Downsampling comes from the separate 2×2 stride-2 merging convs app. F.
- Channel choice matters for memory layout. Use a contiguous block, the first or last c_p channels, not a scattered subset §3.2. In NCHW that is a contiguous slice. In channels-last layouts it is not, and the paper does not discuss this.
- No norm or activation after PConv or after the last PWConv. Adding BN/activation after every conv, as in ResNet or MobileNet habits, contradicts the design §3.4, app. E.
- Activation depends on variant: GELU for T0/T1, ReLU for T2 and up tab. 8. The classifier's activation after the 1280-d 1×1 conv uses the same function tab. 8. Whether that head conv has BN: tab. 8 lists none.
- Speed numbers need BN folded into the adjacent convs §4. Unfolded BN, or LayerNorm, is slower: on T0, LN costs 19% GPU throughput at the same accuracy tab. 5.
- Where stochastic depth is applied (per-block residual branch, linear vs uniform rate across depth) is not stated tab. 6.
- "# of forward pass 188k" is listed for every variant tab. 6. With about 1.3M training images §4.3 and 300 epochs, that matches batch 2048 (M/L). At batch 4096 (T0–S) the same epochs give roughly half as many steps, so the entry may be wrong for those variants. Trust epochs and batch size.
- Progressive resolution: train at 192 for 280 epochs, then 224 for the last 20, and test at 224 with crop ratio 0.9 §4.3, tab. 6. Training only at 224 will not reproduce the stated cost and may change accuracy.
- Small numeric inconsistencies: FLOPs and params differ slightly between tab. 3 and tab. 8 (T2 1.91 vs 1.90 G; S 4.56 vs 4.55; M 8.74 vs 8.72; L 15.52 vs 15.49 G and 93.5 vs 93.4 M params). The text says FasterNet-S gains +2.4 mask AP over ResNet50 §4.4, but tab. 4 gives 36.9 − 34.4 = 2.5.
- Benchmarks are single-threaded on CPU and ARM §4, and FasterNet-L and other large models run out of memory on the ARM board tab. 3. Multi-threaded or accelerator (NPU, TensorRT int8) speedups are not measured.
- Unspecified ablation models: T0* variants change width and depth in unstated ways tab. 5, so the r ablation is not a clean single-variable comparison.
- Limited receptive field: the authors list the purely convolutional, local receptive field as a limitation app. F.
Lineage
- Builds on: depthwise separable and group convolutions (MobileNets, ShuffleNets, GhostNet), which PConv aims to replace §1. The macro design resembles ConvNeXt with DWConv swapped for PConv, but the activations between PConv and PWConv are removed on purpose app. E. PConv equals a group conv that processes one group and leaves the others untouched app. E.
- Compared against: ShuffleNetV2, MobileNetV2, GhostNet, MobileViT, EdgeNeXt, PVT, CycleMLP, PoolFormer, ResNet50, ConvNeXt, Swin on ImageNet tab. 3; ResNet, ResNeXt, PoolFormer, PVT on COCO tab. 4.
- Not to be confused with the "partial convolution" used for image inpainting (masked pixels), which applies filters to partial pixels, not partial channels app. E.
Source and license
Adapted from “Run, Don't Walk: Chasing Higher FLOPS for Faster Neural Networks” by Jierun Chen, Shiu-hong Kao, Hao He, Weipeng Zhuo, Song Wen, Chul-Ho Lee, S. -H. Gary Chan (arXiv:2303.03667), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors. Code citations refer to https://github.com/JierunChen/FasterNet (license not recorded). Any quoted code is shown under that license.