YOLO: You Only Look Once
“You only live once, but if you do it right, once is enough.”
― Mae West
Sự phát triển của mạng neural đang dần làm hiện thực hoá khái niệm chúng ta vẫn thường gọi là Computer Vision - Thị giác máy tính. Tuy nhiên, tại thời điểm ban đầu, việc sử dụng Neural Network vẫn còn gặp nhiều khó khăn. Khi bạn muốn phát hiện ra object trong một bức ảnh, sau đó đánh nhãn cho object đó, các phương pháp lúc bấy giờ quá chậm để phục vụ trong real-time, hoặc đòi hỏi thiết bị mạnh mẽ, đắt đỏ...
... cho đến khi YOLO ra đời. YOLO và sau này là YOLOv2 có khả năng gán nhãn cho toàn bộ object trong khung hình với chỉ duy nhất một operation. Có thể nói YOLO đã xây dựng một hướng tiếp cận đầu tiên giúp đưa Object detection thực sự khả thi trong cuộc sống.
You only look once, but if your network does it right, once is enough.
YOLO - YOU ONLY LOOK ONCE
Original paper: https://arxiv.org/abs/1506.02640
Những lợi thế của YOLO :
- "Hiểu" được khái quát về đại diện của mỗi đối tượng. Qua đó có thể phát hiện và phân loại chính xác vật thể trong đời thực và các tác phẩm hội hoạ.
- Gọn nhẹ
- Open source
- NHANH
Những Region Proposal Classification network khác (như Fast RCNN) thực hiện việc phát hiện trên các đề xuất khu vực (Region proposal), do đó sau cùng sẽ phải thực hiện dự đoán nhiều lần cho các region khác nhau, scale khác nhau trong một ảnh.
YOLO có một cách tiếp cận hoàn toàn khác, chỉ sử dụng duy nhất một neural network cho toàn bộ ảnh. Kiến trúc của YOLO giống với FCNN (Full Convolution Neural Network) hơn, và hình ảnh (kích thước $n \times n$) chỉ được truyền qua FCNN một lần duy nhất, sau đó sẽ trả về ouput là $m \times m$ prediction. Hình ảnh đầu vào sẽ được chia thành các ô lưới (grid cell), và dự đoán các bounding box và xác suất phân loại cho mỗi grid cell. Các bounding box này được đánh trọng số theo xác suất đã dự đoán.
Mô hình này có nhiều điểm vượt trội so với các hệ thống classifier-based. Tại test phase, YOLO sẽ "nhìn" toàn bộ bức ảnh (thay vì từng phần bức ảnh), vì vậy những prediction của nó được cung cấp thông tin bởi nội dung toàn cục của bức ảnh Ngoài ra, dự đoán được đưa ra chỉ với một mạng đánh giá duy nhất, thay vì hàng nghìn như R-CNN. Vì vậy tốc độ của YOLO là cực nhanh, nhanh gấp hàng nghìn lần so với RCNN, hàng trăm lần so với Fast RCNN.
YOLO THỰC SỰ HOẠT ĐỘNG RA SAO?
Unified Detection
YOLO thống nhất toàn bộ các thành phần riêng biệt trong object detecion vào một neural network duy nhất. Nó sử dụng các feature từ toàn bức ảnh để predict mỗi bounding box với tất cả các class.
Bức ảnh được chia thành $S \times S$ grid, nếu tâm của object nằm trong một grid cell, grid cell đó sẽ chịu trách nhiệm phát hiện ra object này.
Mỗi grid cell dự đoán $B$ bounding box và điểm số tin cậy (confidence score) tương ứng mỗi box. Confidence score phản ánh độ tin cậy của việc object nằm trong box, đồng thời là độ chính xác, đô khớp của box so với object. Độ tin cậy được định nghĩa bởi công thức
Với $Pr(obj)$ giá trị trong $[0, 1]$ thể hiện khả năng box có chứa object, $IOU_{pred}^{truth}$ là giá trị Intersection Over Union, thể hiện độ khớp của prediction box so với ground-truth box. Nếu không tồn tại object nào trong grid cell, các confidence score của nó có giá trị bằng không.
Mỗi bounding box chứa 5 giá trị $x, y, w, h$ và confidence. Toạ độ $(x, y)$ thể hiện vị trí tương đối của tâm object so với viền grid cell. $w, h$ là kích thước tương đối của chiều rộng và chiều cao của box so với kích thước toàn bức ảnh. Cuối cùng, confidence - như đã nói ở trên - thể hiện IOU giữa predicted box và ground truth box.
(Lưu ý rằng các giá trị tương đối a của x so với y là a = x/y).
Mỗi grid cell đồng thời cũng dự đoán $C$ xác suất có điều kiện của $C$ class cho trước, $Pr(Class_i|Object)$. xác suất này phụ thuộc việc tồn tại object ở grid cell, và chỉ predict một set $C$ xác suất tương ứng mỗi grid cell, không cần quan tâm đến $B$ bounding box.
Tại test phase, 2 giá trị trên được nhân với nhau
Với $S \times S$ grid, mỗi grid cell predict $B$ bounding box (5 giá trị mỗi box) và $C$ xác suất class, các prediction được tổng hợp từ $S \times S \times (B \times 5 + C)$ tensor.
YOLO Version 2
YOLO v2 sử dụng vài trick để cải thiện quá trình huấn luyện và nâng cao performance. YOLOv2 cũng sử dụng Full-convolutional model như SSD, tuy nhiên vẫn train toàn bộ các bức ảnh thay vì chỉ hard negative. Theo hướng của Faster R-CNN, YOLOv2 sẽ điều chỉnh thông số bounding box trước, thay vì predict ngay w và h, tuy nhiên toạ độ $(x, y)$ vẫn được dự đoán trực tiếp.
Kiến trúc network
YOLO được implement như một Convolutional Neural Network. Các convolution layer trích xuất feature từ ảnh, trong khi đó các fully connected layer sẽ predict xác suất và toạ độ đầu ra.
Hạn chế của YOLO
YOLO áp đặt các ràng buộc về không gian trên những bounding box, mỗi grid cell chỉ có thể predict rất ít bounding box và duy nhất một class. Các ràng buộc này hạn chế khả năng nhận biết số object nằm gần nhau, cũng như đối với các object có kích thước nhỏ.
YOLO sử dụng các feature tương đối thô để predict bounding box, do model sử dụng nhiều lớp downsampling từ ảnh đầu vào. Bởi các hạn chế này của model khi huấn luyện để predict bounding box từ data, dẫn đến YOLO không thực sự tốt trong việc nhận diện các object với tỉ lệ hình khối mới hoặc bất thường so với tập data. YOLOv2 đã khắc phục phần nào vấn đề này, nhưng vẫn thua kém nhiều so với FRCNN.
Ngoài ra, trong quá trình training, loss function không có sự đánh giá riêng biệt giữa error của bounding box kích thước nhỏ so với error của bounding box kích thước lớn. Việc coi chúng như cùng loại và tổng hợp lại làm ảnh hưởng đến độ chính xác toàn cục của mạng. Error nhỏ trên box lớn nhìn chung ít tác hại, nhưng error nhỏ với box rất nhỏ sẽ đặc biệt ảnh hưởng đến giá trị IOU.
Qua bài viết, chúng ta đã biết được sơ lược về cách hoạt động của YOLO cũng như ưu, khuyết điểm của nó. Hy vọng sẽ được tiếp tục cùng các bạn tìm hiểu về những model Object Detection khác trong các bài viết sau.
YOLO THỰC SỰ HOẠT ĐỘNG RA SAO?
Unified Detection
YOLO thống nhất toàn bộ các thành phần riêng biệt trong object detecion vào một neural network duy nhất. Nó sử dụng các feature từ toàn bức ảnh để predict mỗi bounding box với tất cả các class.
Bức ảnh được chia thành $S \times S$ grid, nếu tâm của object nằm trong một grid cell, grid cell đó sẽ chịu trách nhiệm phát hiện ra object này.
Mỗi grid cell dự đoán $B$ bounding box và điểm số tin cậy (confidence score) tương ứng mỗi box. Confidence score phản ánh độ tin cậy của việc object nằm trong box, đồng thời là độ chính xác, đô khớp của box so với object. Độ tin cậy được định nghĩa bởi công thức
$Pr(obj) * IOU_{pred}^{truth}$
Mỗi bounding box chứa 5 giá trị $x, y, w, h$ và confidence. Toạ độ $(x, y)$ thể hiện vị trí tương đối của tâm object so với viền grid cell. $w, h$ là kích thước tương đối của chiều rộng và chiều cao của box so với kích thước toàn bức ảnh. Cuối cùng, confidence - như đã nói ở trên - thể hiện IOU giữa predicted box và ground truth box.
(Lưu ý rằng các giá trị tương đối a của x so với y là a = x/y).
Mỗi grid cell đồng thời cũng dự đoán $C$ xác suất có điều kiện của $C$ class cho trước, $Pr(Class_i|Object)$. xác suất này phụ thuộc việc tồn tại object ở grid cell, và chỉ predict một set $C$ xác suất tương ứng mỗi grid cell, không cần quan tâm đến $B$ bounding box.
Tại test phase, 2 giá trị trên được nhân với nhau
$Pr(Class_i|Object) * Pr(Object) * IOU_{pred}^{truth} = Pr(Class_i) * IOU_{pred}^{truth}$
để tạo thành độ tin cậy - confidence score từng class cho mỗi bounding box.Với $S \times S$ grid, mỗi grid cell predict $B$ bounding box (5 giá trị mỗi box) và $C$ xác suất class, các prediction được tổng hợp từ $S \times S \times (B \times 5 + C)$ tensor.
YOLO Version 2
YOLO v2 sử dụng vài trick để cải thiện quá trình huấn luyện và nâng cao performance. YOLOv2 cũng sử dụng Full-convolutional model như SSD, tuy nhiên vẫn train toàn bộ các bức ảnh thay vì chỉ hard negative. Theo hướng của Faster R-CNN, YOLOv2 sẽ điều chỉnh thông số bounding box trước, thay vì predict ngay w và h, tuy nhiên toạ độ $(x, y)$ vẫn được dự đoán trực tiếp.
Kiến trúc network
YOLO được implement như một Convolutional Neural Network. Các convolution layer trích xuất feature từ ảnh, trong khi đó các fully connected layer sẽ predict xác suất và toạ độ đầu ra.
Hạn chế của YOLO
YOLO áp đặt các ràng buộc về không gian trên những bounding box, mỗi grid cell chỉ có thể predict rất ít bounding box và duy nhất một class. Các ràng buộc này hạn chế khả năng nhận biết số object nằm gần nhau, cũng như đối với các object có kích thước nhỏ.
YOLO sử dụng các feature tương đối thô để predict bounding box, do model sử dụng nhiều lớp downsampling từ ảnh đầu vào. Bởi các hạn chế này của model khi huấn luyện để predict bounding box từ data, dẫn đến YOLO không thực sự tốt trong việc nhận diện các object với tỉ lệ hình khối mới hoặc bất thường so với tập data. YOLOv2 đã khắc phục phần nào vấn đề này, nhưng vẫn thua kém nhiều so với FRCNN.
Ngoài ra, trong quá trình training, loss function không có sự đánh giá riêng biệt giữa error của bounding box kích thước nhỏ so với error của bounding box kích thước lớn. Việc coi chúng như cùng loại và tổng hợp lại làm ảnh hưởng đến độ chính xác toàn cục của mạng. Error nhỏ trên box lớn nhìn chung ít tác hại, nhưng error nhỏ với box rất nhỏ sẽ đặc biệt ảnh hưởng đến giá trị IOU.
Qua bài viết, chúng ta đã biết được sơ lược về cách hoạt động của YOLO cũng như ưu, khuyết điểm của nó. Hy vọng sẽ được tiếp tục cùng các bạn tìm hiểu về những model Object Detection khác trong các bài viết sau.
huhu ảnh của bài không xem được ạ
ReplyDelete