Yolov3訓練筆記

2021-10-14 16:13:13 字數 1729 閱讀 3620

1、使用標註工具對影象進行標註:標註的資料是目標的左上和右下的座標(xmin,ymin,xmax,ymax)

2、對已標註的資料進行轉換,轉換為目標的中心座標及寬高(xc,yc,wc,hc)並歸一化--box

xc=(xmax+xmin)/2;yc=(ymax+ymin)/2;wc=xmax-xin;hc=ymax-ymin

歸一化:(xc/w,yc/h,wc/w,hc/h)

使用k-means生成9個anchors對應3個尺寸不需要歸一化

3、載入資料:影象-標籤(一一對應)

影象的寬高進行增廣,恢復在新圖下的標註座標(左上、右下)xywh->x『y』x『y』

顏色空間的轉換、隨機仿射變換

構建標籤: 加入 anchor相對grid的大小

labels轉化為張量(fp,fp,bbox_con_cls)對應最終的fp形式,不同yolo層的label不同

歸一化的中心點*fpsize取整可以獲得該中心點落在特徵圖fp上的哪行哪列負責當前ground truth的**,置信度和對應類別概率均置為1

其中bbox[0]整數代表當前box所屬類別

最終labels張量形式:[gridpx,gridpy,w,h,con,(p1,p2...pn)] 

4、網路骨架:解析cfg檔案

按照各層:convolution、maxpooling、shortcut、route、yolo

darknet主題結構、create_modules各層提取引數加入計算、yolo層單獨計算

最後的輸出pred形式為:[n,bs,fp,fp,(x,y,w,h,conf,cls..)] n表示有幾種尺寸,bs:batchsize,fp為對應尺寸大小,後面是相關box資訊

5、訓練

通過訓練獲得多個尺度的張量資料 網路最後一層形式是13*13*255或26*26*255。。,255=(80類,x,y,w,h,conf)*3,每個cell**3個box,每個box資訊(x,y,w,h,conf,80類概率)

然後將其格式轉化為pred-[batch,3,fp,fp,outchannel/3]

將labels中初始資料也轉化為pred形式(在構建標籤中)

6、損失函式

通過將輸入(img)送入cnn中訓練,獲得ypred與實際標籤lables張量進行求解損失(其中輸入的影象與ypred及labels是一一對應的)

對tx ty求均方誤差

​對tw th求均方誤差

​對所有類分類結果求二類交叉熵誤差

​對置信度c計算二類交叉熵誤差(c期望值=1)

其餘不負責**該物體的邊框,且邊框和真實值iou《閾值(背景、負樣本)

7、模型評估

將測試的資料集及對應標註進行處理,一張圖經過模型處理後**n個box,通過nms篩選出m個box

box:(x1,y1,x2,y2,conf,score,cls)與處理的標籤:(cls,x1,y1,x2,y2)

計算每個類的p和r,繪製p-r曲線,求出ap(曲線下側面積)

map多個類別ap的均值

8、模型測試

測試過程中,將模型輸出結果txty,tw,th加入anchor通過公式計算得出bx,by,bw,bh

然後轉化成**的所有box對應資訊,如【13*13*3+26*26*3+52*52*52,(x,y,w,h,conf,cls1...)】

最後通過nms篩選出最佳box

待續。。。。。。

yolo v3 pytorch 模型訓練筆記

annotations 標註資訊 分為train xml和val xml datasets 資料集和label 分為train images val images train labels val labels ptj.data ptj.names 類別名 ptj test 做測試用的集 resul...

yolov3系列 零 yolov3詳解

目標檢測演算法與efficientdet講解 論 文 翻譯 yolov3主頁 yolo系列的目標檢測演算法可以說是目標檢測史上的巨集篇巨作,v3演算法是在v1 v2基礎上形成的,先看下 yolov1 yolov2 下圖為yolov3的網路結構 dbl darknetconv2d bn leaky 是...

使用YOLOv3訓練VOC模型

yolo官網 本篇博文主要是參照官網步驟進行voc資料的訓練,博主也是更改接觸,如果有錯誤的地方,歡迎指正 操作環境 ubuntu 如果使用gpu需要安裝cuda和cudnn,應為我這邊環境已經裝好了,所以並沒有嘗試安裝 具體安裝步驟可以參考一篇部落格 git clone cd darknet ma...