YOLOv3測試時python介面分析

2021-09-25 07:29:08 字數 1617 閱讀 9528

呼叫darknet python介面需使用darknet/python/darknet.py,而其中核心為detect()函式,該引數主要引數為:

def detect(net, meta, image, thresh=.5, hier_thresh=.5, nms=.45)
而detect()函式中的核心為dets = get_network_boxes(net, im.w, im.h, thresh, hier_thresh, 0, 1, &nboxes),那麼get_network_boxes()函式在**呢?位於darknet/src下的network.c,那麼network.c中的c#函式如何傳到python裡的呢?通過darknet/example/darknet.c編譯生成的libdarknet.so包被載入到python中最後被darknet.py呼叫。那麼get_network_boxes()的主要內容如下:

detection *get_network_boxes(network *net, int w, int h, float thresh, float hier, int *map, int relative, int *num)

可知,首先通過make_network_boxes()生成檢測(dets)資訊,然後以fill_network_boxes()過濾boxes。

make_networks_boxes()函式如下:

detection *make_network_boxes(network *net, float thresh, int *num)

}return dets;

}

核心得到框nboxes為函式num_detections(),然後由calloc()函式為其分配記憶體空間,具體為:

int num_detections(network *net, float thresh)

if(l.type == detection || l.type == region)

}return s;

}

通過yolo或detection或region分別對應yolov3、v1和v2的檢測層得到boxes。

往回看get_network_boxes()函式中的過濾函式fill_networ_boxes(),具體code為:

void fill_network_boxes(network *net, int w, int h, float thresh, float hier, int *map, int relative, detection *dets)

if(l.type == region)

if(l.type == detection)

}

其中通過get_yolo_detections或get_region_detections或get_detection_detections三個函式分別對應yolov3、v2、v1三個版本的檢測層,三者的實現分別位於yolo_layer.c、region_layer.c和detection_layer.c中實現。其中的hier_thresh最終傳遞到region_layer.c中實現,如需了解hier_thresh的具體作用,可參考博主博文:

yolo v3使用測試

yolov3 測試影象新增置信度與訓練bmp影象格式 2.yolo cfg檔案中各個引數的含義 3 批量測試並新增到自己的資料夾 參考部落格 其中第乙個存在的問題是,儲存的資料夾中影象沒有標記 問題是沒有新增畫框函式 void test detector char datacfg,char cfgf...

yolov3系列 零 yolov3詳解

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

yolov3的缺點 yolov3特點總結

p1,yolov3,簡單總結下比較特別的地方 1.bounding box 中心值x,y的 是通過乙個sigmoid 函式,來 在每乙個單元 cell 的相對位置。而不像普通那種 乙個相對於anchor的offset。然後bbox 損失是用的mse 一般都是用smooth l1 3.類別 沒有使用s...