{"record":{"id":"5705885e98158d55","repo":"huggingface/pytorch-image-models","slug":"features-only-not-implemented-for-vision-transform-570588","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/crossvit.py","lineNumber":494,"sourceCode":"        xs = [norm(xs[i]) for i, norm in enumerate(self.norm)]\n        return xs\n\n    def forward_head(self, xs: List[torch.Tensor], pre_logits: bool = False) -> torch.Tensor:\n        xs = [x[:, 1:].mean(dim=1) for x in xs] if self.global_pool == 'avg' else [x[:, 0] for x in xs]\n        xs = [self.head_drop(x) for x in xs]\n        if pre_logits or isinstance(self.head[0], nn.Identity):\n            return torch.cat([x for x in xs], dim=1)\n        return torch.mean(torch.stack([head(xs[i]) for i, head in enumerate(self.head)], dim=0), dim=0)\n\n    def forward(self, x):\n        xs = self.forward_features(x)\n        x = self.forward_head(xs)\n        return x\n\n\ndef _create_crossvit(variant, pretrained=False, **kwargs):\n    if kwargs.get('features_only', None):\n        raise RuntimeError('features_only not implemented for Vision Transformer models.')\n\n    def pretrained_filter_fn(state_dict):\n        new_state_dict = {}\n        for key in state_dict.keys():\n            if 'pos_embed' in key or 'cls_token' in key:\n                new_key = key.replace(\".\", \"_\")\n            else:\n                new_key = key\n            new_state_dict[new_key] = state_dict[key]\n        return new_state_dict\n\n    return build_model_with_cfg(\n        CrossVit,\n        variant,\n        pretrained,\n        pretrained_filter_fn=pretrained_filter_fn,\n        **kwargs,\n    )","sourceCodeStart":476,"sourceCodeEnd":512,"githubUrl":"https://github.com/huggingface/pytorch-image-models/blob/9a5261e31b3b5128526eb2658333b4c0a54464ae/timm/models/crossvit.py#L476-L512","documentation":"CrossViT factory functions reject features_only=True. CrossViT is a dual-branch Vision Transformer (multiple input resolutions fused by cross-attention) and does not expose the feature_locations required by timm's feature extraction wrapper, so _create_crossvit raises RuntimeError up front.","triggerScenarios":"Calling timm.create_model('crossvit_tiny_240', features_only=True) or any crossvit_* variant with features_only truthy.","commonSituations":"Feeding a uniform config (features_only=True) to many backbones in a sweep; adapting detection code written for CNN backbones to a ViT-family model without checking support.","solutions":["Remove features_only and use forward_intermediates for block-level outputs","Select a timm model with documented feature_cfgs support for feature extraction (most conv models, several ViTs)","Extract per-branch features manually from the model's branch modules using forward hooks"],"exampleFix":"# before\nmodel = timm.create_model('crossvit_small_240', features_only=True)\n# after\nmodel = timm.create_model('crossvit_small_240')\nfeats = model.forward_intermediates(x, indices=[4, 9])","handlingStrategy":"validation","validationCode":"import timm\nm = timm.create_model('crossvit_tiny_240')\nif not hasattr(m, 'feature_info'):\n    model = m  # no features_only\nelse:\n    model = timm.create_model('crossvit_tiny_240', features_only=True)","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('crossvit_15_240', features_only=True)\nexcept RuntimeError:\n    model = timm.create_model('crossvit_15_240')\n    extract = lambda x: model.forward_intermediates(x, indices=[2, 5, 8])","preventionTips":["Capability-check before passing features_only","Use forward_intermediates in generic feature pipelines","Test every backbone in a multi-backbone sweep before long runs"],"tags":["timm","crossvit","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"}