wikillm

Paper · 2021-02-20 · cs.CV

Concealed Object Detection

SINet-V2 finds camouflaged objects in two stages, as a predator would: a neighbor connection decoder locates a coarse region, then three group-reversal attention blocks refine it. Also introduces COD10K, 10,000 images with rich annotations. Author-reported: S-measure 0.815 on COD10K test, 0.820 on CAMO, 0.888 on CHAMELEON, beating 12 baselines.

Salient object detectionSegmentation evaluation (scoring foreground, saliency and segmentation masks)Multi-scale feature fusionconcealed-object-detectioncamouflaged-object-detectionreverse-attentionres2netpytorch

arXivPDFCodeMarkdown17 min read

AI-compiled by claude-haiku-5-5 on 2026-10-19, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.

In plain words

Some animals and objects are built to blend into their background, so well that a person needs a few seconds to spot them. Detectors trained on ordinary photos struggle with them, because the usual cues (a clear edge, a colour that stands out) are missing.

The paper borrows an idea from how predators hunt. First the predator searches for a rough area where prey might be. Then it looks closer and works out the exact outline. The network does the same: one part finds a rough blob, and a chain of refinement steps sharpens its outline, each step paying special attention to the parts the previous step had not yet covered.

The authors also release a new dataset of 10,000 images of concealed objects, labelled in more detail than earlier collections, and public code. The method beats twelve earlier networks on the test sets they used.

TL;DR

Fan, Ji, Cheng and Shao define concealed object detection (COD) as predicting a binary pixel mask for objects that blend into their surroundings §2. They build the COD10K dataset §3 and SINet-V2, a search-and-identification network built from a Res2Net-50 encoder, texture-enhanced modules, a neighbor connection decoder and group-reversal attention blocks §4. Results are author-reported and on the authors' own test split. The code is public under Apache-2.0, and the training schedule in code differs from the paper in several small ways (see Paper vs code).

Problem

Concealed objects share texture and colour with the background, so low-level edge cues and saliency cues mislead detectors §1 §2. Earlier COD datasets were small: CHAMELEON has 76 images and CAMO has 2,500 §2. The authors say the lack of a large benchmark has held back the field §1.

Method

Task. Each pixel receives a label, 1 for concealed object and 0 otherwise. COD is class-agnostic §2.

Dataset (COD10K). 10,000 images: 5,066 concealed, 3,000 background images collected as salient images from Flickr to reduce selection bias, and 1,934 non-concealed scenes §3.1. The concealed images fall into 69 sub-classes, with 9 non-concealed sub-classes §3.1. Annotations are hierarchical: category, bounding box, attributes and object or instance masks §3.2. The images carry seven challenge attributes (multiple objects, big object, small object, out-of-view, occlusion, shape complexity, indefinable boundaries) fig. 7. Object-level labels cover 5,069 objects and 5,930 instances §3.2. Each image was labelled to matting level, which the authors say takes about 60 minutes per image §3.2. The split is 6,000 for training and 4,000 for testing §3.3 tab. 1 (but see Pitfalls for a conflicting test count).

Network overview. SINet-V2 has two phases, search and identification, in a coarse-to-fine cascade §4.1 fig. 13.

  1. Feature extraction. Res2Net-50 gives five feature levels, with spatial resolution H/2^k for k = 1 to 5. Only the top three levels (k = 3, 4, 5) are used, because low-level features are expensive and add little §4.2.
  2. Texture enhanced module (TEM). Each level passes through a TEM. It has four residual branches with dilation rates 1, 3, 5 and 7. Each branch first reduces the channels to 32 with a 1×1 convolution, then uses an asymmetric pair of (2i−1)×1 and 1×(2i−1) kernels, and a dilated 3×3 convolution when i > 1. The four branches are concatenated and reduced to C = 32 channels by a 3×3 convolution, and a shortcut is added before a ReLU §4.2 fig. 13.
  3. Neighbor connection decoder (NCD). It fuses the three TEM outputs, each step upsampling the coarser level and multiplying it with the finer one §4.2 eq. 1. The output is a coarse map C6 at stride 8.
  4. Reverse guidance. For each stage k, the coarser prediction is resampled to level k, passed through a sigmoid, then reversed (1 − x). The reversed map marks the regions the coarser stage has not yet explained §4.3 eq. 2.
  5. Group-reversal attention (GRA). Each stage has three GRA blocks. A block splits the feature channels into groups and places the reversed guidance after each group. This is the group guidance operation (GGO) §4.3 eq. 3. A 3×3 convolution with batch normalisation then turns the result into a residual update of the features eq. 4. The guidance receives a single-channel residual update eq. 5. Group sizes are 32, 8 and 1 channels for the three blocks §4.3 §5.3.
  6. Output. Each stage outputs the refined guidance plus the upsampled coarser prediction eq. 6. The network produces four maps, C6, C5, C4 and C3, and supervises all four §4.4.1.

