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

本文详细介绍了在Ubuntu16.04环境下,使用YOLOV3训练自定义VOC数据集的全过程,包括数据集标注、VOC2019数据集制作、预训练权重下载、模型训练参数解析、问题解决及训练日志可视化,以及模型测试。训练中解决了标注、数据集制作、参数调优和CUDA内存不足等问题,并提供了训练日志的可视化方法。
摘要由CSDN通过智能技术生成

                                                                    前序


1、环境配置

  •      请自行参考其他博客
  •      本机环境
    • ubuntu16.04
    • python3
    • 英伟达显卡驱动:nvidia-396
    • OpenCV3.4.5
    • CUDNN7.0.5
    • CUDA9.0

2、ubuntu16.04下安装OpenCV

     参考:ubuntu16.04安装C++版本的OpenCV3.4.5


                                                 一、数据集图片的标注


1、使用labelImg标注软件进行数据集中图像的标注

      参考:LabelImg的详细使用和图像标注

2、具体改动的标注步骤

        注:不同的是,我们在标注的时候就让每张图片生成的是txt文件,而不是xml文件,这样就省去了xml转txt这个步骤

(1)红色方框处选择yolo,而非默认的PascalVOC

                                              

 (2)每标注一张图片点击保存,就会生成对应的图片名的txt文件,在保存txt文件夹中也会存在一个所有类别的文件

  • 每个图片标注后的文件

            

 

  • 类别txt文件                       

                                                                                          

(3)对于每个标注后生成的txt文件,其格式是如下所示

                                

 

 


                                                   

                                                  二、VOC2019数据集的制作 


 1、建立层次文件夹

  •    在下载的YOLOV3代码目录下,即darnet-master下建立voc/VOCdevkit/VOC2019层次目录,自己的建立的数据集为               VOC2019
  •    然后在VOC2019目录下建立三个文件夹:Annotations、ImageSets、JPEGImages

         一级:darknet-master

          二级:——backup  (存储训练好的模型)

          二级:——cfg  (用于存放.cfg和.data文件)

          二级:——data  (存放标签文件、图片、名字文件(.name))

          三级:————data下的目录 :images(存放图片和yolo的txt文件,图片名和txt文本名要对应,但是后面我们在                                                                              JPEGImages中这样做了,因此此步就做了)          

          三级:————data下的目录:labels (存放用于opencv回执图片框的图片文件)

          二级:——voc      (voc数据集目录)

          三级:————VOCdevkit

          四级: ——————VOC2019(这个年号可以自行更换,根据自己的需求吧)

          五级:  ————————Annotations (存放使用labelImg软件标注所有数据集图片时生成的txt标注文件)

          五级:  ————————ImageSets(用来存放训练和测试数据的名称,其里面存放的是Main文件夹)

          五级:  ———————— labels(存放Annotations中相同的内容)

          六级: ——————————Main(Main文件夹中存放的是4个txt文件,分别是存训练集图片名的train.txt、存验证集图片                                                                         名的val.txt、存测试集图片名的test.txt、存测试和验证集图片名的trainval.txt,但是                                                                           自己只建了两个,接下来会说明如何生成的)

           五级: ————————JPEGImages  (用于存放数据集中的图片,后期还要将labels中的txt全部放到其中

  • 具体目录层次如下:

             

 

2、一些txt文件的生成 

#####

    前提说明:因为我们在标注时就已经生成了每个图片对应的txt文档,因此我们就不使用darknet-master/scripts下的voc_label.py文件了,而是自己写脚本生成我们需要的文件。

######

(1)根据JPEGImages中的数据集图片生成我们需要的ImageSets/Main目录下的train.txt和val.txt,这两个文件存的是每个图片的名字,即.jpg之前的内容

  •  生成如上txt文件的脚本文件make_train_val.py如下
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_path
        else :
            val_file.write(file_name+'\n')    #其余的文件保存在val.txt里面/生成val.txt是file_name;生成2019_val.txt是file_path
    train_file.close()#关闭文件
val_file.close()
  • 终端运行
python3 make_train_val.py

                    

  • 生成的文件目录和文件内容如下

 

a)train.txt文件部分内容(保存的是图片名字)

                                                  

b)val.txt文件中的内容(保存的是图片名字)

                                                                          

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值