[Computer Vision] Thử lập trình xe ô tô đua tự lái với mạng CNN

Chào tuần mới cả nhà, chúng ta lại cùng ăn mì cùng Mì AI – học AI theo cách mì ăn liền. Mình sẽ cố gắng đơn giản hóa các khái niệm phức tạp, để làm sao các bạn dễ tiếp cận và làm AI một cách Mì ăn liền. Đích đến cuối cùng là Ai cũng làm được AI :D.Okie, hẳn các bạn đã nghe đến nhiều dự án xe tự lái của Google đúng không? Xe sẽ tự hành và được điều khiển hoàn toàn bằng máy tính trên xe, không cần con người can thiệp. Hôm nay chúng ta sẽ cùng nhau làm một model xe tự lái đơn giản để hiểu được nguyên lý, cách làm xe tự lái nhé.

Bài viết sẽ gồm các phần như sau:

  • Phần 1. Tìm hiểu nguyên lý xe tự lái và mạng CNN
  • Phần 2. Tải phần mềm giả lập xe đua
  • Phần 3. Tạo dữ liệu train cho model
  • Phần 4. Tìm hiểu dữ liệu train
  • Phần 5. Thực hiện train model
  • Phần 6. Tận hưởng cảm giác xe tự lái like a boss 😀

Phần 1. Tìm hiểu nguyên lý xe tự lái và mạng CNN

Như thông lệ, theo phong cách MÌ AI nên mình sẽ nói thật đơn giản nhé, có thể sẽ sai sót, thiếu học thuật mong các bạn bỏ quá. Miễn là anh em hiểu và làm được là okie.

Xe tự lái nói chung sẽ nhận các thông tin input từ cảm biến trước sau, 2 bên, từ các camera quay 4 phía xung quanh xe, từ thông tin tốc độ, góc lái, …sau đó output của xe sẽ là các action dạng như: nhấn ga, đạp phanh, điều chỉnh tay lái…. Như vậy chúng ta sẽ phỉa train cho model tự lái điều đó, để sau đó thả ra đường nó sẽ tự lái được cái xe oto một cách an toàn.

Còn về CNN, đây là một mạng Nơ ron. Nhưng khác với các mạng Nơ rơn thông thường thì nó hầu như chuyên để xử lý hình ảnh, thay vì nhét cả cái ảnh tô dùng vào xử lý, nó sẽ dùng 1 ống nhòm, nhóm lần lượt từng phần của ảnh theo hướng từ trái sang phải, từ trên xuống dưới và sau đó ghi chép lại những gì đặc trưng nhất của phần đó. Cuối cùng sau khi nhòm hết bức ảnh thì ta có những gì đặc trưng nhất của bức ảnh. Tóm lại, CNN là mạng dùng để trích xuất đặc trưng của ảnh, từ 1 ảnh to về 1 nhúm đặc trưng nhỏ hơn rất nhiều. Sau khi có đặc trưng thì ta đưa tiếp vào các bước xử lý tiếp theo. Bạn nào muốn tìm hiểu sâu hơn về CNN lên mạng search what is CNN, CNN là gì ra ngay….vô vàn tài liệu!

Phần 2. Tải phần mềm giả lập xe đua

Đến đây có bạn thắc mắc tại sao vừa bảo tự lập trình tự lái giờ lại tải phần mềm có sẵn trên mạng. Lý do đơn giản: Chúng ta học cách lập trình cái model AI để trên xe oto để điều khiển xe chứ chúng ta không học cách làm ra cái oto. Ở đây cũng vậy, chúng ta học cách tạo ra model cho bộ não của oto, chứ các phần còn lại như: lập trình 3D, vẽ đường đua, đồ họa… sẽ có các kỹ sư khác làm, chúng ta không cần quan tâm.

Bây giờ các bạn tạo 1 thư mục MiAI_Auto_Car tại đâu đó trong ổ cứng nhé. Trong thư mục MiAI_Auto_Car các bạn tạo một thư mục traindata để lưu dữ liệu sau này..

Sau đó đến bước tải phần mềm giả lập theo các link sau, tùy vào hệ điều hành của các bạn nhé:

File nén các bạn lưu vào thư mục MiAI_Auto_Car và giải nén ra nhé. Done rồi, bây giờ bạn sang Phần 3 nào. Sau khi giải nén mình có rename cái folder chứa phần mềm giả lập thành Simulator để tiện làm việc sau này. Các bạn cũng nên làm thế.

Phần 3. Tạo dữ liệu train cho model và tiền xử lý dữ liệu

Tạo dữ liệu train ở đây chính là bạn phải nhảy vào lái xe bằng tay, để dạy cho máy biết cách “đối phó” với địa hình đường đua. Mình dùng MacOS nên mình sẽ guide trên Mac nhé, Win chắc cũng không khác mấy đâu.

Bước 1. Các bạn chạy file giả lập vừa tải về và giải nén, một cửa sổ sẽ hiện lên như này:

xe tự lái

Tùy vào máy các bạn nhanh, chậm, yếu, khỏe khác nhau mà các bạn chọn thông số cho phù hợp nhé. Còn nếu không quá cầu kỳ, các bạn cứ để nguyên mà chọn Play! cho nhanh gọn.

Bước 2. Một cửa sổ mới sẽ mở ra, có 2 chế độ là Training Mode và Auto Mode. Do đang ở bước training nên chúng ta chọn Training Mode. Bạn nào thích xem cách điều khiển xe thì nhấn vào Controls để xem nhé.

