使用yolov5实现图像识别

在这里插入图片描述

在这里插入图片描述

开始之前

你应当先克隆这个仓库

git clone https://github.com/ultralytics/yolov5 # clone

下载完毕后,进入克隆的仓库目录

cd yolov5

下载依赖

pip install -r requirements.txt # install

下载数据集

这里有个数据集,为了节省训练时间,文件不是很大。结尾处我会推荐几个大型数据集下载地址

数据集下载
提取码:crnr

解压后,你会看到这几个文件夹:

请添加图片描述

标记数据集

可以登录 https://www.makesense.ai/ 网站去标记数据,当然,你也可以使用其他标记网站。

在这里插入图片描述

选择数据集目录,然后点击Object Detection,其中Image recognition主要用于图像分类。

在这里插入图片描述

注意注意注意 ⚠️ ⚠️ ⚠️ :请牢记你导入的图片,推荐你新建一个目录单独存储你需要标记的图片文件,这一步很关键,不然一会图片标签对应不上,你将白忙活一场!!!

在这里插入图片描述

这里我们可以首先添加几个标签,比如我想训练它识别苹果香蕉,那你就可以设置两个标签,分别为:apple,banana

根据我们的数据集,这里我们选择设置一个名为plastic的标签名,我使用的数据集是下面这个目录。

请添加图片描述
如果你想同时训练这些所有类型的目录,你可以把他们集合起来,放在同一个目录当中然后导入到这个标记网站。

在这里插入图片描述

标记你需要识别的部分,然后点击选择标签

在这里插入图片描述

标记过程非常无聊,很多次我想睡觉。这里我只标记了200个,理想情况下,需要更多的数据,如果你的时间充沛或者对识别结果要求很高,请尽量多标记一些数据,过程是很辛苦的。

以此类推,等你标记完所有数据,点击Export Annotations

在这里插入图片描述

在这里插入图片描述

导出之后,我们将看到一个包含很多txt文件的文件夹。

请添加图片描述

plastic1.txt 文件就是代表 plastic1.jpg 图片的标记文件。以此类推。

请添加图片描述

其中的 0 就是代表我们的标签,一会训练的时候,你可以设置多个标签,比如设置 0 代表塑料,1代表纸箱等。

剩下那几个代表我们标记图像在整个图片当中的位置。

整理文件

这里我创建了一个名为 mydata 的文件夹。你应当记住你的文件路径。

文件夹内包含了两个文件夹,分别为 trainval

请添加图片描述
train 文件夹内又包含了 imageslabels两个文件夹。

当然,val 文件内也需要这个两个文件夹。

在这里插入图片描述

  1. images:我们标记的图片
  2. labels:标记位置的 txt 文件

请添加图片描述

请添加图片描述

新建 yaml 文件

我这里新建了名为 mydataset.yaml,你应当记住你的文件路径。

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: mydata  # dataset root dir
train: shuju  # train images (relative to 'path') 128 images
val: shuju  # val images (relative to 'path') 128 images
# test:  # test images (optional)

names:
  0: plastic
  • path: 数据集的根目录。所有其他路径(如训练集和验证集)都是相对于这个路径的。
  • train: 训练数据集的路径。
  • val: 验证数据集的路径
  • test: 可选字段,指定测试数据集的路径。

这里配置文件的意思就代表 mydata/shuju

举个例子,如果你的 mydata(包含了train,val的文件夹) 目录在 /aaa/bbb/ccc/mydata,那你的配置文件应该如下。

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: /aaa/bbb/ccc/mydata  # dataset root dir
train: train  # train images (relative to 'path') 128 images
val: val  # val images (relative to 'path') 128 images
# test:  # test images (optional)

names:
  0: plastic

它就代表: /aaa/bbb/ccc/mydata/train. /aaa/bbb/ccc/mydata/val.

这里的 0 就是我们标签,如果你当时在一个图片内标记了好几个物体。例如,你不仅标记塑料还标记了纸,那你的配置文件就应该为:

names:
  0: plastic
  1: paper

相应的你的 txt 文件也会自动出现多个标签,如果你标记数据时同时在一张图片内标记了多个物体的话。

开始训练

这个 mydataset 就是你配置文件的地址。

python train.py --img 640 --epochs 3 --data mydataset.yaml --weights yolov5s.pt

这里使用了 yolov5s

模型选择

执行训练的时候使用了 --weights yolov5s.pt ,这是一种模型,你可以参考下图具体选择,如我们选择 yolov5x ,就可以使用 --weights yolov5x.pt ,推荐使用 yolov5s,除非你要求的准确度非常高,不然你需要花费非常长的时间和足够的硬件支持来训练它。

在这里插入图片描述

