Ubuntu18.04下实现Yolov3对象检测

环境配置如下:

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

实现命令如下:
Ubuntu18.04下实现Yolov3对象检测_第1张图片
Yolov3的原理另一篇博客中有所介绍,这里大致列下实现流程以及训练自己数据集过程:
一、跑官方demo

  1. 下载darknet,也就是YOLO:
    git clone https://github.com/pjreddie/darknet
    cd darknet
    make
    make成功后会显示如下信息:
    Ubuntu18.04下实现Yolov3对象检测_第2张图片
    make前后对应的工程文件夹下的内容也有所不同:
    Ubuntu18.04下实现Yolov3对象检测_第3张图片
  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
    效果图:
    Ubuntu18.04下实现Yolov3对象检测_第4张图片二、训练自己的数据集
    1.由于使用的无GPU版本,第一步所有的makefile文件配置全部忽略。
    2.创建数据集文件目录:
    在/home/mtd/work_project/darknet/data目录下新建文件夹MyData,在该文件夹新建如下三个文件夹:
    Ubuntu18.04下实现Yolov3对象检测_第5张图片
    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脚本生成:
    Ubuntu18.04下实现Yolov3对象检测_第6张图片
  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:
    Ubuntu18.04下实现Yolov3对象检测_第7张图片
    每一行对应一种类型,根据自己的情况自行修改
    (2) 修改cfg/voc.data:
    Ubuntu18.04下实现Yolov3对象检测_第8张图片
    其中的classes/train/valid等根据自己的具体情况进行修改。
    (3) cfg/yolov3-voc.cfg
    Ubuntu18.04下实现Yolov3对象检测_第9张图片下面三处也需要修改:
    Ubuntu18.04下实现Yolov3对象检测_第10张图片
    Ubuntu18.04下实现Yolov3对象检测_第11张图片
    Ubuntu18.04下实现Yolov3对象检测_第12张图片
    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

你可能感兴趣的:(AI)