yolo3演算法講解

2021-10-02 21:02:27 字數 1688 閱讀 4069

網路結構  

假設輸入資料的大小為416×416,經過darknet-53特徵提取網路後得到尺度為13×13,26×26,52×52的特徵圖。其中每乙個尺寸的特徵圖都有18(3×6,其中3是指每個grid-cell有3個anchor,每個anchor**乙個邊界框的4個座標值,1個置信度,還有乙個類別概率值)個通道,將13×13×18的特徵圖和對應尺寸的anchor作為decode-unit模組的輸入,根據anchor的尺寸來生成相應的**框。這個**框的dx,dy,dw,dh是對應在416×416輸入上的座標和寬高。將輸入和中的真實標框經過等比縮放變成的尺寸為416×416,中的標框也相應的進行變化,求**框和真實框的giou,然後計算邊界框的損失,其網路結構圖如下圖所示。

2. 輸入資料的預處理

首先對讀取的資料和中標準的真實框的資料做資料增強(平移、翻轉、裁剪)處理,從而來增加資料量。將和真實框按照一定比例縮放,比如真實資料的尺度是(767,512,3),神經網路的輸入資料需要的尺寸是(416,416,3),其縮放比例為416/767.tensorflow的實現**如下所示。

def image_preporcess(image, target_size, gt_boxes=none):

#image:輸入的 target_size:416×416

image = cv2.cvtcolor(image, cv2.color_bgr2rgb).astype(np.float32)

ih, iw = target_size #ih: 416 iw: 416

h, w, _ = image.shape #h: 512 w: 767 _:3

scale = min(iw/w, ih/h) # 0.54237

nw, nh = int(scale * w), int(scale * h) #nw: 416 nh:277

image_resized = cv2.resize(image, (nw, nh)) #將resize成新的尺寸

image_paded = np.full(shape=[ih, iw, 3], fill_value=128.0) #生成一塊畫布,畫布中的畫素

#值為128

dw, dh = (iw - nw) // 2, (ih-nh) // 2 #計算目標尺寸的寬和高和真實尺寸的寬和高的差距

image_paded[dh:nh+dh, dw:nw+dw, :] = image_resized

image_paded = image_paded / 255. #輸入資料進行歸一化處理

if gt_boxes is none:

return image_paded

else:

gt_boxes[:, [0, 2]] = gt_boxes[:, [0, 2]] * scale + dw #將上的真實框按照比例進

#行縮放

gt_boxes[:, [1, 3]] = gt_boxes[:, [1, 3]] * scale + dh

return image_paded, gt_boxes # 返回的的尺寸是416×416,此時的真實框的尺寸是在

#416×416上的框的尺寸

yolo3 目標檢測 實測

yolo是繼faster r cnn後,原作者在目標檢測領域進行的新研究。到了v3版本以後,雖然已經換人支援,但是更注重工程實踐,在實際使用過程中突出感受就是 非常快 gpu加速以後能夠達到實時多目標,並且已經完成了工程實踐。下一步需要做的,應該就是 1 小型化 2 fpga化 3 垂直領域特定目標...

yolo3,模型訓練流程

訓練前準備 1,準備資料集 和邊界矩形txt 邊界矩形txt內容 類別從0開始 labeltext str int labstr 1 str x str y str w str h n x,y,w,h為目標的矩形中心 x,y wh目標寬高 2,修改cfg檔案 convolutional size 1...

YOLO3多gpu訓練方法

版本可參考git上的keras yolo3的實現,現在我手裡有兩塊gpu,所以設定多塊gpu來加快訓練速度 1.訓練 前引入 from keras.utils import multi gpu model2.找到自己構建網路的地方,第一次構建model是下面的語句 is tiny version l...