我與YOLO的十年,物件偵測技術回顧與未來期待
那個當年星光熠熠的創新,過了十年後的成長蛻變成甚麼樣子。YOU ONLY LOOK ONCE,就像My life only look once,人生也只有一回罷了。
聲明優先 TL;DR
這篇非技術文章,但我認為可以是一份很好的指引。內容都是我的筆記跟對話紀錄,比方說我會不斷自我迴歸,直到找到我認為可以停止的答案為止。我是站在應用與產品開發的角度去看待這一項技術,當然過程中也產生許多個人的熱情與動機去進行深入探討。我是CS背景但我不會描述太多數學,讓整篇可以讀起來比較流暢一些。研究、理解、假設、找問題、驗證答案,一次又一次值到滿意。好的技術要配上好的產品,更重要的是要能夠有所貢獻,講的夢想一點就是站在開源巨人的肩膀上改變世界。
我假設讀者都有對應基礎或相關的知識,不一定用過但聽過或看過。不懂沒關係,但可以嘗試跟著我的脈絡去理解甚至幫助學習,這也是會有這一篇的主要原因,我會有很多問題跟對應的答覆,然後附近連結,盡可能貼近源頭。最好是研究生,因為引用一些論文,而論文就跟金字塔一樣,必須累積然後探索,從最寬的底部探到最純粹的空間那一部分。
嗯,我決定讓這篇偏向思考過程,不要有過多的結構以及冗餘的資訊,我最近很喜歡用脈絡兩個字,因為有了脈絡,大家就可以非常輕易的產生出自己的版本,但在沒有脈絡之前,就很難有信任。
我是誰
我是Allen,工作上大家都叫我小a,目前職涯也進入到第十年。現職軟體開發團隊主管,白話一點說我們團隊就是在打造適用於Edge AI的硬體平台,不只有硬體,而軟體及AI整合更是我們的核心技術。軟體很容易讓人聯想到程式碼,但實際上我認為軟體工程師(Softward Enginner)的本質在於工程(Engineering),因為工程才是能夠乘載技術最重要的一哩路。因此寫程式(Coding),只是打造產品過程中的一個環節,更多時候還是在解決各層開發、產品、測試甚至發布(Release)工程。更多資訊都可以在我個人的資訊內看到。
現在是個資本主義的世界,連同資訊甚至資料都是。我也掙扎了十年但也慢慢看開並且持續學習跟進步,或許更重要的是:比起外界眼光,怎麼看待自己還是最根本最重要的事情。我所處的領域與產品可能不是太光鮮亮麗,這麼講有點自貶,但我認為只是缺發故事包裝罷了,寫到這是想鼓勵大家要以自己是工程師為傲,無論身在何處。尤其是,人少的地方更需要堅持下去。
YOLO的十年
[2408.09332] YOLOv1 to YOLOv10: The fastest and most accurate real-time object detection systems
You Only Look Once: Unified, Real-Time Object Detection
YOLOv1, Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi, 華盛頓大學, 2015
📄 論文連結
YOLO9000: Better, Faster, Stronger
YOLOv2, Joseph Redmon, Ali Farhadi, 華盛頓大學, 2016
📄 論文連結
YOLOv3: An Incremental Improvement (SPP, FPN)
YOLOv3, Joseph Redmon, Ali Farhadi, 華盛頓大學, 2018
📄 論文連結
YOLOv4: Optimal Speed and Accuracy of Object Detection (CSPNet, PAN)
YOLOv4, Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao, 台灣中央研究院, 2020
📄 論文連結
YOLOv5 (架構及工程細節優化)
YOLOv5, Glenn Jocher, Ultralytics, 2020
YOLOv6 (量化, 架構更適合! 與蒸餾技術, 更適合落地. 解決工程開發與訓練的效率)
YOLOv6, Chuyi Li, Lulu Li, Hongliang Jiang, Kaiheng Weng, Yifei Geng, 美團 (Meituan), 2022
📄 論文連結
YOLOv7: Trainable Bag-of-Freebies Sets New State-of-the-Art for Real-Time Object Detectors (E-LAN)
YOLOv7, Chien-Yao Wang, Alexey Bochkovskiy, Hong-Yuan Mark Liao, 台灣中央研究院, 2022
📄 論文連結
YOLOv8 (開發與工程上的創新, 整合更多應用並提供 API, 偏商業)
YOLOv8, Glenn Jocher, Ultralytics, 2023
YOLOv9: A Comprehensive Review of YOLO Architectures in Computer Vision (GELAN, PGI)
YOLOv9, WongKinYiu 等, 台灣中央研究院、台北科技大學, 2024
📄 論文連結
YOLOv10: Real-Time End-to-End Object Detection (Transformer-based)
YOLOv10, Ao Wang, Hui Chen, Lihao Liu, Kai Chen, Zijia Lin, Jungong Han, Guiguang Ding, 清華大學多媒體智能組織, 2024
📄 論文連結
基本上這篇論文貫穿了我今天想要講的主題,但如果沒有深入其中,就很難有感觸這整個過程的進程有多麼讓人興奮與期待。接著我會用我的角度與說故事的方式來看整個時間軸所看到的一些啟發。
蹭一下近期火熱的DeepSeek,若開源影響程度我敢說,YOLO完全不輸DeepSeek。有了十年的資料集,更能感受到同樣的結果放在不同時空背景,那衡量基礎有多重要。開源的影響程度,絕對不是那種秘密公開少賺到錢這麼低俗,面向整個技術發展跟轉變,開源跟貢獻開源的一切,就像人類大歷史提到的:等待基因變化太慢,透過文化改革才能推進人類發展速度。
在此先送上深深的一鞠躬,沒有這些先進就沒有今天的我。基本上工作前後超過十年,而能夠在這產業待超過八年,若沒有接觸CNN沒有YOLO真的就沒現在的我了。
You Only Look Once,講真的我也是最近才參透YOLO四個字的意義。從Two-Stage到One-Stage的突破,你只要看一次就可以得到一切。這兩次到一次就是YOLO四個字的精神。傳統Two-Stage是先產生候選區域(Region Proposals),再逐一分析候選區域的內容。
2015也正是我加入i社的第一年,當時我正從谷底準備翻身,從製造端出發。這邊快轉一下,也就是說真正使用到YOLO是我2018年開始念碩班的時候,在此之前從不學無術到精通C++的階段,才有機會轉軟體工程師,才有機會考上交大。也才有那張門票可以在公司內部敲開大家對於CNN的想像與理解。這些故事都可以參考先前的文章。
Blaming darknet/darknet_video.py at master · AlexeyAB/darknet
2020年我發了一個PR給Alexab的darknet。當時正在寫碩士論文,沒錯,YOLOv4正是當時我論文內使用的主力。
我的論文簡報截圖
到這我可以坦白說,我就是一個跟大家一樣把軟體裝一裝,模型載一載就開幹的狀態。對於YOLO就像看待黑盒子一樣,只知道:哇賽,又快,框又準,太酷了!甚至對於架構或是歷史都沒有研究。畢竟注意力當時在於工作跟學業兩頭燒,我必須用最短時間完成學業,雖然我也花了三年。但這三年是平行處理,工作也沒有掉拍,此時的我也剛接下管理職務。
我想從YOLO在2015問世後直到YOLOv3開始有了進展:FPN。所謂改善小物件的偵測能力的關鍵點。從架構上可以看到,最底下由淺入深。淺的特徵圖看比較廣比較多,而深特徵圖看比較細比較窄。透過FPN可以有效地進行不同尺度的特徵融合。
接著YOLOv4迎來了CSPNet,及PANet。這邊我是沒太多疑問,就不多補充了。
從v4的論文中可以明顯地看到Backbone、Neck、Head。Backbone: 做全圖特徵提取;Neck: 進行多尺度特徵提取;Head: 進行物件框選預測。這邊也讓我更清楚為什麼YOLO系列會區分三個部分。網路上總是有美美的各種架構圖,但看久了還真的不知所以然,往論文一探,把上下文補足,一切就明瞭了,這對於後續看待整個演進會非常有幫助。
YOLOv4是一個階段性的代表作。到這邊我沒有講太多細節的部份,比方說訓練比方說數據。但我假設大家都很清楚,It works. 我的目的是:好是好在哪,可以大概要知道。接著每一個版本,就是貢獻上一版本的壞並改善。
此時的v4其實放在Edge端平台有點挑戰,當時最強的Jetson Xavier跑標準的v4,在不做任何優化的前提下還無法跑滿。當然,有了v4-Tiny救了我們這些貧窮的工程師還有學生們,當時也開始有各種Model size scaled的組合推出,王博士團隊也積極地往終端裝置的硬體限制去思考模型可以怎麼off-load過去。【冠軍模型催生關鍵:業界出題學界解題模式】一場會議催生世界第一物件偵測模型YOLOv4,一張GPU就跑得動 | iThome
談到YOLOv4-Tiny。這版本是我們做產品第一個選用的Size,主要原因也是因為當初選的硬體算力只有1.5TOPS。正因為這樣,在資源有限的情況下,我們極盡所能地訓練,也從中挖掘與實驗出許多訓練心得。但Tiny充其量就是一個針對低準確度及快速PoC的版本,在沒有實際應用需求下,Tiny的準度很難提升起來。
2023年開始,市場慢慢一刀切開,課金組的NVIDIA,在CP值最好的情況下有廣大的開發社群支持,沒有一個Model不支持GPU。在非NV陣營的我們,只有Tiny是不夠的。那該怎麼辦?我提了一個想法:模型應該夠用就好以及專注訓練的優化。
夠用就好是甚麼意思?
- 依照模型的條件coco最好的mAP為多少?
- 依照平台的算力可以滿足多大的模型?
- 綜合前後,我能跑出來的Performance能多快?
也就是說,不用追新,追大,反而要量身訂製。那關於訓練的優化,我認為監督式學習與標籤(Label)也沒有文字面上這麼簡單,我們花了一些時間去研究怎麼Labeling以及資料集的準備與分析,還有各種訓練策略。
當時的我們成功的將我們選用的模型提升10~20%的mAP,也建立了自己的訓練流程,從準備資料集張數到標註時間以及結果判斷,通通進行標準化流程。
2023年在硬體限制的情況下,這都是一個很棒的過程,讓我能對於模型的參數有深刻的思考,以及跳脫出學生研究作品的角度去好好的開發去整進產品裡面。幾個關鍵的指標,通通放在論文中但卻鮮少看到有人去討論那些指標的影響程度,這也是真正在做應用跟產品的人才會跳進去想的細節。此時v7已經問世,但我們還是停留在v4且戰且走。但正因為這樣,對於v7及後續的迭代我們特別有感,也有一種當我們硬體提升後,解開枷鎖的感覺。
YOLOv7再次迭代了一個Backbone的版本:ELAN。仔細看結果可以注意到,v7的參數量是v4的快一半,少了43%。這意味著,硬體不改變的情況下,模型更換後可以換來非常有感的效能提升。當然,2024年我們也shift到v7上面,這是一定的。同時也從darknet畢業轉到pytorch。
我認為接下來的發展就算是定型,然後不斷的優化梯度傳遞(Gradient Flow)以及更往Real Time終端裝置靠近。當成本越來越低,那麼使用度只會越來越高。這也是我看到YOLO持續發展的主要目地,晶片的成長與能力越來越好,這些深度學習模型都往終端遷移,早在此時此刻遍布在各種小型裝置之中,看看你手旁的手機,或監視器,裡面一定都有YOLO的影子,即使沒有,也跟這條脈絡有間接關係。
關於YOLOv8,我看廖所長是表示:Fake。純粹是因為命名上被用走了。但我也有參加ultralytics的YOLO Vision論壇。其實能感受到Glenn的初衷跟我們在使用很接近,可能都站在商用角度來看。研究本身的結果很突出,但離落地還有點距離,他們也是積極在縮短這段距離打通一條路讓大家更容易使用YOLO,因此從v5、v8、甚至最新的v11,算是開源社群內的一條支線(Branch)。結合Python在三行以內的程式碼就可以快速體驗到各版本YOLO的魅力,同時也時做了除了物件偵測之外的應用。我覺得最用心的是他們的文件跟教學影片,我必須要說,文件跟教學影片就很像業務跟行銷,沒有這兩個角色,在好的技術在好的產品沒有人用也是浪費。
YOLOv9迎來了PGI(Programmable Gradient Information)及GELAN。前面提到梯度流動的優化在優化,PGI 提供一種「可程式化梯度資訊」的方式,使模型在不同深度的特徵層中保留更多原始資訊。上圖可以看到GELAN還可以看到這麼清楚的特徵,這一切慢慢讓深度學習模型更具可解釋性。
那我們並沒有特別shift過去,為什麼?因為基於我們的設定來看,換到YOLOv9的唯一時機可能就是想要嘗試不同的資料集跟精準度,又或者v7量化後的結果不好,就可以嘗試看看v9。對於打造產品角度來看,足夠好用且被驗證比最新版本還重要。
這篇YOLO的十年,其實也有引入很多分支,說明的更細,有興趣的人可以好好讀一讀。寫到這,基本上我就是跟著廖所長和王博的腳步一起前進,同時身為台灣人也為此感到驕傲以及與時並進。我跟我的團隊也持續努力中,我們也相信物件偵測技術帶給世界跟科技的變革,在這樣的體系下每個環節都要有專家們鎮守崗位,而軟硬體這一部分就是我們的使命。
推薦廖所長的演講,非常活潑生動有趣,技術部分也淺顯易懂。
中央研究院資訊科學研究所 廖弘源所長 「YOLOv4-v9 的發展及在各領域的應用」
其中廖所長有一段OS算是滿有感觸的:我做研究到五十歲,必須面對這樣的改變。
2025年的我與YOLO
2024年底由YOLOv10正式接棒讓YOLO系列模型正式進入Transformer時代。在此之前需要知道幾篇關鍵論文:DETR以及RT-DETR。
沒有這兩篇就不會有YOLOv10。也因為這兩篇讓我能夠從CNN銜接到Transformer。從DETR的開創純Transformer基底的想法,到RT-DETR的最初優化,把看似龐大計算的語言模型基底放入物件偵測架構,又用最合理的參數及架構去實踐了RT的精神。
從架構上看來,YOLOv10運用Transformer消除了NMS機制,這完全是Anchor-free之後最大的突破,我必須要說這項突破無論是在Edge端或是軟體開發上來說太重要了,越簡單越好,就是YOLO這四個字一樣。此外,即使引入Transformer,模型參數量也沒有激增,為什麼?因為PSA(Partial Self-Attention)。我最喜歡整趟旅程從過去讀到現在的各版本的重點突破,學的不是結果而是過程,這就是蒸餾(Distillation),論文就是老師,我們就是要學習這篇論文被後的過程。
然而,CNN不會被Transformer取代,而是來代了交叉口,兩者共同攜手前進。
知識量必須要足夠,那學習成效才會有感受。YOLOv4讓我有機會站上台說明甚麼是CNN。不到十年的時間,技術翻了一輪,新的機會又出現了,這篇論文像是時光機乘載著我的記憶點,如今將再來一次,再次的跟著巨人們一起展開翻新之路。
我非常期待接下來的發展,這陣子也花了快一個月的時間從年前Attention is all you need到DeepSeek的相關研究,年後回到崗位後,直接炸開,大家都想知道的同時,我就這麼剛好上了這台列車。隨後讀了這篇YOLO的十年,也很有感觸且反思這十年來關於我的成長。
感謝讀到最後的讀者,願有美好的一天。
加油,進步不能停。
最後,文章還沒寫完就收到這訊息了:[2502.12524] YOLOv12: Attention-Centric Real-Time Object Detectors
是不是很令人興奮!?