Ubuntu18.04下實現Yolov3對象檢測

環境配置如下:

系統配置 命令
Ubuntu:18.04 cat /etc/issue
python:2.7.15 python
OpenCV:3.2.0 pkg-config --modversion opencv

實現命令如下:
在這裏插入圖片描述
Yolov3的原理另一篇博客中有所介紹,這裏大致列下實現流程以及訓練自己數據集過程:
一、跑官方demo

  1. 下載darknet,也就是YOLO:
    git clone https://github.com/pjreddie/darknet
    cd darknet
    make
    make成功後會顯示如下信息:
    在這裏插入圖片描述
    make前後對應的工程文件夾下的內容也有所不同:
    在這裏插入圖片描述
  2. 編譯完成之後,執行darknet
    在這裏插入圖片描述
  3. 下載預訓練模型(yolov3.weights)
    wget https://pjreddie.com/media/files/yolov3.weights
  4. 運行demo
    ./darknet detect cfg/yolov3.cfg backup/yolov3.weights data/dog.jpg
    效果圖:
    在這裏插入圖片描述二、訓練自己的數據集
    1.由於使用的無GPU版本,第一步所有的makefile文件配置全部忽略。
    2.創建數據集文件目錄:
    在/home/mtd/work_project/darknet/data目錄下新建文件夾MyData,在該文件夾新建如下三個文件夾:
    在這裏插入圖片描述
    Annotations—存放所有訓練圖片對應的xml文件
    ImageSets—在該文件夾下新建Main文件夾,然後在Main下創建兩個.txt文件(存放圖片的名稱,不帶後綴),分別爲train.txt(訓練集)和val.txt(驗證集)
    這兩個txt文件中的圖片名可以通過如下python代碼Write_ImgName.py生成,注意代碼中的文件路徑,文件路徑不能爲中文,有中文存在編譯會報錯。
    JPEGImages—存放所有的訓練圖片
    Write_ImgName.py代碼如下:
import os
from os import listdir,getcwd
from os.path import join
if __name__=='__main__':
  source_folder='/home/.../darknet/data/MyData/JPEGImages'
  dest='/home/.../darknet/data/MyData/ImageSets/Main/train.txt'
  dest2='/home/.../darknet/data/MyData/ImageSets/Main/val.txt'
  file_list=os.listdir(source_folder)
  train_file=open(dest,'a')
  val_file=open(dest2,'a')
  for file_obj in file_list:
      file_path=os.path.join(source_folder,file_obj)
      file_name,file_extend=os.path.splitext(file_obj)
      file_num=int(file_name)
      if(file_num<40):
         train_file.write(file_name+'\n')
      else:
         val_file.write(file_name+'\n')
  train_file.close()
  val_file.close()
print('Finishing')
  1. 生成2.中對應的train.txt和val.txt,可通過上述python腳本生成:
    在這裏插入圖片描述
  2. 運行voc_label.py生成2019_train.txt和2019_val.txt這兩個文件。
  3. 下載與訓練權重:
    wget https://pjreddie.com/media/files/darknet53.conv.74
  4. 整理所有文件到對應的地方:
    其實最終需要的文件只有*.jpg/.txt/2019_train.txt/2019_val.txt/darknet53.conv.74
    在mytrain文件夾下新建文件夾obj和weights:
    obj—存放
    .jpg和*.txt
    weights—存放訓練後的權重文件
    7.修改對應文件
    (1) ./data/voc.names:
    在這裏插入圖片描述
    每一行對應一種類型,根據自己的情況自行修改
    (2) 修改cfg/voc.data:
    在這裏插入圖片描述
    其中的classes/train/valid等根據自己的具體情況進行修改。
    (3) cfg/yolov3-voc.cfg
    在這裏插入圖片描述下面三處也需要修改:
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    8.開始訓練
    ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 | tee train_yolov3-voc.log(linux下 保存訓練日誌log)
    9、對訓練模型進行測試
    ./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_200.weights voc/0002.jpg
    yolov3-voc_200.weights: 表示訓練出來的權重文件
    voc/0002.jpg: 表示測試圖片的路徑
    10、生成預測結果
    ./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_600.weights result
    結果生成在results文件夾下
    11、計算召回率(recall)
    ./darknet detector recall cfg/voc.data cfg/yolo-voc.cfg backup/yolo-voc_final.weights
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章