使用Yolov4实现简单的图片标注

部署运行你感兴趣的模型镜像

一、前言
YOLOv4(You Only Look Once version 4)是一种先进的目标检测系统,于2020年推出。它是对之前版本YOLO的改进,后者是一种广泛使用的基于深度学习的目标检测算法。YOLOv4基于深度卷积神经网络,可以高精度实时检测图像中的目标。它使用单个神经网络,输入图像并输出所有目标的边界框和类别概率。YOLOv4相对于其前身YOLOv3的一些主要改进包括:

  • 增加网络的深度和宽度,以获得更好的特征表示
  • 使用先进的数据增强技术,以提高模型的泛化能力
  • 整合多种先进的目标检测技术,如空间金字塔池化、Mish激活函数和交叉阶段部分网络。

YOLOv4是一个开源项目,在GitHub上免费提供。它已成为许多计算机视觉应用程序的流行选择,包括自动驾驶汽车、安全系统和监控系统。论文 ,代码。

本实验基于代码Github开源代码:

项目首页 - yolov4-pytorch - GitCodeicon-default.png?t=N7T8https://gitcode.com/bubbliiiing/yolov4-pytorch/overview?utm_source=csdn_github_accelerator&isLogin=1

 二、运行环境准备

运行文件前,需要的主要的库(依赖)我们都可以在requirements.txt中找到。

我们直接运行下面这个代码就可以安装所需要的库(如果下载太慢可以在后面加一个源,只要是国内的,什么源都可以)。如果下面代码运行不成功,那只能辛苦一下自己,一个一个下载。总之,没有什么库就下什么库。

pip install -r requirements.txt
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

在这里如果条件允许的话,下载torch的时候选择cuda版本,这样训练模型的时候会快一点。因为我的是集显的笔记本,而且安装cuda版本的话很麻烦,所以我的是cpu版本的torch,训练的时候真的是很久。

如何正确下载PyTorch、CUDA版本!!_cuda12.0下载-优快云博客icon-default.png?t=N7T8https://blog.youkuaiyun.com/m0_61497715/article/details/130060959?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171422624916800226557485%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171422624916800226557485&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-130060959-null-null.142^v100^pc_search_result_base8&utm_term=pytorch%E4%B8%8B%E8%BD%BDcuda&spm=1018.2226.3001.4187

安装pytorch(cpu版)用清华资源快速下载_pytorchcpu版本怎么下载-优快云博客icon-default.png?t=N7T8https://blog.youkuaiyun.com/qq_41739298/article/details/131365988?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171422674816800225563175%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171422674816800225563175&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-131365988-null-null.142^v100^pc_search_result_base8&utm_term=%E4%B8%8B%E8%BD%BDcpu%E7%89%88%E6%9C%AC%E7%9A%84pytorch&spm=1018.2226.3001.4187

三、数据准备

1、准备数据集

因为我自己的数据集不好,质量也不咋地,所以我就拿了一个数据集来用(当然你们也可以自己准备一个数据集),我的数据集是猫、狗、狐狸的数据。数据集链接:下载

动物照片_数据集-飞桨AI Studio星河社区 (baidu.com)icon-default.png?t=N7T8https://aistudio.baidu.com/datasetdetail/154928

 有了数据集后,我们需要借助labellmg_exe来对我们的数据图像标记来得到标签数据。

 

下面链接是labellmg_exe工具的安装和使用: 

 Windows下深度学习标注工具LabelImg安装和使用指南_windows安装labelimg-优快云博客icon-default.png?t=N7T8https://blog.youkuaiyun.com/m0_67647321/article/details/134749209?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171419190916800213066493%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171419190916800213066493&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-134749209-null-null.142%5Ev100%5Epc_search_result_base8&utm_term=labelimg%E6%96%87%E4%BB%B6&spm=1018.2226.3001.4187

 图片格式为jpg,标签为xml。

在labellmg使用中可以选择PascalVOC和YOLO两种,我们标注时选择PascalVOC,这样得到的标签文件就是xml格式。

 

 在图像和标签处理好之后,我们需要把yolov4里的yolov4-pytorch-master\VOCdevkit\VOC2007文件夹下的Annotations和JPEGImages替换成我们自己的标签和图像(标签和图像时一一对应的)。

Annotations文件夹放的是标签数据

JPEGImages文件夹放的是图像数据

2、划分数据集

