YoloV5实战:手把手教物体检测——YoloV5

简介: YoloV5实战:手把手教物体检测——YoloV5

目录


摘要


训练


1、下载代码


2、配置环境


3、准备数据集


4、生成数据集


5、修改配置参数


6、修改train.py的参数


7、查看训练结果


测试


摘要

YOLOV5严格意义上说并不是YOLO的第五个版本,因为它并没有得到YOLO之父Joe Redmon的认可,但是给出的测试数据总体表现还是不错。详细数据如下:


tt.png

YOLOv5并不是一个单独的模型,而是一个模型家族,包括了YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x、YOLOv5x+TTA,这点有点儿像EfficientDet。由于没有找到V5的论文,我们也只能从代码去学习它。总体上和YOLOV4差不多,可以认为是YOLOV5的加强版。


项目地址https://github.com/ultralytics/YOLOv5

训练

1、下载代码

项目地址:https://github.com/ultralytics/YOLOv5,最近作者又更新了一些代码。


tt.png

tt.png

2、配置环境

matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.1.2
pillow
PyYAML>=5.3
scipy>=1.4.1
tensorboard>=2.2
torch>=1.6.0
torchvision>=0.7.0
tqdm>=4.41.0

3、准备数据集

数据集采用Labelme标注的数据格式,数据集从RSOD数据集中获取了飞机和油桶两类数据集,并将其转为Labelme标注的数据集。


数据集的地址https://pan.baidu.com/s/1iTUpvA9_cwx1qiH8zbRmDg

提取码:gr6g

或者:https://download.csdn.net/download/hhhhhhhhhhwwwwwwwwww/14003627


将下载的数据集解压后放到工程的根目录。为下一步生成测试用的数据集做准备。如下图:

tt.png


4、生成数据集

YoloV5的数据集和以前版本的数据集并不相同,我们先看一下转换后的数据集。

数据结构如下图:

tt.png

images文件夹存放train和val的图片

labels里面存放train和val的物体数据,里面的每个txt文件和images里面的图片是一一对应的。

txt文件的内容如下:

tt.png

格式:物体类别 x y w h  

坐标是不是真实的坐标,是将坐标除以宽高后的计算出来的,是相对于宽和高的比例。

下面我们编写生成数据集的代码,新建LabelmeToYoloV5.py,然后写入下面的代码。

import os
import numpy as np
import json
from glob import glob
import cv2
from sklearn.model_selection import train_test_split
from os import getcwd
classes = ["aircraft", "oiltank"]
# 1.标签路径
labelme_path = "LabelmeData/"
isUseTest = True  # 是否创建test集
# 3.获取待处理文件
files = glob(labelme_path + "*.json")
files = [i.replace("\\", "/").split("/")[-1].split(".json")[0] for i in files]
print(files)
if isUseTest:
    trainval_files, test_files = train_test_split(files, test_size=0.1, random_state=55)
else:
    trainval_files = files
# split
train_files, val_files = train_test_split(trainval_files, test_size=0.1, random_state=55)
def convert(size, box):
    dw = 1. / (size[0])
    dh = 1. / (size[1])
    x = (box[0] + box[1]) / 2.0 - 1
    y = (box[2] + box[3]) / 2.0 - 1
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)
wd = getcwd()
print(wd)
def ChangeToYolo5(files, txt_Name):
    if not os.path.exists('tmp/'):
        os.makedirs('tmp/')
    list_file = open('tmp/%s.txt' % (txt_Name), 'w')
    for json_file_ in files:
        json_filename = labelme_path + json_file_ + ".json"
        imagePath = labelme_path + json_file_ + ".jpg"
        list_file.write('%s/%s\n' % (wd, imagePath))
        out_file = open('%s/%s.txt' % (labelme_path, json_file_), 'w')
        json_file = json.load(open(json_filename, "r", encoding="utf-8"))
        height, width, channels = cv2.imread(labelme_path + json_file_ + ".jpg").shape
        for multi in json_file["shapes"]:
            points = np.array(multi["points"])
            xmin = min(points[:, 0]) if min(points[:, 0]) > 0 else 0
            xmax = max(points[:, 0]) if max(points[:, 0]) > 0 else 0
            ymin = min(points[:, 1]) if min(points[:, 1]) > 0 else 0
            ymax = max(points[:, 1]) if max(points[:, 1]) > 0 else 0
            label = multi["label"]
            if xmax <= xmin:
                pass
            elif ymax <= ymin:
                pass
            else:
                cls_id = classes.index(label)
                b = (float(xmin), float(xmax), float(ymin), float(ymax))
                bb = convert((width, height), b)
                out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
                print(json_filename, xmin, ymin, xmax, ymax, cls_id)
ChangeToYolo5(train_files, "train")
ChangeToYolo5(val_files, "val")
ChangeToYolo5(test_files, "test")


目录
相关文章
|
10月前
|
机器学习/深度学习 编解码 算法
【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)
【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)
760 0
【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)
|
10月前
|
异构计算 计算机视觉 测试技术
【YOLO系列】YOLOv6论文超详细解读(翻译 +学习笔记)
【YOLO系列】YOLOv6论文超详细解读(翻译 +学习笔记)
889 0
【YOLO系列】YOLOv6论文超详细解读(翻译 +学习笔记)
|
1月前
|
机器学习/深度学习 算法 PyTorch
YOLO如何入门?
YOLO如何入门?
|
10月前
|
机器学习/深度学习 编解码 算法
【YOLO系列】YOLOv2论文超详细解读(翻译 +学习笔记)
【YOLO系列】YOLOv2论文超详细解读(翻译 +学习笔记)
525 0
【YOLO系列】YOLOv2论文超详细解读(翻译 +学习笔记)
|
10月前
|
机器学习/深度学习 固态存储 数据挖掘
【YOLO系列】YOLOv3论文超详细解读(翻译 +学习笔记)
【YOLO系列】YOLOv3论文超详细解读(翻译 +学习笔记)
675 1
【YOLO系列】YOLOv3论文超详细解读(翻译 +学习笔记)
|
11月前
|
机器学习/深度学习 人工智能 计算机视觉
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
12668 0
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
|
10月前
|
计算机视觉 异构计算 文件存储
【YOLO系列】YOLOv7论文超详细解读(翻译 +学习笔记)
【YOLO系列】YOLOv7论文超详细解读(翻译 +学习笔记)
1642 0
【YOLO系列】YOLOv7论文超详细解读(翻译 +学习笔记)
|
10月前
|
机器学习/深度学习 编解码 Go
【YOLO系列】YOLOv4论文超详细解读1(翻译 +学习笔记)
【YOLO系列】YOLOv4论文超详细解读1(翻译 +学习笔记)
663 0
【YOLO系列】YOLOv4论文超详细解读1(翻译 +学习笔记)
|
10月前
|
XML 数据采集 存储
Yolo-V5目标检测 项目实战
Yolo-V5目标检测 项目实战
|
10月前
|
人工智能 自动驾驶 安全
YOLO v8!| 附教程+代码 以及 vs YOLOv6 v3.0
YOLO v8!| 附教程+代码 以及 vs YOLOv6 v3.0