{"id":47896023,"url":"https://github.com/declare-lab/nora-1.5","last_synced_at":"2026-04-04T03:45:45.089Z","repository":{"id":324992385,"uuid":"1098850947","full_name":"declare-lab/nora-1.5","owner":"declare-lab","description":"NORA-1.5: A Vision-Language-Action Model Trained using World Model- and Action-based Preference Rewards","archived":false,"fork":false,"pushed_at":"2026-01-11T12:47:07.000Z","size":171,"stargazers_count":96,"open_issues_count":3,"forks_count":7,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-04T03:45:40.276Z","etag":null,"topics":["vision-language-action-model"],"latest_commit_sha":null,"homepage":"https://declare-lab.github.io/nora-1.5","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/declare-lab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-18T08:20:38.000Z","updated_at":"2026-03-27T20:39:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/declare-lab/nora-1.5","commit_stats":null,"previous_names":["declare-lab/nora-1.5"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/declare-lab/nora-1.5","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/declare-lab%2Fnora-1.5","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/declare-lab%2Fnora-1.5/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/declare-lab%2Fnora-1.5/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/declare-lab%2Fnora-1.5/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/declare-lab","download_url":"https://codeload.github.com/declare-lab/nora-1.5/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/declare-lab%2Fnora-1.5/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31387023,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T01:22:39.193Z","status":"online","status_checked_at":"2026-04-04T02:00:07.569Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["vision-language-action-model"],"created_at":"2026-04-04T03:45:44.592Z","updated_at":"2026-04-04T03:45:45.084Z","avatar_url":"https://github.com/declare-lab.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NORA-1.5: A Vision-Language-Action Model Trained using World Model- and Action-based Preference Rewards\n\n[![Project Website](https://img.shields.io/badge/Project-Website-blue.svg)](https://declare-lab.github.io/nora-1.5)\n[![Model](https://img.shields.io/badge/Model-NORA--1.5-brightgreen)](https://huggingface.co/declare-lab/nora-1.5)\n[![arXiv](https://img.shields.io/badge/arXiv-2511.14659-b31b1b.svg)](https://arxiv.org/abs/2511.14659)\n![Status](https://img.shields.io/badge/Status-Active-orange)\n\n🔥 Project NORA is supported by Gemini and Lambda Labs! We are thankful to them.\n\nNORA-1.5 is a **Vision-Language-Action (VLA)** model that improves generalization and real-world decision making through **post-training with world-model-based and action-based preference rewards**.  \nThe model builds upon the NORA foundation to achieve stronger **instruction following**, **closed-loop control**, and **real-robot success**, demonstrating reliability across **LIBERO** and **SimplerEnv** environments.\n\nThis repository consolidates the full open-source release of **model checkpoints**, **inference code**, **training code**, and **evaluation tools**, along with documentation and examples.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://declare-lab.github.io/assets/images/nora-1.5-arxiv-teaser.png\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n\n---\n## Setup guide\nFirst, prepare a conda environment.\n```\nconda create -n nora1_5 python=3.10 -y\nconda activate nora1_5\n```\nClone repository\n``` \ngit clone https://github.com/declare-lab/nora-1.5.git\n```\nInstall requirements\n```\npip install -r requirements.txt\n```\n## 🌐 Project Website\n\n🔗 **https://declare-lab.github.io/nora-1.5**\n \n---\n\n## 🚀 Key Features\n\n- **Vision-Language-Action architecture** with enhanced **task completion rate** and **distraction rate**\n- **Action-based preference optimization** using expert preference rewards  \n- **World-model-based preference learning** for improved planning and consistency  \n- Strong **closed-loop control**, enabling deployment in real robot settings  \n- Supports **multi-task**, **long-horizon**, and **few-shot generalization**  \n- Compatible with **LeRobot**, **LIBERO**, **SimplerEnv**, and custom environments  \n\n---\n\n\n\n\n## 📆 TODO \u003ca name=\"todos\"\u003e\u003c/a\u003e  ~\n- [x] Release the inference code of Nora-1.5\n- [x] Release all relevant model checkpoints(Pretrained, libero, SimplerEnv etc)\n- [x] Release the training/fine-tuning code of Nora-1.5 with LeRobot Dataset\n- [x] Release SimplerEnv evaluation code \n\n## Minimal Inference Sample (Will update)\n```python\nfrom inference.modelling_expert import VLAWithExpert\n\nmodel = VLAWithExpert.from_pretrained(\"declare-lab/nora-1.5\") \noutputs = model.sample_actions(PIL IMAGE,instruction,num_steps=10) ## Outputs 7 Dof action of normalized action\n```\n## How to train/finetune on your own Lerobot dataset.\nTo train/finetune NORA-1.5 on your own Lerobot dataset, there are 2 main steps that is required. \n1: Compute normalization statistic of your Lerobot dataset. Note that NORA-1.5 is pretrained in delta action space, hence we will need to compute the normalization statistic for delta action. \nRun the script \n```python python utils/compute_norm_stats.py --dataset_path='YOUR LEROBOT DATASET' --delta_transform```\nThis will create a norm_stats.json in your lerobot dataset local directory, or remote directory (base on whether your dataset is local on remote).\n\n\nIf your dataset is in delta action space and you have already computed the normalization statistic, you may skip this step.\n\n2: \nModify the REMAP_KEY for mapping dictionary key name in your lerobot dataset.\nhttps://github.com/declare-lab/nora-1.5/blob/be1376679daad51601e96889efaded00d7243d62/training/lerobot/train_lerobot.py#L37-L42\nSet up training hyperparameter, dataset_dir, output_dir in training/lerobot/train_lerobot.py\n\nWe use huggingface's accelerator for training. Set up your accelerate config via ```python accelerate config ```\n\n\nRun training with accelerate launch --config_file='config.yaml' training/lerobot/train_lerobot.py!!!\n\n\nWe jointly optimize cross entropy loss(on FAST token) and flow matching loss on action expert, hence we can use sample discrete action via FAST tokenizer, or continous action via flow matching (action expert). Base on our experiment on Galaxea A1, we found that discrete action performs better than continous action. However, in simulation such as SimplerEnv and LIBERO, continous action outpeform discrete action. Feel free to try both action sampling method.\n## Post-training\nNavigate to [training/post_training](https://github.com/declare-lab/nora-1.5/tree/main/training/post_training)\n## 🤗 Model Zoo\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003eModel Name\u003c/th\u003e\n    \u003cth\u003eBackbone\u003c/th\u003e\n    \u003cth\u003eNote\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"https://huggingface.co/declare-lab/nora-1.5\"\u003edeclare-lab/nora-1.5\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003edeclare-lab/nora-1.5\u003c/td\u003e\n     \u003ctd\u003ePretrained on OXE. Jointly optimize cross entropy loss and flow matching loss\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"https://huggingface.co/declare-lab/nora-1.5-fractal-dpo\"\u003edeclare-lab/nora-1.5-fractal-dpo\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003edeclare-lab/nora-1.5\u003c/td\u003e\n    \u003ctd\u003eFinetuned on fractal and perform DPO via the method detailed in the paper\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"https://huggingface.co/declare-lab/nora-1.5-libero\"\u003edeclare-lab/nora-1.5-libero\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003edeclare-lab/nora-1.5\u003c/td\u003e\n    \u003ctd\u003eFinetuned on 4 LIBERO subset mixed\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n## SimplerEnv evaluation\nNavigate to  https://github.com/hungchiayu1/SimplerEnv-OpenVLA\n\n## LIBERO Evaluation\nWe used [OpenVLA's](https://github.com/openvla/openvla) code base to perform LIBERO evaluation. To perform LIBERO evaluation, follow the instruction in OpenVLA and set up the evaluation accordingly. \n\nCopy the inference folder to openvla/experiments/robot/libero and modify the inference function of run_libero_eval.py in OpenVLA's codebase.\n\n```python\nfrom inference.modelling_expert import VLAWithExpert\n\nmodel = VLAWithExpert.from_pretrained(\"declare-lab/nora-1.5-libero\") \noutputs = model.sample_actions(PIL IMAGE,instruction,num_steps=10) ## Outputs 7 Dof action of normalized action\n```\n\n## Acknowledgement\nThis repository is built based on [OpenVLA](https://github.com/openvla/openvla), [Open X-Embodiment](https://github.com/google-deepmind/open_x_embodiment?tab=readme-ov-file),[transformers](https://github.com/huggingface/transformers), [accelerate](https://github.com/huggingface/accelerate), [Qwen2.5 VL](https://github.com/QwenLM/Qwen2.5-VL), [Lerobot](https://github.com/huggingface/lerobot), [SpatialVLA](https://github.com/SpatialVLA/SpatialVLA).  Thanks!\n. Thanks for their contribution!\n\n## Citation\n\n```bibtex\n@article{hung2025nora15,\n  title={NORA-1.5: A Vision-Language-Action Model Trained using World Model- and Action-Based Preference Rewards},\n  author={Hung, Chia-Yu and Majumder, Navonil and Deng, Haoyuan, Liu Renhang, Yankang Ang, Amir Zadeh, Chuan Li, Dorien Herremans, Ziwei Wang, and Soujanya Poria},\n  journal={arXiv preprint},\n  year={2025}\n}\n```\n\n## Questions\nPlease email me at chiayu001 at e.ntu.edu.sg\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeclare-lab%2Fnora-1.5","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeclare-lab%2Fnora-1.5","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeclare-lab%2Fnora-1.5/lists"}