使用YOLO的实现识别数据

以下是根据文档分析得出的使用YOLO建立和实现识别数据的步骤:

1. 环境搭建

  • 选择操作系统:使用CentOS 7.0系统,它是Linux发行版之一,具有稳定性高、免费等特点,适合本次项目。
  • 安装OpenCV工具:OpenCV是一个跨平台计算机视觉库,通过sudo yum install opencv命令进行安装,它提供了图像处理和计算机视觉方面的很多通用算法以及相关API。
  • 安装CUDA开发环境
    • 首先确认计算机有Nvidia显卡,然后查看系统内核版本、确认编译器gcc已安装,并安装Kernel-headerkernel-devel,且版本需和内核版本一致。
    • 关闭开源的3D驱动Nouveau,创建/etc/modprobe.d/blacklist - nouveau.conf文件并写入相关内容,重新生成内核initramfs,重启计算机后进入命令提示符模式,使用root用户登录并进入多用户模式,然后执行./cuda_8.0.61_375.26_linux - run命令安装CUDA(本次实验使用runfile安装方式),安装过程中选择安装CUDA工具箱、CUDA例子等,最后将CUDA加入到环境变量中并重启计算机。
  • 项目目录结构及编译
    • 使用git clone https://github.com/pjreddie/darknet下载项目源代码,然后进入项目目录cd darknet并执行make命令进行编译。编译完成后,项目包含cfg配置文件存放目录、data数据存放目录、examplesC语言测试用例、includedarknet头文件、pythonPython测试用例、scripts训练中用到的辅助脚本、src项目源代码、darknet编译后产生的可执行文件以及一些模块配置和函数文件。

2. 训练数据采集与制作

  • 训练数据采集
    • 确定训练的目标种类,本次实验是水果识别,包括WaterMelon、StrawBerry、Orange、Pineapple、Apple共5种,每种收集约30 - 40张图片,总共171张,图片从百度图片下载,分辨率一般在400*300像素左右,按照5位数字从00000递增命名并放在一个文件夹中。
  • 训练数据制作
    • 下载并编译安装LabelImg软件,使用它给171张水果图片标记对象位置和名称,标记完成后每张图片会生成一个记录对象名称和位置的xml文件。
    • 按照VOC数据集的格式创建文件夹结构,包括VOCdevkitVOC2017Annotations(存放xml文件)、ImageSets(包含Main文件夹,其中train.txt保存全部图片位置信息)以及labels文件夹。
    • 使用项目自带的voc_label.py脚本将xml格式转换成YOLO所需的label文件,打开脚本修改数据集年份、要识别的对象种类名称以及xml文件存放位置等信息,运行脚本后会生成labels文件,其中每个文件内容第一项是水果编号,后面4项是标记对象在图片中的位置比例。

3. 训练配置

  • 创建cfg/myd.names文件,包含5种水果的名称,每行一个,顺序需与前面python脚本中配置的一致。
  • 创建cfg/myd.data文件,包含要识别的对象的种类个数(5)、train.txt文件位置、myd.names文件位置以及生成的训练权重文件位置。
  • 复制一份cfg/yolo.cfg文件,命名为yolo - myd.cfg,编辑这个文件,主要修改文件末尾region层中classes为5,同时修改region层上一层convolution层的filters值为50(根据公式(classes + coords + 1)* (NUM)计算,此次试验中具体数据为(5 + 4 + 1)*5 = 50)。

4. 训练过程

执行./darknet detector train./cfg/myd.data cfg/yolo - myd.cfg命令开始训练,训练过程中会打印训练进度信息,包括加载时间、区域平均交并比(Region Avg IOU)、类别准确率(Class)、目标置信度(bj)、无目标置信度(No 0bj)、平均召回率(Avg Recall)等,并且每5分钟生成一次训练数据文件到backup_myd/yolo - myd.backup,同时分阶段生成训练权重,如yolo - myd_100.weightsyolo - myd_200.weights等。

5. 测试训练效果

训练完成后,使用./darknet detector test cfg/myd.data cfg/yolo - myd.cfg backup_myd/yolo - myd_50000.weights testimg/apple.jpg命令检测训练结果,查看识别的准确性。

### YOLO V5 图像识别使用教程 #### 1. 基本原理概述 YOLO V5 是一种实时目标检测框架,继承并优化了YOLO系列的优点。该算法采用CSPNet和SPPNet等轻量化网络结构设计,使得模型不仅体积小巧而且运算速度快[^2]。 #### 2. 环境配置指南 为了能够顺利运行YOLO V5项目,需先完成必要的开发环境设置: - 安装Python解释器(建议版本3.x) - 创建虚拟环境并通过pip工具安装依赖库 - 下载官方提供的预训练权重文件或自行准备数据集用于重新训练 具体命令如下所示: ```bash # 创建并激活新的虚拟环境 python -m venv yolov5-env source yolov5-env/bin/activate # Linux/MacOS下执行此句;Windows则为 yolov5-env\Scripts\activate.bat # 更新pip至最新版并安装requirements.txt里指定的所有包 pip install --upgrade pip pip install -r requirements.txt ``` #### 3. 数据集处理方法 对于自定义的数据集来说,通常需要将其转换成适合YOLO格式的形式。这涉及到创建标签文件(.txt),其中每行记录着一个物体的位置信息(x_center, y_center, width, height)及其类别编号。此外还需要编写相应的.yaml配置文档来描述整个数据集的信息。 #### 4. 训练过程详解 当一切准备工作就绪之后就可以启动训练流程了。这里给出一段简单的调用脚本供参考: ```python from pathlib import Path import torch if __name__ == '__main__': weights = 'yolov5s.pt' # 初始权重路径 data_cfg = './data/coco128.yaml' # 数据集配置文件位置 imgsz = 640 # 输入图片尺寸大小 batch_size = 16 # 批次数量 device = 'cuda' if torch.cuda.is_available() else 'cpu' !python train.py \ --weights {weights} \ --data {data_cfg} \ --img-size {imgsz} \ --batch-size {batch_size} ``` 上述代码片段展示了如何利用`train.py`脚本来开始一轮完整的训练周期。用户可以根据实际情况调整超参数以获得更好的效果。 #### 5. 推理预测实例展示 一旦完成了满意的模型训练工作,则可以进入推理阶段来进行实际的目标检测任务。下面是一段用来加载已保存的最佳权重量并进行单张图片推断的例子: ```python import cv2 from utils.general import non_max_suppression, scale_coords from models.experimental import attempt_load def detect(image_path='data/images/bus.jpg'): model = attempt_load('runs/train/exp/weights/best.pt', map_location=device) source_image = cv2.imread(image_path) input_tensor = preprocess(source_image).unsqueeze(0).to(device) pred_results = model(input_tensor)[0] detections = non_max_suppression(pred_results, conf_thres=0.25, iou_thres=0.45) for det in detections: if len(det): det[:, :4] = scale_coords(input_tensor.shape[2:], det[:, :4], source_image.shape).round() for *xyxy, conf, cls in reversed(det): label = f'{model.names[int(cls)]} {conf:.2f}' plot_one_box(xyxy, source_image, label=label, color=(0, 255, 0), line_thickness=3) output_file = image_path.replace('.jpg', '_detected.jpg') cv2.imwrite(output_file, source_image) detect() ``` 这段程序首先会尝试加载最优的模型权重,接着读取待测图像并经过适当变换送入神经网络得到初步的结果列表。最后再通过非极大抑制(non-max suppression)去除冗余框体,并将剩余的有效边界框绘制到原始画面上形成可视化输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值