{"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-2609-00591","title":"A Glance Is All You Need: Single-Pass Fine-Grained Image Captioning with SimLoss","arxiv_id":"2609.00591","date":"2026-09-01","proceeding":null,"authors":["Suryaansh Jain","Rahasya Barkur","Vishal G","Ryan Rossi","Franck Dernoncourt","Jack Wang","Koustava Goswami","Nedim Lipka","Puneet Mathur","Samyadeep Basu","Seunghyun Yoon"],"abstract":"An image may be worth a thousand words, but most captioning models describe it in only a few. Modern vision-language models produce fluent high-level captions, yet routinely miss the attributes, counts, textures, materials, and spatial relations that make an image visually specific. Recent multi-stage systems recover some of these details through generation, decomposition, verification, and rewriting, but they do so at the expense of substantially higher inference latency. We propose SimLoss, a reference-free embedding-space objective for single-pass fine-grained image captioning. SimLoss trains a vision-language model to align its projected hidden-state representation with a frozen image embedding through an InfoNCE contrastive loss, supplying a dense visual supervision signal before any text is decoded, and requiring neither human-written fine-grained captions nor pseudo-captions from a multi-stage pipeline. We instantiate it as SimLoss FFT, which backpropagates through a locally available embedding model, and SimLoss GRPO, which treats that model as a black-box reward. Compared with single-pass, multi-stage verification, reward-optimized, and perception-aware baselines, the fully differentiable fine-tuning variant, SimLoss FFT, achieves the highest precision while nearly matching the F1 score of the multi-stage method, all while retaining single-pass inference and running roughly 20 times faster than the multi-stage pipeline. The reward-based variant SimLoss GRPO attains the strongest recall. Together, these results show that embedding-space supervision can recover the quality of multi-stage verification at the latency of a single-pass captioner.","url_abs":"https://arxiv.org/abs/2609.00591","url_pdf":"https://arxiv.org/pdf/2609.00591","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=2609.00591","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2609.00591"}},"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/srynsh/SimLoss-Image-Captioning","reach":{"status":"ok"}}],"summary":{"unverified":13},"by_repo_kind":{"found_in_text":{"samples":13,"ran":0,"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":"f0a9925b1c0b4c9a","entry":"compute_cosine_distance","repo":"srynsh/SimLoss-Image-Captioning","repo_kind":"found_in_text","path":"simloss/encoder/eval_caption_similarity.py","file_url":"https://github.com/srynsh/SimLoss-Image-Captioning/blob/HEAD/simloss/encoder/eval_caption_similarity.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":"f0a9925b1c0b4c9a"}},{"code_sha256_prefix":"c4f6db555f997579","entry":"compute_distance","repo":"srynsh/SimLoss-Image-Captioning","repo_kind":"found_in_text","path":"simloss/encoder/eval_caption_similarity.py","file_url":"https://github.com/srynsh/SimLoss-Image-Captioning/blob/HEAD/simloss/encoder/eval_caption_similarity.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":"c4f6db555f997579"}},{"code_sha256_prefix":"e03de80794722d88","entry":"compute_similarity","repo":"srynsh/SimLoss-Image-Captioning","repo_kind":"found_in_text","path":"simloss/encoder/eval_caption_similarity.py","file_url":"https://github.com/srynsh/SimLoss-Image-Captioning/blob/HEAD/simloss/encoder/eval_caption_similarity.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":"e03de80794722d88"}},{"code_sha256_prefix":"fd44b98c5aa91358","entry":"count_parameters","repo":"srynsh/SimLoss-Image-Captioning","repo_kind":"found_in_text","path":"simloss/encoder/utils.py","file_url":"https://github.com/srynsh/SimLoss-Image-Captioning/blob/HEAD/simloss/encoder/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":"fd44b98c5aa91358"}},{"code_sha256_prefix":"547c5f4d306c2319","entry":"create_infonce_dataloader","repo":"srynsh/SimLoss-Image-Captioning","repo_kind":"found_in_text","path":"simloss/encoder/infonce_data_loader.py","file_url":"https://github.com/srynsh/SimLoss-Image-Captioning/blob/HEAD/simloss/encoder/infonce_data_loader.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":"547c5f4d306c2319"}},{"code_sha256_prefix":"0e7f2bb3d0aacbce","entry":"create_infonce_dataloader_from_config","repo":"srynsh/SimLoss-Image-Captioning","repo_kind":"found_in_text","path":"simloss/encoder/infonce_data_loader.py","file_url":"https://github.com/srynsh/SimLoss-Image-Captioning/blob/HEAD/simloss/encoder/infonce_data_loader.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":"0e7f2bb3d0aacbce"}},{"code_sha256_prefix":"1e113f9c4fbe5808","entry":"get_linear_schedule_with_warmup","repo":"srynsh/SimLoss-Image-Captioning","repo_kind":"found_in_text","path":"simloss/encoder/utils.py","file_url":"https://github.com/srynsh/SimLoss-Image-Captioning/blob/HEAD/simloss/encoder/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":"1e113f9c4fbe5808"}},{"code_sha256_prefix":"83acafaefdb6f935","entry":"infonce_collate_fn","repo":"srynsh/SimLoss-Image-Captioning","repo_kind":"found_in_text","path":"simloss/encoder/infonce_data_loader.py","file_url":"https://github.com/srynsh/SimLoss-Image-Captioning/blob/HEAD/simloss/encoder/infonce_data_loader.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":"83acafaefdb6f935"}},{"code_sha256_prefix":"31457c801f93f6af","entry":"load_checkpoint","repo":"srynsh/SimLoss-Image-Captioning","repo_kind":"found_in_text","path":"simloss/encoder/utils.py","file_url":"https://github.com/srynsh/SimLoss-Image-Captioning/blob/HEAD/simloss/encoder/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":"31457c801f93f6af"}},{"code_sha256_prefix":"3010b88e4be192d4","entry":"load_model","repo":"srynsh/SimLoss-Image-Captioning","repo_kind":"found_in_text","path":"simloss/grpo_gemini/eval_checkpoint.py","file_url":"https://github.com/srynsh/SimLoss-Image-Captioning/blob/HEAD/simloss/grpo_gemini/eval_checkpoint.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":"3010b88e4be192d4"}},{"code_sha256_prefix":"effea3ed56714996","entry":"load_model_and_processor","repo":"srynsh/SimLoss-Image-Captioning","repo_kind":"found_in_text","path":"simloss/eval_checkpoint.py","file_url":"https://github.com/srynsh/SimLoss-Image-Captioning/blob/HEAD/simloss/eval_checkpoint.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":"effea3ed56714996"}},{"code_sha256_prefix":"f7a28aa8c88f5d6a","entry":"strip_cjk","repo":"srynsh/SimLoss-Image-Captioning","repo_kind":"found_in_text","path":"simloss/eval_checkpoint.py","file_url":"https://github.com/srynsh/SimLoss-Image-Captioning/blob/HEAD/simloss/eval_checkpoint.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":"f7a28aa8c88f5d6a"}},{"code_sha256_prefix":"aa00d28f57e2a9d4","entry":"strip_cjk","repo":"srynsh/SimLoss-Image-Captioning","repo_kind":"found_in_text","path":"simloss/grpo_gemini/eval_checkpoint.py","file_url":"https://github.com/srynsh/SimLoss-Image-Captioning/blob/HEAD/simloss/grpo_gemini/eval_checkpoint.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":"aa00d28f57e2a9d4"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.CV","source":"arxiv_daily_20260902.json"},"syntology_extracted_results":null}