Cơ sở lý thuyết
Tìm hiểu về mô hình YOLO
1 Sơ lược về mô hình YOLO
You Only Look Once (YOLO) is a convolutional neural network (CNN) model designed for object detection, notable for its significantly faster performance compared to older models.
Có độ chính xác khá cao và có tốc độ khá nhanh nên giúp cho Object Detection thực hiện các tác vụ dường như là real time.
Về sau chúng ta còn có YOLO v2,v3, chạy nhanh hơn nhưng phức tạp hơn và khó cài đặt.
YOLO là một trong những thuật toán nhận diện vật thể nhanh nhất thời điểm hiện tại.
Chúng tôi sẽ khám phá ba phiên bản của YOLO, bao gồm Yolov1, Yolov2 và Yolov3, nhằm hiểu rõ hơn về cách thức hoạt động và phương pháp tiếp cận của từng phiên bản đối với đề tài.
Yolo chia ảnh đầu vào thành hệ thống lưới S×S
Mỗi ô lưới dự đoán số lượng bounding box cho một đối tượng a YOLOv1
Sử dụng Darknet framework được đào tạo trên tập dữ liệu ImageNet-1000
YOLO là một deep net kết hợp giữa convolutional layers và connected layers
Yolov1 phân chia hình ảnh thành một mạng lưới 7 x 7 ô (grid_size=7x7) Mỗi ô xác định 2 boxes.
Yolov2 eliminates connected layers and utilizes convolutional layers to predict the parameters of the bounding box containing an object It does this by relying on anchor boxes to refine the values of x, y, width, height, and score.
Để có anchor boxes, YOLOv2 sử dụng phân cụm k-means trên các ground-truth boxes.
Yolov2 nhanh hơn, chính xác hơn và giải quyết được các vấn đề của Yolov1: grid_sizex13, sử dụng DarkNet-19, mỗi ô lưới xác định 5 boxes.
- Yolov3 sử dụng Darknet-53 và nhận diện được các đối tượng có kích thước khác nhau.
Hình 11 Kiến trúc của YOLOv3
Mạng cơ sở bao gồm các mạng convolution có chức năng trích xuất đặc trưng, trong khi các lớp bổ sung được áp dụng ở phía sau nhằm phát hiện vật thể trên bản đồ đặc trưng của mạng cơ sở.
The base network of YOLO primarily utilizes convolutional layers and fully connected layers YOLO architectures are diverse and can be customized into various versions to accommodate different input shapes.
Hình 12 Sơ đồ kiến trúc mạng YOLO
Thành phần Darknet Architecture, được gọi là base network, có nhiệm vụ trích xuất đặc trưng Đầu ra của base network là một feature map kích thước 7x7x1024, được sử dụng làm đầu vào cho các Extra layers để dự đoán nhãn và tọa độ bounding box của vật thể.
Output của mô hình YOLO là một véc tơ sẽ bao gồm các thành phần: y T = [ p 0 ,⟨ t ⏟ x bounding box , t y , t w , t h
Với: p 0 là xác suất dự báo vật thể xuất hiện trong bounding box ⟨ t ⏟ x ,t y ,t w ,t h bounding box
⟩ giúp xác định bounding box
Trong đó t x ,t y là tọa độ tâm và t w ,t h là kích thước rộng, dài của bounding box.
⏟ scores of c clasees là véc to phân phối xác suất dự báo của các classes.
Tìm hiểu về YOLO
The YOLO network model resembles a conventional CNN architecture, consisting of 24 convolutional layers integrated with max pooling layers, followed by two fully connected layers The final layer employs a linear activation function, while all preceding layers utilize the leaky ReLU activation function.
Hình 13 Các lớp trong kiến trúc mạng YOLO
Sơ đồ kiến trúc mạng YOLO bao gồm thành phần Darknet Architecture, được gọi là base network, có chức năng trích xuất đặc trưng Đầu ra của base network là một feature map kích thước 7x7x1024, được sử dụng làm đầu vào cho các Extra layers nhằm dự đoán nhãn và tọa độ bounding box của vật thể.
1 Cách hoạt động của YOLO
Chia ảnh đầu vào thành lưới các ô kích thước S x S, thường là 3 x 3, 7 x 7, hoặc 9 x 9, giúp mỗi ô dự đoán các bounding boxes khi tâm của chúng nằm trong ô đó.
- Output các dự đoán là một tensor có kích thước S x S x (B x 5 + C).
Điểm tin cậy (confidence score) được tính bằng công thức Pr(Object) ∗ IoU truth pred, thể hiện khả năng tồn tại của các đối tượng (Pr(Object) ≥ 0) và mức độ tin cậy của dự đoán.
Hình 14 Cách YOLO hoạt động
Mỗi ô lưới (grid cell) dự đoán một số lượng B bounding boxes dựa trên tọa độ tâm (x, y), chiều rộng (w), chiều cao (h) và độ tin cậy (confidence) của các bounding boxes này, cùng với phân phối xác suất cho C lớp (classes).
The output formula includes five parameters for the bounding box offsets: x, y, width (w), height (h), and confidence score Additionally, B and C represent the number of boxes and the class that each cell needs to predict.
2 Hàm tính IoU(Intersection Over Union)
- Là hàm đánh giá độ chính xác của object detection
- Đánh giá định lượng sự giống nhau giữa ground truth box và predicted box.
● IoU có giá trị trong khoảng [0, 1]
● IoU càng lớn thì dự đoán càng chính xác
Hình 15 Minh họa hàm tính IoU
● Area of Overlap là diện tích phần giao nhau giữa predicted box với ground truth box.
● Area of Union là diện tích phần hợp giữa predicted box và ground truth box.
Hình 16 Các hàm Loss function của YOLO
Phân loại mất mát: tính toán sai số trong việc dự đoán loại nhãn của đối tượng Hàm này chỉ áp dụng cho các ô lưới có sự xuất hiện của đối tượng, trong khi những ô không chứa đối tượng sẽ không được xem xét.
Mất mát localization là hàm được sử dụng để tính toán lỗi cho bounding box dự đoán, bao gồm các tham số x, y, w, h so với vị trí thực tế từ dữ liệu huấn luyện (ground truth box) Trong mỗi ô chứa đối tượng, chúng ta sẽ chọn một bounding box có chỉ số IoU tốt nhất và sau đó tính toán mất mát dựa trên các bounding box này.
Mất mát độ tin cậy là hàm đo lường sự khác biệt giữa dự đoán bounding box có chứa đối tượng và nhãn thực tế trong ô vuông đó Hàm này được tính toán cho cả những ô vuông có chứa đối tượng lẫn những ô vuông không chứa đối tượng.
4 Non-maximal suppression trong YOLO
YOLO có thể thực hiện các phát hiện trùng lặp cho cùng một đối tượng. Để khắc phục điều này,
YOLO áp dụng kỹ thuật non-maximal suppression (NMS) để loại bỏ trùng lặp có độ tin cậy thấp hơn
Kỹ thuật Non-maximal suppression có thể được thực hiện như sau:
1 Sắp xếp các dự đoán theo tham số confidence score.
2 Bắt đầu từ score cao nhất, bỏ qua mọi dự đoán hiện tại nếu tồn tại bất kỳ dự đoán trước nào có cùng class và IoU > ngưỡng IoU (ngưỡng này có giá trị tùy theo từng mục đích của người sử dụng) so với dự đoán hiện tại.
3 Lặp lại bước 2 cho đến khi tất cả các dự đoán đều được kiểm tra
Hình 17 Non-maximal suppression trong YOLO
Anchor boxes là các box được định nghĩa trước về hình dạng (width, height).
Để xác định bounding box cho vật thể, YOLO sử dụng các anchor box làm cơ sở ước lượng Những anchor box này được xác định trước và bao quanh vật thể một cách chính xác Sau đó, thuật toán regression bounding box sẽ điều chỉnh các anchor box để tạo ra bounding box dự đoán cho vật thể.
Hình trên minh họa cách xác định anchor box cho một vật thể Từ Cell i, chúng ta có thể xác định ba anchor boxes viền xanh, tất cả đều giao nhau với bounding box của vật thể Tuy nhiên, chỉ có anchor box với đường viền dày nhất màu xanh được chọn làm anchor box cho vật thể, vì nó có chỉ số IoU so với ground truth bounding box cao nhất.
Như vậy khi xác định một vật thể ta sẽ cần xác định 2 thành phần gắn liền với nó là (cell, anchor box).
YOLO áp đặt ràng buộc không gian lên các bounding box, trong đó mỗi ô lưới chỉ có thể dự đoán một số lượng giới hạn bounding box và duy nhất một lớp Những ràng buộc này làm giảm khả năng nhận diện các đối tượng gần nhau và các đối tượng có kích thước nhỏ.
YOLO sử dụng các đặc trưng thô để dự đoán bounding box, do mô hình áp dụng nhiều lớp downsampling từ ảnh đầu vào Những hạn chế này khi huấn luyện dẫn đến việc YOLO không hiệu quả trong việc nhận diện các đối tượng có tỉ lệ hình khối mới hoặc bất thường so với tập dữ liệu Mặc dù YOLOv2 đã cải thiện phần nào vấn đề này, nhưng vẫn chưa đạt được hiệu suất tốt như FRCNN.
Trong quá trình huấn luyện, hàm mất mát không phân biệt giữa lỗi của các bounding box kích thước nhỏ và lớn, dẫn đến việc tổng hợp chúng có thể ảnh hưởng đến độ chính xác của mạng Lỗi nhỏ trên bounding box lớn thường ít nghiêm trọng, nhưng lỗi nhỏ trên bounding box rất nhỏ lại có thể tác động mạnh đến giá trị IOU.
Tìm hiểu về các thuật toán Deep Sort
Thuật toán Deep Sort: theo dõi đối tượng trong video bằng cách sử dụng tính năng đặc trưng để liên kết đối tượng trong các frames liên tiếp.
Bộ lọc Kalman là một công cụ mạnh mẽ có khả năng dự đoán vị trí tương lai dựa trên vị trí hiện tại Nó không chỉ ước tính chính xác vị trí hiện tại mà còn hiệu quả trong việc xử lý nhiễu, giúp cải thiện độ tin cậy của dữ liệu.
Thuật toán Hungary: thuật toán có thể cho biết một đối tượng trong frame hiện tại có giống với đối tượng trong frame trước đó hay không.
Nó sẽ sử dụng để liên kết và ghi nhận ID.
Deep module: dùng để trích xuất tính năng của box, làm đầu vào cho bộ lọc Kalman và thuật toán Hungary.
Thuật toán Deep SORT sử dụng để theo dõi đối tượng trong video và được mở rộng từ thuật toán SORT.
Deep SORT bổ sung một mạng nơ-ron được tạo trước để tạo ra các tính năng (features) cho các đối tượng.
Deep SORT, được phát triển bởi Nicolai Wojke và Alex Bewley, là một cải tiến của SORT nhằm khắc phục vấn đề số lượng ID switches cao Phương pháp này sử dụng deep learning để trích xuất các đặc trưng của đối tượng, từ đó nâng cao độ chính xác trong quá trình liên kết dữ liệu.
Sự liên kết giữa detection và tracking có thể được thực hiện thông qua tính tương tự của các tính năng, cùng với việc giảm thiểu sự chồng chéo Điều này giúp giảm số lượng chuyển đổi giữa các ID, từ đó đảm bảo việc theo dõi trở nên ổn định hơn.
Bộ lọc Kalman là công cụ phổ biến trong việc theo dõi các vật thể và dự đoán vị trí tương lai, được ứng dụng rộng rãi trong robot, máy bay không người lái và xe tự lái.
Bộ lọc Kalman được sử dụng trên mọi bounding box, vì vậy nó xuất hiện sau khi một box đã được khớp (match)
Khi liên kết được thực hiện, các hàm predict và update được gọi
Các hàm trong bộ lọc Kalman thực hiện các phép toán để tính toán trung bình trạng thái (state mean) và hiệp phương sai (covariance) Trung bình trạng thái thể hiện tọa độ của bounding box, trong khi hiệp phương sai phản ánh mức độ không chắc chắn liên quan đến các tọa độ này.
The mean(x) represents a state vector that comprises the center coordinates of a bounding box, defined by its size (width and height), along with the variations in each parameter and their respective velocities.
Ban đầu khi khởi tạo tham số, vận tốc = 0 Sau đó, chúng sẽ được bộ lọc Kalman ước tính Covariance(P) là ma trận không chắc chắn trong ước tính.
Thuật toán có thể liên kết một vật thể từ frame này sang frame khác dựa trên 1 điểm số (score) nào đó
Một số score có thể được sử dụng là:
IoU (Intersection Over Union): nếu bounding box trùng với một box trước đó thì nó có thể giống nhau.
Shape score: nếu shape hoặc size không khác nhau quá nhiều trong hai frame liên tiếp thì score tăng lên.
Convolution cost: ta có thể chạy một mạng CNN trên bounding box và so sánh kết quả này với kết quả từ 1 frame trước đó.
Hình 20 Ví dụ về liên kết trong thuật toán Hungary
Trong quá trình theo dõi hai vật thể với ID = 1 và ID = 2 từ frame a đến frame c, có một sự cố xảy ra ở frame b khi vật thể ID = 3 bị mất và xuất hiện một phát hiện mới với box màu xanh Đến frame c, vật thể ID = 3 xuất hiện trở lại, trong khi phát hiện mới từ frame b được gán ID 4.
Qua Yolov3 có 2 list các boxes: tracking list tại thời gian (t – 1) và detection list tại thời gian t.
Đầu vào của thuật toán là một ma trận chi phí:
Trong đó: IoU là chỉ số đánh giá được sử dụng để đo độ chính xác của phát hiện đối tượng.
Đầu ra : Chỉ số Tracking và Detection phù hợp.
Triển khai và kiểm thử
Chuẩn bị dữ liệu và train model
- Hiện tại có rất nhiều các open source bounding box tool khác nhau được sử dụng để gán nhãn cho mô hình YOLO (Sử dụng labelimg)
Hình 22 Giao diện phần mềm labelimg
● Gán nhãn cho đối tượng
Gán nhãn là một quá trình tốn thời gian và có phần nhàm chán, nhưng nó đóng vai trò quyết định đến chất lượng đầu ra của mô hình đào tạo Ví dụ, nếu bạn gán nhãn những cây bị khuất một nửa ở góc hình, mô hình sẽ có khả năng nhận dạng các cây đó Ngược lại, nếu bạn kéo đường bao vật thể lớn hơn kích thước thực của nó, mô hình sẽ không thể nhận diện chính xác Quá trình này giống như việc dạy một đứa trẻ, những gì chúng ta chỉ dẫn sẽ được học và thực hiện theo cách đó.
Việc chuẩn bị dữ liệu cho mô hình cần được thực hiện một cách kỹ lưỡng và thận trọng để tránh tình trạng mô hình đào tạo không đáp ứng yêu cầu, vì việc triển khai lại từ đầu sẽ tốn nhiều thời gian Trong bước phân chia dữ liệu, chúng ta sẽ tạo ra hai tệp tin train.txt và valid.txt, chứa đường dẫn tới các tệp hình ảnh trong tập train và validation.
Hình 23 Phân chia dữ liệu c Train Model
Tạo dark net train model
Hình 24 Quá trình train model
Test mode
Nhóm chúng em đã quyết định phát triển một chương trình nhận diện đối tượng đeo khẩu trang, nhằm đáp ứng nhu cầu cấp thiết trong việc phòng tránh dịch bệnh Covid-19 Chúng em nhận thấy đây là một đề tài quan trọng và hy vọng sẽ có thể mở rộng ứng dụng của nó trong tương lai.
- Sau khi thực hiện việc training dữ liệu xong, chúng em bắt đầu thực hiện quá trình test model.
Sau quá trình huấn luyện, chúng tôi đã tạo ra ba tệp quan trọng phục vụ cho việc kiểm tra mô hình Tệp đầu tiên là yolov3_testing.cfg, được sử dụng để cấu hình cho mô hình YOLO đã được huấn luyện Tệp thứ hai là classes.txt, ghi lại các lớp mà chúng tôi đã huấn luyện; trong trường hợp này, chúng tôi chỉ huấn luyện một lớp duy nhất, đó là "Wearing mask" Cuối cùng, tệp yolov3_training_last.weights chứa các trọng số được tạo ra trong quá trình huấn luyện.
Chúng tôi đã sử dụng các hàm từ thư viện OpenCV và NumPy để đọc các tệp tin, tiến hành kiểm tra mô hình và nhận diện đối tượng đeo khẩu trang.
Kết quả chúng em nhận được là:
Hình 25.Kết quả train với video đưa vào
Hình 26.Kết quả train trên webcam
4 Triển khai chương trình trên Web Application
- Chúng em sử dụng Flask Framework, để có thể triển khai model deep learning và tạo giao diện cho chương trình nhận diện đối tượng của chúng em.
Trong phát triển ứng dụng web, Python cung cấp nhiều framework hỗ trợ lập trình viên, nhưng nhóm chúng tôi chọn Flask vì nó là một framework nhỏ gọn, dễ hiểu và dễ học Flask cho phép lập trình viên dễ dàng viết mã, triển khai ứng dụng và tạo giao diện sử dụng HTML, CSS một cách hiệu quả.
Sau khi triển khai chương trình lên web application thì kết quả nhận được là: