Concat Tile Feature Pooling
SkillDev toolsPasses N tiles independently through a shared CNN backbone, concatenates their feature maps spatially, then pools for classification — a lightweight multi-instance learning approach.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Concat Tile Feature Pooling skill
What this skill tells your AI
The instructions your AI receives, as published by wenmin-wu/ds-skills in skills/cv/concat-tile-feature-pooling/SKILL.md and read by ahel’s review.
Overview
For WSI classification, processing each tile through a shared CNN backbone produces per-tile feature maps. Rather than averaging tile predictions (losing spatial info) or building a full attention-based MIL model, this approach concatenates all tile feature maps along the spatial dimension, then applies adaptive pooling and a classification head. This preserves inter-tile patterns while remaining end-to-end trainable with standard backbones.
Quick Start
import torch
import torch.nn as nn
class ConcatTileModel(nn.Module):
def __init__(self, backbone, n_classes=6):
super().__init__()
self.enc = nn.Sequential(*list(backbone.children())[:-2])
nc = list(backbone.children())[-1].in_features
self.head = nn.Sequential(
nn.AdaptiveAvgPool2d(1), nn.Flatten(),
nn.Linear(nc, 512), nn.ReLU(),
nn.Dropout(0.5), nn.Linear(512, n_classes))
def forward(self, tiles):
"""tiles: list of N tensors, each (B, 3, H, W)"""
B = tiles[0].shape[0]
N = len(tiles)
x = torch.stack(tiles, dim=1) # (B, N, 3, H, W)
x = x.view(B * N, *tiles[0].shape[1:])
x = self.enc(x) # (B*N, C, h, w)
C, h, w = x.shape[1:]
# Concatenate tile features spatially
x = x.view(B, N, C, h, w).permute(0, 2, 1, 3, 4)
x = x.contiguous().view(B, C, N * h, w)
x = self.head(x)
return x
Workflow
- Extract N tiles per slide (e.g., 12-16 tiles of 128x128)
- Pass all tiles through shared backbone in one batched forward pass
- Reshape and concatenate feature maps along spatial dimension
- Apply adaptive pooling + classification head
- Train end-to-end with standard cross-entropy or ordinal loss
Key Decisions
- N tiles: 12-16 typical; more tiles need more GPU memory
- vs tile averaging: Concat preserves spatial arrangement; averaging loses it
- vs attention MIL: Simpler, faster, but assumes fixed tile count
- Backbone: EfficientNet-B0 or ResNet-34 work well; larger backbones may OOM
References
Signals
- GitHub stars
- 60
- Forks
- 4
- Last commit
- Apr 2026
Advanced
- Catalog kind
- skill
- Gateway key
cv-concat-tile-feature-pooling- Source
- github.com/wenmin-wu/ds-skills