yolov5检测小目标(附源码)

这篇具有很好参考价值的文章主要介绍了yolov5检测小目标(附源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

yolov5小目标检测(图像切割法附源码)

6.30 更新切割后的小图片的label数据处理

前言

yolov5大家都熟悉,通用性很强,但针对一些小目标检测的效果很差。
YOLOv5算法在训练模型的过程中,默认设置的图片大小为640x640像素(img-size),为了检测小目标时,如果只是简单地将img-size改为4000*4000大小,那么所需要的内存会变得非常之大,几乎没有可行性。
以下是对6k * 4k的图片,进行小目标检测训练结果,八张图一个字:烂
yolov5小目标检测,图像处理,python,python,计算机视觉,深度学习
数据集(路面标志):
yolov5小目标检测,图像处理,python,python,计算机视觉,深度学习

图像切割

最简单的方法就是把这个大图片切割成小图片,参考开源框架SAHI[1]
几个问题:

1、简单切割,要保证切割后每张图片大小一致;
2、切割过程难免会切掉目标,需要设置“融合”区域;
3、切割后的数据集是小图片的数据集,那么同样,目标检测的时候也只能检测小图片。那就要对检测之后的小图片做合并处理。(麻烦)

1、图像切割

大体结构图:
其中蓝绿色是切割后的4*4=16张子图,红蓝框的部分是融合图,混合比例0.2
yolov5小目标检测,图像处理,python,python,计算机视觉,深度学习

这个简单,参考博客python切割图片,用opencv切割就行,注意同时要切割好融合部分的图片。

# 融合部分图片
def img_mix(img, row_height, col_width, save_path, file):
    mix_num = 3
    # 每行的高度和每列的宽度

    # 分割成4*4就是有
    # 4*3个行融合区域
    # 3*4个列融合区域
    # 一行的融合
    row = 0
    for i in range(mix_num + 1):
        mix_height_start = i * row_height
        mix_height_end = (i + 1) * row_height
        for j in range(mix_num):
            mix_row_path = save_path + '/' + file + '_mix_row_' + str(row) + '.jpg'
            mix_row_start = int(j * col_width + col_width * (1 - mix_percent))
            mix_row_end = int(mix_row_start + col_width * mix_percent * 2)
            # print(mix_height_start, mix_height_end, mix_row_start, mix_row_end)
            mix_row_img = img[mix_height_start:mix_height_end, mix_row_start:mix_row_end]
            cv2.imwrite(mix_row_path, mix_row_img)
            row += 1

    col = 0
    # 一列的融合
    for i in range(mix_num):
        mix_col_start = int(i * row_height + row_height * (1 - mix_percent))
        mix_col_end = int(mix_col_start + row_height * mix_percent * 2)
        for j in range(mix_num + 1):
            mix_col_path = save_path + '/' + file + '_mix_col_' + str(col) + '.jpg'
            mix_width_start = j * col_width
            mix_width_end = (j + 1) * col_width
            # print(mix_col_start, mix_col_end, mix_width_start, mix_width_end)
            mix_col_img = img[mix_col_start:mix_col_end, mix_width_start:mix_width_end]
            cv2.imwrite(mix_col_path, mix_col_img)
            col += 1
切割成小图片后,label处理部分

本人是从xml文件中直接读取目标数据,代码:get_xml_data.py
在读取成功之后先保存成一个txt文件格式,所存储的数据为

图片类型(0:子图,1:行融合图,2:列融合图)
小图所处位置(0~15)
小图文件名
大图宽度
大图高度
目标类型
x最小值
x最大值
y最小值
y最大值

读取后得到的结果如下
yolov5小目标检测,图像处理,python,python,计算机视觉,深度学习
接下来还要进一步解析这些数据,代码:txt_to_yolo.py
现在已知:小图位置、每种小图宽高、大图宽高,那么就可以定位目标在小图片上的位置
例如:
假设下图宽高为100,右上小框在右上部分的中心,的宽高为10,此时小框的位置信息是
xmin=70, xmax=80
ymin=20, ymax=30
位于第1号子图上(编号0~3)
yolov5小目标检测,图像处理,python,python,计算机视觉,深度学习
那么就右上角的一小部分而言,小款的位置信息是
xmin=20, xmax=30
ymin=20, ymax=30
根据这个思路,就可以很好地处理其他数据。

2、目标检测

没啥好说的这个,图片切割后把yolov5的图片训练路径、检测路径改成切割后的图片就好。
注意一点
训练的时候有 融合图 , 检测的时候没有(因为我没做融合图的检测,容易和子图之间产生重复,比较是机器检测的结果)
更改路径:直接在 def run()下面更改路径,如detect.py:
yolov5小目标检测,图像处理,python,python,计算机视觉,深度学习
检测结果:
yolov5小目标检测,图像处理,python,python,计算机视觉,深度学习
yolov5小目标检测,图像处理,python,python,计算机视觉,深度学习

3、融合

这个说难不难,说简单也不简单
主要是要思路清晰

1、需要定位每一张图片所在的位置(比如切割成4*4,总共有16个位置)
2、根据每一个位置,对每一张图片的检测结果(txt文件)内容进行相应处理,处理成在大图中对应的位置,比如位置是 右上角(0, 3), 那么该图片中检测到的结果的x值都应该加上 (3 * 大图宽度/4),再重新转换成yolov5的标注格式

差不多就这样子?
融合结果
yolov5小目标检测,图像处理,python,python,计算机视觉,深度学习

4、结果观察

前面说到,这里的训练和检测都是基于小图片进行,那么就不好直接观察结果如何(检测图片上的框)
那么可以针对融合的txt文件结果,在原图上直接用 ImageDraw 画一个框
结果还不错
yolov5小目标检测,图像处理,python,python,计算机视觉,深度学习

训练结果

看看训练结果
yolov5小目标检测,图像处理,python,python,计算机视觉,深度学习

其他

也可以参考一些类似的项目
yolov5-tph: https://github.com/Gumpest/YOLOv5-Multibackbone-Compression
yolov-z
还有什么增加小目标检测层(感觉不通用,试了下除了增加训练时间之外,效果也一般般)

相关文件:

配置文件: config.py
裁剪图片: cut_image.py
读取xml数据: get_xml_data.py
裁剪label数据: txt_to_yolo.py
融合图片: joint_image.py
原图画框: draw_box.py
主函数: main.py
下载地址①
文件下载地址②文章来源地址https://www.toymoban.com/news/detail-779752.html

到了这里,关于yolov5检测小目标(附源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • yolov5检测小目标(附源码)

    6.30 更新切割后的小图片的label数据处理 前言 yolov5大家都熟悉,通用性很强,但针对一些小目标检测的效果很差。 YOLOv5算法在训练模型的过程中,默认设置的图片大小为640x640像素(img-size),为了检测小目标时,如果只是简单地将img-size改为4000*4000大小,那么所需要的内存会变

    2024年02月03日
    浏览(41)
  • 目标检测论文解读复现之十:基于YOLOv5的遥感图像目标检测(代码已复现)

    前言        此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮助大家解答疑惑。解读的系列文章,本人

    2024年02月06日
    浏览(40)
  • 目标检测 图像处理 计算机视觉 工业视觉

    从事ai视觉算法有几年了,本帖是对以往做过的计算机视觉项目的一些总结,硬件部署的大多是基于nvidia的开发板和GPU服务器上,如jetson nano,还有地平线J3J5和瑞芯微以及星辰的开发板,另外就是对实时性要求不高的部署在cpu上。有相关项目需求可以一起交流和学习。(+v 3

    2024年02月06日
    浏览(49)
  • pyqt5实战-目标检测-图像处理-人脸检测之UI界面

    今天挖掘了一个很不错的界面,使用pyqt5实现,可以加载摄像头进行目标检测,也可以手动打开图片或者视频,进行检测,封装得很好。这里以人脸检测,人脸疲劳检测(检测眨眼),微笑检测三个功能为例子。 所使用的检测算法模型为MediaPipe。MediaPipe为我们日常使用的革命

    2024年02月06日
    浏览(48)
  • 基于yolov5的遥感图像目标检测(NWPU VHR-10)

    最近在做毕设,感觉网上信息不是很全,把自己的训练过程写下来供做这个方向的友友学习。 只有简单的复现,其余的还没探索到。 首先就是数据集:我用的数据集是西工大发布的数据集,NWPU VHR-10 链接:https://pan.baidu.com/s/1vfhDU2ORWUpL-aGM1PllGw  提取码:d5au 西工大数据集有十

    2023年04月25日
    浏览(38)
  • 基于YOLOv5 来训练头盔目标检测-附源码

    建筑工地头部头盔检测,基于目标检测工地安全帽和禁入危险区域识别系统,🚀😆附YOLOv5训练自己的数据集超详细教程!!! 目录 指标 yolov5s 为基础训练,epoch = 50 yolov5m 为基础训练,epoch = 100

    2024年02月13日
    浏览(46)
  • 目标检测 YOLOv5的loss权重,以及与图像大小的关系

    YOLOv5中有三个损失分别是 box, obj, cls 在超参数配置文件hyp.*.yaml中可以设置基础值,例如 训练使用时,在train.py进行更新 可以看到损失与nl(number of detection layers,检测层的层数,这里是3)和图像尺寸相关,与layers相关这个好理解,是因为损失多个layers的加和。与图像尺寸相关

    2024年02月09日
    浏览(42)
  • 目标检测YOLO实战应用案例100讲-基于深度学习的航拍图像YOLOv5目标检测(论文篇)(续)

    目录 基础理论及相关技术  2.1 深度学习基础理论 

    2024年04月16日
    浏览(48)
  • 模式识别与图像处理课程实验二:基于UNet的目标检测网络

    实验采用Unet目标检测网络实现对目标的检测。例如检测舰船、车辆、人脸、道路等。其中的Unet网络结构如下所示 U-Net 是一个 encoder-decoder 结构,左边一半的 encoder 包括若干卷积,池化,把图像进行下采样,右边的 decoder 进行上采样,恢复到原图的形状,给出每个像素的预测

    2023年04月08日
    浏览(45)
  • ​目标检测算法——YOLOv5/YOLOv7改进之结合​SOCA(单幅图像超分辨率)

    (一)前沿介绍 论文题目:Second-order Attention Network for Single Image Super-Resolution 论文地址:CVPR19 超分辨率 代码地址:https://github.com/daitao/SAN 1.SOCA moudle结构图 2.相关实验结果 (二)YOLOv5/YOLOv7改进之结合​SOCA 1.配置common.py文件 2.配置yolo.py文件 3.配置yolov5/yolov7_SOCA moudle.yaml文件

    2024年02月07日
    浏览(273)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包