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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【目标检测】yolo系列:从yolov1到yolov5之YOLOv2详解及复现

發布時間:2023/11/27 生活经验 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【目标检测】yolo系列:从yolov1到yolov5之YOLOv2详解及复现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

YOLO v2

Yolov2論文鏈接:YOLO9000: Better, Faster, Stronger

yolov2的改進

從Yolov2論文的標題可以直觀看到就是Better、Faster、Stronger。Yolov1發表之后,計算機視覺領域出現了很多trick,例如批歸一化、多尺度訓練等等,v2也嘗試借鑒了R-CNN體系中的anchor box,所有的改進提升,下面逐一介紹。

1. Batch Normalization(批歸一化)*

檢測系列的網絡結構中,BN逐漸變成了標配。在Yolo的每個卷積層中加入BN之后,mAP提升了2%,并且去除了Dropout。

2. Dimension Clusters(Anchor Box的寬高由聚類產生)

這里是yolov2的一個創新點。在v2中,Anchor Box的寬高不經過人為手動獲取,而是將訓練數據集中的矩形框全部拿出來,用k-means聚類的方式學習得到先驗框的寬和高,目的使得大框小框的損失同等衡量。例如使用5個Anchor Box,那么k-means聚類的類別中心個數設置為5。

聚類必須要定義聚類點( 矩形框(w, h) )之間的距離函數,使用(1-IOU)數值作為兩個矩形框的的距離函數,如下函數所示:
d(box,centroid)=1?IOU(box,centroid)d(box, centroid) = 1 - IOU(box, centroid) d(box,centroid)=1?IOU(box,centroid)
聚類的結果發現,聚類中心的目標框和以前手動選取的不大一樣,更多的是較高、較窄的目標框。聚類結果也有了更好的性能。

3. Box Regression(框回歸)

YOLOv2對框回歸過程進行了改進,過去的框回歸過程,由于對txt_{x}tx?tyt_{y}ty?參數沒有約束,使得回歸后的目標框可以位移到任意位置,這也導致YOLO的框回歸中存在不穩定性。改進的做法為引入sigmid函數,對預測的xxxyyy進行約束。

YOLOv2在框回歸時,為每一個目標框預測5個參數:txt_{x}tx?, tyt_{y}ty?, twt_{w}tw?, tht_{h}th?, tot_{o}to?,調整的計算公式為:

  • cxc_{x}cx?, cyc_{y}cy?為格子的左上角坐標(行列值),pwp_{w}pw?, php_{h}ph?為anchor原始的寬度。
  • tx=0t_{x}=0tx?=0時,σ(tx)=0.5\sigma(t_x)=0.5σ(tx?)=0.5bxb_{x}bx?剛剛好位于格子中間。
  • twt_{w}tw?, tht_{h}th?用來控制寬高的縮放,tot_{o}to?用來表達置信度信息。

通過使用sigmod函數,將偏移量的范圍限制到0到1之間,使得預測框的中心坐標總位于格子內部,減少了模型的不穩定性。

另外,YOLOv2的分類置信度不再共享,每個anchor單獨預測。即每一個anchor得到C+5 的預測值。

4. Fine-Grained Features(細粒度特征)

在26 * 26的特征圖,經過卷積層等,變為13 * 13的特征圖后,作者認為損失了很多細粒度的特征,如圖所示,導致小尺寸物體的識別效果不佳,所以在此加入了passthrough層

passthrough層在預測時使用,將網絡中間層的特征圖輸出(具體見下圖),將降采樣時同一位置的像素分解成4個子圖,concat合并起來。變換后通道數變為4倍,降采樣2倍。如從512×26×26變為2048×13×13,在這一次操作中不損失細粒度特征。

passthrough層的使用,融合了較高分辨率下的特征信息。

5. Multi-Scale Training(多尺寸訓練)

Yolov2的網絡結構中只有卷積層與池化層,為了增加網絡的魯棒性,YOLOv2在訓練過程中可以動態調整網絡的輸入大小,同時相應地調整網絡的結構以滿足輸入。整個網絡的降采樣倍數為32,只要輸入的特征圖尺寸為32的倍數即可(如果網絡中有全連接層,就不是這樣了)。所以Yolo v2可以使用不同尺寸的輸入圖片訓練。

