Series YOLO: #4 Tìm hiểu cấu trúc YOLOv1,v2,v3 và v4 – Phần 1

1. Giới thiệu về họ hàng của YOLO và một số khái niệm cần nắm.

Sau khi đã xây dựng một model YOLO hoàn chỉnh: từ việc gán nhãn, tới việc train, nhận dạng sau đào tạo và cuối cùng là đánh giá model. Thì bây giờ chúng ta đã nắm cơ bản một số khái niệm, từ đó dễ tiếp cận và dễ tìm hiểu hơn về kiến trúc của mô hình YOLO. Việc nắm rõ cấu trúc là khá quan trọng để chúng ta có thể tận dụng tối đa hiệu quả của nó.

Một vài năm gần đây, YOLO và một số models khác như: R-CNN, RetinaNet, SSD cùng làm mưa làm gió trong làng Computer vision, có nhiều nhà đánh giá coi YOLO như là "best object detection model". Mình cũng đã có cơ hội tìm hiểu model YOLO, đầu tiên là cùng với Đồ án Tốt nghiệp của mình,  và khá vất vả trong quá trình tìm hiểu cấu trúc của nó để đưa vào báo cáo một cách dễ hiểu và chi tiết nhất. Cho nên mình quyết định làm một bài tìm hiểu rõ ràng về cấu trúc của YOLO giúp các bạn có sự chuẩn bị kỹ lưỡng nhất trong việc báo cáo, cũng như trong các cuộc phỏng vấn xin việc ( khi bạn đã có thời gian làm việc với YOLO nhé). Cmon, Let's go!!!!

Đầu tiên, các bạn nên đọc qua một vài thuật ngữ và định nghĩa liên quan tới YOLO nhé: bao gồm IOU, Recall, Precision,AP,mAP. Mặc dù khá khó nuốt, nhưng nếu không đọc thì mình nghĩ sẽ mất kha khá thời gian để hiểu được cấu trúc của YOLO một cách tường tận.:)

Link bài viết tìm hiểu về IOU,Recall,Precision,AP,mAP ở đây. (Chỉ cần đọc phần 1 thôi, không cần đọc phần tính toán AP và mAP đâu 😀 )

2. One stage vs two stage detectors.

One stage và two stage là hai khái niệm nói về cách thức hoạt động của các models.

Two stage detectors: như cái tên của nó, thì bộ nhận dạng này có hai giai đoạn:

  • Detection

    Giai đoạn 1 của model two stage.

  • Giai đoạn 2: Ở giai đoạn này, các vật thể sẽ được crop theo bounding box đã được tạo ở stage 1. Và sau đó model sẽ tìm nhãn cho các vật thể.

Classification
Model tìm nhãn cho các vật thể.

Các models two stage điển hình như là R-CNN.

One stage detectors:  sẽ không phân ra hai giai đoạn rõ ràng, mà cùng lúc sẽ thực hiện cả việc tìm kiếm bounding box và classification cho một vật thể.

one stage

Minh họa mô hình one stage( YOLO và SSD).

Thông qua detectors của mô hình thì ta chưa thể đánh giá về độ chính xác cũng như tốc độ của nó. Cần phải biết thêm nhiều thông số cũng như cách hoạt động cụ thể thì mới có cách nhìn rõ ràng hơn.

YOLO là gì? và vì sao gọi là YOLO?

Sau khi nắm vững các định nghĩa và thuật ngữ, ta bắt đầu với…. nguồn gốc cái tên YOLO nhé! 😀

Hiện nay, các models object detection thường phải lướt qua bức ảnh của chúng ta nhiều lần để có thể tìm kiếm được vật thể, hoặc sử dụng hai giai đoạn để phát hiện đối tượng.Nhưng đối với YOLO thì chỉ cần lướt qua bức ảnh một lần để phát hiện luôn đối tượng và vị trí của đối tượng ( ghê hong, ghê hong 😀 ). Cho nên cái tên YOLO( You only look once) bắt nguồn từ cách thức hoạt động của nó

2. YOLOv1.

2.1 Cấu trúc.

YOLO ver 1 sử dụng 24 lớp chập: bao gồm lớp (1×1) gọi là Reduction layers (dùng để giảm kích thước ảnh),lớp chập (3×3) gọi là Convolution layers.Xen kẽ giữa 24 lớp chập là các lớp max pooling và kết thúc bằng 2 lớp fully connected. Kết quả là một ma trận 3 chiều có dạng 7x7x30.

Với mỗi 1x1x30 trong 7x7x30 được gọi là một tensor, vậy đối với  7×7x30 thì ta sẽ có 7×7=49 tensors.

Yolov1
Cấu trúc của YOLOv1.
                                 

YOLO  chia một bức ảnh thành SxS ô lưới (grid cell), thường là 7×7 . Trọng tâm của vật thể được tìm trong các ô lưới đó ( được học thông qua việc gán nhãn và đào tạo).Nếu trọng tâm của đối tượng nằm trong ô lưới bất kỳ, thì nó (ô lưới chứa trọng tâm của đối tượng) sẽ chịu trách nhiệm tìm vật thể đó.

 

