呼叫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...