Loss. Each of the four maps (C6, C5, C4, C3) receives a loss against the ground truth. The loss is the sum of a weighted IoU loss and a weighted binary cross entropy. The weights increase on hard pixels, meaning pixels near boundaries §4.4.1. The paper defines the losses by reference to earlier work and gives no constants.

Training. Adam, batch size 36, learning rate 1e-4, divided by 10 every 50 epochs, for 100 epochs. Training takes about 4 hours on one TITAN RTX GPU §4.4.2. Training data is the combined CAMO and COD10K training sets, without extra data §5.1, footnote.

Inference. Each image is resized to 352×352. The network runs once with no post-processing, and the prediction is upsampled to the original size §4.4.2. The authors report about 45 fps on one GPU, excluding I/O §4.4.2.

Pseudocode
# SINet-V2 forward pass  [§4.1] [fig. 13]
# image: (B, 3, 352, 352); returns four logit maps (C6, C5, C4, C3)

def forward(image):
    # Res2Net-50 features at strides 8, 16, 32  [§4.2]
    feat_3, feat_4, feat_5 = res2net_levels(image)
    # 1x1 reduce to C = 32 and four dilated branches  [§4.2]
    tem_3 = texture_enhanced(feat_3)     # (B, 32, 44, 44)
    tem_4 = texture_enhanced(feat_4)     # (B, 32, 22, 22)
    tem_5 = texture_enhanced(feat_5)     # (B, 32, 11, 11)
    # Coarse location map C6 from the neighbor connection decoder  [eq. 1]
    map_6 = neighbor_connection_decoder(tem_5, tem_4, tem_3)
    # Stage 5: resample C6 by x1/4 to level 5  [§4.3] [eq. 2]
    guidance_5 = downsample(map_6, factor=4)
    map_5 = gra_stage(tem_5, guidance_5) + guidance_5
    # Stage 4: resample C5 by x2 to level 4  [§4.3] [eq. 2]
    guidance_4 = upsample(map_5, factor=2)
    map_4 = gra_stage(tem_4, guidance_4) + guidance_4
    # Stage 3: resample C4 by x2 to level 3  [§4.3] [eq. 2]
    guidance_3 = upsample(map_4, factor=2)
    map_3 = gra_stage(tem_3, guidance_3) + guidance_3
    return map_6, map_5, map_4, map_3
Pseudocode
# One GRA stage: reverse once, then three GRA blocks  [§4.3]
# features: (B, C, h, w); guidance: (B, 1, h, w) logits from the stage above

def gra_stage(features, guidance):
    # Reverse guidance r_1 = 1 - sigmoid(guidance)  [§4.3] [eq. 2]
    reverse_1 = 1 - sigmoid(guidance)
    residual = reverse_1
    # Group sizes 32, 8, 1 channels for blocks 1, 2, 3  [§4.3] [§5.3]
    for group_size in [32, 8, 1]:
        # Interleave r_1 after each channel group  [§4.3] [eq. 3]
        mixed = group_guidance(features, reverse_1, group_size)
        # Residual feature update: 3x3 conv + batch norm  [§4.3] [eq. 4]
        features = features + conv3x3_bn(mixed)
        # Residual guidance: r_1 plus a single-channel update  [eq. 5]
        residual = reverse_1 + conv3x3_to_one(features)
    # Refined residual prediction; the caller adds the upsampled coarser map
    # [§4.3] [eq. 6]
    return residual
