Tìm hiểu về Machine Learning và hướng dẫn làm demo trong UNITY

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.

Tìm hiểu và tạo một Demo ứng dụng Machine Learning trong Unity
Tìm hiểu và tạo một Demo ứng dụng Machine Learning trong Unity (Hiếu – ONETECH)

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

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

venv\Scripts\activate

Gõ enter và đây là kết quả trả về khi thành công

kết quả trả

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

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

Hình 1. Sơ lược về Project
Hình 1. Sơ lược về Project

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.

Hình 2. Inspector của wall (tương tự với goal)
Hình 2. Inspector của wall (tương tự với goal)
Hình 3. Nội dung script của wall và goal là rỗng như trên
Hình 3. Nội dung script của wall và goal là rỗng như trên

Đư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.

Hình 4. Sample code MoveToGoal.cs
Hình 4. Sample code MoveToGoal.cs

Bước 2: Add vào Object Agent và thiết lập theo mẫu sau

Hình 5. Thiết đặt cho Agent
Hình 5. Thiết đặt cho Agent

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

Hình 6. Bắt đầu train model
Hình 6. Bắt đầu train model

Tiếp theo lại Unity, phần Behavior Type ta chọn Default

ehavior 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é.

Hình 7. Tạo 12 object TrainAI để train cho nhanh hơn.
Hình 7. Tạo 12 object TrainAI để train cho nhanh hơn.

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.

Video demo train agent học máy với 12 bản sao

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

Quan sát kết quả train

Ở đâ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.

Hình 8. Trang hiển thị chi tiết thông số khi train
Hình 8. Trang hiển thị chi tiết thông số khi train

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.

Sử dụng model sau khi train
Thư mục chứa model sau khi train

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

a Behavior Type là Inference Only để dùng model MoveToGoal.onnx

Ta sẽ có được Agent đã được train. Bấm play thử.

Video kết quả của project demo về Machine Learning trong UNITY

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.

Tư vấn - Báo giá
Mọi thông tin tư vấn và báo giá đều miễn phí.

    「Chính sách bảo mật」Nếu bạn đồng ý với những điều trên, vui lòng nhấp vào nút "Gửi"
    Một email trả lời tự động sẽ được gửi đến địa chỉ email bạn đã nhập, vì vậy hãy kiểm tra điều đó.
    Tư vấn - Báo giá
    Mọi thông tin tư vấn và báo giá đều miễn phí.

      「Chính sách bảo mật」Nếu bạn đồng ý với những điều trên, vui lòng nhấp vào nút "Gửi"
      Một email trả lời tự động sẽ được gửi đến địa chỉ email bạn đã nhập, vì vậy hãy kiểm tra điều đó.
      liên hệ