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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Yolov4训练自己的数据集

發布時間:2025/3/11 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Yolov4训练自己的数据集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Yolov4訓練自己的數據集

  • 代碼運行環境Ubuntu18.04+python3.6+顯卡1080Ti+CUDA10.0+cudnn7.5.1+OpenCV3.4.6+Cmake3.12.2,詳細環境配置安裝步驟就不講解拉,網上教程一大堆。
  • 從github克隆下載源碼,鏈接地址:https://github.com/AlexeyAB/darknet
  • 訓練肯定需要使用GPU加速,那么得打開項目里面的makefile文件修改一些參數的值,1-4、7改為1
    makefile前面幾行:打開GPU 加速,打開opencv,打開libdarknet.so生成開關
  • GPU=1 CUDNN=1 CUDNN_HALF=1 OPENCV=1 AVX=0 OPENMP=0 LIBSO=1 ZED_CAMERA=0 # ZED SDK 3.0 and above ZED_CAMERA_v2_8=0 # ZED SDK 2.X
  • 編譯
    在darknet-master目錄下運行:cmake.&make -j48

    下載與訓練權重放在主目錄下https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights

    百度網盤: 鏈接:https://pan.baidu.com/s/16wOHbaa2mG7cTZ_RcGjRnw
    提取碼:99bl

    用下面的命令測試一下預訓練權重
    ./darknet

    如果編譯成功則會出現以下信息
    usage: ./darknet

    現在可以測試初始預訓練權重效果了
    ./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jp

  • 成功則在主目錄下出現predictions.jpg 圖片為預測后的圖片,打開 OPENCV=1的可以直接顯示出圖片。說明我們的環境配置好了,否則先去配置環境。

    5. 訓練自己的數據集
    –5.1 在主目錄下創建yolo-obj.cfg 配置文件。將 yolov4-custom.cfg 中的內容復制到 yolo-obj.cfg里面,并做以下修改。
      --5.1.1修改batch=64,修改subdivisions=16(如果顯卡是2080TI的,可以把batch設置為96,如果報內存不足,將batch改回64將,或者subdivisions設置為32)
      --5.1.2修改max_batches=classes*2000 例如有2個類別人和車 ,那么就設置為4000,N個類就設置為N乘以2000,
      --5.1.3修改steps為80% 到 90% 的max_batches值 比如max_batches=4000,則steps=3200,3600
      --5.1.4修改classes,先用ctrl+F搜索 [yolo] 可以搜到3次,每次搜到的內容中 修改classes=你自己的類別 比如classes=2
      --5.1.5修改filters,一樣先搜索 [yolo] ,每次搜的yolo上一個[convolution] 中 filters=(classes + 5)x3 比如filters=21
      --5.1.6(可以跳過)如果要用[Gaussian_yolo] ,則搜索[Gaussian_yolo] 將[filters=57] 的filter 修改為 filters=(classes + 9)x3 (這里我沒用到,但是還是修改了)
    –5.2制作obj.names,在主目錄下創建obj.names文件。內容為你的類別 比如人和車 那么obj.names 為如下,多個類別依次往下寫

    person
    car

    –5.3 制作obj.data,在主目錄下創建obj.data文件。內容如下

    classes= 2train = ./scripts/2007_train.txt#valid = ./scripts/2007_test.txt #(做測試用的測試txt)valid = ./scripts/2007_val.txtnames = darknet-master/obj.name #(找不到的話,可以修改為自己的絕對路徑)backup = backup/ # 權重保存的位置

    –5.4 數據集制作
    在scripts文件夾下按如下目錄創建VOCdevkit 文件夾,放自己的訓練數據。

    VOCdevkit --VOC2007 ----Annotations #(放XML標簽文件) ----ImageSets ------Main ----JPEGImages # (放原始圖片) 把自己的原始未標注圖片和標簽信息放入相應文件夾下。
    • ?

    –5.5 scripts文件夾下有voc_label.py,打開后修改自己的類別信息,

    sets=[ (‘2007’, ‘train’), (‘2007’, ‘val’), (‘2007’, ‘test’)]
    classes = [“person”,“car” ] 按自己的類別修改,但是順序要和obj.name 保持一致,
    -5.6 在主目錄下創建make_data.py 文件,把如下代碼方進去。運行此文件在scripts 文件下生成 3個相應的txt文件,在Main 下生成四個txt文件。

    • ?
    import os import random import sys root_path = './scripts/VOCdevkit/VOC2007' xmlfilepath = root_path + '/Annotations' txtsavepath = root_path + '/ImageSets/Main' if not os.path.exists(root_path):print("cannot find such directory: " + root_path)exit() if not os.path.exists(txtsavepath):os.makedirs(txtsavepath) trainval_percent = 0.9 train_percent = 0.8 total_xml = os.listdir(xmlfilepath) num = len(total_xml) list = range(num) tv = int(num * trainval_percent) tr = int(tv * train_percent) trainval = random.sample(list, tv) train = random.sample(trainval, tr) print("train and val size:", tv) print("train size:", tr) ftrainval = open(txtsavepath + '/trainval.txt', 'w') ftest = open(txtsavepath + '/test.txt', 'w') ftrain = open(txtsavepath + '/train.txt', 'w') fval = open(txtsavepath + '/val.txt', 'w') for i in list:name = total_xml[i][:-4] + '\n'if i in trainval:ftrainval.write(name)if i in train:ftrain.write(name)else:fval.write(name)else:ftest.write(name) ftrainval.close() ftrain.close() fval.close() ftest.close()
    • 5.7運行voc_labels.py文件,在VOC2007文件下生成labels文件,文件夾里包含相應的txt.(現在voc2007文件里多出一個labels 文件夾)

    -5.8 開始訓練
    首先下載預訓練權重yolov4.conv.137,放入主目錄下。

    鏈接:https://pan.baidu.com/s/1yhB8pRcGH84gyRWeNictBA
    提取碼:gi4d

    用下面的命令開始訓練:
    ./darknet detector train obj.data yolo-obj.cfg yolov4.conv.137 -map

    #訓練2000此后在之前訓練的基礎上繼續訓練(適合中途停止后繼續訓練)
    ./darknet detector train obj.data yolo-obj.cfg backup/yolo-obj_2000.weights -map

    大家可以看到收斂效果還是很明顯的,效果扛扛的。不愧是吊打一切的目標檢測算法。

    -5.9測試
    修改obj.data,
    valid = ./scripts/2007_test.txt
    #valid = ./scripts/2007_val.txt

    測試:
    ./darknet detector map obj.data yolo-obj.cfg backup/yolo-obj_final.weights

    好了,你竟然認真的看完了,記得點贊收藏,下次觀看不迷路,有任何問題歡迎流言私信我。

    總結

    以上是生活随笔為你收集整理的Yolov4训练自己的数据集的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。