找到我们的voc_annotation.py文件,这个文件是对数据集划分训练集和测试集。在运行voc_annotation.py前我们只要改一个参数classes_path。

我这里的cls_classes.txt是自己新建立的txt文件,放到model_data文件夹下,内容就是图片对应的名字,或者也可以在coco_classes.txt文件中改(这样上面一步就不用改)。

 

 运行voc_annotation.py,我们可以得到以下结果,对我们的数据集进行了划分。

四、训练数据

第一次训练

(1)、train.py文件

train.py文件可以根据我们提供的数据进行训练,运行得出模型的权值。第一次训练的时候,在这个文件中我们有要修改的参数,classes_path

使用cuda版本torch的这里要把False改成True,cpu版本的可以不管。我的是cpu版本的所以就没改

2、yolo.py文件

yolo.py也和train,py文件一样把参数classes_path和cuda都要改。不过yolo.py有两个类,都要改。

 

 然后就是运行train.py文件。

训练期间会输出模型性能的统计数据,包括不同类别(dragon fruit 和 snake fruit)的平均精度(AP)和平均精度均值(mAP),以及它们对应的分数阈值、F1-分数、召回率和精确率。

第一次训练可以修改参数UnFreeze_Epoch,也就是训练的总批次,我这里是100个批次这样可以减少我们训练的时间。

然后就是我们训练结束后得到的权值文件,都会保存在logs文件下,best_epoch_weights.pth文件就是我们训练得到的权值文件。

第二或三次训练

对于我们想要得到的权值文件,一次训练是不够的,所以我们需要第二、第三次训练。

第二次训练前我们需要把把logs文件best_epoch_weights.pth文件移到model_data文件下,可以换个名字方便我们区别。当然,我们可以调整参数UnFreeze_Epoch=300或者200,使得我们得到较好的权值.

在train.py文件,把参数model_path改成我们上一次得到的权值文件best_epoch_weights.pth

yolo.py文件也一样要改参数model_path,两个类的参数model_path都要改。

以此类推,第三次训练是权值文件改成第二次训练得到的权值文件。

训练多少次呢?

当平均精度均值(mAP)的值满足图片标注时就可以了(可能是80%左右)。当训练次数少了,mAP小(就像我第一次map55%,就没有标注图像),我们运行predict.py想要标注图像会发现没有标注。

3、predict.py文件

在运行predict.py文件前,把logs文件的best_epoch_weights.pth文件移到model_data文件下,需要把yolo.py文件的参数model_path的yolo4_weights.pth改成best_epoch_weights.pth。

predict.py文件不需要修改什么,实在是想改的话可以改参数fps_image_path,测试的图片路径

 运行之后,输入我们想要进行目标检测的图片的路径,就可以得到一张标注好的图片

结果展示

可以看到结果的第二张图把猫识别成狗了,这是可能是数据集或者训练的模型权值不够好,我的数据集都是怼脸的照片,这个模型把猫识别成狗了。解决的办法是多训练一两遍、增加数据集量等

在运行这个文件的时候可能会得到错误:

AttributeError: 'ImageDraw' object has no attribute 'textsize'

我的解决办法是修改Pillow的版本

到最后,对于yolov4算法还有很多的用法,我这里只是简单的实现图片标注。

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

