日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

YOLO 训练

發(fā)布時(shí)間:2025/1/21 编程问答 102 豆豆
生活随笔 收集整理的這篇文章主要介紹了 YOLO 训练 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

官網(wǎng)yolov1:http://pjreddie.com/darknet/yolov1/

官網(wǎng)yolov2:http://pjreddie.com/darknet/yolo/

github yolo:https://github.com/pjreddie/darknet


yolo訓(xùn)練要有自己的一套方式,先說說label要怎么弄。

1 標(biāo)簽和數(shù)據(jù)的格式

首先看看標(biāo)簽和數(shù)據(jù)的格式

數(shù)據(jù)放在images中,這個(gè)文件夾名字可以隨便起,但是注意,labels這個(gè)文件夾一定不能改。這個(gè)yolo會(huì)自動(dòng)找到這個(gè)文件夾里面標(biāo)好的數(shù)據(jù)的。

然后進(jìn)入labels這個(gè)文件夾

我們分析一下這個(gè)文件夾里面的內(nèi)容

標(biāo)簽的格式是:

類別 框的中心點(diǎn)X方向/圖像寬 框的中心點(diǎn)Y方向/圖像高 框?qū)?圖像寬 框高/圖像高 class_number box2_x1_ratio box2_y1_ratio box2_width_ratio box2_height_ratio

具體計(jì)算看一看scripts/voc_label.py的源碼

# size :width height box: xmin xmax ymin ymax def convert(size, box):dw = 1./size[0]dh = 1./size[1]x = (box[0] + box[1])/2.0y = (box[2] + box[3])/2.0w = box[1] - box[0]h = box[3] - box[2]x = x*dww = w*dwy = y*dhh = h*dhreturn (x,y,w,h)

2 修改yolo.c

然后要改yolo.c文件中的類別數(shù)目,修改train.txt路徑到自己的train.txt,**注意下,train.txt里面只需要寫圖片的路徑就可以了,每行一張圖片路徑,用的是絕對路徑,相對路徑還沒有用過,不知道行不行。

char *train_images = "/data/voc/train.txt"; char *backup_directory = "/home/pjreddie/backup/";

然后找到這個(gè)函數(shù)

draw_detections(im, l.side*l.side*l.n, thresh, boxes, probs, voc_names, alphabet, CLASSNUM);

最后的classnum改成自己的類型數(shù)目。

3 修改yolo_kernels.cu

yolo_kernels.cu文件中 找到這個(gè)函數(shù)

draw_detections(det, l.side*l.side*l.n, demo_thresh, boxes, probs, voc_names, voc_labels, CLS_NUM);

改變最后的cls_num為自己的類型數(shù)目。

4 修改cfg

最后要改的就是yolo2.cfg 或者是yolo.cfg,看你用哪個(gè),不過這個(gè)都是yolov1的。

切記一點(diǎn),在兩個(gè)文件的最末端

[connected] output= 931 activation=linear[detection] classes=4 coords=4 rescore=1 side=7 num=3 softmax=0 sqrt=1 jitter=.2

output 是需要重新計(jì)算的,如果不重新計(jì)算會(huì)報(bào)一個(gè)問題

Assertion `side*side*((1 + l.coords)*l.n + l.classes) == inputs' failed.

而這個(gè)output值的計(jì)算如上面這個(gè)錯(cuò)誤

  • side=7
  • l.coords = coords
  • l.n = num
  • l.classes = classes

即output = 7*7*((1+coords)*num+classes)

這個(gè)classes需要改成自己的類別數(shù)目。

如果要用yolov2的進(jìn)行訓(xùn)練的話,那么需要重新計(jì)算最后一層的filter

[convolutional] size=1 stride=1 pad=1 filters=425 activation=linear[region] anchors = 0.738768,0.874946, 2.42204,2.65704, 4.30971,7.04493, 10.246,4.59428, 12.6868,11.8741 bias_match=1 classes=80 coords=4 num=5 softmax=1 jitter=.2 rescore=1object_scale=5 noobject_scale=1 class_scale=1 coord_scale=1

filter的計(jì)算公式為

filters = num*(classes+coords+1)

5 訓(xùn)練

去官網(wǎng)下載extraction.conv.weights,當(dāng)然也可以自己重新計(jì)算extraction.conv.weights, 過程就不詳細(xì)敘述了,可以去官網(wǎng)自己看看。最后就可以愉快的運(yùn)行訓(xùn)練了。

./darknet yolo train cfg/yolov1/yolo2.cfg extraction.conv.weights

截圖留念

最后給出一個(gè)不錯(cuò)的blog,YOLO2 如何fine tunning

轉(zhuǎn)載于:https://my.oschina.net/u/1046919/blog/801132

總結(jié)

以上是生活随笔為你收集整理的YOLO 训练的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。