resnet101 此前不在 TorchvisionBackbone 的支持列表里,先补进 _SUPPORTED (out_channels 2048),随后被既有的参数化测试自动覆盖:能前向、声明维度与实际一致。 configs/cluster/film_simclr_resnet101.yaml 仿照 resnet18/50 两份,只改骨架与 batch_size,其余超参一致以便横向对比: - 42.5M 参数(resnet18 11.2M / resnet50 23.5M),layer2+3 仍是 1536 维, 与 resnet50 相同,差别在深度(layer3 有 23 个 block 而非 6 个) - batch_size 取 128:MPS 上 resnet50 在 1024 已 OOM,resnet101 约重 1.8 倍故再降一档; 注释里说明该数字来自 MPS,16 GB 独显上可往上调 - pretrained 首次使用会下载约 171 MB 权重 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
41 lines
1.7 KiB
YAML
41 lines
1.7 KiB
YAML
# 用 resnet101 做域内自监督(SimCLR)再聚类。
|
||
#
|
||
# 与 film_simclr_resnet18/50 的区别只有骨架和 batch_size,其余超参保持一致,
|
||
# 方便横向对比三个骨架。
|
||
#
|
||
# 用法:
|
||
# uv run python scripts/cluster_unlabeled.py --config configs/cluster/film_simclr_resnet101.yaml \
|
||
# --work-dir runs/simclr_r101 --set simclr.epochs=40
|
||
_base_:
|
||
- ./film.yaml
|
||
|
||
method: simclr
|
||
|
||
num_clusters: 5
|
||
|
||
simclr:
|
||
backbone:
|
||
# _replace_ 必须保留:不加的话 base 里 tiny_conv 的 widths/depths/block 会残留,
|
||
# 传给 TorchvisionBackbone 直接报错。见 utils/config.py::deep_merge
|
||
_replace_: true
|
||
name: torchvision
|
||
arch: resnet101
|
||
pretrained: true # 首次使用会下载 ImageNet 权重(约 171 MB);改 false 则随机初始化
|
||
in_channels: 3
|
||
|
||
# torchvision 的 features 是 nn.Sequential,可以取中间层(4~7 = layer1~4)。
|
||
# 沿用 resnet18 上的实测结论:layer2+3 明显优于 layer4,缺陷差异主要在纹理层面。
|
||
# resnet101 的 layer2+3 是 512+1024=1536 维,与 resnet50 相同(都是 Bottleneck 结构),
|
||
# 差别在深度:resnet101 的 layer3 有 23 个 block,resnet50 只有 6 个。
|
||
feature_stages: [5, 6]
|
||
|
||
# 三个骨架的规模对比:resnet18 11.2M / resnet50 23.5M / resnet101 42.5M。
|
||
# batch_size 取 128 是保守值——Apple MPS 上实测 resnet50 在 batch 1024 就 OOM(要 18.7 GiB),
|
||
# resnet101 约重 1.8 倍,故再降一档。
|
||
# 注意上面的数字来自 MPS;在 16 GB 独显(如 RTX 4080 SUPER)上可以往上调,
|
||
# NT-Xent 的负样本越多下界越紧,显存够就尽量开大。
|
||
batch_size: 128
|
||
|
||
epochs: 2500
|
||
optimizer: {name: adamw, lr: 0.0001, weight_decay: 0.00001}
|