grid cell
YOLOv1 chia bức ảnh thà nh SxS ô lưới.

Vậy làm sao để những ô lưới đó tìm vật thể?

  • Các ô lưới này sẽ phải đưa ra (2xB +C) giá trị dự đoán, trong đó:

    •  B bounding box( tức là hộp chứa đối tượng)- đối với YOLOv1 thì B=2. Với mỗi B sẽ có 5 giá trị nhỏ nữa là : x (trọng tâm đối tượng theo phương x- đối chiếu với ô lưới chứa nó), y ( trọng tâm đối tượng theo phương y – đối chiếu với ô lưới chứa nó), w (độ rộng của vật thể- đối chiếu với kích thước của toàn bộ bức ảnh), h( độ cao của vật thể – đối chiếu với kích thước của toàn bộ bức ảnh) và confidence ( độ tự tin- xác suất đó là vật thể).

    • Từ 2 bounding box B, ta dựa vào confidence của bounding box nào lớn hơn và IOU so với  ground truth box ( nhãn được gán bằng tay) lớn hơn thì được xuất ra là vật thể.

      Trọng tâm vật thể
      Trọng tâm vật thể.

    • C sẽ bằng số classes và có giá trị là xác suất của trọng tâm vật thể rơi vào ô lưới đó( đối với YOLOv1 thì số classes là 20, bởi vì model YOLOv1 là một model đã được train sẵn và chúng ta không thể đào tạo hay sửa chữa được nên chỉ có thể lấy ra dùng). LƯU Ý: confidence C khác nhau nhé 😀

      C
      Giá trị của C.

 

Với mỗi ô lưới thì tối đa sẽ chỉ phát hiện được 1 đối tượng, vậy nên đối với YOLOv1 thì sẽ xảy ra những vấn đề sau:

  • Phát hiện được tối đa 49 đối tượng( nếu thuật toán chia ảnh thành 7×7).

  • Nếu một ô lưới chứa trọng tâm của nhiều đối tượng, thì model cũng chỉ phát hiện được một đối tượng có độ chính xác cao nhất.

  • Nếu vật thể nào đó quá lớn so với bức ảnh, đồng nghĩa với việc vật thể đó sẽ có nhiều trọng tâm ở nhiều ô lưới khác nhau. Vậy nên vật thể đó sẽ được phát hiện nhiều lần.

2.2. Loss function.

YOLO sử dụng hàm "tổng bình phương lỗi" (sum-squared error. Viết tắt là SSE). "Lỗi" ở đây tức là lấy giá trị của ground truth box( nhãn gán bằng tay) trừ đi bounding box prediction ( BB mà model dự đoán), sau đó bình phương giá trị này lên. Các giá trị x,y,w,h,C là giá trị của ground truth box, còn các giá trị có dấu mũ là của bb mà model dự đoán.

Loss function

  • Vế đầu tiên và vế thứ hai tính toán Localization loss.

  • Vế thứ ba và bốn tính toán Confidence loss.

  • Vế cuối cùng tính Classification loss

2.3.Non-maximal supperession (NMS).

Như đã trình bày ở trên, sẽ có nhiều vật thể lớn và trọng tâm của nó có thể rơi vào nhiều ô lưới(grid cell) cùng một lúc, sẽ dẫn tới việc một vật thể sẽ được dự đoán nhiều lần…Cho nên tác giả đã sử dụng NMS để loại bỏ những trường hợp như thế này. Cách thực hiện:

NMS
Minh họa NMS.

  1. Loại bỏ những đối tượng có confidence C < C-threshold ( ngưỡng này chúng ta có thể re setup).

  2. Sắp xếp những đối tượng có confidence C theo thứ tự giảm dần.

  3. Chọn bounding box của những vật thể có confidence C cao nhất và xuất ra kết quả.

  4. Loại bỏ những bounding box có IOU < IOU-threshold (ngưỡng này chúng ta có thể re setup)

  5. Quay lại bước 3 cho tới khi mọi kết quả được kiểm tra.

3. YOLOv2.

3.1 Cấu trúc:

