CHƯƠNG 2. PHÂN TÍCH HỆ THỐNG
2.2. MÔI TRƯỜNG VÀ CÔNG CỤ SỬ DỤNG
2.2.2. Thuật toán SSD (Single Shot Object Detectors)
[Hình 2.3] Kiến trúc của SSD.
Để hiểu rõ hơn về SSD, hãy bắt đầu bằng cách giải thích tên của kiến trúc này đến từ đâu:
- Single Shot: Có nghĩa là các nhiệm vụ của định vị hóa và phân loại đối tượng được thực hiện trong một lần chuyển tiếp duy nhất của vật thể.
- MultiBox: Tên của một kỹ thuật hộp ràng buộc được phát triển bởi Szegedy et al.
- Detector: Là một bộ dò tìm đối tượng và phân loại các đối tượng được phát hiện.
- Ví dụ kiến trúc của SSD (đầu vào là 300 x 300 x 3)
Có thể thấy từ sơ đồ trên, kiến trúc SSD xây dựng trên kiến trúc VGG-16 nhưng loại bỏ các lớp được kết nối hoàn toàn. Lý do VGG-16 được sử dụng làm mạng cơ sở là vì nó rất hiệu quả trong các nhiệm vụ phân loại hình ảnh chất lượng cao và mức độ phổ biến của nó đối với các vấn đề như thu thập và cải thiện mẫu dữ liệu tốt hơn. Thay vì các lớp được kết nối hoàn toàn VGG gốc, một tập hợp các lớp phụ trợ (từ conv6 trở đi) được thêm vào, do đó cho phép trích xuất các tính năng ở nhiều thang và giảm dần kích thước của đầu vào cho mỗi lớp tiếp theo.
[Hình 2.4] Kiến trúc VGG (đầu vào là 224 x 224 x3).
SSD sử dụng các layer có kích thước giảm dần theo độ sâu để nhận dạng đối tượng. Nhìn vào hình vẽ ở trên của SSD, chúng ra dễ dàng nhận thấy độ phân giải giảm đáng kể qua mỗi layer và sẽ bỏ sót những đối tượng có kích thước nhỏ ở những
lớp có độ phân giải thấp, vì vậy trong thực tế hình ảnh đầu vào cần phải có độ phân giải cao.
Với SSD có input cũng tương tự là 8x8xD, output là 8x8x (4 + C) (4 tương ứng với 4 điểm boundary box, C là số lượng lớp đối tượng), vậy ta cần một convolution filter là 3x3xDx(4+C).
Thuật toán SSD chạy khá nhanh, nhưng độ chính xác của nó không cao (không bằng region proposal).
b. MultiBox
Kỹ thuật hồi quy hộp giới hạn của SSD được lấy kết quả từ công trình của Szegedy trên MultiBox, một phương pháp cho các đề xuất điều phối hộp giới hạn nhanh, nhạy cảm với lớp học. Quá trình xử lý được thực hiện trên MultiBox, mạng chuyển đổi kiểu khởi động được sử dụng. Các biến thể 1x1 như hình bên dưới đây sẽ giúp giảm kích thước do số lượng chiều giảm (nhưng tỷ lệ "chiều rộng" và "chiều cao"
vẫn không đổi).
[Hình 2.5] Các biến thể của hình ảnh đầu vào.
Hàm tinh giảm của MultiBox cũng kết hợp hai thành phần quan trọng đã được đưa vào SSD:
- Confidence Loss: Đo lường mức độ tin cậy của mạng là đối tượng của hộp giới hạn được tính toán, phân loại chéo theo nguyên lý cân bằng và chuyển động được sử dụng để tính toán sự tinh giảm này.
- Location Loss: Đo lường mức độ gần - xa của các hộp giới hạn được dự đoán của mạng là từ các hộp tồn tại trong tập hợp các đối tượng huấn luyện, sử dụng thuật toán L2-Norm.
Nếu không đi sâu vào toán học thì biểu thức cho hàm tinh giản, tức đo lường mức độ dự đoán của chúng ta “đúng” như thế nào:
multibox_loss = confidence_loss + alpha * location_loss
Thuật ngữ alpha giúp chúng ta cân bằng sự đóng góp của việc mất vị trí. Như thường lệ trong Deep Learning, mục đích là tìm các giá trị tham số tối ưu nhất làm giảm hàm tinh giảm, do đó đưa các dự đoán của chúng ta sẽ gần hơn với thực tiễn.
c. Thuật toán phát hiện vật thể SSD
Qua các mô hình được phân tích ở trên chúng ta có thuật toán minh họa như sau (thuật toán phát hiện vật thể trong video, sử dụng thư viện opencv-python==4.1.0.25):
import cv2
print('Project Topic : Car Counting and Speed Detection') print('Research Internship on Machine learning using Images') print('By Dang Thi My Nhan')
cascade_src = 'cars.xml' video_src = 'video.avi'
cap = cv2.VideoCapture(video_src)
car_cascade = cv2.CascadeClassifier(cascade_src) while True:
ret, img = cap.read()
if (type(img) == type(None)):
break
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cars = car_cascade.detectMultiScale(gray, 1.1, 2) for (x,y,w,h) in cars:
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,255),2) cv2.imshow('video', img)
if cv2.waitKey(33) == 27:
break
cv2.destroyAllWindows()