Pseudocode
# Training schedule  [§4.4.2]
# images are resized to 352 x 352 and augmented  [code: utils/data_val.py#L115]

def train(model, loader):
    # Adam with learning rate 1e-4  [§4.4.2]
    optimizer = adam(model.parameters(), lr=1e-4)
    for epoch in range(1, 101):
        # Divide the learning rate by 10 every 50 epochs  [§4.4.2]
        lr = 1e-4 * 0.1 ** (epoch // 50)
        for images, masks in loader:    # batch size 36  [§4.4.2]
            maps = model(images)
            # Sum of IoU and BCE losses over all four maps  [§4.4.1]
            loss = sum(structure_loss(m, masks) for m in maps)
            optimizer.step()
    return model

Hyperparameters

NameValueWhereNotes
EncoderRes2Net-50, ImageNet-pretrained§4.2 Network_Res2Net_GRA_NCD.pyTop three layers removed §4.2; weights from README README.md
Feature levels usedk = 3, 4, 5 (strides 8, 16, 32)§4.2Level 1 and 2 are not used by the decoder
Channels C32§4.2 MyTrain_Val.py
TEM branch dilations1, 3, 5, 7§4.2Branch i uses a (2i−1)×(2i−1) kernel
TEM first conv1×1 to 32 channels§4.2
TEM output3×3 conv to C, shortcut, ReLU§4.2 Network_Res2Net_GRA_NCD.pyShortcut is 1×1 conv in code
GRA blocks per stage3, group sizes 32 / 8 / 1§4.3 §5.3Code: Network_Res2Net_GRA_NCD.py
GRA residual conv3×3 + batch norm§4.3Code has 3×3 + ReLU, no BN Network_Res2Net_GRA_NCD.py
Reverse guidancesigmoid then 1 − x, applied once per stage§4.3 eq. 2
Up/downsampling factors×4 down (k = 5), ×2 up (k = 3, 4)§4.3 eq. 2
OptimizerAdam§4.4.2 MyTrain_Val.pyWeight decay not stated
Learning rate1e-4§4.4.2 MyTrain_Val.py
LR schedule÷10 every 50 epochs§4.4.2 utils.pyCode uses 1-based epochs
Epochs100§4.4.2Code loop runs 99 epochs MyTrain_Val.py
Batch size36§4.4.2 MyTrain_Val.py
Input size352 × 352 (train and test)§4.4.2 MyTrain_Val.py
Gradient clippingelement-wise ±0.5MyTrain_Val.py utils.pyNot in paper
Augmentationflip, crop, rotation, colour, pepper noisedata_val.pyNot in paper; see Pitfalls
Lossweighted IoU + weighted BCE, deep supervision on 4 maps§4.4.1 MyTrain_Val.pyWeight constants only in code
Loss weight constantskernel 31, factor 5MyTrain_Val.pyNot in paper
Model selectionlowest MAE on validation setMyTrain_Val.pyDefault val set is CAMO test MyTrain_Val.py
Training timeabout 4 hours on TITAN RTX§4.4.2
Inference speedabout 45 fps on one GPU, excluding I/O§4.4.2

Results

Author-reported. Setup: three test sets (CHAMELEON 76 images, CAMO test, COD10K test), 12 baselines trained on the combined CAMO and COD10K training sets, no post-processing for SINet-V2 §5.1 §5.2. Metrics: S-measure (Sα, higher is better), mean E-measure (Eφ, higher), weighted F-measure (Fβʷ, higher) and mean absolute error (M, lower) §5.1.

Headline: SINet-V2 is best on every metric and every test set in tab. 2. On COD10K test it reaches Sα 0.815 against 0.789 for PraNet, the next best baseline in Sα tab. 2. The paper's own conference version (SINet_cvpr) is also listed.

Table 2: main results, tab. 2

ModelCHAM Sα↑Eφ↑Fβʷ↑M↓CAMO Sα↑Eφ↑Fβʷ↑M↓COD10K Sα↑Eφ↑Fβʷ↑M↓
FPN0.7940.7830.5900.0750.6840.6770.4830.1310.6970.6910.4110.075
MaskRCNN0.6430.7780.5180.0990.5740.7150.4300.1510.6130.7480.4020.080
PSPNet0.7730.7580.5550.0850.6630.6590.4550.1390.6780.6800.3770.080
UNet++0.6950.7620.5010.0940.5990.6530.3920.1490.6230.6720.3500.086
PiCANet0.7690.7490.5360.0850.6090.5840.3560.1560.6490.6430.3220.090
MSRCNN0.6370.6860.4430.0910.6170.6690.4540.1330.6410.7060.4190.073
PFANet0.6790.6480.3780.1440.6590.6220.3910.1720.6360.6180.2860.128
CPD0.8530.8660.7060.0520.7260.7290.5500.1150.7470.7700.5080.059
HTC0.5170.4890.2040.1290.4760.4420.1740.1720.5480.5200.2210.088
ANet-SRM----0.6820.6850.4840.126----
EGNet0.8480.8700.7020.0500.7320.7680.5830.1040.7370.7790.5090.056
PraNet0.8600.9070.7630.0440.7690.8240.6630.0940.7890.8610.6290.045
SINet_cvpr (conference)0.8690.8910.7400.0440.7510.7710.6060.1000.7710.8060.5510.051
SINet-V2 (this paper)0.8880.9420.8160.0300.8200.8820.7430.0700.8150.8870.6800.037

ANet-SRM was evaluated on CAMO only tab. 2.

Table 3: COD10K by super-class, tab. 3. Per the table caption, all methods are trained on the same data as the conference version. The image counts are as printed in the table. Each cell is Sα / Eφ / Fβʷ / M.

ModelAmphibian (124)Aquatic (474)Flying (714)Terrestrial (699)
FPN0.745 / 0.776 / 0.497 / 0.0650.684 / 0.732 / 0.432 / 0.1030.726 / 0.766 / 0.440 / 0.0610.601 / 0.656 / 0.353 / 0.109
MaskRCNN0.665 / 0.785 / 0.487 / 0.0810.560 / 0.721 / 0.344 / 0.1230.644 / 0.767 / 0.449 / 0.0630.611 / 0.630 / 0.380 / 0.075
PSPNet0.736 / 0.774 / 0.463 / 0.0720.659 / 0.712 / 0.396 / 0.1110.700 / 0.743 / 0.394 / 0.0670.669 / 0.718 / 0.332 / 0.071
UNet++0.677 / 0.745 / 0.434 / 0.0790.599 / 0.673 / 0.347 / 0.1210.659 / 0.727 / 0.397 / 0.0680.608 / 0.749 / 0.288 / 0.070
PiCANet0.686 / 0.702 / 0.405 / 0.0790.616 / 0.631 / 0.335 / 0.1150.663 / 0.676 / 0.347 / 0.0690.658 / 0.708 / 0.273 / 0.074
MSRCNN0.722 / 0.786 / 0.555 / 0.0550.614 / 0.686 / 0.398 / 0.1070.675 / 0.744 / 0.466 / 0.0580.594 / 0.661 / 0.361 / 0.081
PFANet0.693 / 0.677 / 0.358 / 0.1100.629 / 0.626 / 0.319 / 0.1550.658 / 0.648 / 0.299 / 0.1020.611 / 0.603 / 0.237 / 0.111
CPD0.794 / 0.839 / 0.587 / 0.0510.739 / 0.792 / 0.529 / 0.0820.777 / 0.827 / 0.544 / 0.0460.714 / 0.771 / 0.445 / 0.058
HTC0.606 / 0.598 / 0.331 / 0.0880.507 / 0.495 / 0.183 / 0.1290.582 / 0.559 / 0.274 / 0.0700.530 / 0.485 / 0.170 / 0.078
EGNet0.785 / 0.854 / 0.606 / 0.0470.725 / 0.793 / 0.528 / 0.0800.766 / 0.826 / 0.543 / 0.0440.700 / 0.775 / 0.445 / 0.053
PraNet0.842 / 0.905 / 0.717 / 0.0350.781 / 0.883 / 0.696 / 0.0650.819 / 0.888 / 0.669 / 0.0330.756 / 0.835 / 0.565 / 0.046
SINet_cvpr (conference)0.827 / 0.866 / 0.654 / 0.0420.758 / 0.803 / 0.570 / 0.0730.798 / 0.828 / 0.580 / 0.0400.743 / 0.778 / 0.491 / 0.050
SINet-V2 (this paper)0.858 / 0.916 / 0.756 / 0.0300.811 / 0.883 / 0.696 / 0.0510.839 / 0.908 / 0.713 / 0.0270.787 / 0.866 / 0.623 / 0.039

Per-sub-class results are in tab. 4 (S-measure only). They are not reproduced here. The authors name Grouse as the easiest sub-class and LeafySeaDragon as the hardest §5.2.

Generalisation, tab. 5. Structure-measure after cross-dataset training. The authors train SINet_cvpr, not SINet-V2, on 800 images and test on 200 §5.2. Their scores are not comparable with tab. 2.

Trained onTested on CAMOTested on COD10KDrop
CAMO0.803 (self)0.70212.6%
COD10K0.7420.700 (self)−6.0%

Ablation, tab. 6. Each row retrains with the same hyperparameters §5.3. PD is the partial decoder, NCD the neighbor connection decoder, Sy and Asy symmetric and asymmetric convolution in the TEM, Reverse the reverse pattern per GRA block, Group the group sizes per GRA block. Values are Sα / Eφ / Fβʷ / M.

No.PDNCDTEMReverseGroupCHAMELEONCAMOCOD10K
#1––Asy{1,0,0}{32;8;1}0.884 / 0.940 / 0.811 / 0.0330.812 / 0.869 / 0.730 / 0.0730.812 / 0.884 / 0.679 / 0.039
#2✓–Asy{1,0,0}{32;8;1}0.881 / 0.934 / 0.799 / 0.0340.820 / 0.877 / 0.740 / 0.0710.813 / 0.884 / 0.673 / 0.038
#3–✓none{1,0,0}{32;8;1}0.887 / 0.934 / 0.813 / 0.0330.811 / 0.867 / 0.731 / 0.0740.815 / 0.888 / 0.680 / 0.036
#4–✓Sy{1,0,0}{32;8;1}0.888 / 0.944 / 0.818 / 0.0300.810 / 0.866 / 0.730 / 0.0730.814 / 0.883 / 0.678 / 0.037
#5–✓Asy{0,0,0}{32;8;1}0.886 / 0.942 / 0.814 / 0.0310.814 / 0.873 / 0.739 / 0.0730.814 / 0.887 / 0.682 / 0.037
#6–✓Asy{1,1,0}{32;8;1}0.879 / 0.928 / 0.794 / 0.0350.820 / 0.877 / 0.738 / 0.0710.807 / 0.878 / 0.661 / 0.040
#7–✓Asy{1,1,1}{32;8;1}0.886 / 0.939 / 0.812 / 0.0310.817 / 0.875 / 0.736 / 0.0730.810 / 0.884 / 0.670 / 0.037
#8–✓Asy{1,0,0}{1;1;1}0.888 / 0.940 / 0.812 / 0.0310.819 / 0.877 / 0.741 / 0.0720.814 / 0.887 / 0.681 / 0.037
#9–✓Asy{1,0,0}{8;8;8}0.886 / 0.943 / 0.814 / 0.0320.816 / 0.872 / 0.738 / 0.0740.815 / 0.886 / 0.682 / 0.037
#10–✓Asy{1,0,0}{32;32;32}0.884 / 0.944 / 0.810 / 0.0330.819 / 0.876 / 0.738 / 0.0710.813 / 0.884 / 0.675 / 0.037
#11–✓Asy{1,0,0}{1;8;32}0.883 / 0.940 / 0.812 / 0.0320.811 / 0.869 / 0.734 / 0.0730.815 / 0.887 / 0.679 / 0.036
#OUR–✓Asy{1,0,0}{32;8;1}0.888 / 0.942 / 0.816 / 0.0300.820 / 0.882 / 0.743 / 0.0700.815 / 0.887 / 0.680 / 0.037

What the ablation supports, as the authors state it §5.3: the NCD raises CAMO Eφ from 0.869 to 0.882 tab. 6, #1 and #OUR; the asymmetric TEM raises CAMO Eφ from 0.866 to 0.882 tab. 6, #4 and #OUR; reversing only the first block works best; and the progressive group sizes {32;8;1} generalise better than the uniform alternatives.

Qualitative results are described in words only §5.2 fig. 16. The authors claim better results than the conference version under different lighting, appearance changes and indefinable boundaries fig. 16.

Paper vs code

Code: GewelsJI/SINet-V2 at commit 5b9844c (HEAD when cloned). The repo says it is the PyTorch implementation of the journal version README.md. The GitHub owner is Ge-Peng Ji's account, listed as an author in the README README.md. Licence: Apache-2.0 LICENSE.

  • TEM shortcut. Paper: identity shortcut §4.2. Code: the shortcut is a 1×1 conv-bn projection Network_Res2Net_GRA_NCD.py added before the ReLU Network_Res2Net_GRA_NCD.py.
  • TEM first branch. Paper: four branches, the first with kernel 1 and dilation 1 §4.2. Code: branch 0 is a single 1×1 conv-bn with no 3×3 conv Network_Res2Net_GRA_NCD.py. Branches 1 to 3 match the paper's asymmetric (1,3)/(3,1), (1,5)/(5,1), (1,7)/(7,1) pattern with dilated 3×3 convs Network_Res2Net_GRA_NCD.py.
  • Activations. BasicConv2d defines a ReLU but its forward returns before it is applied Network_Res2Net_GRA_NCD.py. Only the TEM output applies ReLU Network_Res2Net_GRA_NCD.py.
  • GRA normalisation. Paper: 3×3 conv followed by batch norm §4.3. Code: 3×3 conv followed by ReLU, no batch norm Network_Res2Net_GRA_NCD.py.
  • GRA guidance accumulation. Paper: r_{i+1} = r_1 + g[p_{i+1}], and the GGO uses r_1 in every block §4.3 eq. 3 eq. 5. Code: the guidance y is updated in place, y = y + score(x), and the next block uses the updated y Network_Res2Net_GRA_NCD.py Network_Res2Net_GRA_NCD.py. Only the first block's guidance is reversed, as the paper says Network_Res2Net_GRA_NCD.py.
  • NCD beyond Eq. 1. Paper gives Eq. 1 for the fusion step and calls the decoder a modified UNet-like one §4.2 eq. 1. Code adds concatenation and convolution stages after the fusion, then a 3×3 conv and a 1×1 output conv Network_Res2Net_GRA_NCD.py. The NCD upsampling uses align_corners=True Network_Res2Net_GRA_NCD.py, while the rest of the network uses the default Network_Res2Net_GRA_NCD.py.
  • Group sizes. Paper: group sizes 32, 8, 1 with m = C/g groups §4.3 §5.3. Code: GRA(channel, subchannel) uses channel // subchannel chunks, giving 1, 4 and 32 chunks, which matches Network_Res2Net_GRA_NCD.py.
  • Loss. Paper: weighted IoU plus weighted BCE, weights unspecified §4.4.1. Code: weights 1 + 5·|avgpool31(G) − G|, per-image normalised, BCE on logits and IoU on sigmoid outputs MyTrain_Val.py. The four-map sum matches §4.4.1 MyTrain_Val.py.
  • Epochs. Paper: 100 epochs §4.4.2. Code: range(1, 100), so 99 epochs at default settings MyTrain_Val.py.
  • Learning-rate schedule. Paper: divide by 10 every 50 epochs §4.4.2. Code: factor 0.1^(epoch // 50) with epoch counted from 1, so epochs 1 to 49 use 1e-4 and epochs 50 to 99 use 1e-5 utils.py MyTrain_Val.py.
  • Gradient clipping. Not in paper. Code clamps each gradient element to ±0.5 MyTrain_Val.py utils.py.
  • Augmentation. Not in paper. Code applies horizontal flip, random crop, rotation, colour jitter and pepper noise data_val.py.
  • Model selection. Paper: silent. Code: keeps the checkpoint with lowest MAE on --val_root, defaulting to the CAMO test set MyTrain_Val.py MyTrain_Val.py.
  • Test-time map. Paper: "final prediction" without naming the map §4.4.2. Code: uses the finest map C3, applies sigmoid, and min-max rescales each map to [0, 1] before saving MyTesting.py.
  • Ablation variants. Only the full network is in the repo Network_Res2Net_GRA_NCD.py. The variants in tab. 6 cannot be checked against code.
  • Evaluation. Repo ships MATLAB scripts in eval/ main.m. They were not read in detail for this card.

No other discrepancies found after checking the encoder, the TEM branch convolutions, the reverse operation, the NCD equation and the four-map loss.

Pitfalls

  • Conflicting test-set size. Section 3.3 and tab. 1 give 4,000 test images §3.3 tab. 1, but the COD10K test results section says 2,026 test images §5.2. The paper does not explain the gap.
  • Conflicting super-class count. Section 3.1 lists 10 super-classes §3.1. Section 3.2 says five concealed super-classes §3.2, and Section 3.3 says five again §3.3. tab. 3 shows four. Its image counts sum to 2,011, not 2,026 tab. 3.
  • Model selection on a reported test set. The code picks the best epoch by MAE on CAMO test by default, and CAMO test is one of the reported benchmarks MyTrain_Val.py MyTrain_Val.py. Use a separate validation split when reproducing, or report that the selection leaks.
  • Label noise in augmentation. The training transform applies pepper noise to the ground-truth mask: about 0.15% of its pixels, at random positions, are set to 0 or 255 each time the sample is loaded data_val.py data_val.py. The paper does not mention it.
  • Crop and rotation change labels. Random crop, rotation and flip are applied to image and mask together data_val.py, so masks stay aligned. Rotation fills corners with zeros data_val.py.
  • Weight constants are in code only. The IoU and BCE weighting uses a 31-pixel average pool and factor 5 MyTrain_Val.py. The paper gives no constants.
  • Upsampling modes differ. The NCD uses align-corners bilinear and the rest of the network does not Network_Res2Net_GRA_NCD.py Network_Res2Net_GRA_NCD.py. Reproduce both.
  • Resize ignores aspect ratio. Inputs are forced to 352 × 352 with no letterboxing, in training and at test time data_val.py data_val.py. Objects are distorted in non-square images.
  • Generalisation numbers are not SINet-V2. tab. 5 uses the conference model and a small 800/200 split §5.2. Do not compare it with tab. 2.
  • Reverse guidance is implemented as a running sum. Following the code instead of the paper changes the guidance each GRA block sees [see Paper vs code].
  • Speed and cost. The 45 fps figure is on a single GPU and excludes I/O §4.4.2. Training takes about 4 hours on one TITAN RTX GPU §4.4.2. Ablation rows use the same schedule.
  • Results are author-reported with no variance. The tables give one number per cell, with no spread across runs. Small gaps in the ablation, such as #1 vs #OUR on CHAMELEON Eφ (0.940 vs 0.942), are not tested for significance.

Lineage

  • Builds on: the authors' CVPR 2020 SINet, cited as fan2020camouflaged §1. SINet-V2 adds the NCD and GRA blocks and extends the dataset and benchmark §1. No card for the conference version.
  • Compared against: twelve baselines §5.1, including ANet-SRM, whose card is Anabranch Network and whose results here are CAMO-only tab. 2.
  • Superseded by: none recorded in this wiki.

Source and license

Adapted from “Concealed Object Detection” by Deng-Ping Fan, Ge-Peng Ji, Ming-Ming Cheng, Ling Shao (arXiv:2102.10274), 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/GewelsJI/SINet-V2 at commit 5b9844c94d10 (Apache-2.0). Any quoted code is shown under that license.