# [研究日誌] Imitation Learning 模仿學習DAY1 # 前言 2025/03/11(二)11:36 上週測試完Isaaclab的基本範例程式後,進行Imaitation learning(IL)的程式運行,目前理解IL是RL下的一種分支,其目的在於透過模仿學習到正確的夾取方式,比起RL架構下的自由搜索,更直接的給予一種優解輔助學習,讓RL訓練速度有效提昇。故本篇嘗試運行IL範例程式,紀錄可能遇到的問題及運行結果紀錄。 * 網址支援 https://isaac-sim.github.io/IsaacLab/main/source/overview/teleop_imitation.html # Imaitation Learning(IL)理解 ### 模仿學習(Imitation Learning)概念 模仿學習(Imitation Learning, IL)是一種機器學習方法,讓 AI 模型透過學習「專家行為數據」來學習策略,而不是透過強化學習(Reinforcement Learning, RL)自己探索環境。 在機器人控制、自駕車 等應用中,模仿學習被廣泛使用,因為它能夠比 RL 更快學習適合的行為,避免強化學習初期隨機探索時的低效率。  ### 模仿學習的基本流程: 1.收集專家數據(Expert Demonstrations) 來自人類操控(如 VR 控制機械手臂)。 來自已有的最佳控制器(如 PID 控制)。 來自強化學習訓練過的 Agent。 2.訓練代理人(Agent)學習專家行為 透過監督學習(Supervised Learning)讓 AI 學會複製專家的決策。 3.策略部署與微調 讓 Agent 在環境中測試,並進一步使用強化學習來微調行為(如果需要)。 ------------------------ ### 模仿學習的主要方法: **1.行為克隆(Behavior Cloning, BC)** 📌 原理:把模仿學習當作 監督學習,讓 AI 學會模仿專家。 類似影像分類的方式,用 (觀察, 行動) 配對數據 訓練神經網路。 不需要環境回饋 (Reward),只要有大量示範數據。 **2. 逆向強化學習(Inverse Reinforcement Learning, IRL)** 📌 原理:學習「專家是如何決策的」而不是直接模仿行動。 強化學習是用 Reward 來學習策略,但 IRL 是用 專家的行為來學習 Reward 函數。 適合複雜場景,因為專家行為可能會根據隱藏的策略改變。 **3. DAGGER(Dataset Aggregation, 交互式數據收集)** 📌 原理:混合行為克隆與專家指導,讓 AI 在訓練過程中持續更新數據集。 傳統行為克隆 無法應對新環境變化,但 DAGGER 讓專家在訓練中持續提供指導。 解決行為克隆過擬合的問題,適合機械手臂、自駕車等應用。 ----------------------------------- # 跑Imaitation Learning(IL)範例程式 task Isaac-Stack-Cube-Franka 紅藍綠三方塊的夾取堆疊任務,任務目標為操控手臂(Spacemouse、keyboard or joystick)這裡選擇鍵盤來操控手臂,由下到上分別為藍色、紅色、綠色為順序堆疊,前面提到我需要親自操控一次來提供手臂夾取的成功案例,因此第一步驟需要演示成功的步驟並儲存成dataset.hdf5檔案。 ## Collecting demonstrations ``` # step a: create folder for datasets mkdir -p datasets # step b: collect data with a selected teleoperation device. Replace <teleop_device> with your preferred input device. # Available options: spacemouse, keyboard ./isaaclab.sh -p scripts/tools/record_demos.py --task Isaac-Stack-Cube-Franka-IK-Rel-v0 --teleop_device <teleop_device> --dataset_file ./datasets/dataset.hdf5 --num_demos 10 # step a: replay the collected dataset ./isaaclab.sh -p scripts/tools/replay_demos.py --task Isaac-Stack-Cube-Franka-IK-Rel-v0 --dataset_file ./datasets/dataset.hdf5 ``` ### 1. 創建數據集資料夾 ``` mkdir -p datasets ``` 創建一個 datasets/ 目錄,用來儲存收集到的專家數據。如果資料夾已存在,則不會報錯。 ### 2. 收集專家數據 ``` ./isaaclab.sh -p scripts/tools/record_demos.py --task Isaac-Stack-Cube-Franka-IK-Rel-v0 --teleop_device <teleop_device> --dataset_file ./datasets/dataset.hdf5 --num_demos 10 ``` 執行 record_demos.py → 這是一個 錄製專家示範 的腳本。 --task → 訓練的機械手臂任務(Isaac-Stack-Cube-Franka-IK-Rel-v0)。 --teleop_device <teleop_device> → 設定專家控制方式: spacemouse:使用 SpaceMouse 進行機械手臂控制。 keyboard:使用鍵盤來控制機械手臂。 --dataset_file ./datasets/dataset.hdf5 → 把專家示範儲存成 HDF5 格式的數據集。 --num_demos 10 → 收集 10 個示範數據。 ✅ 這條指令的用途: 讓專家手動控制機械手臂,讓它學習如何 堆疊方塊。 所有的觀察 (state)、行動 (action) 會被儲存到 dataset.hdf5。 這是 模仿學習 (Imitation Learning, IL) 的第一步。 ### 3. 重播已收集的數據 ``` ./isaaclab.sh -p scripts/tools/replay_demos.py --task Isaac-Stack-Cube-Franka-IK-Rel-v0 --dataset_file ./datasets/dataset.hdf5 ``` 執行 replay_demos.py → 這是一個 回放已記錄示範 的腳本。 --task → 測試 Isaac-Stack-Cube-Franka-IK-Rel-v0 任務。 --dataset_file ./datasets/dataset.hdf5 → 載入之前錄製的數據,讓 AI 嘗試執行相同的行為。 ✅ 這條指令的用途: 回放剛剛收集的數據,看看機械手臂是否能模仿專家行為。 如果回放時的行為 與示範數據一致,代表收集的數據是 有效的。 # 數據展示 官方建議的理想數據是 1.保持路線簡短(意味著政策決策越少),從而使訓練變得越容易。 2.不要沿著任意的軸線前進,而是直接朝著目標前進。 3.不要停頓,執行平滑、連續的動作。 **但是鍵盤操作上會有限制,因此造成數據蒐集的困難,等訂購的SpaceMouse控制器到貨在看是否能有效解決此問題。為避免無效率的資料,我這邊最終使用官方提供的dataset1.hdf5來進行下一步訓練** ## Generating additional demonstrations Isaac Lab Mimic 是 NVIDIA Isaac Lab 內的一個 模仿學習 (Imitation Learning, IL) 模組,主要用來 讓機械手臂模仿人類示範的行為,並訓練出高效能的控制策略。 其流程為: **1. 收集示範數據** 上述資料蒐集已提到 ``` ./isaaclab.sh -p scripts/imitation_learning/isaaclab_mimic/record_demos.py --task Isaac-Stack-Cube-Franka-IK-Rel-Mimic-v0 --teleop_device keyboard --dataset_file ./datasets/dataset.hdf5 --num_demos 10 ``` **2. 標註示範數據** 自動或手動標記數據,使 AI 能夠區分不同的動作類型(如抓取、移動、放置)。 ``` ./isaaclab.sh -p scripts/imitation_learning/isaaclab_mimic/annotate_demos.py --input_file ./datasets/dataset.hdf5 --output_file ./datasets/annotated_dataset.hdf5 --task Isaac-Stack-Cube-Franka-IK-Rel-Mimic-v0 --auto ``` **3. 訓練 AI 模仿學習模型** 標註後使用行為克隆 (BC, Behavior Cloning) 訓練 AI,讓它學習模仿你的示範 ``` ./isaaclab.sh -p scripts/imitation_learning/isaaclab_mimic/train_bc.py --task Isaac-Stack-Cube-Franka-IK-Rel-Mimic-v0 --dataset_file ./datasets/annotated_dataset.hdf5 ``` **4. 測試 AI 是否學會模仿** ``` ./isaaclab.sh -p scripts/imitation_learning/isaaclab_mimic/play.py --task Isaac-Stack-Cube-Franka-IK-Rel-Mimic-v0 --num_envs 1 --load_checkpoint ./datasets/trained_model.pt ``` --------------------------------- # 驗證結果展示 1.先行生成10次成功案例(generated_dataset_small.hdf5),測試成功率,若滿意再進行大規模生成。 2.使用 Isaac Lab Mimic 產生一些額外的示範,生成成功100次的generated_dataset_large.hdf5 > 3.此範例中使用Robomimic實現的 BC 代理來訓練策略。可以使用任何其他框架或訓練方法。 ``` ./isaaclab.sh -p scripts/imitation_learning/robomimic/train.py --task Isaac-Stack-Cube-Franka-IK-Rel-v0 --algo bc --dataset ./datasets/generated_dataset.hdf5 ``` 預設情況下,訓練腳本將每 100 個 epoch 儲存一個模型檢查點。訓練好的模型和日誌會保存到 logs/robomimic/Isaac-Stack-Cube-Franka-IK-Rel-v0/bc ## 結果 透過使用生成的模型進行推理,我們可以在相同的環境中視覺化策略的結果: ``` ./isaaclab.sh -p scripts/imitation_learning/robomimic/play.py --task Isaac-Stack-Cube-Franka-IK-Rel-v0 --num_rollouts 50 --checkpoint /PATH/TO/desired_model_checkpoint.pth ``` 放成果展示影片(還無法放影片展示抱歉)  -------------------------------- # 小結 本日(3/11)進行IL的範例實做,透過imiatation learning學習專家行為並檢視是否能效率學習夾取堆疊動作。 紀錄一些問題 - [x] 1.目前沒有Reward,成功率接近50%,可能是專家行為不足導致,增加獎勵來使成功率上升,是否是DAGGER?(先讓RL探索,在修改) > 以50%的成功率再次訓練BC,讓它跑完最終model_final,結果請看3/12日誌 - [ ] 2.* 錯誤訊息 ModuleNotFoundError: No module named 'omni.kit' 表示 Isaac Sim 的 Python 模組尚未安裝 或 未正確載入。 * 檢視訓練成果的loss,加入reward並實時檢視訓練結果 * 了解模仿學習背後的機制,好後續做修改使用。 > 目前沒有使用到python做修改,先放置 - [x] 3.可視化結果最終結果時發生閃退,待解 ./isaaclab.sh -p scripts/imitation_learning/robomimic/play.py --task Isaac-Stack-Cube-Franka-IK-Rel-v0 --num_rollouts 10 --checkpoint /home/q500/IsaacLab/logs/robomimic/model_epoch_300.pth > 這原因是沒有指到絕對路徑(解決) 明日繼續。 ----------------------------------------- 參考資料: https://blog.csdn.net/cf2SudS8x8F0v/article/details/103077409 ### ### **下一篇 [研究日誌] Imitation Learning 模仿學習DAY2** https://hackmd.io/Y7hkczi-TI6KZdQ4jTYdMQ
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up