YOLOv1 gây ra rất nhiều lỗi về việc xác định vị trí của vật thể, và hơn nữa thì giá trị recall luôn thấp. Nên tác giả đã phát triển lên ver2 nhằm mục đích giải quyết những vấn đề đó, với những cải tiến:

  • BatchNormalization( BN): thêm BN vào tất cả các lớp chập. Việc này có thể giúp chúng ta tránh được hiện tượng giá trị của xx rơi vào khoảng bão hòa sau khi đi qua các hàm kích hoạt phi tuyển. Vậy nên nó đảm bảo rằng không có sự kích hoạt nào bị vượt quá cao hoặc quá thấp. Điều này giúp cho các weights mà khi không dùng BN có thể sẽ không bao giờ được học thì nay lại được học bình thường. Điều này giúp chúng ta làm giảm đi sự phụ thuộc vào giá trị khởi tạo của các tham số. Và sau khi áp dụng BN thì giá trị mAP của model đã tăng thêm 2%.

  • Bộ phân loại phân giải cao (High Resolution Classifier):

    •  YOLOv1 sẽ đào tạo bộ phân loại với ảnh có kích thước 224×224, sau đó sẽ tăng kích thước lên 448×448 để nhận dạng.

    • Còn đối với ver2, tác giả vẫn đào tạo bộ phân loại với ảnh có kích thước 224×224, sau đó đào tạo tiếp với ảnh có kích thước 448×448 ở 10 epochs cuối, cuối cùng mới detection ở ảnh có độ phân giải 448×448. Việc sử dụng High Resolution Classifier này giúp tăng mAP lên tối đa 4%.

  • Phát hiện nhiều đối tượng trong một ô lưới(gird cell):

    • YOLOv1: đối với hình trên, ver 1 sẽ chỉ có thể nhận dạng được hoặc là người hoặc là cavat trong ô lưới màu đỏ.

    • Nhưng tới ver2, để giải quyết vấn đề đó, tác giả đã cho model dự đoán nhiều bounding box hơn. Và để dự đoán nhiều bounding box thì khái niệm Anchor box ra đời.

      YOLOv2
      Phát hiện nhiều đối tượng trong một ô lưới.

    • Anchor box: nó là các bounding box nhưng được tạo ra sẵn ( còn bounding box là do model dự đoán). Với một ô lưới sẽ có trách nhiệm tạo ra một số K các Anchor box với các kích thước khác nhau. Các Anchor box này sẽ được dự đoán xem là nó có chứa vật thể hay không, dựa vào kết quả tính toán của IOU giữa nó và ground truth.( nếu IOU > 50% thì Anchor box đó được coi là chứa vật thể).

      Anchor box
      Hình ảnh minh họa 1% số lượng Anchor box trong mạng RetinaNet

    • Các vật thể nhỏ: YOLOv2 chia bức ảnh thành 13×13 ô lưới nên khả năng tìm kiếm được các đối tượng có kích thước nhỏ là cao hơn so với YOLOv1 là 7×7.

    • Được đào tạo trên nhiều kích thước ảnh đầu vào: đối với YOLOv1 thì chỉ được đào tạo trên một vài kích thước ảnh đầu vào cố định, nhưng sang YOLOv2 thì tác giả đã cho đào tạo mô hình trên các ảnh có kích thước thay đổi từ 320×320 cho đến 640×640. Điều này làm cho model có thể học được nhiều đặc điểm của đối tượng hơn cũng như cho ra độ chính xác cao hơn.

    • Tensor: Với việc bỏ đi các lớp fully connected và thay vào đó là sử dụng anchor box, kết quả cuối cùng của mô hình sẽ là : 13x13x 125. Với mỗi tensor có kích thước 1x1x125 được tính như sau: k x (5 +20), trong đó k =5 và 20 là số lượng lớp vật thể được đào tạo sẵn.

    • Darknet19: với YOLOv1 sử dụng backbone là 24 lớp convolution thì sang YOLOv2 lại được sử dụng Darknet19 với 19 lớp convolution cùng với 5 lớp max pooling ( không có các lớp fully connected để dự đoán mà thay vào đó thì anchor box được sử dụng). Darknet19 xử lý rất nhanh trong việc nhận dạng vật thể nên rất có ý nghĩa trong việc xử lý ở thời gian thực.

      Darknet19
      Cấu trúc Darknet19.

    • Với việc sử dụng darknet19 (19 lớp chập) và thêm 11 lớp chập nữa để phục vụ quá trình nhận dạng vật thể. Điều này khiến cho mô hình khá chật vật khi gặp phải những đối tượng có kích thước nhỏ. Cùng với việc cấu trúc của nó không hề sử dụng các nguyên liệu hiện đại tại thời điểm đó như: residual, upsampling hay skip connect. Nên khó có thể trích xuất được tốt nhất các đặc trưng của vật thể.

Bài đã quá dài cho nên mình sẽ giải thích YOLOv3 và YOLOv4 ở phần tiếp theo nhé. Hi vọng các bạn cảm thấy dễ hiểu và dễ hình dung.

 

Bài viết tham khảo:

YOLO: Real-Time Object Detection (pjreddie.com)

YOLOv1 paper: [1506.02640] You Only Look Once: Unified, Real-Time Object Detection (arxiv.org)

YOLOv2 paper: [1612.08242] YOLO9000: Better, Faster, Stronger (arxiv.org)

Object Detection YOLO v1 , v2, v3 | by Venkata Krishna Jonnalagadda | Medium

Review: YOLOv2 & YOLO9000 — You Only Look Once (Object Detection) | by Sik-Ho Tsang | Towards Data Science

 

 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *