Chrome Pointer

2022年1月25日 星期二

如何運用darknet 在yolov4 上面計算anchors

此篇文章會繼承我之前寫的以下幾篇文章

💛YOLOv4 training 訓練完整教學(以口罩辨識為範例)

💛YoloR的 YoloR_p6.cfg 如何修改成自己想要的訓練資料?


使用下面這一支程式,

它會產生car_train81.txtcar_test81.txt,

但因為我沒有驗證集,所以圖片都放在car_train81裡面


import glob, os


# Current directory
current_dir = os.path.dirname(os.path.abspath(__file__))

print(current_dir)

current_dir = '/home/g11016003/yolor/data/car_train81_total'

# Percentage of images to be used for the test set
percentage_test = 100; #因為我沒有測試集,所以這裡設100, 讓圖片全部存在car_train81.txt裡面

# Create and/or truncate train.txt and test.txt
file_train = open('data/car_train81.txt''w')
file_test = open('data/car_test81.txt''w')

# Populate train.txt and test.txt
counter = 1
index_test = round(100 / percentage_test)
for pathAndFilename in glob.iglob(os.path.join(current_dir, "*.jpg")):
    title, ext = os.path.splitext(os.path.basename(pathAndFilename))

    if counter == index_test:
        counter = 1
        file_train.write("/home/g11016003/yolor/data/car_train81_total" + "/" + title + '.jpg' + "\n")
    else:
        file_test.write("/home/g11016003/yolor/data/car_train81_total" + "/" + title + '.jpg' + "\n")
        counter = counter + 1

至於為什麼要用到這一支程式,

這是因為Darknetyolov4比較麻煩,

你必須要先把圖片和標註好的.txt檔案放在同一個資料夾裡面,

但是你的.data檔案的 train valid 路徑不能直接設在 圖片和.txt所在的資料夾路徑,

你必須要創一個新的.txt,

並且把圖片的路徑全部寫在這個.txt圖片裡面,

然後再到.data裡面把.txt的路徑設為train valid.

Car_train81.txt包含所有圖片的路徑


當你確定好有產生car_trin81.txt的檔案,

並且裡面有產生要訓練的圖片位置後 (我這邊是採用絕對路徑),

就可以在car81.data把car_trin81.txt路徑寫進train 和 valid裡面!!

(記得你的classes, names這些也要弄唷~)

Car81.data裡面的路徑要連結到Car_train81.txt


當你完成以上步驟後,

就可以下指令囉~

./darknet detector calc_anchors data/文件.data  -num_of_clusters 需要幾組 -width 寬度 -height 高度

由於我是要應用在YoloR上面,

因此我的-num_of_clusters是下12組, 寬高也分別給1280,

這部分可以根據你要使用的yolo版本而調整!!

./darknet detector calc_anchors data/car81.data -num_of_clusters 12 -width 1280 -height 1280


正常情況下,

當你下完指令後,

你的anchors就出現囉



#counters_per_class >> 0 

代表那類沒Label(如果太多0會造成IoU下降準確度降低)


沒有留言:

張貼留言

喜歡我的文章嗎? 喜歡的話可以留言回應我喔! ^^