Xây dựng công cụ hỗ trợ quản lý và đảm bảo chất lượng cho các phiên bản phần mềm ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Mẫn Quốc Khánh TIỂU LUẬN TÌM HIỂU VỀ MẠNG YOLOV3 VÀ ỨNG DỤNG VÀO NHẬN DIỆN SÚNG Môn học Trí tuệ nhân tạo nâng cao Giảng viên GS TS Nguyễn Thanh Thủy Mục lục Chương 1 Giới thiệu 2 Chương 2 Mạng YOLOv3 3 2 1 Giới thiệu mạng YOLOv3 3 2 2 Cách hoạt động của YOLO 3 2 3 Kiến trúc mạng YOLOv3 6 Chương 3 Ứng dụng mạng YOLOv3 vào nhận diện súng 8 3 1 Bộ dữ liệu 8 3 2 Cài đặt v.
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Mẫn Quốc Khánh
TIỂU LUẬN TÌM HIỂU VỀ MẠNG YOLOV3 VÀ ỨNG DỤNG VÀO NHẬN
DIỆN SÚNG
Môn học: Trí tuệ nhân tạo nâng cao
Giảng viên: GS TS Nguyễn Thanh Thủy
Trang 2Mục lục
2.1 Giới thiệu mạng YOLOv3 3
2.2 Cách hoạt động của YOLO 3
2.3 Kiến trúc mạng YOLOv3 6
Chương 3 Ứng dụng mạng YOLOv3 vào nhận diện súng 8 3.1 Bộ dữ liệu 8
3.2 Cài đặt và huấn luyện mô hình 10
3.3 Sử dụng mô hình để nhận diện súng từ video 11
3.4 Kết luận 14
Trang 3Chương 1
Giới thiệu
Mỗi năm, có rất nhiều vụ thương vong xảy ra có liên quan đến súng Theo báo cáo của CNBC vào năm 2018, có khoảng 250000 người trên thế giới chết do súng Do đó,
để giảm thiểu số vụ bạo lực liên quan đến súng đạn, nhất là các vụ xả súng, chúng
ta cần phải có một phương pháp theo dõi hàng loạt để sớm phát hiện súng Có một giải pháp khá phổ biến là sử dụng các camera để theo dõi Tuy nhiên, việc theo dõi nhiều màn hình gặp nhiều khó khăn bởi con người có thể bị phân tán sự chú ý, mất tập trung và nếu nhìn màn hình quá lâu thì có thể dẫn đến việc con người bị tổn thương về thị giác Ngoài ra, chúng ta lại phải cần đến rất nhiều người để theo dõi các camera khác nhau, nhất là ở các thành phố lớn Điều này khiến cho các doanh nghiệp hay thành phố phải tăng thêm ngân sách chỉ để thuê thêm người Vì vậy, việc theo dõi chỉ sử dụng mỗi con người không là không hiệu quả và tối ưu chút nào Tuy nhiên, với sự tiến bộ của học sâu (Deep Learning) cùng với sự gia tăng sức mạnh xử
lý của phần cứng máy tính, việc ứng dụng học sâu để theo dõi giờ đây cũng trở nên dễ dàng Bằng cách áp dụng các mạng nơ-ron tích chập (Convolutional Neural Network hay CNN), ta vẫn có thể phát hiện được súng mà độ chính xác vẫn cao, từ đó đưa ra các cảnh báo cho con người Việc tự động hóa việc phát hiện sẽ vừa giảm bớt gánh nặng, vừa đòi hỏi ít người hơn để thực viện việc theo dõi Khi đó, con người chỉ đóng vai trò phụ, quyết định những cảnh báo là chính xác, từ đó đưa ra quyết định Bài tiểu luận này sẽ tìm hiểu về mạng YOLOv3 và ứng dụng nó để xây dựng một mô hình mạng có khả năng phát hiện được súng theo thời gian thực
Trang 4Chương 2
Mạng YOLOv3
Để giải quyết vấn đề được nêu ở Chương 1, trước hết ta cần phải chọn một kiến trúc mạng nơ-ron tích chập phù hợp với bài toán phát hiện vật thể (object detection) Mạng nơ-ron tích chập trên vừa phải phát hiện được vật thể với độ chính xác cao, vừa phải nhanh để có thể ứng dụng được theo thời gian thực Có rất nhiều mạng nơ-ron tích chập để thực hiện object detection như RetinaNet, SSD, R-FCN, Tuy các mạng này có độ chính xác tương đối cao, chúng lại tốn rất nhiều thời gian để thực hiện, không phù hợp với nhu cầu phát hiện theo thời gian thực (hình 2.1) Với mạng YOLOv3, việc thực hiện nhanh hơn rất nhiều mà trong khi đó, chúng ta chỉ phải hi sinh một chút độ chính xác của nó Vì thế, mạng YOLOv3 sẽ được sử dụng để giải quyết bài toán trên
YOLO, viết tắt của You Only Look Once, là một mô hình mạng CNN được sử dụng
để phát hiện vật thể theo thời gian thực Đúng với tên gọi của nó, mạng YOLO chỉ cần nhìn ảnh đúng một lần duy nhất để phát hiện các vật thể trong ảnh Do đó, tốc
Trang 5Hình 2.1: So sánh tốc độ và độ chính xác của các mạng CNN trên tập dataset COCO
độ hoạt động của nó nhanh, phù hợp cho việc xử lý video theo thời gian thực
Nó hoạt động bằng cách chia ảnh đầu vào thành ma trận gồmS ∗ S ô Với mỗi một vật xuất hiện trên ảnh, nếu tâm của vật rơi vào ô nào thì ô đó sẽ có trách nhiệm phải đoán vật đó Mỗi ô sẽ dự đoánB bounding box và xác suất của C class Các bounding box bao gồm 5 thành phần: x, y, w, h, conf idence x và y là vị trí tâm ở giữa của bounding box trên ảnh,w và hlà chiều dài và chiều cao của bounding box (x, y, w, hđược chuẩn hóa theo chiều dài/cao của ảnh, chạy từ 0 đến 1) Giá trịConf idencecho biết bounding box có chứa của vật nào không Trong quá trình huấn luyện, conf idence được tính theo công thức 2.1.:
Với P r(Object) là xác suất vật có ở trong box đó còn IOUtruthpred là tỷ lệ trùng của bounding box với groundtruth.Trong quá trình chạy thực tế,conf idence = P r(Object)
do chúng ta không có groundtruth để so sánh (hay IOUtruthpred) Như vậy, mạng YOLO output ra tất cả làS ∗S ∗S ∗B ∗5đầu ra liên quan đến việc dự đoán bounding box Ngoài
ra, mạng YOLO còn tính cả xác suất thuộc vào một lớp của vật,P r(Classi|Object)trên mỗi ô Do đó sẽ có tổng S ∗ S ∗ C xác suất có điều kiện Tổng output của YOLO sẽ là
S ∗ S ∗ (B ∗ 5 + C) Hình 2.2 mô tả trực quan cách hoạt động của YOLO YOLO chia
Trang 6ảnh thành S x S ô và với mỗi ô, dự đoán B bounding box, độ tự tin cho mỗi box và xác suất của C lớp
Hình 2.2: Cách hoạt động của YOLO
Do YOLO output ra rất nhiều bounding box, ta chỉ lấy các box có conf idence ≥ 0.25 làm kết quả cuối cùng Khi đó, độ tự tin của class sẽ được tính bằng tích của
conf idence và xác suất có điều kiện của lớp P r(Classi|Object) Tích này sẽ đo mức độ
tự tin của model trên cả việc phát hiện và phân loại Từ đó, ta có thể lấy class mà có
độ tự tin cao nhất để gán nhãn cho bounding box và lấy đó làm kết quả cuối cùng
Trang 72.3 Kiến trúc mạng YOLOv3
YOLOv3 là phiên bản thứ 3 của YOLO Nó sử dụng mạng Darknet-53 gồm 53 layer tích chập để học các đặc trưng của ảnh đầu vào Tổng số layer được sử dụng trong YOLOv3 là 106 Do đó, độ chính xác cũng được cải thiện hơn so với YOLOv2, vốn chỉ có 19 layer để học đặc trưng trên tổng 30 layer Ngoài ra, trong YOLOv3, hàm softmax được thay thế bằng hàm hồi quy logistic để dự đoán Nếu một class mà có
độ tự tin cao hơn một ngưỡng nhất định thì nó sẽ được gắn cho bounding box Điều này khiến cho YOLOv3 có thể xử lý được trường hợp một vật mang nhiều class khác nhau, ví dụ như “perso” và “male”
YOLOv3 có các layer như sau:
1 Residual: đây là shortcut layer Các layer này sẽ lấy output của layer trước và layer thứ 3 ở trước tính từ layer residual hiện tại, kết hợp lại làm input cho layer tiếp theo
2 Route: Layer này nếu được đặt chỉ lấy kết quả của 1 layer xác định thì output
ra kết quả của layer đó Còn nếu được đặt lấy kết của của là 2 layer xác định thì lấy output của 2 layer này rồi kết hợp lại để output ra kết quả
3 Detection layer (hay còn gọi là Yolo layer): các layer này có trách nhiệm đưa
ra các dự đoán Mạng YOLOv3 có tất cả 3 layer Yolo ứng với 3 kích thước S x S khác nhau
4 Upsample layer: tăng kích thước của đặc trưng của layer trước lên 2 bằng phương pháp song tuyến tính (bilinear upsampling)
Các layer trên giúp cho các layer trong mạng YOLO học được các thông tin output của các layer trước nó, từ đó không bị Vanishing Gradient khi mà thông tin
đi vào các layer sâu hơn
Ở hai phiên bản trước, mạng YOLO đều thể hiện không tốt trong việc phát hiện các vật nhỏ Để cải thiện độ chính xác khi phát hiện các vật nhỏ, YOLOv3 sẽ thực hiện việc phát hiện vật ở 3 mức (S ∗ S) khác nhau:13 x 13, 26 x 26 và 52 x 52 Mức
13 x 13 sẽ chịu trách nhiệm đoán các vật cỡ lớn, mức 26 x 26 đoán các vật cỡ trung
Trang 8bình và mức còn lại đoán vật cỡ nhỏ Do đoán nhận ở 3 mức khác nhau như vậy, độ chính xác khi phát hiện vật nhỏ được cải thiện đáng kể hơn so với các bản trước Việc này sẽ giúp ích rất nhiều cho việc phát hiện súng từ camera bởi thông thường, các camera thường được lắp trên cao chiếu xuống và bao quát góc rộng nhất có thể Do
đó, các vật thể khi nhìn trong camera thường tương đối nhỏ và các phiên bản YOLO trước có thể sẽ không phát hiện ra Việc dùng YOLOv3 sẽ giúp tăng khả năng phát hiện vật nhỏ từ camera để có thể cảnh báo cho người dùng
Ngoài ra, YOLOv3 còn thừa kế các điểm mạnh của YOLOv2 như sử dụng Batch Normalization và High Resolution Classifier (ví dụ như train bộ classifier ở 224 x 224 rồi tăng lên 448 x 448 lúc dùng) giúp tăng mAP lên 6%, hay tích chập với các Anchor Box để xác định các vật thể có tâm trong cùng một ô Hình 2.3 mô tả ba mức dự đoán vật thể của YOLOv3
Hình 2.3: 3 mức dự đoán vật thể của YOLOv3
Trang 9Chương 3
Ứng dụng mạng YOLOv3 vào nhận diện súng
Trước tiên, chúng ta cần phải thu thập các bức ảnh về súng Để phát hiện được nhiều nhất có thể, ta cần thu thập ảnh của nhiều loại súng khác nhau, ví dụ như các loại súng lục, súng trường v.v Có 2 kiểu ảnh được thu thập để huấn luyện: ảnh chỉ có súng và ảnh có cả người cầm/sử dụng súng Ngoài ra, cần phải thu thập ảnh súng
ở nhiều góc độ, tư thế khác nhau để tăng độ chính xác Các ảnh được thu thập từ các nguồn khác nhau như Google, Shutterstock v.v Ngoài ra, các khung hình trong video chuyên về súng cũng có thể được lấy ra để làm dataset bởi trong các video này,
ta có thể lấy ảnh súng ở nhiều góc độ khác nhau để cải thiện khả năng phát hiện của model Trong quá trình thử nghiệm, em đã thu thập khoảng 3500 ảnh khác nhau để làm bộ dataset Hình 3.1 và 3.2 mô tả 2 loại ảnh gồm loại ảnh có chứa vật thể “súng”
Sau khi thu thập xong ảnh, ta cần đánh dấu bounding box xung quanh vị trí các khẩu súng ở trong ảnh Các bounding box này sẽ đóng vai trò làm groundtruth để
so sánh khi huấn luyện mạng Việc đánh dấu được thực hiện bằng công cụ labelImg
Trang 10Hình 3.1: Loại ảnh có người cầm, sử dụng súng
Hình 3.2: Loại ảnh chỉ có súng
Trang 11ở chế độ YOLO format Sau khi đánh dấu, mỗi ảnh sẽ có một file txt với mỗi dòng trong file ứng với mỗi đối tượng mà ta đánh dấu bao gồm chỉ số (index) của class (ở đây do ta chỉ dùng 1 class là “gun” nên số này luôn là 0), vị trí theo chiều ngang, dọc của bounding box và chiều dài, chiều cao của nó Hình 3.3 mô tả ouput sau khi đánh dấu trong YOLO format
Hình 3.3: Output sau khi đánh dấu trong YOLO format
Sau khi đánh dấu xong, ta cần phải chia ảnh làm 2 bộ 1 bộ sẽ được dùng để huấn luyện mạng và bộ còn lại được dùng để kiểm tra độ chính xác sau khi huấn luyện Trong quá trình thử nghiệm, 3400 ảnh đã được lấy để làm tập huấn luyện và
100 ảnh làm tập kiểm thử
Framework Darknet của chính tác giả mạng YOLOv3 hỗ trợ sử dụng công nghệ GPU
để tăng tốc độ huấn luyện mạng Do đó, framework này sẽ được sử dụng để cài đặt mạng và huấn luyện mạng sau đó
Để cân bằng giữa tốc độ và độ chính xác cao, trong 3 kích thước ảnh đầu vào trên hình 1, kích thước 416x416 sẽ được sử dụng để vừa tối ưu được tốc độ, vừa giữ được độ chính xác tốt Khi đó, kiến trúc của model sẽ được cài đặt trong một file cfg biểu diễn trong bảng 3.1
Ngoài việc chứa định nghĩa model, file cfg này cũng được dùng để cấu hình việc huấn luyện mạng Việc huấn luyện được cài đặt để chạy cho đến khi đã hết 6000 lô ảnh với mỗi lô bao gồm 64 bức ảnh Để tránh việc hết dung lượng bộ nhớ trong khi huấn luyện, các lô ảnh lại được chia nhỏ ra thành 16 lô nhỏ hơn Tổng số ảnh được xử
lý sẽ bằng600064 = 384000ảnh (lặp đi lặp lại trong bộ training) Tốc độ học (learning
Trang 12rate) được đặt là 0.001 Tuy nhiên, để tăng tốc độ huấn luyện, trong 1000 lô ảnh đầu, tốc độ học sẽ được tăng dần cho đến 0.001 Con số này sẽ được giữ cho đến khi xử lý đến lô ảnh thứ 5400, lúc đó, learning rate sẽ được giảm đi 10 lần, giúp cho model có thể học được các trọng số tối ưu, nhất là các trọng số tối ưu toàn cục
Để tăng độ chính xác khi huấn luyện, trọng số của 53 layer tích chập đầu tiên
sẽ được lấy từ trọng số của mạng darknet53 vốn đã được tác giả mạng YOLO huấn luyện sẵn trên bộ dataset ImageNet với 1000 class từ hơn 150000 bức ảnh khác nhau làm điểm khởi đầu Các trọng số này thường được sử dụng để lấy các đặc trưng của ảnh, làm nền để tiếp tục huấn luyện mạng YOLOv3 trên các bộ dataset khác
Sau đó, việc huấn luyện sẽ được thực hiện trên dịch vụ Google Colab Thời gian huấn luyện mất khoảng hơn 10 tiếng Loss trung bình đạt được sau khi huấn luyện
là 0.090969 Với ngưỡngIOU ≥ 0.5, độ chính xác trung bình (mean Average Precision hay mAP) trên bộ kiểm thử đạt được là 0.9616 Như vậy, ta đã có một model hoàn chỉnh, sẵn sàng để sử dụng cho việc phát hiện súng Hình 3.4 mô tả phát hiện súng qua ảnh từ mô hình YOLOv3
Sau khi đã huấn luyện được model, ta có thể viết một phần mềm để sử dụng model
mà chúng ta vừa train xong, nhận đầu vào là một luồng video (có thể là từ file có sẵn hoặc từ một thiết bị quay trực tiếp) Tuy nhiên, ta có thể tận dụng framework Darknet và mở rộng nó để nó tự động xử lý video cho chúng ta và trả về các kết quả
để ta tự quyết định Em đã sử dụng framework Darknet dùng cho YOLOv4 để nó
tự xử lý nguồn video và viết phần mềm để xử lý các output mà framework sinh ra Framework này sau khi xử lý mỗi khung hình sẽ đưa ra một luồng video và một luồng JSON riêng
Với luồng video, mỗi khi phát hiện ra súng, framework này sẽ tự vẽ bounding box xung quanh nó và ghi giá trị độ tự tin Việc này được thực hiện với từng khẩu súng mà model phát hiện ra trong ảnh Ta có thể viết phần mềm cho hiện luồng video này trực tiếp đến người xem Hình 3.5 mô tả kết quả YOLOv3 khi phát hiện súng
Trang 13Hình 3.4: Kết quả của mô hình YOLOv3 khi phát hiện súng từ ảnh đầu vào
Trang 14trong một khung hình từ luồng video đầu vào vớiconf idence là 92% và bounding box xung quanh khẩu súng
Hình 3.5: Kết quả của YOLOv3 khi phát hiện súng từ video
Với luồng JSON, mỗi khi model phát hiện ra súng, framework sẽ tự viết thông tin của các bounding box như tọa độ, chiều dài, chiều rộng cùng với giá trị độ tự tin cho từng khẩu súng mà nó phát hiện được Ta có thể viết một phần mềm nhận luồng thông tin trên một cách liên tục và báo hiệu tới người dùng mỗi khi phát hiện ra súng Tuy nhiên, model này không phải lúc nào cũng đưa ra dự đoán đúng Điều này
có thể do dataset training có nhiều ảnh có vị trí súng nằm vắt chéo nên bị lẫn với vật khác trong lúc đánh dấu, hoặc có thể vật được phát hiện có hình dáng hơi giống khẩu súng Do đó, để giảm thiểu việc thông báo khi phát hiện nhầm, em đã làm theo cách sau: với mỗi khung hình, ta sẽ lấy ra độ tự tin cực đại cho chính khung hình đó Nếu con số này lớn hơn 80%, một cảnh báo sẽ được phát ra đến người dùng Nếu không, tính giá trị trung bình độ tự tin cực đại của 3 khung hình gần nhất (tính cả khung hình hiện tại) Nếu giá trị này lớn hơn 50% thì ta sẽ phát đi cảnh báo tới người dùng, còn không thì sẽ không làm gì cả
Trang 15Hình 3.6: JSON output cho khung hình trong hình 3.3
Trên máy tính chạy thử nghiệm của em, model này có thể xử lý được khoảng 27 khung hình trên giây với độ phân giải 1080P, vượt qua khung hình phổ biến với các camera hiện nay là 24 khung hình trên giây
Như vậy, bằng cách sử dụng mạng YOLOv3 và huấn luyện nó với ảnh súng, ta có được một model Từ model này, ta có thể phát triển các ứng dụng, phần mềm có khả năng tận dụng các kết quả mà model dự đoán được và từ đó, đưa ra các cảnh báo cho người dùng để có hành động kịp thời
Trang 16Bảng 3.1: Kiến trúc mô hình YOLOv3
1x
2x
8x
8x
4x
Yolo
Yolo
15
Trang 17Tài liệu tham khảo
[1] Redmon, Joseph, et al “You only look once: Unified, real-time object detection.” Proceedings of the IEEE conference on computer vision and pattern recognition 2016
[2] Redmon, Joseph, and Ali Farhadi “YOLO9000: better, faster, stronger.” Proceed-ings of the IEEE conference on computer vision and pattern recognition 2017 [3] Redmon, Joseph, and Ali Farhadi “Yolov3: An incremental improvement.” arXiv preprint arXiv:1804.02767 (2018)
[4] Nayak, Sunita “Training YOLOv3: Deep Learning based Custom Object Detec-tor.” (2019)