<think>我们正在讨论图片标注工具,特别是针对YOLO等目标检测任务的标注工具。根据之前的引用内容,用户已经提到了LabelImg和CVAT这两款工具,并且引用[1][2][3]都详细介绍了LabelImg的特点和使用方法。用户当前的问题是查找可用于图片标注的工具,因此我们需要详细介绍这两款工具,尤其是LabelImg,因为引用内容对其描述最多。 主要工具推荐: 1. LabelImg:开源的图像标注工具,支持矩形框标注,可导出为PASCAL VOC格式(XML文件)和YOLO格式(TXT文件)。操作简单,适合初学者和快速标注需求。 2. CVAT(Computer Vision Annotation Tool):功能更强大的开源标注工具,支持多种标注类型(矩形、多边形、点、线等)和视频标注,适合团队协作和复杂任务。 由于引用中重点介绍了LabelImg,我们将详细说明其使用步骤: 使用LabelImg进行标注的步骤: 1. 下载并安装:从GitHub(https://github.com/heartexlabs/labelImg)下载,根据操作系统选择对应版本(支持Windows, Linux, Mac)。 2. 准备图片:将需要标注图片放入一个文件夹中。 3. 启动工具:运行labelImg executable(Windows下可执行文件,Linux/Mac需运行python脚本)。 4. 设置: - 打开图片文件夹(Open Dir) - 设置存放标注文件的文件夹(Change Save Dir) - 选择标注格式(PASCAL VOC或YOLO),在YOLO模式下,每个图片对应一个.txt文件。 5. 标注: - 使用快捷键`w`调出标注框,在目标物体周围绘制矩形框。 - 输入类别标签(或从已有类别中选择)。 - 保存标注(快捷键`Ctrl+S`)。 6. 导出:标注完成后,标注文件将保存在指定目录,可直接用于YOLO训练。 此外,CVAT作为更专业的工具,支持在线协作和项目管理,适合较大规模标注任务。其部署方式包括本地部署和在线使用(https://cvat.org/)。 相关问题: 1. 如何将LabelImg标注的PASCAL VOC格式转换为YOLO格式? 2. CVAT相对于LabelImg有哪些优势? 3. 除了LabelImg和CVAT,还有哪些适合目标检测任务的标注工具? 4. 标注过程中如何保证标注质量? 5. 如何高效标注视频中的目标? </think>根据您的需求,以下是专业且高效的图片标注工具推荐及使用指南,特别适用于交通设施识别等计算机视觉任务: ### 一、主流图片标注工具推荐 1. **LabelImg(开源单机版)** - **核心功能**: - 支持矩形框标注(最常用) - 导出格式YOLO(`.txt`)、PASCAL VOC(`.xml`) - 快捷键操作(如 `W` 创建框,`A/D` 切换图片) - **适用场景**: - 中小规模静态图像数据集 - YOLO系列模型训练(如交通灯、路牌等矩形目标) - **安装使用**: ```bash # 通过pip安装(需Python环境) pip install labelImg labelImg # 启动程序 ``` - **优势**:轻量级、学习成本低,标注效率高[^1][^3] 2. **CVAT(Computer Vision Annotation Tool)** - **核心功能**: - 支持多边形/点/线标注(适合不规则交通设施) - 团队协作与任务分配 - 视频连续帧标注(适用于动态场景) - **适用场景**: - 大规模标注项目 - 需精细标注的设施(如道路标线、复杂路障) - **部署方式**: ```bash # Docker部署(推荐) docker run -d -p 8080:8080 opencv/cvat ``` - 访问:`http://localhost:8080` - **优势**:工业级功能、支持复杂标注类型[^2] ### 二、标注工作流优化建议 1. **格式转换技巧**: - LabelImg标注的VOC格式YOLO格式公式: $$ x_{center} = \frac{x_{min} + 0.5 \times width}{img\_width}, \quad y_{center} = \frac{y_{min} + 0.5 \times height}{img\_height} $$ - 可使用`python`脚本批量转换(保持宽高归一化) 2. **效率提升方案**: - **预标注加速**:用YOLOv8预训练模型生成初步标注,人工修正 - **快捷键组合**: - LabelImg:`Ctrl+R` 切换YOLO格式,`Ctrl+S` 快速保存 - CVAT:`N` 下一帧,`F` 复制上一帧标注 3. **质量保障措施**: - 定义清晰的《交通设施标注规范》(如路牌遮挡处理规则) - 使用`labelImg-validator`检查标注文件一致性 ### 三、场景化工具选型 | **任务类型** | **推荐工具** | **关键特性** | |--------------------|--------------|--------------------------| | 简单矩形目标 | LabelImg | 极速启动,YOLO原生支持 | | 视频流交通场景 | CVAT | 时间序列标注,插值跟踪 | | 团队协作项目 | CVAT | 用户权限管理,进度看板 | | 移动端标注 | Makesense.ai | 浏览器即用,无需安装 | > 注:对于交通设施识别,**LabelImg**是最高效的起步工具,可直接生成YOLOv8所需格式;当需要标注复杂形状(如隔离带曲线)时,**CVAT**的多边形工具更适用[^2][^3]。 --- ### 相关问题 1. 如何将COCO格式的现有交通数据集转换为YOLO格式? 2. LabelImg和CVAT在标注精度和效率上有哪些量化对比? 3. 针对夜间交通场景的标注需要哪些特殊处理? 4. 如何设计交通设施标注的质检流程? 5. 是否有适用于自动驾驶场景的专用标注工具?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值