Chào các bạn, mình là Nguyễn Minh Hiếu, hiện đang làm việc ở OneTech Asia, với phương châm chia sẻ là học hỏi. Hôm nay mình xin chia sẻ với mọi người về Machine Learning và hướng dẫn tạo một demo nhỏ áp dụng Machine Learning bằng Unity nhé.
Giới thiệu về Machine Learning
Nếu bạn đã từng chơi game, thì chắc hẳn bạn đã từng gặp những con bot trong game có khả năng tự dự đoán và đưa ra các quyết định phù hợp tùy theo tình huống khác nhau mà không phải những hành động lặp đi lặp lại theo lập trình trước (sử dụng event hoặc trigger). Những con bot này chính là có AI thông qua sử dụng Machine Learning.
Trong Uniy, bạn có thể thiết lập Machine Learning thông qua ML-Agents Toolkit.
Ở bài viết này, mình sẽ hướng dẫn cơ bản cho các bạn cách cài đặt môi trường và thực hành train model để áp dụng vô tựa game của mình.
Hướng dẫn cài đặt
Bước 1: Cài đặt Unity Engine (2020.3 trở lên)
Bước 2: Cài đặt Python (3.6.1 trở lên)
Bước 3: Clone Project sau: https://github.com/Unity-Technologies/ml-agents
Bước 4: Vào thư mục project của ml-agents. Sau đó tạo môi trường ảo python bằng cách cmd thư mục đó và nhập như sau: python -m -venv venv
Sau đó chúng kích hoạt môi trường ảo này bằng lệnh sau: venv\Scripts\activate
Gõ enter và đây là kết quả trả về khi thành công
Bước 5: Cài đặt pytorch:
pip3 install torch~=1.7.1 -f https://download.pytorch.org/whl/torch_stable.html
Bước 6: Cài đặt ml-agents
python -m pip install mlagents==0.28.0
Về cơ bản chúng ta đã setup xong về môi trường, các bạn có thể tham khảo chi tiết hơn thông qua link sau nếu gặp vấn đề trong quá trình cài đặt:
https://github.com/Unity-Technologies/ml-agents/blob/release_19_docs/docs/Installation.md
Sơ lược về project demo
Mục đích: Train một đối tượng chính (gọi là agent), cho agent tự học cách di chuyển và sau đó có thể tự tìm đường đến đối tượng đích (goal).
Mô tả: Scene bao gồm
- Một mặt sân, có tường (object wall) bao quanh
- Một object agent (trên hình là một cube màu trắng)
- Một object goal (trên hình là một sphere màu vàng).
Nguyên lý quá trình train: Agent sẽ được thiết đặt để tự di chuyển random, và học hỏi sau mỗi lần sai và đúng. Ở đây ta thiết lập chạm trúng tường là sai, đi đến được goal là đúng. Kết quả của quá trình train là ta sẽ có được một file đuôi onnx(file này có thể hiểu là AI sau khi được train). Dùng file này cho Agent thì nó có thể tự di chuyển một cách chính xác, không chạm tường và đường đi tối ưu nhất.
Tạo Scene demo
Đầu tiên tạo mặt sân, là một cube, hãy add Box Collider vô nhé.
Tiếp theo tạo agent(một cube) hãy add Box Collider và Rigidbody.
Kế đến tạo goal(một sphere) và 4 wall, hãy add Box Collider, Rigidbody và script goal hoặc script wall tương ứng. Và cài đặt như hình bên dưới.
Đưa tất cả đối tượng trên thuộc object TrainAI.
Bước 1: , đây là script thiết đặt đầu vào, đầu ra và thiết đặt di chuyển của agent.
Bước 2: Add vào Object Agent và thiết lập theo mẫu sau
Bước 3: Test thủ công.
Thiết lập Behavior Type là Heuristic Only như hình 5 (Heuristic là chế độ test thủ công), bấm play. Sau đó ta sẽ dùng bàn phím để di chuyển agent, test thử nếu chạm tường thì sàn có đổi sang màu xanh không, nếu chạm đến goal thì sàn có đổi sang màu đỏ không, xem thử agent và goal có random sau mỗi lần chạm tường, chạm goal không. Nếu tất cả đều đúng thì sang bước tiếp theo. Nếu không đúng thì hãy check các bước trên xem có sai xót gì không nhé.
Bước 4: Tiến hành train model
Ở cmd, ta nhập lệch sau để khởi tạo môi trường train model, với id=tên
Đây là kết quả khi khởi tạo môi trường train model thành công
Tiếp theo lại Unity, phần Behavior Type ta chọn Default
Có một điểm đặc biệt là càng nhiều Object TrainAI thì quá trình Train sẽ càng nhanh. Nên . Hãy dựa theo cấu hình máy của bạn để xem xét số lượng bao nhiêu là tốt nhất nhé.
Sau đó ấn play để bắt đầu quá trình train. Khi ta quan sát quá trình train thấy agent đã đi đúng đa số lần thì có thể dừng lại.
Quan sát kết quả train
Ngoài việc quan sát bằng mắt thường, bạn có thể dùng cách sau để quan sát thông số khi train để chắc chắn hơn về độ chính xác.
Trong lúc đang train. tạo một cmd mới. Gõ tensorboarch –logdir results
Ở đây trả về localhost:6006. Bạn hãy mở trình duyệt lên. .
- Quan sát bảng Cumulative Reward: Ta có thể nhận thấy thông số đang tăng dần từ 0.3 đến 0.9 và tiếp tục tăng. Điều này có nghĩa là Agent tìm được đích tỷ lệ cao dần so với chạm tường.
- Ở bảng Episode Length: Ta thấy thông số giảm dần từ 28 đến 4 và tiếp tục giảm có nghĩa là AI tìm được đích với tốc độ nhanh dần.
Với những thông số trên, ta có thể chắc chắn AI đang thông minh dần theo số lần train.
Ta có thể kết thúc quá trình train khi thấy thông số ở Cumulative Reward > 0.9.
Sử dụng model sau khi train
Vào thư mục results/MoveToGoal. Copy file MoveToGoal.onnx vào Asset, File này chính là AI, là bộ não của Agent để sử dụng sau này.
Sau đó ẩn hết các 11 object TrainAI đã clone, chỉ để lại object TrainAI ban đầu, vào agent thêm file MoveToGoal.onnx vào Model, sửa Behavior Type là Inference Only để dùng model MoveToGoal.onnx
Ta sẽ có được Agent đã được train. Bấm play thử.
Ta quan sát thấy Vậy là chúng ta đã train thành công model.
Lưu ý đây là kết quả đạt được thông qua AI, sự khác biệt là ta sẽ không cần phải code logic tìm đường đi cho Agent, mà nó sẽ tự tư duy để di chuyển đến đích.
Kết
Trên thực tế, Machine learning được áp dụng rất nhiều vào đời sống ở nhiều lĩnh vực. Có thể kể đến như hệ thống nhận diện khuôn mặt, robot tự xoay khối rubick, AI trong các trò chơi trí tuệ như cờ tướng, cờ vua,…
Mong là với bài hướng dẫn trên . Các bạn có thể nắm được cơ bản về Machine learning trong Unity. Sau đó có thể tự đào sâu và mở rộng hơn ở các project khác. Chúc các bạn thành công.