猫12分类:使用yolov5训练检测模型

前言:

在使用yolov5之前,尝试过到百度飞桨平台(小白不建议)、AutoDL平台(这个比较友好,经济实惠)训练模型。但还是没有本地训练模型来的舒服。因此远程了一台学校电脑来搭建自己的检测模型。配置嘛!勉强过的去。毕竟训练的模型也不是很大。本来想着也想搞一些nb轰轰的模型,但想想还是算了,一是经济(云平台,只想白嫖),二是时间(准备那些数据集就非常浪费时间,自己昨天制作的那150关于猫的label就标了三四个小时,还标错了,导致训练时全部返工,真的烦),三是学校电脑配置还是不咋行,训练完估计模型精度也就那样子。想想嘛!还是根据喜好训练一个模型吧!

使用yolov5进行本地部署的原因:

推荐使用YOLOv5训练检测模型有以下几个原因:

  1. 高性能:YOLOv5在检测任务上具有出色的性能。相比于之前的版本,YOLOv5采用了更深的网络结构和更多的特征层,可以提供更准确的检测结果,并且在速度上也有所提升。

  2. 简单易用:YOLOv5提供了一个简单的训练和测试框架,使得用户可以轻松地进行模型的训练和评估。用户只需要准备好训练数据,并进行简单的配置,就可以开始训练模型。

  3. 多平台支持:YOLOv5支持多种平台,包括CPU、GPU和TPU等。这使得用户可以根据自己的需求选择合适的硬件平台来进行训练和推理。

  4. 开源社区支持:YOLOv5是一个开源项目,有一个庞大的开源社区支持。这意味着用户可以从社区中获取到丰富的资源、教程和解决方案,以帮助他们更好地使用和优化YOLOv5模型。

综上所述,YOLOv5是一个性能优秀、简单易用、多平台支持且有开源社区支持的检测模型,因此推荐使用它进行训练和应用。

数据预处理:

xml文件转txt文件

在使用yolov5训练模型之前,需要将label目录下的xml文件转为txt文件。

转换代码如下

复制代码
import os
import xml.etree.ElementTree as ET

import os
import xml.etree.ElementTree as ET

def convert_xml_to_yolov5_label(xml_file, txt_file):
  tree = ET.parse(xml_file)
  root = tree.getroot()

  with open(txt_file, 'w') as f:
    for obj in root.findall('outputs/object/item'):
      class_name = obj.find('name').text
      bbox = obj.find('bndbox')
      x_min = float(bbox.find('xmin').text)
      y_min = float(bbox.find('ymin').text)
      x_max = float(bbox.find('xmax').text)
      y_max = float(bbox.find('ymax').text)

      width = x_max - x_min
      height = y_max - y_min
      x_center = x_min + width / 2
      y_center = y_min + height / 2

      # 将坐标归一化到0-1之间
      width /= float(root.find('size/width').text)
      height /= float(root.find('size/height').text)
      x_center /= float(root.find('size/width').text)
      y_center /= float(root.find('size/height').text)

      f.write(f"{class_name} {x_center} {y_center} {width} {height}\n")

def batch_convert_xml_to_yolov5_label(xml_folder, txt_folder):
  if not os.path.exists(txt_folder):
    os.makedirs(txt_folder)

  for file in os.listdir(xml_folder):
    if file.endswith('.xml'):
      xml_file = os.path.join(xml_folder, file)
      txt_file = os.path.join(txt_folder, file.replace('.xml', '.txt'))
      convert_xml_to_yolov5_label(xml_file, txt_file)

# 示例用法
xml_folder = r'C:\Users\1\Desktop\images\labelsxml'
txt_folder = r'C:\Users\1\Desktop\images\labels'
batch_convert_xml_to_yolov5_label(xml_folder, txt_folder)

划分训练集和验证集

因为数据集比较少,所以验证集部分直接使用训练集来做验证。

数据目录结构如下:

编写data目录yaml文件(索引文件,加载数据的访问路径以及检测类别)

复制代码
# 数据集根路径
path: C:\Users\1\Desktop\catmaoxunlian\catdata    
#训练集
train: images/train
#验证集
val: images/val

nc: 1
# Classes
names: ['cat']

示例编辑如下

编写models目录下的yum文件

模型训练

找到yolov5目录下的train.py,加载数据集yaml文件和models云文件,以及预训练模型,

详细教程请找我的另一篇博客(懒得再写一遍)基于yolov5的NEU-NET产品缺陷目标检测_map50_挽风起苍岚的博客-CSDN博客

基本上检测出来了,不过精度不是很高,精度不高的原因,主要时数据集太少(猫的类别很多),训练次数不是很够。

模型推理

复制代码
python detect.py --weights yolov5s.pt --source 0                               # webcam
                                               img.jpg                         # image
                                               vid.mp4                         # video
                                               screen                          # screenshot
                                               path/                           # directory
                                               list.txt                        # list of images
                                               list.streams                    # list of streams
                                               'path/*.jpg'                    # glob
                                               'https://youtu.be/LNwODJXcvt4'  # YouTube
                                               'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream

测试图片如下:

模型推理后的结果

额,模型精度有待加强,不过先这样吧!勉勉强强,哈哈。。。

后续内容

训练一个猫12分类的模型;

部署到云平台,开放一个接口调用模型API;

然后结合猫目标检测模型制作一个C#小程序。

增加一个GPT功能等等吧!

....

相关推荐
智驱力人工智能8 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
工程师老罗8 小时前
YOLOv1 核心结构解析
yolo
Liue612312318 小时前
YOLO11-C3k2-MBRConv3改进提升金属表面缺陷检测与分类性能_焊接裂纹气孔飞溅物焊接线识别
人工智能·分类·数据挖掘
Lun3866buzha8 小时前
YOLOv10-BiFPN融合:危险物体检测与识别的革新方案,从模型架构到实战部署全解析
yolo
Katecat996639 小时前
YOLOv8-MambaOut在电子元器件缺陷检测中的应用与实践_1
yolo
工程师老罗10 小时前
YOLOv1 核心知识点笔记
笔记·yolo
Lun3866buzha10 小时前
农业害虫检测_YOLO11-C3k2-EMSC模型实现与分类识别_1
人工智能·分类·数据挖掘
雪兽软件11 小时前
了解大数据分析实施问题和解决方案
数据挖掘·大数据分析
工程师老罗15 小时前
基于Pytorch的YOLOv1 的网络结构代码
人工智能·pytorch·yolo
学习3人组18 小时前
YOLO模型集成到Label Studio的MODEL服务
yolo