Howdy các bạn. Một tuần mới lại bắt đầu, tranh thủ đầu tuần có tý time rảnh mình sẽ guide các bạn một ví dụ thực tế rất tốt của YOLO (tiện thể làm 1 series về YOLO để còn chuyển sang vấn đề khác).Trong bài này, như title, mình sẽ guide các bạn làm một hệ thống chống khủng bố đơn giản bằng cách phát hiện súng. Ví dụ các bạn có thể đấu nối hệ thống camera của cơ quan, nhà ở, văn phòng, ngân hàng… vào model của các bạn và ngay khi có ai đó vác súng (hay vật gì đen đen, cong cong giống súng) ra dọa thì các bạn sẽ ngay lập tức cảnh báo, thông báo đến các bộ phận hữu quan.
Bài này mình làm sample ở mức cơ bản, bạn nào muốn sử dụng trong thực tế có thể sẽ cần improve nhiều thứ, customize nhiều thứ để phù hợp với điều kiện của các bạn nhé.
Như thường lệ, chúng ta cùng bắt đầu với cấu trúc bài viết 😀
- Phần 1. Chuẩn bị dữ liệu súng để train
- Phần 2. Tiến hành train model YOLO v3
- Phần 3. Viết code để gọi YOLO/darknet từ Python (object detection từ video)
- Phần 4. Tận hưởng thành quả nào!
Phần 1. Chuẩn bị dữ liệu để train
Yeah, detect súng thì chắc chắn là phải có dữ liệu train về súng để các bạn feed cho model rồi.
Mình biết các bạn rất ngại gán nhãn, đặc biệt là với các bộ dữ liệu vài nghìn images do đó mình đã chia sẻ một bộ dữ liệu gán nhãn sẵn để các bạn sử dụng. Các bạn truy cập https://miai.vn/thu-vien-mi-ai/ và vào phần Dataset > Hình ảnh và chọn Dữ liệu hình ảnh 3000 súng ngắn chất lượng cao có gán nhãn để tải về nhé.
Xong rồi, giờ sang đến phần 2. Ah quên, hãy tạo một thư mục MiAI_GunDetection để lưu mọi thứ của bài này nhé.
Phần 2. Train model YOLO v3
Các bạn đứng tại thư mục MiAI_Gundetection và thực hiện tuần tự như sau:
Bước 1. Gõ lệnh để lấy source darknet về máy.
Nếu bạn sử dụng MacOS hay Linux thì gõ lệnh
git clone
https://github.com/pjreddie/darknet
Nếu bạn dùng Windows thì gõ lệnh
git clone https://github.com/AlexeyAB/darknet
Nếu thành công sẽ có thêm 1 thư mục darknet trong MiAI_GunDetection.
Bước 2. Gõ lệnh để lấy mã nguồn kết nối Python với Darknet. Các bạn đứng tại thư mục MiAI_GunDetection (không vào thư mục darknet nhé) và gõ lệnh:
git clone https://github.com/thangnch/gun_detection
Rồi, bây giờ copy tất cả nội dung trong thư mục gun_detection đè sang thư mục darknet.
Bước 3. Train model.
Dữ liệu súng tải về ở Phần 1, các bạn copy vào thư mục darknet nhé (copy nguyên cả thư mục data – được giải nén ra – paste vào thư mục darknet cho nó đè lên thư mục data hiện tại)
Tiếp theo, các bạn sửa file Makefile và train model. Riêng về phần này thì các bạn tham khảo lại 03 bài viết của mình để train cho phù hợp với cấu hình, điều kiện máy móc, OS của các bạn nhé. Nếu vướng mắc gì các bạn cứ post lên group Mì AI để được tháo gỡ nhé ( Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup )
Phần 3. Viết code để nhận diện súng từ video
Rồi, như vậy qua Phần 2. Các bạn đã train xong model. Nếu bạn nào có máy tính khủng có thể train ở local, bạn nào không có thì train trên colab, các bạn tiến hành tải file weight đã train về local nhé. Giả sử mình tải file weights yolov3.backup vào trong thư mục /darknet/backup ở máy tính của mình nhé.
Bây giờ các bạn cùng viết code để phát hiện súng từ video nhé. Các bạn hãy trở về thư mục MiAI_GunDetection/darknet và xem file video_detection.py nhé. Mình đã comment đặc tả từng dòng code trong file rất chi tiết rồi.
Về tổng quan, file này sẽ load weights YOLO đã train, sau đó đọc một file video, lặp qua từng frame của video và detect súng trong frame đó.
Các bạn chạy thử bằng lệnh sau:
python video_detect.py -cl yolo.names -w backup/yolov3.backup -c cfg/yolov3.cfg -i cam01.mp4
Nếu okie, thì video sẽ hiển thị lên màn hình và khi có súng sẽ được phát hiện và khoanh vùng. Tuy nhiên, do dữ liệu train còn ít, thời gian train chưa nhiều và chưa fine tune theo từng điều kiện nên có thể model chưa phát hiện được 100% tình huống. Các bạn khi sử dụng trong thực tế thì fine tune thêm nhé.
Chúc các bạn thành công!
Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: https://miai.vn
Youtube: http://bit.ly/miaiyoutube