{"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/visualquality-r1-reasoning-induced-image","title":"VisualQuality-R1: Reasoning-Induced Image Quality Assessment via Reinforcement Learning to Rank","arxiv_id":"2505.14460","date":"2025-05-20","proceeding":null,"authors":["Tianhe Wu","Jian Zou","Jie Liang","Lei Zhang","Kede Ma"],"abstract":"DeepSeek-R1 has demonstrated remarkable effectiveness in incentivizing reasoning and generalization capabilities of large language models (LLMs) through reinforcement learning. Nevertheless, the potential of reasoning-induced computational modeling has not been thoroughly explored in the context of image quality assessment (IQA), a task critically dependent on visual reasoning. In this paper, we introduce VisualQuality-R1, a reasoning-induced no-reference IQA (NR-IQA) model, and we train it with reinforcement learning to rank, a learning algorithm tailored to the intrinsically relative nature of visual quality. Specifically, for a pair of images, we employ group relative policy optimization to generate multiple quality scores for each image. These estimates are then used to compute comparative probabilities of one image having higher quality than the other under the Thurstone model. Rewards for each quality estimate are defined using continuous fidelity measures rather than discretized binary labels. Extensive experiments show that the proposed VisualQuality-R1 consistently outperforms discriminative deep learning-based NR-IQA models as well as a recent reasoning-induced quality regression method. Moreover, VisualQuality-R1 is capable of generating contextually rich, human-aligned quality descriptions, and supports multi-dataset training without requiring perceptual scale realignment. These features make VisualQuality-R1 especially well-suited for reliably measuring progress in a wide range of image processing tasks like super-resolution and image generation.","url_abs":"https://arxiv.org/abs/2505.14460v1","url_pdf":"https://arxiv.org/pdf/2505.14460v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"visualquality-r1-reasoning-induced-image","repo_url":"https://github.com/tianhewu/visualquality-r1","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"image-generation","task_name":"Image Generation"},{"task_slug":"image-quality-assessment","task_name":"Image Quality Assessment"},{"task_slug":"learning-to-rank","task_name":"Learning-To-Rank"},{"task_slug":"nr-iqa","task_name":"NR-IQA"},{"task_slug":"super-resolution","task_name":"Super-Resolution"},{"task_slug":"visual-reasoning","task_name":"Visual Reasoning"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=2505.14460","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2505.14460"}},"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":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/tianhewu/visualquality-r1","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran_fixture":1,"unverified":13},"by_repo_kind":{"official":{"samples":14,"ran":1,"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":0,"samples":[{"code_sha256_prefix":"3f31b48fd862935d","entry":"get_image_data_url","repo":"tianhewu/visualquality-r1","repo_kind":"official","path":"src/open-r1-multimodal/local_scripts/create_vision_cot_data.py","file_url":"https://github.com/tianhewu/visualquality-r1/blob/HEAD/src/open-r1-multimodal/local_scripts/create_vision_cot_data.py","link_basis":"harvester_set","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3f31b48fd862935d"}},{"code_sha256_prefix":"07ccec4e2aecef7f","entry":"extract_first_number","repo":"tianhewu/visualquality-r1","repo_kind":"official","path":"src/open-r1-multimodal/src/open_r1/grpo_jsonl.py","file_url":"https://github.com/tianhewu/visualquality-r1/blob/HEAD/src/open-r1-multimodal/src/open_r1/grpo_jsonl.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"07ccec4e2aecef7f"}},{"code_sha256_prefix":"41c548a25e90eb39","entry":"extract_problem_solution","repo":"tianhewu/visualquality-r1","repo_kind":"official","path":"src/open-r1-multimodal/local_scripts/prepare_hf_data.py","file_url":"https://github.com/tianhewu/visualquality-r1/blob/HEAD/src/open-r1-multimodal/local_scripts/prepare_hf_data.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"41c548a25e90eb39"}},{"code_sha256_prefix":"44d62022cdd5c922","entry":"fidelity_reward","repo":"tianhewu/visualquality-r1","repo_kind":"official","path":"src/open-r1-multimodal/src/open_r1/grpo_jsonl.py","file_url":"https://github.com/tianhewu/visualquality-r1/blob/HEAD/src/open-r1-multimodal/src/open_r1/grpo_jsonl.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"44d62022cdd5c922"}},{"code_sha256_prefix":"e89f2eec0a18d4c2","entry":"format_reward","repo":"tianhewu/visualquality-r1","repo_kind":"official","path":"src/open-r1-multimodal/src/open_r1/grpo.py","file_url":"https://github.com/tianhewu/visualquality-r1/blob/HEAD/src/open-r1-multimodal/src/open_r1/grpo.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e89f2eec0a18d4c2"}},{"code_sha256_prefix":"cdda70c471530e2d","entry":"generate_temp_json_data","repo":"tianhewu/visualquality-r1","repo_kind":"official","path":"datasets/make_data.py","file_url":"https://github.com/tianhewu/visualquality-r1/blob/HEAD/datasets/make_data.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"cdda70c471530e2d"}},{"code_sha256_prefix":"a34f33d5ef7c45a9","entry":"get_vlm_module","repo":"tianhewu/visualquality-r1","repo_kind":"official","path":"src/open-r1-multimodal/src/open_r1/grpo_rec.py","file_url":"https://github.com/tianhewu/visualquality-r1/blob/HEAD/src/open-r1-multimodal/src/open_r1/grpo_rec.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a34f33d5ef7c45a9"}},{"code_sha256_prefix":"58ab41ce28a94c62","entry":"gpt4o_query","repo":"tianhewu/visualquality-r1","repo_kind":"official","path":"src/open-r1-multimodal/local_scripts/create_vision_cot_data.py","file_url":"https://github.com/tianhewu/visualquality-r1/blob/HEAD/src/open-r1-multimodal/local_scripts/create_vision_cot_data.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"58ab41ce28a94c62"}},{"code_sha256_prefix":"cbe3d6234a75d8d8","entry":"initialize_tokenizer","repo":"tianhewu/visualquality-r1","repo_kind":"official","path":"src/open-r1-multimodal/src/open_r1/grpo_jsonl.py","file_url":"https://github.com/tianhewu/visualquality-r1/blob/HEAD/src/open-r1-multimodal/src/open_r1/grpo_jsonl.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"cbe3d6234a75d8d8"}},{"code_sha256_prefix":"bdcc94560fb87f30","entry":"load_image_from_path","repo":"tianhewu/visualquality-r1","repo_kind":"official","path":"src/open-r1-multimodal/local_scripts/prepare_hf_data.py","file_url":"https://github.com/tianhewu/visualquality-r1/blob/HEAD/src/open-r1-multimodal/local_scripts/prepare_hf_data.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"bdcc94560fb87f30"}},{"code_sha256_prefix":"f029d6b5f19d2885","entry":"process_single_item","repo":"tianhewu/visualquality-r1","repo_kind":"official","path":"src/open-r1-multimodal/local_scripts/create_vision_cot_data.py","file_url":"https://github.com/tianhewu/visualquality-r1/blob/HEAD/src/open-r1-multimodal/local_scripts/create_vision_cot_data.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f029d6b5f19d2885"}},{"code_sha256_prefix":"f7e2f7881b609401","entry":"qwen2_5vl_forward","repo":"tianhewu/visualquality-r1","repo_kind":"official","path":"src/open-r1-multimodal/src/open_r1/qwen2_5vl_monkey_patch.py","file_url":"https://github.com/tianhewu/visualquality-r1/blob/HEAD/src/open-r1-multimodal/src/open_r1/qwen2_5vl_monkey_patch.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f7e2f7881b609401"}},{"code_sha256_prefix":"b6715cf1542b45e4","entry":"read_json_file","repo":"tianhewu/visualquality-r1","repo_kind":"official","path":"datasets/make_data.py","file_url":"https://github.com/tianhewu/visualquality-r1/blob/HEAD/datasets/make_data.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b6715cf1542b45e4"}},{"code_sha256_prefix":"5b01b590f99f82db","entry":"scoring_images","repo":"tianhewu/visualquality-r1","repo_kind":"official","path":"datasets/make_data.py","file_url":"https://github.com/tianhewu/visualquality-r1/blob/HEAD/datasets/make_data.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"5b01b590f99f82db"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}