适用于Windows和Linux的Yolo-v3和Yolo-v2(下)
適用于Windows和Linux的Yolo-v3和Yolo-v2(下)
如何訓練(檢測自定義對象):
(培養老YOLO V2 yolov2-voc.cfg,yolov2-tiny-voc.cfg,yolo-voc.cfg,yolo-voc.2.0.cfg,… 通過鏈接點擊)
訓練Yolo v3:
- 創建yolo-obj.cfg內容與中相同的文件yolov3.cfg(或復制yolov3.cfg到yolo-obj.cfg)和:
將行批次更改為 batch=64
將線路細分更改為 subdivisions=16
將max_batches線更改為(classes*2000但不小于4000),max_batches=6000如果訓練3節課,則為fe
將線路步長更改為max_batches,fe的80%和90% steps=4800,5400
設置網絡大小width=416 height=416或任何32的值的倍數:https : //github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L8-L9
將行更改classes=80為3 [yolo]層中每層的對象數:
https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L610
https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L696
https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L783
變化[ filters=255在3]到過濾器=(類+ 5)×3 [convolutional]的每個前[yolo]層
https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L603
https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L689
https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L776
當使用[Gaussian_yolo] 層,改變[ filters=57]過濾器=(類+ 9)X3在3 [convolutional]每個前[Gaussian_yolo]層
https://github.com/AlexeyAB/darknet/blob/6e5bdf1282ad6b06ed0e962c3f5be67cf63d96dc/cfg/Gaussian_yolov3_BDD.cfg#L604
https://github.com/AlexeyAB/darknet/blob/6e5bdf1282ad6b06ed0e962c3f5be67cf63d96dc/cfg/Gaussian_yolov3_BDD.cfg#L696
https://github.com/AlexeyAB/darknet/blob/6e5bdf1282ad6b06ed0e962c3f5be67cf63d96dc/cfg/Gaussian_yolov3_BDD.cfg#L789
因此,如果classes=1應該filters=18。如果classes=2再寫filters=21。
(不要寫在cfg文件中:filters =(classs + 5)x3)
(通常filters取決于classes,coords和的數量mask,即filters = (classes +
coords + 1)*,其中maskanchor的索引。如果mask不存在,則filters = (classes +coords + 1)*num)
因此,例如,對于2個對象,文件yolo-obj.cfg應該yolov3.cfg在3個 [yolo]層中的每一行中與以下行不同:
[convolutional]
filters=21
[region]
classes=2
-
obj.names在目錄中創建文件build\darknet\x64\data\,并帶有對象名稱-每個都在新行中
-
obj.data在目錄中創建文件build\darknet\x64\data\,其中包含(其中class =對象數):
classes= 2
train = data/train.txt
valid = data/test.txt
names = data/obj.names
backup = backup/
-
將對象的圖像文件(.jpg)放在目錄中 build\darknet\x64\data\obj\
-
應該在數據集中的圖像上標記每個對象。使用此可視化GUI軟件標記對象的邊界框并為Yolo v2和v3生成注釋文件:https : //github.com/AlexeyAB/Yolo_mark
將.txt為.jpg同一目錄中具有相同名稱但具有.txt-extension的每個-image-file- 創建一個-file ,并將其放置到文件中:該圖像上的對象編號和對象坐標,用于新行中的每個對象:
<x_center>
<y_center>
哪里:
-從0到的整數對象編號(classes-1)
<x_center>
<y_center> -浮動值相對于圖片的寬度和高度,可以等于(0.0 to 1.0]
例如: = <absolute_x> / <image_width>或 =
<absolute_height> / <image_height>
注意:<x_center> <y_center>-矩形的中心(不是左上角)
例如,將為img1.jpg創建img1.txt包含:
1 0.716797 0.395833 0.216406 0.147222
0 0.687109 0.379167 0.255469 0.158333
1 0.420312 0.395833 0.140625 0.166667
- train.txt在directory中創建文件build\darknet\x64\data\,其中包含圖像的文件名,每個文件名都換行,并具有相對于的路徑darknet.exe,例如包含:
data/obj/img1.jpg
data/obj/img2.jpg
data/obj/img3.jpg
- 下載卷積層的預訓練權重并放入目錄 build\darknet\x64
o for csresnext50-panet-spp.cfg(133 MB):csresnext50-panet-spp.conv.112
o 對于yolov3.cfg, yolov3-spp.cfg(154 MB):darknet53.conv.74
o for yolov3-tiny-prn.cfg
, yolov3-tiny.cfg(6 MB):yolov3-tiny.conv.11
o 對于enet-coco.cfg (EfficientNetB0-Yolov3)(14 MB):enetb0-coco.conv.132
- 使用命令行開始訓練: darknet.exe
detector train data/obj.data yolo-obj.cfg darknet53.conv.74
要在Linux上訓練,請使用以下命令:(./darknet detector train data/obj.data yolo-obj.cfg darknet53.conv.74僅使用./darknet代替darknet.exe)
o (文件每100次迭代yolo-obj_last.weights將保存到中build\darknet\x64\backup\)
o (文件每1000次迭代yolo-obj_xxxx.weights將保存到中build\darknet\x64\backup\)
o (darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74
-dont_show如果在沒有監視器的計算機(如云EC2)上訓練,則可以禁用Loss-Window的使用)
o (要在沒有GUI的遠程服務器上進行訓練時查看mAP和損失圖,請使用命令,darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 -dont_show -mjpeg_port 8090 -map然后http://ip-address:8090在Chrome / Firefox瀏覽器中打開URL )
8.1. 對于每4個紀元(設置valid=valid.txt或train.txt在obj.data文件中)使用mAP(平均平均精度)計算進行訓練并運行:darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74-map
- 訓練完成后- yolo-obj_final.weights從路徑中獲取結果build\darknet\x64\backup\
每進行100次迭代后,可以停止,然后從這一點開始訓練。例如,經過2000次迭代后,可以停止訓練,之后再開始使用以下方法開始訓練:darknet.exe detector train data/obj.data yolo-obj.cfg backup\yolo-obj_2000.weights
(在原始存儲庫https://github.com/pjreddie/darknet中,權重文件每1萬次迭代僅保存一次if(iterations > 1000))
同樣,可以比所有45000次迭代更早地獲得結果。
注意:如果在訓練過程中看到(損失)字段的nan值avg-則訓練有誤,但如果出現nan在其行中-則訓練進行得很好。
注意:如果在cfg文件中更改了width =或height =,則新的寬度和高度必須被32整除。
注意:訓練后,請使用以下命令進行檢測:darknet.exe
detector test data/obj.data yolo-obj.cfg yolo-obj_8000.weights
注意:如果Out of memory發生錯誤,.cfg則應在-file文件中增加subdivisions=1632或64:鏈接
如何訓練tiny-yolo(檢測自定義對象):
執行與上述完整yolo模型相同的所有步驟。除了:
下載yolov3-tiny的默認權重文件:https 😕/pjreddie.com/media/files/yolov3-tiny.weights
yolov3-tiny.conv.15使用以下命令獲取預先訓練的權重:darknet.exe
partial cfg/yolov3-tiny.cfg yolov3-tiny.weights yolov3-tiny.conv.15 15
使自定義模型yolov3-tiny-obj.cfg基于cfg/yolov3-tiny_obj.cfg而不是yolov3.cfg
開始訓練: darknet.exe detector train data/obj.data yolov3-tiny-obj.cfg
yolov3-tiny.conv.15
要基于其模型(DenseNet201-Yolo或ResNet50-Yolo)訓練Yolo,可以下載并獲取此文件中所示的預訓練權重:https : //github.com/AlexeyAB/darknet/blob/master/build/
darknet / x64 / partial.cmd 如果創建的自定義模型不基于其模型,則可以在不預先訓練權重的情況下對其進行訓練,然后將使用隨機初始權重。
什么時候應該停止訓練:
通常,每個類(對象)需要進行2000次迭代,但總計不少于4000次迭代。但是對于何時停止訓練的更精確定義,請使用以下手冊:
- 在訓練期間,將看到各種錯誤指示,并且當不再減小0.XXXXXXX avg時應停止:
區域平均IOU:0.798363,類:0.893232,對象:0.700808,無對象:0.004567,平均調用率:1.000000,計數:8區域平均IOU:0.800677,類:0.892181,對象:0.701590,無對象:0.004574,平均調用率:1.000000 ,數:8
9002:0.211667,0.60730 平均,0.001000速率,3.868000秒,576128圖像加載:0.000000秒
9002-迭代編號(批處理數量)
0.60730平均 -平均損失(錯誤)- 越低越好
當發現平均損失0.xxxxxx平均不再在許多次迭代中減少時,應該停止訓練。最終平均損失可能從0.05(對于小模型和簡單數據集)到3.0(對于大模型和困難數據集)之間。
- 訓練停止后,應該從中獲取一些最新.weights文件,darknet\build\darknet\x64\backup并從中選擇最好的文件:
例如,在9000次迭代后停止了訓練,但最佳結果可以給出以前的權重之一(7000、8000、9000)。可能由于過度擬合而發生。過度擬合 -這種情況是可以從訓練數據集中檢測圖像上的對象,但無法檢測其圖像上的對象的情況。應該從Early Stopping
Point獲得權重:
要從提前停止點獲取重量:
2.1.首先,obj.data必須在文件中指定驗證數據集的路徑valid =
valid.txt(格式valid.txt為中的train.txt),如果沒有驗證圖像,則只需復制data\train.txt到即可data\valid.txt。
2.2如果在9000次迭代后停止訓練,要驗證以前的權重,請使用以下命令:
(如果使用另一個GitHub存儲庫,請使用darknet.exe detector recall…而不是darknet.exe detector map…)
darknet.exe detector map
data/obj.data yolo-obj.cfg backup\yolo-obj_7000.weights
darknet.exe detector map
data/obj.data yolo-obj.cfg backup\yolo-obj_8000.weights
darknet.exe detector map
data/obj.data yolo-obj.cfg backup\yolo-obj_9000.weights
每個權重(7000、8000、9000)的comapre最后輸出線:
選擇具有最高mAP(平均平均精度)或IoU(與聯合相交)的權重文件
例如,較大的mAP會賦予權重yolo-obj_8000.weights-然后使用此權重進行檢測。
或者只是用-map國旗訓練:
darknet.exe detector train data/obj.data
yolo-obj.cfg darknet53.conv.74 -map
因此,將在“損失圖”窗口中看到“ mAP圖”(紅線)。將使用valid=valid.txt文件中指定的obj.data文件(1 Epoch =
images_in_train_txt / batch迭代)為每個4個時期計算mAP
(將3類的最大x軸值更改max_batches=為-,將參數更改為2000*classesfe max_batches=6000)
自定義對象檢測的示例: darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_8000.weights
IoU(聯合上方的相交)-對象聯合上方的平均insectect和檢測到的某個閾值= 0.24 mAP(平均平均精度)- average precisions每個類別的average precision平均值,其中是同一類別的每個可能閾值(每個檢測概率)的PR曲線上11點的平均值(以PascalVOC表示的Precision-Recall,其中Precision = TP /(TP + FP)和Recall = TP /(TP + FN)),第11頁:http://homepages.inf.ed.ac.uk/ckiw/postscript/ijcv_voc09.pdf
mAP是PascalVOC競賽中默認的精度指標,與MS COCO競賽中的AP50指標相同。在Wiki方面,指標Precision和Recall的含義與PascalVOC競賽中的含義略有不同,但是IoU 始終具有相同的含義。
如何在PascalVOC 2007上計算mAP:
- 要在PascalVOC-2007-test上計算mAP(平均平均精度):
下載PascalVOC數據集,安裝Python 3.x并按2007_test.txt此處所述獲取文件:https : //github.com/AlexeyAB/darknet#how-to-train-pascal-voc-data
然后將文件https://raw.githubusercontent.com/AlexeyAB/darknet/master/scripts/voc_label_difficult.py下載到dir,build\darknet\x64\data\然后運行voc_label_difficult.py以獲取文件difficult_2007_test.txt
#從此行中刪除符號以取消注釋:https : //github.com/AlexeyAB/darknet/blob/master/build/darknet/x64/data/voc.data#L4
然后,有兩種獲取mAP的方法:
i. 使用Darknet + Python:運行文件build/darknet/x64/calc_mAP_voc_py.cmd-將獲得yolo-voc.cfg模型的mAP,mAP = 75.9%
ii. 使用Darknet的此分支:運行文件build/darknet/x64/calc_mAP.cmd-將獲得yolo-voc.cfg模型的mAP,mAP = 75.8%
(本文指定YOLOv2 416×416:mAP的值為76.8%:https 😕/arxiv.org/pdf/1612.08242v1.pdf 。得出的值較低-可能是由于以下事實:該模型是在與進行檢測的代碼略有不同的源代碼上訓練的)
如果要獲取tiny-yolo-voc.cfg模型的mAP,則在.cmd文件中取消注釋tiny-yolo-voc.cfg的注釋行和yolo-voc.cfg的注釋行
如果Python 2.x的,而不是Python的3.x中,如果使用暗網+ Python的方式來獲得地圖,然后在CMD文件使用reval_voc.py和voc_eval.py替代reval_voc_py3.py,并voc_eval_py3.py從該目錄:https://github.com/
AlexeyAB / darknet / tree / master / scripts
自定義對象檢測:
自定義對象檢測的示例: darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_8000.weights
如何改善物體檢測:
- 訓練前:
random=1在.cfg-file文件中設置標志-通過訓練Yolo不同的分辨率來提高精度:鏈接
提高網絡分辨率.cfg-file( height=608,width=608或32任何價值倍數) -會增加精度
檢查要檢測的每個對象是否在數據集中被強制標記-數據集中的任何對象都不應沒有標簽。在大多數訓練問題中-數據集中有錯誤的標簽(通過使用某些轉換腳本標記了第三方工具,得到了標簽,…)。始終使用以下方法檢查數據集:https : //github.com/AlexeyAB/Yolo_mark
損失非常高,而mAP卻很低,訓練錯了嗎? -show_imgs在training命令的末尾運行帶有flag的訓練,是否看到正確的有界對象框(在Windows或文件中aug_…jpg)?如果否-訓練數據集有誤。
對于要檢測的每個對象-訓練數據集中必須至少有一個相似的對象,并且形狀大致相同:形狀,對象的側面,相對大小,旋轉角度,傾斜度,照明度。理想的是,訓練數據集應包含不同對象的圖像:比例,旋轉,照明,不同側面,不同背景的圖像-每個班級或以上,最好擁有2000張不同的圖像,并且應訓練2000classes迭代次數或更多
希望訓練數據集包含帶有不想檢測的未標記對象的圖像-無邊界框的負樣本(空.txt文件)-使用與帶有對象的圖像一樣多的負樣本圖像
標記對象的最佳方法是:僅標記對象的可見部分,或標記對象的可見和重疊部分,或標記比整個對象多一點(有一點間隙)?根據需要進行標記-希望如何檢測。
要在每個圖像中使用大量對象進行訓練,請在cfg文件max=200的最后[yolo]一層或最后一層中添加參數或更高的值[region](YoloV3可以檢測到的全局最大對象數0,0615234375(width*height)是寬度和高度是[net]cfg文件中部分的參數)
用于訓練小對象(將圖像調整為416x416后小于16x16)-設置layers = -1, 11為https://github.com/AlexeyAB/darknet/blob/6390a5a2ab61a0bdf6f1a9a6b4a739c16b36e0d7/cfg/yolov3.cfg#L720而stride=4不是https:
//github.com/AlexeyAB/darknet/blob/6390a5a2ab61a0bdf6f1a9a6b4a739c16b36e0d7/cfg/yolov3.cfg#L717
對于小型和大型物體的訓練,請使用修改后的模型:
完整模型:5個yolo層:https 😕/raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov3_5l.cfg
小模型:3個yolo層:https 😕/raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov3-tiny_3l.cfg
空間完整模型:3個yolo層:https 😕/raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov3-spp.cfg
如果訓練模型以將左對象和右對象區分為單獨的類(左/右手,左/右轉道路標志,…),則用于禁用翻轉數據增強-在flip=0此處添加:https : //github.com
/AlexeyAB/darknet/blob/3d2d0a7c98dbc8923d9ff705b81ff4f7940ea6ff/cfg/yolov3.cfg#L17
一般規則-訓練數據集應包括一組想要檢測的相對大小的對象:
train_network_width
* train_obj_width / train_image_width ~= detection_network_width *
detection_obj_width / detection_image_width
train_network_height
* train_obj_height / train_image_height ~= detection_network_height *
detection_obj_height / detection_image_height
也就是說,對于Test數據集中的每個對象,Training數據集中必須至少有1個對象具有相同的class_id和大約相同的相對大小:
object width in percent from Training dataset ?= object width in
percent from Test dataset
也就是說,如果訓練集中僅存在占圖像80-90%的對象,則受訓練的網絡將無法檢測到占圖像1-10%的對象。
要加快訓練速度(降低檢測精度),請執行“微調”而不是“轉移學習”,請stopbackward=1在此處設置參數:https : //github.com/AlexeyAB/darknet/blob/6d44529cf93211c319813c90e0c1adb34426abe5/cfg/yolov3.cfg#L548 然后執行此命令:./darknet partial
cfg/yolov3.cfg yolov3.weights yolov3.conv.81 81將創建一個文件yolov3.conv.81,然后使用權重文件yolov3.conv.81代替darknet53.conv.74
每個:model of object, side,
illimination, scale, each 30 grad轉角和傾斜角- 從神經網絡的內部角度來看,是不同的對象。因此,要檢測的對象越多,應使用越復雜的網絡模型。
為了使檢測到的邊界框更準確,可以ignore_thresh
= .9 iou_normalizer=0.5 iou_loss=giou在每個[yolo]圖層上添加3個參數并進行訓練,將增加mAP@0.9,但減少mAP@0.5。
僅當是神經檢測網絡專家時-才為cfg文件width和height從cfg文件重新計算數據集的錨點: darknet.exe detector
calc_anchors data/obj.data -num_of_clusters 9 -width 416 -height 416 然后在cfg文件anchors的3 [yolo]層中的每一層都設置相同的9 。但是,應該masks=為每個[yolo]層更改錨點的索引,以便第一個[yolo]層的錨點大于60x60,第二個層大于30x30,剩下第3個。同樣,應該filters=(classes +
5)*在每個[yolo]層之前更改。如果許多計算出的錨不適合在適當的圖層下-則只需嘗試使用所有默認錨即可。
- 訓練后-用于檢測:
通過在.cfg-file(height=608和width=608)或(height=832和width=832)或(32的任意倍數)中設置來提高網絡分辨率-這可以提高精度,并可以檢測小對象:link
無需再次訓練網絡,只需使用.weights已針對416x416分辨率進行訓練的-file
但是要獲得更高的精度,應該使用更高分辨率的608x608或832x832進行訓練,請注意:如果Out of memory發生錯誤,.cfg則應在-file文件中增加subdivisions=16,32或64:鏈接
如何標記對象的邊界框并創建注釋文件:
在這里,可以找到帶有GUI軟件的存儲庫,用于標記對象的有界框并為Yolo v2和v3生成注釋文件:https : //github.com/AlexeyAB/Yolo_mark
與示例的:train.txt,obj.names,obj.data,yolo-obj.cfg,air1-6 .txt,bird1-4 .txt為2類的對象(空氣,鳥)和train_obj.cmd與實施例如何培養這個圖像組具有YOLO v2和v3
標記圖像中對象的不同工具:
-
在C ++中:https://github.com/AlexeyAB/Yolo_mark
-
在Python中:https://github.com/tzutalin/labelImg
-
在Python中:https://github.com/Cartucho/OpenLabeling
-
在C ++中:https://www.ccoderun.ca/darkmark/
-
在JavaScript中:https://github.com/opencv/cvat
使用Yolo9000
同時檢測和分類9000個對象: darknet.exe detector test cfg/combine9k.data cfg/yolo9000.cfg
yolo9000.weights data/dog.jpg
yolo9000.weights-(186 MB Yolo9000型號)需要4 GB GPU-RAM:http://pjreddie.com/media/files/yolo9000.weights
yolo9000.cfg-在Yolo9000的CFG文件,也有路徑的9k.tree和coco9k.maphttps://github.com/AlexeyAB/darknet/blob/617cf313ccb1fe005db3f7d88dec04a04bd97cc2/cfg/yolo9000.cfg#L217-L218
9k.tree- WordTree的9418個范疇-
combine9k.data-數據文件,也有路徑:9k.labels,9k.names,inet9k.map,(改變路徑到combine9k.train.list):https://raw.githubusercontent.com/AlexeyAB/darknet/master/build/darknet/x64/data/combine9k.data
9k.labels-9418個對象的標簽:https://raw.githubusercontent.com/AlexeyAB/darknet/master/build/darknet/x64/data/9k.labels
9k.names-9418個對象的名稱:https://raw.githubusercontent.com/AlexeyAB/darknet/master/build/darknet/x64/data/9k.names
inet9k.map-將200個類別從ImageNet映射到WordTree 9k.tree:https : //raw.githubusercontent.com/AlexeyAB/darknet/master/build/darknet/x64/data/inet9k.map
如何將Yolo用作DLL和SO庫
在Linux上
使用build.sh或
darknet使用cmake或建立
設置LIBSO=1在Makefile做make
在Windows上
使用build.ps1或
darknet使用cmake或建立
編譯build\darknet\yolo_cpp_dll.sln解決方案或build\darknet\yolo_cpp_dll_no_gpu.sln解決方案
有2個API:
C API:https://github.com/AlexeyAB/darknet/blob/master/include/darknet.h
使用C API的Python示例:
https://github.com/AlexeyAB/darknet/blob/master/darknet.py
https://github.com/AlexeyAB/darknet/blob/master/darknet_video.py
C ++ API:https://github.com/AlexeyAB/darknet/blob/master/include/yolo_v2_class.hpp
使用C ++ API的C ++示例:https : //github.com/AlexeyAB/darknet/blob/master/src/yolo_console_dll.cpp
- 要將Yolo編譯為C ++ DLL文件yolo_cpp_dll.dll-打開解決方案build\darknet\yolo_cpp_dll.sln,設置x64和Release,然后執行以下操作:Build-> Build yolo_cpp_dll
o 應該已經安裝了CUDA 10.0
o 要使用cuDNN,請執行以下操作:(右鍵單擊項目)->屬性-> C / C +±>預處理程序->預處理程序定義,然后在行的開頭添加: CUDNN;
- 要將Yolo用作C ++控制臺應用程序中的DLL文件,請打開解決方案build\darknet\yolo_console_dll.sln,設置x64和Release,然后執行以下操作:構建->構建yolo_console_dll
o 可以build\darknet\x64\yolo_console_dll.exe 使用以下命令從Windows資源管理器運行控制臺應用程序:yolo_console_dll.exe
data/coco.names yolov3.cfg yolov3.weights test.mp4
o 啟動控制臺應用程序并輸入圖像文件名后,將看到每個對象的信息: <obj_id> <left_x> <top_y>
o 要使用簡單的OpenCV-GUI,應該//#define OPENCV在yolo_console_dll.cpp-file:鏈接中取消注釋行
o 可以在視頻文件上看到用于檢測的簡單示例的源代碼:鏈接
yolo_cpp_dll.dll-API:鏈接
struct bbox_t {
unsigned int x, y, w, h; //
(x,y) - top-left corner, (w, h) - width & height of bounded box
float prob; //
confidence - probability that the object was found correctly
unsigned int obj_id; //
class of object - from range [0, classes-1]
unsigned int track_id; //
tracking id for video (0 - untracked, 1 - inf - tracked object)
unsigned int frames_counter;// counter of frames on which the object was
detected
};
class Detector {
public:
Detector(std::string cfg_filename, std::string weight_filename, int
gpu_id = 0);
~Detector();
std::vector<bbox_t> detect(std::string image_filename, float
thresh = 0.2, bool use_mean = false);
std::vector<bbox_t> detect(image_t img, float thresh = 0.2, bool
use_mean = false);
static image_t load_image(std::string image_filename);
static void free_image(image_t m);
#ifdef OPENCV
std::vector<bbox_t> detect(cv::Mat mat, float thresh = 0.2, bool
use_mean = false);
std::shared_ptr<image_t>
mat_to_image_resize(cv::Mat mat) const;
#endif
};
總結
以上是生活随笔為你收集整理的适用于Windows和Linux的Yolo-v3和Yolo-v2(下)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 适用于Windows和Linux的Yol
- 下一篇: Python分析离散心率信号(上)