{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2604-07166","title":"DINO-QPM: Adapting Visual Foundation Models for Globally Interpretable Image Classification","arxiv_id":"2604.07166","date":"2026-04-08","proceeding":null,"authors":["Robert Zimmermann","Thomas Norrenbrock","Bodo Rosenhahn"],"abstract":"Although visual foundation models like DINOv2 provide state-of-the-art performance as feature extractors, their complex, high-dimensional representations create substantial hurdles for interpretability. This work proposes DINO-QPM, which converts these powerful but entangled features into contrastive, class-independent representations that are interpretable by humans. DINO-QPM is a lightweight interpretability adapter that pursues globally interpretable image classification, adapting the Quadratic Programming Enhanced Model (QPM) to operate on strictly frozen DINO backbones. While classification with visual foundation models typically relies on the \\texttt{CLS} token, we deliberately diverge from this standard. By leveraging average-pooling, we directly connect the patch embeddings to the model's features and therefore enable spatial localisation of DINO-QPM's globally interpretable features within the input space. Furthermore, we apply a sparsity loss to minimise spatial scatter and background noise, ensuring that explanations are grounded in relevant object parts. With DINO-QPM we make the level of interpretability of QPM available as an adapter while exceeding the accuracy of DINOv2 linear probe. Evaluated through an introduced Plausibility metric and other interpretability metrics, extensive experiments demonstrate that DINO-QPM is superior to other applicable methods for frozen visual foundation models in both classification accuracy and explanation quality.","url_abs":"https://arxiv.org/abs/2604.07166","url_pdf":"https://arxiv.org/pdf/2604.07166","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2604.07166","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2604.07166"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/ThomasNorr/Qpm","reach":null}],"summary":{"ran_draft_wrong":2,"unverified":11},"by_repo_kind":{"found_in_text":{"samples":13,"ran":2,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":13,"samples":[{"code_sha256_prefix":"d9def42110729a85","entry":"conv1x1","repo":"ThomasNorr/Qpm","repo_kind":"found_in_text","path":"architectures/resnet.py","file_url":"https://github.com/ThomasNorr/Qpm/blob/HEAD/architectures/resnet.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d9def42110729a85"}},{"code_sha256_prefix":"160bb14bd76201b4","entry":"conv3x3","repo":"ThomasNorr/Qpm","repo_kind":"found_in_text","path":"architectures/resnet.py","file_url":"https://github.com/ThomasNorr/Qpm/blob/HEAD/architectures/resnet.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"160bb14bd76201b4"}},{"code_sha256_prefix":"2eac9d2cbbd646b9","entry":"compute_feat_class_corr_matrix","repo":"ThomasNorr/Qpm","repo_kind":"found_in_text","path":"sparsification/qpm_constants/compute_A.py","file_url":"https://github.com/ThomasNorr/Qpm/blob/HEAD/sparsification/qpm_constants/compute_A.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2eac9d2cbbd646b9"}},{"code_sha256_prefix":"7f1e9f4b3f6170ea","entry":"compute_missing_edges","repo":"ThomasNorr/Qpm","repo_kind":"found_in_text","path":"sparsification/qpm/clique_utils.py","file_url":"https://github.com/ThomasNorr/Qpm/blob/HEAD/sparsification/qpm/clique_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"7f1e9f4b3f6170ea"}},{"code_sha256_prefix":"71af649d84d1760b","entry":"corr_matrix","repo":"ThomasNorr/Qpm","repo_kind":"found_in_text","path":"sparsification/qpm_constants/compute_A.py","file_url":"https://github.com/ThomasNorr/Qpm/blob/HEAD/sparsification/qpm_constants/compute_A.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"71af649d84d1760b"}},{"code_sha256_prefix":"45c3300c5a810b2f","entry":"find_missing_edges","repo":"ThomasNorr/Qpm","repo_kind":"found_in_text","path":"sparsification/qpm/clique_utils.py","file_url":"https://github.com/ThomasNorr/Qpm/blob/HEAD/sparsification/qpm/clique_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"45c3300c5a810b2f"}},{"code_sha256_prefix":"7b81622d01b803c4","entry":"get_assignments","repo":"ThomasNorr/Qpm","repo_kind":"found_in_text","path":"sparsification/qpm_constants/compute_B.py","file_url":"https://github.com/ThomasNorr/Qpm/blob/HEAD/sparsification/qpm_constants/compute_B.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"7b81622d01b803c4"}},{"code_sha256_prefix":"e821ccea21152569","entry":"get_edge_features","repo":"ThomasNorr/Qpm","repo_kind":"found_in_text","path":"sparsification/qpm/qpm_solving.py","file_url":"https://github.com/ThomasNorr/Qpm/blob/HEAD/sparsification/qpm/qpm_solving.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"e821ccea21152569"}},{"code_sha256_prefix":"9a0264a3988a4cfa","entry":"get_range_of_biggest_cluster","repo":"ThomasNorr/Qpm","repo_kind":"found_in_text","path":"sparsification/qpm_constants/compute_B.py","file_url":"https://github.com/ThomasNorr/Qpm/blob/HEAD/sparsification/qpm_constants/compute_B.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9a0264a3988a4cfa"}},{"code_sha256_prefix":"23e6a9857cecdcc2","entry":"is_subclique","repo":"ThomasNorr/Qpm","repo_kind":"found_in_text","path":"sparsification/qpm/clique_utils.py","file_url":"https://github.com/ThomasNorr/Qpm/blob/HEAD/sparsification/qpm/clique_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"23e6a9857cecdcc2"}},{"code_sha256_prefix":"8ba9420d4e5005c5","entry":"norm_vector","repo":"ThomasNorr/Qpm","repo_kind":"found_in_text","path":"FeatureDiversityLoss.py","file_url":"https://github.com/ThomasNorr/Qpm/blob/HEAD/FeatureDiversityLoss.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"8ba9420d4e5005c5"}},{"code_sha256_prefix":"9951ca641b790ad0","entry":"preserve_avg_func","repo":"ThomasNorr/Qpm","repo_kind":"found_in_text","path":"FeatureDiversityLoss.py","file_url":"https://github.com/ThomasNorr/Qpm/blob/HEAD/FeatureDiversityLoss.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9951ca641b790ad0"}},{"code_sha256_prefix":"1e370e330706382d","entry":"softmax_feature_maps","repo":"ThomasNorr/Qpm","repo_kind":"found_in_text","path":"FeatureDiversityLoss.py","file_url":"https://github.com/ThomasNorr/Qpm/blob/HEAD/FeatureDiversityLoss.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"1e370e330706382d"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.LG","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}