日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 目标检测 >内容正文

目标检测

目标检测:Yolov5集百家之长

發布時間:2025/3/12 目标检测 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 目标检测:Yolov5集百家之长 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首發于:公眾號YueTan

(1920,被識別為泰迪熊?有排面)

背景

2017年底,我已畢業多年了。用起Excel和PPT、研究車的質量問題儼然老手的樣子。有一晚,照著一個帖子跑了一下Yolov1的inference,驚為天人。躡手躡腳的搞環境、下模型、跑一下clone的程序,就把攝像頭前的物體都用框框標記了出來。在不懂原理的我看來,大概驚嘆了一晚上。

那份驚嘆,也讓我和許多年輕人一起決定加入AI的行列。我現在常常吹噓,自己大學七年對航空和汽車發動機多了解,工作五年對汽車掌握的多透徹,彷佛放棄了十二年優異的經驗,其實都是人設啊。我根本就學不好,現在也完全不記得了。(當然,搞AI也只是現在的人設罷了,不要當真)

時過境遷,在AI方面我還是小學生,Yolo已經從V1發展到了V5,并有各種衍生和優化版本。我們津津樂道它的名字是You only look once的簡寫,原意“你只看一遍”是為了區分看“兩遍”的faster-rcnn等二階段模型,其簡寫Yolo又寓意著另一句諺語"You only live once",生命只有一次。就像食神里說的“不僅好吃,還有噱頭,我也忍不住買了一碗“。

充滿噱頭的除了性能、名字外甚至還有作者本身,作者年初時宣布因為對技術濫用的擔憂放棄視覺研究了,頗有高人之風。而且明明是個大胡子,個人網站卻是滿滿粉色獨角獸的萌妹風格。寫的論文中,為了突出速度之快,甚至故意把圖畫到坐標軸外面去了。

機器視覺任務,常見的有分類、檢測、分割。而Yolo正是檢測中的佼佼者,在工業界,Yolo兼顧精度和速度,往往是大家的首選。

效果

V5的效果也是非常不錯:



其實,yolov4剛出來的時候,大家還對名字爭議了一番。畢竟原作者已經棄坑,新作看上去又是一個trick集合。馬上yolov5出現之后,似乎對v4的質疑就消失了,因為v5這個名字起的似乎更離譜了。這里就不討論名字爭議了。

原理

作為一階段end2end的檢測算法代表作,我們簡單回顧一下Yolo從V1到V5的主要改進措施,當然backbone也一直在進化著。

v1: 劃分網格負責檢測,confidence loss
v2: 加入k-means的anchor,兩階段訓練,全卷積網絡
v3: FPN多尺度檢測
v4: spp,mish激活函數,數據增強mosaic\mixup,giou損失函數
v5: 對模型大小靈活控制,hardswish激活函數,數據增強
v1/v2因為對小目標檢測效果不佳,在v3中加入了多尺度檢測。v3大概可以比作iphone界的iphone6,是前后代廣受好評的大成者,至今仍活躍在一線,“等等黨永遠不虧”。Yolov4把整個流程中可能進行的優化都梳理和嘗試了了一遍,并找到了各個排列組合中的最好效果。v5可以靈活的控制從10+M到200+M的模型,其小模型非常驚艷。
v3到v5的整體網絡圖相差不多,可以清晰的看到:模型從三個不同尺度分別對大小不同的物體有重點的進行檢測。

細節

數據增強和預處理
由于模型需要圖片尺寸相同,因此可以采用resize、padding resize和letterbox的方法。letterbox訓練的時候不用,只是在推理時候用。數據增強(data augmentation)是提升模型泛化能力的重要手段。

flip: 翻轉

perspective:仿射變換

hsv augment:顏色變換

mosaic:馬賽克數據增強把原來的四幅圖組在一起

當然后面可以試試albumentations包里的方法。

獲取anchor:k-means