xe tự lái

Bước 3. Bây giờ bạn sẽ thấy một màn hình với xe oto và đường đua như hình bên dưới. Bạn hãy thử lái tầm 5 phút cho quen tay (để tẹo còn dạy cho xe lái chuẩn chứ, lái linh tinh thì lúc model nó lái cũng loằng ngoằng lắm haha).

xe tự lái

Sau khi đã quen tay, các bạn nhấn phím R (hoặc click vào biểu tượng Record màu đỏ) để bắt đầu ghi lại quá trình lái xe, tạo ra dữ liệu để train model. Một cửa sổ Browse sẽ hiện ra để hỏi xem bạn lưu dữ liệu train vào đâu, các bạn lưu vào thư mục traindata đã tạo ở Phần 2 nhé.

Rồi bây giờ thì biểu tượng Recording đang chạy, bạn hãy lái xe như bình thường, lái càng giỏi càng tốt, càng mượt càng tốt, càng lâu càng tốt. Nhưng mình thấy tầm 5-10 phút là okie rồi. Dữ liệu lưu lại là dữ liệu 03 camera phía trước xe (tưởng tượng đây là xe thật, và có 3 camera phía trước xe nhé) và log đánh lái, phanh, tăng tốc của xe.

Phần 4. Tìm hiểu dữ liệu train

Nếu các bạn làm đúng các bước trên thì bây giờ trong thư mục traindata đã có các thông tin sau:

  • Thư mục IMG chứa các hình ảnh camera của xe ghi lại gồm center_ là camera giữa, left_ và right_ là 2 camera trái và phải.
  • File driving_log.csv gồm các thông tin: đường dẫn đến 03 file ảnh camera và các thông tin lần lượt là: góc lái, độ giảm tốc, phanh, tốc độ hiện tại.

Vậy chúng ta đã đủ Input và Output để train cho model rồi nhé. Máy sẽ học theo kiểu: cứ gặp input thì 3 camera như này, thì tao oánh lái, phanh, như này. Sau đó nó sẽ tự đối phó được với đường đua sau khi được giao tự lái.

Phần 5. Train model tự lái

Bây giờ các bạn trở về thư mục MiAI_Auto_Car, sau đó tải toàn bộ source của mình trên github này https://github.com/thangnch/self_driving và để vào thư mục self_driving trong thư muc MiAI_Auto_Car hoặc gõ lệnh sau cho nhanh gọn:

git clone https://github.com/thangnch/self_driving

Bây giờ các bạn vào trong thư mục self_driving (dùng lệnh CD). Thực hiện cài đặt một số thư viện cần thiết bằng lệnh pip nhé (chạy lần lượt từng lệnh):

pip install python-socketio
pip install numpy
pip install eventlet
pip install pillow
pip install flask
pip install keras
pip install tensorflow
pip install opencv-python
pip install matplotlib

Ngồi đợi cho mọi thứ cài đặt xong thì mở file TrainModel.py bằng lệnh

python TrainModel.py

Từng câu lệnh trong file này làm gì, mình đã comment đầy đủ rồi, bạn nào cần tìm hiểu rõ hơn thì cứ hỏi nhé, mình sẽ nói rõ thêm.

Còn bây giờ, ngồi đợi train cho xong nhé (màn hình hiện chữ Trained! là xong) . Nếu có lỗi gì các bạn cứ post lên Group Mì AI ( https://www.facebook.com/groups/miaigroup ) để anh em cùng debug và gỡ lỗi.

Phần 6. Tận hưởng thành quả xe tự lái

Nếu như việc train thành công, các bạn hãy vào thư mục traindata, sẽ thấy các file model-…h5. Hãy chọn file mới nhất ví dụ mình chọn file model-009.h5.

Chú ý: Hiện tại mình mới train 20 epoch, các bạn cần thì sửa tham số để train thêm nhé:

nb_epoch = 20

Bây giờ các bạn hãy làm tuần tự từng bước như sau:

Bước 1. Chạy file GoDrive.py bằng cách gõ lệnh

python DriveNow.py ../traindata/model-009.h5

Bước 2. Chạy phần mềm giả lập mà bạn đã tải về ở Phần 2. Và chọn Autonomous Mode. Lúc này bạn buông 2 tay và sẽ thấy xe tự lái thật thần kỳ.

Như vậy chúng ta đã có thể bước đầu làm quen với xe tự lái, tất nhiên để lái được trong thực tế, đặc biệt là đường Việt nam thì còn rất rất rất nhiều vấn đề cần giải quyết. Tuy nhiên, làm đến bước này là bạn đã làm được những điều không phải ai cũng làm được đâu! Xin chúc mừng!

Xin chào tạm biệt và hẹn gặp lại nhé!

#MìAI

Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: https://miai.vn

Ps: Xin cảm ơn bác Tuan Nguyen (https://www.facebook.com/nttuan8) đã mở đường.

Related Post

6 Replies to “[Computer Vision] Thử lập trình xe ô tô đua tự lái với mạng CNN”

  1. ad , tiện ở chỗ nào vậy ạ ??, em có đọc qua mấy bài báo thấy người ta bảo dùng máy có card NIVIDA có nhân CUDA gì ấy tiện cho ML hơn. Đang định mua lap mà phân vân quá , ad giải thích giúp em được không 😀 , em cảm ơn ad

Leave a Reply

Your email address will not be published. Required fields are marked *