優化結構以減少運算量,YOLO v10 實現端到端即時物件偵測的目標

YOLO(You Only Look Once)是一種即時物件偵測系統,自2015年首次提出以來,已經在電腦視覺領域引起了廣泛關注。這項技術的主要創新在於其高效、快速的物件偵測方法,使其在實際應用上都佔有一個重要的地位。在每一代 yolo 的發展都是在即時性與精確度上進行討論。

前言

YOLO 的目標,簡單來說:就是要在一張圖片當中可以找到多個物件,並且輸出這個物件的類別與物件偵測的 Bounding box 的座標。如下圖,圖中除了類別之外,紫色與紅色的框就是由 YOLO 輸出的 Bounding box 的座標繪製而成。


在 YOLO 執行的過程中,會輸出很多的 Bounding box,想要從中找到較好的 Bounding box,就會需要後處理的演算法 Non-Maximum Suppression (NMS),透過 NMS 從中挑選較好的 Bounding box,但因為這個演算法是重複比較計算,所以造成 YOLO 執行的時候花費很多的運算時間。

在 2024年5月發布了 YOLOv10 的論文,他提出了解決在 Inference 階段因為 Non-Maximum Suppression (NMS) 造成的瓶頸,以及對模型架構進行優化。以下會先介紹甚麼是 NMS,再說明 YOLOv10 是如何調整以增加即時性的目標。

Non-Maximum Suppression (NMS)

什麼是 NMS
通常會先框選出多個潛在的物件,再判斷這些候選框中哪些是真正的物件。然而,一個物件往往會被多個候選框選中,如下圖所示。在這種情況下,為了消除多餘的框並找出最適合的框,大多數研究會使用 NMS 技術來達到這個目的。


NMS 的流程
1. 會先將候選框依照物件的信心分數進行排序,信心分數越高代表候選框中有物件的可能越大
2. 設定一個 Threshold
3. 計算「信心分數最高」的候選框與其他的候選框的重疊比例(IoU)
4. 利用 Threshold 過濾 IoU>Threshold 的其他候選框

重複步驟2~步驟4,直到沒有剩餘的候選框可以比較為止。

NMS 的缺點
1. 框選的品質好壞會受到 IoU 過濾的 Threshold 影響
2. 在多個物件較大的任務下,會需要頻繁的一直計算 NMS,影響了 Inference 的速度
3. 如果有多個類別位置太靠近,NMS 可能無法有效的區分出多個物件

因為這些缺點,尤其是第2個缺點讓 NMS 成為在 Inference 階段的瓶頸,也讓 YOLO 在 End-to-End 的發展受到限制。

YOLOv10.

YOLOv10. 提出了一個重要的概念 : NMS-free ,作者認為既然 NMS 帶來的運算時間的瓶頸,那如果在運算的過程中不使用 NMS 是不是就可以縮短運算時間,打破這個 Bottleneck。

NMS-Free
NMS-Free 的訓練所使用的方法稱作 Consistent Dual Lable Assignment,這個方法採用了兩個 Head:

  1. One to many head : 一對多的概念是,針對一個物件,模型會輸出多個候選框,並且選擇與 GroundTruth 的 IoU 超過 Threshold 的候選框為正樣本,這樣做的目的是,讓訓練的過程中有更多的資訊反饋,有助於網路優化。然而,這種分配策略需要依賴NMS後處理,這會導致部署時的推理效率不佳。
  2. One to one head : 一對一的概念是,每一次預測都只會有一個預測的結果,這樣的方式可以避免使用 NMS ,但是在訓練的過程中因為反饋的資訊很有限,所以影響在訓練階段的準確率與收斂的時間。


這兩個方式都各有優缺點,所以作者結合了這兩個概念,在訓練的過程中使用這兩個 Head,One to many head 負責網路優化的部分,One to one head 是要確保模型在訓練的過程中學會預測最佳的 Bounding box,結構如下圖。在 Inference 的時候,作者只保留 One to one head 進行 Inference。


但這兩種 Head 在訓練的階段都會反饋資訊給神經網路,所以在訓練階段沒有讓這兩個 Head 有一致性的話,也可能會導致訓練結果不佳。作者提出了 Consistent Match Metric,利用這個 Metric 計算這兩個 Head,再進一步計算,使 One to one的結果可以與One to many 結果對齊。

m = s p α I o U ( b ^ , b ) β

p 代表的是分類得分。b^ 是預測的 Bounding Box。b 是正確的 Bounding box。s 表示空間先驗,指的是預測的 Anchor 是否在 Ground Truth 內。alphabeta 是超參數。

利用這個 Metric 計算 One to one 得到 mo2o=m(αo2o,βo2o)One to many 得到 mo2m=m(αo2m,βo2m),這個指標會影響兩個Head 的標籤分配和監督資訊。有了這兩樣的數值就可以再進一步的計算,作者將正確答案與預測結果的最大 IoU 表示為 u,Head 最佳的 Matching Metric 分別表示 mo2mmo2m。在 One to many 中定義多個正樣本為 Ω。在這些正樣本中,我們可以把分類目標的 Metric寫成 to2m,j=umo2m,jmo2mu,jΩto2o,j=umo2o,jmo2m=u。接下來就可以帶入1-Wasserstein distance 計算這兩個 head 中間的 Supervise info 差距,公式如下:
A=to2o,iI(iΩ)to2m,i+kΩito2m,k