早就在機器學習中學過最基礎的聚類算法k-means,沒想到第一次用上是在目標檢測里。果然沒有免費的午餐啊,在合適的地方用上合適的算法就好。k-means的兩個關鍵超參數是k的選擇和距離的選擇,所以在Yolo中的k等于n_scale(尺度,一般為3)* anchor_per_scale (每個尺度的anchor,一般也為3)。V5做了一點小小的改進:訓練時自動獲取。

匹配anchor和網格

雖然討論的時候,經常看見的都是改了哪些fancy的模型,真正寫程序時比較困難的反而是這種數據前處理的pipeline。yolo的關鍵思想通過標記物體的中心點落在哪個網格里,就由這個網格負責檢測,就是通過設置目標來實現的。

1)計算這張圖片所有ground truth與每一個anchor的IOU,從而得到對每一個ground truth匹配最好的anchor id。可以根據真實框和錨礦的IOU或者長寬比來選擇,v4與v5中做的改進是根據寬高比來進行anchor的匹配。

2)對每一個ground truth循環。找到這個anchor對應的尺度,和這個anchor對應的哪一個anchor。
3)模型最終輸出的是三個尺度,每個尺度下每個網格帶下的三個anchor對應的box。所以將標記的box也要放置到對應的grid里,對應的是三個anchor里的哪一個。根據上面找到對應grid,對應anchor,將標記的box尺寸和class 信息設置到目標里,其他設置為0。
另外兩個改進點,一個改進點是正樣本增強。通過正樣本的增強可以減輕正負樣本的不均衡。另一個改進點是標注框對anchor的encoding(編碼方式)。從v2中引入anchor以來,一直通過如下編碼方式

為了解決網格的敏感性,v4的作者發現簡單的編碼方式就可以提高結果。

x = (logistic(in) * 2 - 0.5 + grid_x) / grid_width y = ... w = pow( logistic(in)*2, 2) * anchor / network_width h = ...

模型主體

(來自dabai同學)

v5的模型通過類似EfficientNet的兩個系數來控制模型的寬度和深度,在yaml文件的depth_multiple和width_multiple中調節。
Focus:是v5相對v4的改進。
CSPNet:跨階段局部融合網絡
PANet:之前FPN是把傳統視覺任務的圖像金字塔改進到了深度學習的特征金字塔,來自論文Path Aggregation Network for Instance Segmentation。

損失函數

Yolo的損失函數比較驚艷,通過損失函數的設定把目標檢測任務轉化為一個回歸任務。


第一部分為box的損失函數,可以用過smoth L1損失函數計算xywh,也可以通過iou、giou、ciou等。類似的giou、diou和ciou都是在交并比iou的基礎上發展而來的優化方法,解決了iou在兩個候選框完全沒有交集時,損失為0不可優化的狀況。第二部分為有無物體的損失:yolo獨特的設置了一個有無物體的confidence,目標中有的自然設置為1。預測的值用sigmoid轉化為(0,1)的概率,然后計算binary cross entropy。第三部分為分類損失部分,雖然是多分類,也采用binary corss entropy。
同時,為了平衡不同尺度的輸出,v5中對以上三部分加了人工痕跡比較明顯的系數。

后處理

極大值抑制(nms)。分三個尺度進行檢測,且分配不同的anchor,那么同一個物體有可能被多個尺度、anchor所檢測到。所以通過極大值抑制來從中選擇最佳的候選框。也有soft-nms、matrix-nms等改進方式可以試一試。

訓練

訓練過程就比較平平無奇了,可以添加如下技巧:梯度累積、遺傳算法、EMA滑動平均、算子融合。

展望

檢測之外,之后還可以繼續拓展和優化的方向:

  • tensorrt推理加速
  • deepsort物體追蹤,可以穩定視頻中檢測框的抖動
  • 針對小目標分割patch檢測,例如衛星遙感圖像的改進you only look twice
  • 多尺度scalable yolov4

代碼

Yolov5-pytorch
Yolov5-tensorflow

聯系方式

公眾號搜索:YueTan

總結

以上是生活随笔為你收集整理的目标检测:Yolov5集百家之长的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。