训练完成

训练好的模型在 runs/train/exp**/weights/best.pt

使用模型进行识别

这里的 best.pt 是你训练的模型地址。 –source 后面是你需要识别的图片地址。

python detect.py --weights best.pt --img 640 --source plastic184.jpg

在这里插入图片描述

在这里插入图片描述

自定义模型下载

如果你不想进行从头训练模型,可以下载这个已经训练好的模型进行上一步的 测试模型进行预测

分类模型下载

提取码:vvd6

数据集下载地址分享

1:数据集下载地址1

2:数据集下载地址2

问题

如果运行当中出现问题,欢迎咨询。

  • 1
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
【资源说明】 该项目是个人毕设项目源码,评审分达到95分,都经过严格调试,确保可以运行!放心下载使用。 该项目资源主要针对计算机、自动化等相关专业的学生或从业者下载使用,也可作为期末课程设计、课程大作业、毕业设计等。 具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现类似其他功能。 本次遥感图像识别算法采用的数据集是武汉大学提供的WHU-RS19数据集,该数据集包含了机场,海滩,桥,商业区,沙漠,农田,足球场,森林,工业区,草地,山,公园,停车场, 池塘, 港口, 火车站, 住宅区, 河流和高架桥总共19类遥感图像。图像的分辨率大都为600×600,每一个种类大约有50张图像。 数据集的预处理与索引文档的生成 在原始的数据集中,有4张分辨率不是600×600的图像已被去除。 利用 split_dataset.py 将数据集按照 0.8: 0.2 的比例分为训练集和测试集,分别置于train文件夹和test文件夹中。 利用 generate_txt.py 分别生成训练集和测试集的索引文件,索引文件中包括了图片的路径和图片的标签(0~19)。由于后面的实验在Google Colab上进行,因此我手动统一修改了图片的路径。最后得到的索引文件分别为train.txt和test.txt ## kNN kNN(k-邻近算法)是最为简单的机器学习算法。在kNN算法中,一个对象的分类是由其邻居的“多数表决”确定的,k个最近邻居(k为正整数,通常较小)中最常见的分类决定了赋予该对象的类别。若k = 1,则该对象的类别直接由最近的一个节点赋予。 ### kNN的测试效果 kNN作为一种最简单的机器学习算法,我并未对其的测试效果报以太大的期望。在本次测试中,我先将k取为1,测试这种最简单的模式下的效果,最终其测试的准确率为16%。 ### 分析参数k对kNN的测试效果的影响 采用kNN算法需要重点关注的是k值的选取。一般情况下,在分类时较大的K值能够减小噪声的影响,但会使类别之间的界限变得模糊。因此本实验分别尝试了k = 1,3,5,10,15下kNN算法的测试精度。 SVM 在机器学习中,SVM是一种常用的监督学习算法,其目的在于寻找一个超平面,能够以最大间隔将各类数据分开。作为传统的机器学习算法中表现非常优秀的一种算法,SVM在许多场景中都得到了应用。 CNN 卷积神经网络是目前图像识别中最为流行的机器学习算法,本实验的目的在于了解CNN在WHU-RS19数据集上的表现效果,并观察网络结构的变化对训练结果的影响。 LSTM 递归神经网络在语音识别、图像识别中得到了广泛的应用。在之前的期中作业中,我采用了RNN、LSTM和GRU等递归神经网络在MNIST、FashionMNIST、CIFAR10等比较简单的数据集上进行了测试。本实验中使用的WHU-RS19数据集的识别难度明显大于以上提及的几个数据集,通过该实验,我们也可以横向对比LSTM与其他机器学习算法的性能差异。
yolov5是一种用于图像识别的模型。它有四种不同的预训练模型,分别是yolov5s、yolov5m、yolov5l和yolov5x。这些模型在效果和精度上有所不同。你可以根据自己的需求选择合适的模型进行训练。在进行图像检测时,你可以使用已经下载好的模型进行识别。例如,如果你选择了yolov5x模型,你可以使用--weights yolov5x.pt来进行图像识别。推荐使用yolov5s模型,除非你对准确度有非常高的要求,否则训练它需要花费很长时间和足够的硬件支持。你可以参考\[2\]和\[3\]中的链接获取更多关于yolov5模型训练和图像识别的信息。 #### 引用[.reference_title] - *1* [基于yolov5图像识别](https://blog.csdn.net/LateNight_LL/article/details/125615068)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [手把手教会你使用机器学习拥有YOLOV5自己的图像识别](https://blog.csdn.net/qq_42368762/article/details/122690675)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [使用yolov5实现图像识别](https://blog.csdn.net/qq_41974199/article/details/130975885)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一拖再拖 一拖再拖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值