PaddlePaddle/PaddleOCR · error · ValueError
DilatedReparamBlock requires kernel_size in [5,7,9,11,13], b
Error message
DilatedReparamBlock requires kernel_size in [5,7,9,11,13], but got {} What it means
DilatedReparamBlock (reparameterized large-kernel block in RSEFPN) only has decomposed branch definitions for kernel sizes 5, 7, 9, 11, and 13. Any other kernel_size hits the else branch and raises ValueError, because no (kernel_sizes, dilates) split is defined to reparameterize it.
Source
Thrown at ppocr/modeling/necks/db_fpn.py:592
self.is_repped = deploy
if kernel_size == 9:
self.kernel_sizes = [5, 5, 3, 3]
self.dilates = [1, 2, 3, 4]
elif kernel_size == 7:
self.kernel_sizes = [5, 3, 3]
self.dilates = [1, 2, 3]
elif kernel_size == 5:
self.kernel_sizes = [3, 3]
self.dilates = [1, 2]
elif kernel_size == 11:
self.kernel_sizes = [5, 5, 3, 3, 3]
self.dilates = [1, 2, 3, 4, 5]
elif kernel_size == 13:
self.kernel_sizes = [5, 7, 3, 3, 3]
self.dilates = [1, 2, 3, 4, 5]
else:
raise ValueError(
"DilatedReparamBlock requires kernel_size in [5,7,9,11,13], "
"but got {}".format(kernel_size)
)
if not self.is_repped:
self.lk_origin = nn.Conv2D(
in_channels=channels,
out_channels=channels,
kernel_size=kernel_size,
stride=1,
padding=kernel_size // 2,
groups=channels,
bias_attr=False,
)
self.origin_bn = nn.BatchNorm2D(channels)
for k, r in zip(self.kernel_sizes, self.dilates):
equiv_ks = r * (k - 1) + 1View on GitHub (pinned to 2661c7c0ef)
Solutions
- Set the block's kernel_size to one of 5, 7, 9, 11, or 13 (7 is a common default for lite models)
- If you truly need another size, add an explicit branch mapping (kernel_sizes, dilates) in DilatedReparamBlock
Example fix
# before Neck: name: RSEFPN kernel_size: 3 # after Neck: name: RSEFPN kernel_size: 7
Defensive patterns
Strategy: validation
Validate before calling
ks = neck_cfg.get('kernel_size', 7)
assert ks in (5, 7, 9, 11, 13), f'kernel_size must be in 5/7/9/11/13, got {ks}' Type guard
def valid_reparam_kernel(k) -> bool:
return k in (5, 7, 9, 11, 13) Prevention
- Treat the kernel set as a closed enum when editing detection configs
- Document allowed kernel sizes next to RSEFPN config templates
When it happens
Trigger: Configuring RSEFPN with a kernel_size outside {5,7,9,11,13}, e.g. 3 or 15, in the Neck section of a DB detection config.
Common situations: Tuning large-kernel settings by editing config yamls; switching from DilationFPN-style blocks (which allow 3) to the reparam block without updating the kernel size.
Related errors
- mode can only be one of ['lite', 'large'], but received {}
- Please set inference model dir in Global.inference_model or
- Sliding window is currently only implemented for causal mask
- embed_dim must be divisible by num_heads (got `embed_dim`: {
- `decoder_start_token_id` or `bos_token_id` has to be defined
AI-assisted analysis of PaddlePaddle/PaddleOCR@2661c7c0ef (2026-08-14).
Data as JSON: /api/errors/cbc353188735b2a0.
Report an issue: GitHub.