当前位置: 代码迷 >> 综合 >> 1.1 【YoloV3--tensorflow】Part one ---- 目标检测实战:用YOLOV3训练自建的数据集
  详细解决方案

1.1 【YoloV3--tensorflow】Part one ---- 目标检测实战:用YOLOV3训练自建的数据集

热度:93   发布时间:2023-12-23 13:17:10.0
  •     在进行YOLOV3网络框架训练之前最好先熟悉一下自身所使用的软硬件配置。

            本机环境:Ubuntu16.04+Python3.5.2+OPENCV3.1.0+CUDA 8.0.61+CUDNN5.1.10

            查看本机CUDA版本 :cat /usr/local/cuda/version.txt

           查看本机CUDNN版本: cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

  •     接下来进行数据准备工作

            图像标注前的准备工作

1.图像数据收集,在采集图像时最好结合后期自身所要用到的方法,比如在进行某些特征提取时图像的光照以及阴影对最终特征的提取影响很大,因此在拍照时需要考虑这些细节问题,以免后期带来不必要的麻烦。

2.整理图像数据,建立VOC层次目录用来存放自己的数据集,新建文件夹命名为voc(一级),并在voc下新建VOCdevkit(二级 )文件夹,在VOCdevkit下新建VOC2019(三级 年份任意)文件夹,在VOC2019下新建四个文件夹,分别命名为Annotations

(存放使用labelImg软件标注所有数据集图片时生成的txt标注文件)、ImageSets(用来存放训练和测试数据的名称,其里面存放的是Layout和Main文件夹(Main文件夹下新建tset.txt  train.txt  val.txt)这些txt中的内容仅包含图片名信息,没有后缀)、JPEGImages(用于存放数据集中的图片,后期还要将labels中的txt全部放到其中)、labels(存放Annotations中相同的内容,只不过是txt格式)

使用LabelImg进行图像标注 :安装方法

            标注步骤:LabelImg图像标注步骤

在整理好数据集之后,需要对图片数据进行一定的处理,即对所有的图片重命名,设定统一的命名格式,代码如下:

import osclass BatchRename():#定义函数执行图片的路径def __init__(self):self.path = '/home/darknet/scripts/VOCdevkit/VOC2019/JPEGImages'#修改为自己的图片路径#定义函数实现重命名操作def rename(self):filelist = os.listdir(self.path)total_num = len(filelist)i = 0for item in filelist:if item.endswith('.jpg'):src = os.path.join(os.path.abspath(self.path), item)dst = os.path.join(os.path.abspath(self.path), str(i).zfill(6) + '.jpg')try:os.rename(src, dst)print('converting %s to %s ...' % (src, dst))i = i + 1except:continueprint ('total %d to rename & converted %d jpgs' % (total_num, i))#主函数调用
if __name__ == '__main__':demo = BatchRename()demo.rename()

最终得到的结果是000000.jpg 000001.jpg  ........  000759.jpg

接着就是划分训练集、验证集以及测试集,放置在Main文件夹下的tset.txt  train.txt  val.txt,这些txt中的内容仅包含图片名信息,没有后缀,使用如下代码进行数据集划分

import os
from os import listdir, getcwd
from os.path import join
if __name__ == '__main__':source_folder='/*****(自己的路径)/darknet-master/voc/VOCdevkit/VOC2019/JPEGImages/'#地址是所有图片的保存地点dest='/*****(自己的路径)/darknet-master/voc/VOCdevkit/VOC2019/ImageSets/Main/train.txt'  #保存train.txt的地址,对于train.txt(在ImageSets/Main/下)和2019_train.txt(在VOCdevkit下)是不同的路径dest2='/*****(自己的路径)/darknet-master/voc/VOCdevkit/VOC2019/ImageSets/Main/val.txt'  #保存val.txt的地址,对于val.txt(在ImageSets/Main/下)和2019_val.txt(在VOCdevkit下)是不同的路径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_path保存每一个文件的完整路径file_name,file_extend=os.path.splitext(file_obj)#file_name 保存文件的名字,file_extend保存文件扩展名file_num=int(file_name)  if(file_num<620):                     #保留620个文件用于训练train_file.write(file_name+'\n')  #用于训练前620个的图片路径保存在train.txt里面,结尾加回车换行/生成train.txt是file_name;生成2019_train.txt是file_pathelse :val_file.write(file_name+'\n')    #其余的文件保存在val.txt里面/生成val.txt是file_name;生成2019_val.txt是file_pathtrain_file.close()#关闭文件
val_file.close()

到此为止,数据集一切工作准备就绪。

接下来就是下载darknet

由于时间关系,此处省略一波操作,还请见谅,接下来所有的步骤过程请参考以下几篇博文,非常详细,重点看前两篇博文即可

ubuntu16.04下使用YOLOV3训练自己做的VOC数据集(VOC数据集制作+模型训练步骤+训练参数解析和问题解决+训练日志可视化(loss、IOU)+模型测试(单张、摄像头、批量测试))_鬼 | 刀的博客-CSDN博客    

YoLov3训练自己的数据集(小白手册)_Rani_zZ的博客-CSDN博客_yolov3训练自己的数据集  

YOLOv3批量测试图片并保存在自定义文件夹下_冯爽朗的博客-CSDN博客_yolov3批量测试图片

关于yolov3模型中的部分参数意义:YOLO v3训练过程中输出参数含义_Nani_xiao的博客-CSDN博客

关于设置OPENCV=1出现的问题即解决方式:

Darknet YOLO 安装配置_hrsstudy的博客-CSDN博客_darknet yolo

fix compile error with opencv and debug · PaulChongPeng/darknet@317366e · GitHub

如何在最终的检测图片上显示置信度:

YOLO测试图片显示准确率值_syyyy712的博客-CSDN博客_yolo准确率

环境配置及问题:

yolov3环境配置训练及优化 - 简书

YOLOV3训练后,权重测试出错【深度学习吧】_百度贴吧

YOLOV3实战2:训练自己的数据集,你不可能出错!_phinoo的博客-CSDN博客_yolov3实战

  相关解决方案