三分钟学会yolo目标检测(附源码和中文论文)

本文通过一个车辆目标检测案例,教会你如何使用yolov3训练自己的目标检测模型;案例相关yolov3代码、数据集以及yolov3中文版论文放于文末获取;提供的代码经过严格调试,在windows10下可一键启动训练。

目录

  1. 项目介绍
  2. 模型训练
  3. 模型使用
  4. 资源获取

▍项目介绍

任务概述:
本篇文章,我们以车辆检测为例,使用labelimg工具在图片上标注了两个目标类:[car、bus] 。然后使用yolov3来训练一个能够识别检测:【汽车、大巴】的模型。当然我们也可以通过标注其它类别来实现自定义目标检测。
在这里插入图片描述
yolov3代码总览:
在这里插入图片描述

文件解释:

  • checkpoints:存放训练过程中的模型权重文件;
  • data:存放训练和测试数据集;
  • log:存放日志文件(可以不用管);
  • tools:存放用于解析标注数据的脚本文件;
  • yolov3:存放模型核心代码文件;
  • delect.py:模型预测文件;
  • train.py:模型训练文件;

▍模型训练

模型的训练和预测过程先用视频演示一遍:

yolov3代码演示视频

1. 环境安装
这里默认已经安装好了python3.5以上版本的运行环境;

pip install numpy==1.26.4
pip install opencv_contrib_python==4.5.4.58
pip install opencv_python==4.5.4.58
pip install Pillow==10.4.0
pip install tensorflow==2.10.0

2. 数据准备
本案例数据集使用Labelimg工具进行标注(对Labelimg工具不熟悉的小伙伴请自行查阅相关教程),xml为标注文件。
数据标注好之后,将图片(.jpg文件)和标注文件(.xml文件)划分到train(训练数据集)和test(测试数据集)两个目录。

data/custom_data
├── train/
│   ├── image1.jpg
│   ├── image1.xml
│   ├── image2.jpg
│   ├── image2.xml
└── test/
    ├── image3.jpg
    ├── image3.xml
    ├── image4.jpg
    ├── image4.xml

使用tools目录下的脚本文件XML_to_YOLOv3.py解析标注数据;修改文件第八行的data_dir为标注数据的存放位置:data/custom_data,然后执行代码。

import xml.etree.ElementTree as ET
import os
import glob

foldername = os.path.basename(os.getcwd())
if foldername == "tools": os.chdir("..")

data_dir = '/data/custom_data/'         # 输入的标注数据路径

Dataset_names_path = "data/names.txt"   # 输出的类别
Dataset_train = "data/train.txt"        # 数据的训练数据集路劲
Dataset_test = "data/test.txt"          # 输出的测试数据集路径
is_subfolder = False

Dataset_names = []
      
def ParseXML(img_folder, file):
    for img_path in glob.glob(img_folder+'/*.jpg') + glob.glob(img_folder+"/*.png"):
        xml_file = img_path[:-4] + ".xml"
        tree=ET.parse(open(xml_file))
        root = tree.getroot()
        # image_name = root.find('filename').text
        # img_path = img_folder+'/'+image_name
        for i, obj in enumerate(root.iter('object')):
            difficult = obj.find('difficult').text
            cls = obj.find('name').text
            if cls not in Dataset_names:
                Dataset_names.append(cls)
            cls_id = Dataset_names.index(cls)
            xmlbox = obj.find('bndbox')
            OBJECT = (str(int(float(xmlbox.find('xmin').text)))+','
                      +str(int(float(xmlbox.find('ymin').text)))+','
                      +str(int(float(xmlbox.find('xmax').text)))+','
                      +str(int(float(xmlbox.find('ymax').text)))+','
                      +str(cls_id))
            img_path += ' '+OBJECT
        print(img_path)
        file.write(img_path+'\n')

def run_XML_to_YOLOv3():
    for i, folder in enumerate(['train','test']):
        with open([Dataset_train,Dataset_test][i], "w") as file:
            print(os.getcwd()+data_dir+folder)
            img_path = os.path.join(os.getcwd()+data_dir+folder)
            if is_subfolder:
                for directory in os.listdir(img_path):
                    xml_path = os.path.join(img_path, directory)
                    ParseXML(xml_path, file)
            else:
                ParseXML(img_path, file)

    print("Dataset_names:", Dataset_names)
    with open(Dataset_names_path, "w") as file:
        for name in Dataset_names:
            file.write(str(name)+'\n')

run_XML_to_YOLOv3()


names.txt、train.txt、test.txt为运行之后生成的标注数据解析文件,可以直接用于模型训练。
在这里插入图片描述

3. 参数设置

模型的所有参数都被统一定义在yolov3/config.py文件中,在进行模型训练之前,我们需要修改几个参数:

  • TRAIN_CLASSES:yolov3/config.py文件第28行,指定用于训练的目标类别的名称文件路径;
  • TRAIN_ANNOT_PATH:yolov3/config.py文件第29行,指定了训练数据的注释文件路径;
  • TEST_ANNOT_PATH:yolov3/config.py文件第45行,指定了测试数据的注释文件路径;

4. 运行代码
点击train.py文件直接运行代码,或者命令行cd进入到yolov3目录执行:

cd yolov3
python train.py

模型训练过程:
在这里插入图片描述
模型的训练权重默认保存在/checkpoints目录下(在config.py第31行定义)。

▍模型使用

1. 参数设置
修改detect.py文件的image_path参数指定进行预测的图片;config.py文件中的其它参数与训练时保持一致即可。
在这里插入图片描述
2. 运行代码
点击detect.py文件直接运行代码,或者命令行cd进入到yolov3目录执行:

cd yolov3
python detect.py

模型测试结果:
在这里插入图片描述

▍资源获取

本项目在windows系统下以调试好,按照上面步骤将环境安装好之后即可一键运行。代码跑不通可评论区留言或私信解决。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值