{"record":{"id":"b288cf25c541649c","repo":"huggingface/pytorch-image-models","slug":"features-only-not-implemented-for-vision-transform","errorCode":null,"errorMessage":"features_only not implemented for Vision Transformer models.","messagePattern":"features_only not implemented for Vision Transformer models\\.","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"timm/models/coat.py","lineNumber":746,"sourceCode":"def checkpoint_filter_fn(state_dict, model):\n    out_dict = {}\n    state_dict = state_dict.get('model', state_dict)\n    for k, v in state_dict.items():\n        # original model had unused norm layers, removing them requires filtering pretrained checkpoints\n        if k.startswith('norm1') or \\\n                (k.startswith('norm2') and getattr(model, 'norm2', None) is None) or \\\n                (k.startswith('norm3') and getattr(model, 'norm3', None) is None) or \\\n                (k.startswith('norm4') and getattr(model, 'norm4', None) is None) or \\\n                (k.startswith('aggregate') and getattr(model, 'aggregate', None) is None) or \\\n                (k.startswith('head') and getattr(model, 'head', None) is None):\n            continue\n        out_dict[k] = v\n    return out_dict\n\n\ndef _create_coat(variant, pretrained=False, default_cfg=None, **kwargs):\n    if kwargs.get('features_only', None):\n        raise RuntimeError('features_only not implemented for Vision Transformer models.')\n\n    model = build_model_with_cfg(\n        CoaT,\n        variant,\n        pretrained,\n        pretrained_filter_fn=checkpoint_filter_fn,\n        **kwargs,\n    )\n    return model\n\n\ndef _cfg_coat(url='', **kwargs):\n    return {\n        'url': url,\n        'num_classes': 1000, 'input_size': (3, 224, 224), 'pool_size': None,\n        'crop_pct': .9, 'interpolation': 'bicubic', 'fixed_input_size': True,\n        'mean': IMAGENET_DEFAULT_MEAN, 'std': IMAGENET_DEFAULT_STD,\n        'first_conv': 'patch_embed1.proj', 'classifier': 'head',","sourceCodeStart":728,"sourceCodeEnd":764,"githubUrl":"https://github.com/huggingface/pytorch-image-models/blob/9a5261e31b3b5128526eb2658333b4c0a54464ae/timm/models/coat.py#L728-L764","documentation":"CoaT factory functions explicitly reject features_only=True because CoaT's hierarchical attention design does not expose standard feature maps through timm's feature extraction wrapper. The check happens in _create_coat before build_model_with_cfg is invoked.","triggerScenarios":"Calling timm.create_model('coat_tiny', features_only=True) or any coat_/coat_lite_ variant with features_only=True.","commonSituations":"Swapping a CNN backbone out of a feature-pyramid (FPN/Detectron/U-Net) pipeline and passing the same features_only=True flag used for ResNet/EfficientNet; writing generic backbone code that assumes all timm models support feature extraction.","solutions":["Use features_only=False and take the hierarchical feature maps directly from CoaT.forward_features stages if you need multi-scale features","Switch to a backbone that supports features_only (check timm.list_features() or the model's feature_cfgs)","Write a small wrapper that hooks CoaT's stage outputs via forward_intermediates or module hooks"],"exampleFix":"# before\nmodel = timm.create_model('coat_lite_mini', pretrained=True, features_only=True)\n# after\nmodel = timm.create_model('coat_lite_mini', pretrained=True)\nfeats = model.forward_features(x)  # use stage tokens directly","handlingStrategy":"validation","validationCode":"import timm\nname = 'coat_lite_mini'\nprobe = timm.create_model(name)\nsupports_fo = hasattr(probe, 'feature_info')\ndel probe\nif supports_fo:\n    model = timm.create_model(name, features_only=True)\nelse:\n    model = timm.create_model(name)","typeGuard":"def supports_features_only(name: str) -> bool:\n    import timm\n    m = timm.create_model(name)\n    ok = hasattr(m, 'feature_info')\n    del m\n    return ok","tryCatchPattern":"try:\n    model = timm.create_model(name, features_only=True)\nexcept RuntimeError:\n    model = timm.create_model(name)  # use forward_intermediates instead","preventionTips":["Maintain a per-backbone capability table (features_only support) in pipeline configs","Default to forward_intermediates for generic feature extraction; it works across model families","Check model.feature_info after construction rather than assuming support"],"tags":["timm","coat","features-only","unsupported-operation"],"backgroundTag":"unsupported-features-only-request","analyzedSha":"9a5261e31b3b5128526eb2658333b4c0a54464ae","analyzedAt":"2026-08-27T02:34:25.417Z","schemaVersion":2},"datasetVersion":"2026-08-27T03:17:27.898Z"}