作者使用的訓練方法是,在每10個batch之后,就將圖片resize成{320, 352, …, 608}中的一種。不同的輸入,最后產生的格點數不同,比如輸入圖片是320 * 320,那么輸出格點是10 * 10,如果每個格點的先驗框個數設置為5,那么共輸出500個預測結果;如果輸入圖片大小是608 * 608,輸出格點就是19 * 19,共輸出1805個預測結果。

網絡結構

YOLOv2中使用了一種新的基礎網絡結構,基于Googlenet,名為Darknet-19。擁有19個卷積層和5個Max Pooling層,網絡中使用了Batch Normalization來加快收斂。
v2中移除了v1最后的兩層全連接層,全連接層計算量大,耗時久。v2主要是各種trick引入后的效果驗證,建議不必糾結于v2的網絡結構。

訓練過程

主要的訓練過程為:

(1)先使用ImageNet數據集對Darknet-19進行分類訓練,輸入圖片大小為224×224,包含標準的數據擴充方式。
(2)將輸入圖片大小調整為448×448,進行fine-tune。
(3)去掉分類的輸出層,添加上文提到的目標檢測輸出層,進行目標檢查的訓練。

YOLOv2在上述訓練的基礎上,又進行了一個聯合訓練,額外使用只包含標簽信息的數據集來進行分類訓練,擴大網絡可以預測的物體種類數,使其變得更加強大,即YOLO9000。

使用教程

源碼地址(pytorch版本):https://github.com/longcw/yolo2-pytorch
(注意,該項目不再維護,并且可能和yolo4后的項目不兼容)

注 1: 這仍然是一個實驗項目。VOC07 ??測試 mAP 約為 0.71(在 VOC07+12 trainval 上訓練)。

注意 2: 建議使用torch.utils.data.Dataset編寫自己的數據加載器, 因為multiprocessing.Pool.imap即使沒有足夠的內存空間也不會停止。

Installation and demo

  1. Clone倉庫
  2. 下載訓練模型的權重文件 yolo-voc.weights.h5 (link updated) 并且在demo.py中設置其路徑。
  3. 運行demo.py.

Training YOLOv2

可以在任意數據集上訓練yolov2,這邊,將以VOC2007/2012數據集為示例。
1. 下載訓練、驗證、測試數據和 VOCdevkit并解壓

wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar

2. 數據集結構目錄按如下組織

$VOCdevkit/                           # development kit
$VOCdevkit/VOCcode/                   # VOC utility code
$VOCdevkit/VOC2007                    # image sets, annotations, etc.
# ... and several other directories ...

3. 下載預訓練模型
下載預訓練模型darknet19,然后在yolo2-pytorch/cfgs/exps/darknet19_exp1.py.中設置路徑。

4. 可視化訓練過程
要使用 TensorBoard,需要在 yolo2-pytorch/cfgs/config.py 中設置 use_tensorboard = True 并安裝 TensorboardX。 Tensorboard 日志將保存在訓練/運行中。

5. 運行訓練代碼:python train.py.

Evaluation

在yolo2-pytorch/cfgs/config.py中設置把訓練好的模型的路徑。

然后運行預測代碼。

Training on your own dataset

如果需要在自己的數據集上訓練,前向傳遞要求向網絡提供乳腺癌 4 個參數:

  • im_data - 圖像數據。
    • 這應該是 C x H x W 格式,其中 C 對應于圖像的顏色通道,H 和 W 分別是高度和寬度。顏色通道應為 RGB 格式。
    • 使用 utils/im_transform.py 中提供的 imcv2_recolor 函數來預處理圖像。 此外,請確保圖像已調整為 416 x 416 像素
  • gt_boxes - numpy 數組的列表,其中每個數組的大小為 N x 4,其中 N 是圖像中的特征數。 每行中的四個值應對應于 x_bottom_left、y_bottom_left、x_top_right 和 y_top_right。
  • gt_classes - numpy 數組的列表,其中每個數組包含一個整數值,對應于 gt_boxes 中提供的每個邊界框的類
  • dontcare - 列表的列表

總結

以上是生活随笔為你收集整理的【目标检测】yolo系列:从yolov1到yolov5之YOLOv2详解及复现的全部內容,希望文章能夠幫你解決所遇到的問題。

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