從這個公式作者觀察到隨著 to2m,i 增加,A 會慢慢減少,代表中間的差距越短,當 達到最小的時候 i 會是正樣本中最佳的,可以表示為:最好的狀況是 to2m,i=u,因此作者認為在 One to many 中最好的 Positive sample 也會是One to one中最好的。

在這篇論文作者加上了 A 的資訊,使這兩個 Head 在訓練的時候,有一個對齊的依據,讓 Head 的目標對齊,作者統計在 One to many 的 Top 1/5/10 的結果中 One to one 的匹配數量,如下圖,可以發現經過一致性的對齊之後,One to one 的匹配數量是有提升的。


Model Architecture
除了提出 NMS-free 的架構之外,做這也有針對模型結構做調整。

  1. Lightweight classification head : YOLO 在 Head 的結構中,通常分類與回歸都是使用同一個架構,在同一個架構下,作者發現 Classification head 比 Regression head 多出很多的運算量。根據做這分析的結果,Classification head 跟 Regression head 比較起來,Regression head 更會影響模型的表現,基於這個分析,就可以將 Classification head 的結構在做得更輕量化,做法為使用 2 個 $33$ 的 Separable Convolution 後接 $11$ 的 Convolution 以求降低參數的計算量。
  2. Spatial-channel decoupled downsampling : YOLO 的架構通常都是以 Strides=2 的 $3*3$ Convolutions 所組成的,作者在不影響 Performance 的狀況下,將這些卷積層調整成 Pointwise 的 Separable Convolution,降低參數的計算量。並且在 Separable Convolution 進行 Downsampling。
  3. Rank-guided block design:在過往的 YOLO 裡面通常每一個 Stage 都是使用同樣的基礎架構,作者就分析了 YOLOv8 裡面每一個 Stage 做了一個 Stage 的排名檢查哪些 Stage 是多餘的,排名的依據是用每個 Stage 所學到的 Representation 跟重要性來做計算的。

從這張圖來看,在模型規模越大,且越深的 Stage 排名較低,就代表這個 Stage 相較其他的是比較多餘的,較不會影響到最後的 Performance,做這就將這幾個 Stage 替換成比較高效能的網路架構,e.g. : Compact Inverted Block (CIB)。下圖是 CIB 的結構。在替換的過程中需要逐步替換,每一次替換都要對網路做測試,確保不會影響到 Performance。

這個策略的優點在於它能夠根據模型的實際情況來動態調整每個階段的設計,從而實現更有效率的模型結構。可以在各個階段和不同模型規模之間找到最佳的平衡點之間找到最佳的平衡點,從而提高整體模型的效率,同時保持整個網路的表現。

Accuracy driven model design
作者們也針對 Large Kernel Convolution 與 Self-Attention 上面做了研究跟探討:

  1. Large-Kernel : 使用大卷積核是可以增加視野域,看更廣的東西。但是還是有一些缺點。在淺層使用大卷積核的狀況下,可能會影響小物件的辨識率,若是在 high-resolution 的 Stage 使用大卷積核,可能也會造成 I/O 的負擔。作者建議改善的方式,是在深層的 CIB 的結構中將第二個 $33$ 的卷積替換成 $77$ 的卷積核,此外,也加入了重參數化的技術,在不增加 Inference 負擔的前提下,加入了 $3*3$ 卷積核的分支,提升訓練網路的優化。但是,隨著網路的規模越來越大,大卷積核的好處會慢慢體現不出來,所以作者建議在小規模的網路可以使用大卷積增加視野域,增加模型表現。

  2. Partial Self-Attention : 使用 Self-Attention 在深度學習當中是很常用的技術,目的是要留住全局的特徵,讓模型的表現可以提昇,但是使用 Self-Attention 會需要很大的運算量,而且在較為深層的 Stage 會因為特徵圖的解析度較低,所以沒有辦法呈現使用 Self-Attention 的優勢。為了解決這個問題,作者使用了 Partial Self-Attention (PSA) 的設計,簡單來說,在上述排名比較低的 Stage4 中,使用 $1*1$ 的卷積核,將特徵圖平均分成兩部分,一部分輸入Multi-Head Self-Attention MHSA)執行 Self-Attention,另一部分與做完 Self-Attention 的特徵圖做 Concatenate,結構如下圖。

Partial Self-Attention 的設計有效地將全局建模能力引入模型中,同時透過減少計算複雜性和記憶體佔用,提高了模型的效能和效率。

實驗結果
在實驗結果部分,YOLOv10 以 YOLOv8、YOLOv6...等的模型當成基準,比較了各個 Size 的模型,比較的項目包含模型的參數、Latency、還有 Average Precision,如表一呈現

根據這張分析表,各自比較不同大小的模型,YOLOv10 因為有針對模型的 Classification head、還有對特定的 Stage 做調整,相較於其他的模型參數量較少,FLOPs(G)與 Latency 也都降低了一些,值得關注的是 AP 雖然沒有很大的差異,但這也跟作者的想法一樣,在不影響模型的表現下,有效的節省運算量。


由上圖的測試結果,資料集是用 COCO,從圖中也看出 YOLOv10 優化之後,在差不多的 AP 下參數量與 Latency 都減少了。

綜合來看,YOLOv10 透過提出新穎的設計策略和技術方法,成功改善了Object Detection 模型的效能和效率,為 Real-time end-to-end object detection 領域帶來了新的突破和貢獻。

相關文獻:

  1. 原文
  2. Google Colab for YOLOv10
  3. YOLOv10 Github
  4. Separable Convolution
  5. NMS
  6. 1-Wasserstein distance
  7. What Makes for End-to-End Object Detection?

(撰稿工程師:魏旻柔)