【目标检测】YOLOv5针对小目标检测的改进模型/添加帧率检测
问题背景
众所周知,YOLOv5会对输入的图片进行放缩,并进行32倍下采样。对于一些分辨率很高的遥感/无人机图片,小目标难以被训练识别。
本篇博文就来尝试这篇博文YOLOV5 模型和代码修改——针对小目标识别所提到的一种改进方案。
我所使用的是YOLOv5-5.0版本,数据集采用VisDrone数据集。
检测头改进
模型方面的修改:作者在模型上增加了一个更小的Anchor并添加了一个更小的检测头。
yolov5l_modify.yaml
# parameters
nc: 10 # number of classes
depth_multiple: 1.0 # model depth multiple
width_multiple: 1.0 # layer channel multiple# anchors
anchors:- [5,6, 8,14, 15,11] #4- [10,13, 16,30, 33,23] # P3/8- [30,61, 62,45, 59,119] # P4/16- [116,90, 156,198, 373,326] # P5/32# YOLOv5 backbone
backbone:# [from, number, module, args][[-1, 1, Focus, [64, 3]], # 0-P1/2[-1, 1, Conv, [128, 3, 2]], # 1-P2/4[-1, 3, BottleneckCSP, [128]], #160*160[-1, 1, Conv, [256, 3, 2]], # 3-P3/8[-1, 9, BottleneckCSP, [256]], #80*80[-1, 1, Conv, [512, 3, 2]], # 5-P4/16[-1, 9, BottleneckCSP, [512]], #40*40[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32[-1, 1, SPP, [1024, [5, 9, 13]]],[-1, 3, BottleneckCSP, [1024, False]], # 9 20*20]# YOLOv5 head
head:[[-1, 1, Conv, [512, 1, 1]], #20*20[-1, 1, nn.Upsample, [None, 2, 'nearest']], #40*40[[-1, 6], 1, Concat, [1]], # cat backbone P4 40*40[-1, 3, BottleneckCSP, [512, False]], # 13 40*40[-1, 1, Conv, [512, 1, 1]], #40*40[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 4], 1, Concat, [1]], # cat backbone P3 80*80[-1, 3, BottleneckCSP, [512, False]], # 17 (P3/8-small) 80*80[-1, 1, Conv, [256, 1, 1]], #18 80*80[-1, 1, nn.Upsample, [None, 2, 'nearest']], #19 160*160[[-1, 2], 1, Concat, [1]], #20 cat backbone p2 160*160[-1, 3, BottleneckCSP, [256, False]], #21 160*160[-1, 1, Conv, [256, 3, 2]], #22 80*80[[-1, 18], 1, Concat, [1]], #23 80*80[-1, 3, BottleneckCSP, [256, False]], #24 80*80[-1, 1, Conv, [256, 3, 2]], #25 40*40[[-1, 14], 1, Concat, [1]], # 26 cat head P4 40*40[-1, 3, BottleneckCSP, [512, False]], # 27 (P4/16-medium) 40*40[-1, 1, Conv, [512, 3, 2]], #28 20*20[[-1, 10], 1, Concat, [1]], #29 cat head P5 #20*20[-1, 3, BottleneckCSP, [1024, False]], # 30 (P5/32-large) 20*20[[21, 24, 27, 30], 1, Detect, [nc, anchors]], # Detect(p2, P3, P4, P5)]
模型方面的改进有点类似于TPH-YOLOv5。
图像切割
作者在检测的时候(detect.py)增加了一个图像切分的步骤,即将大图切分成各个小块,分别进行检测,然后再进行融合。
增加的代码如下:
# Inferencet1 = time_sync()# pred = model(img, augment=opt.augment)[0] 原始'''此处进行改进'''mulpicplus = "3" # 1 for normal,2 for 4pic plus,3 for 9pic plus and so onassert (int(mulpicplus) >= 1)if mulpicplus == "1":pred = model(img,augment=augment,visualize=increment_path(save_dir / Path(path).stem, mkdir=True) if visualize else False)[0]else:xsz = img.shape[2]ysz = img.shape[3]mulpicplus = int(mulpicplus)x_smalloccur = int(xsz / mulpicplus * 1.2)y_smalloccur = int(ysz / mulpicplus * 1.2)for i in range(mulpicplus):x_startpoint = int(i * (xsz / mulpicplus))for j in range(mulpicplus):y_startpoint = int(j * (ysz / mulpicplus))x_real = min(x_startpoint + x_smalloccur, xsz)y_real = min(y_startpoint + y_smalloccur, ysz)if (x_real - x_startpoint) % 64 != 0:x_real = x_real - (x_real - x_startpoint) % 64if (y_real - y_startpoint) % 64 != 0:y_real = y_real - (y_real - y_startpoint) % 64dicsrc = img[:, :, x_startpoint:x_real,y_startpoint:y_real]'''可选,查看切片图片内容img2 = dicsrc.squeeze(0).cpu().numpy()img2 = img2.transpose((1, 2, 0))cv2.imshow('123', img2)cv2.waitKey(1) '''pred_temp = model(dicsrc,augment=augment,visualize=increment_path(save_dir / Path(path).stem,mkdir=True) if visualize else False)[0]pred_temp[..., 0] = pred_temp[..., 0] + y_startpointpred_temp[..., 1] = pred_temp[..., 1] + x_startpointif i == 0 and j == 0:pred = pred_tempelse:pred = torch.cat([pred, pred_temp], dim=1)
代码中注释的部分可将切割的图片可视化展示。
效果检测
为了检测这样做是否有效,我使用改进前的YOLOv5l模型和改进后的YOLOv5l模型对VisDrone数据集训练100个epoch,并挑选了VisDrone测试集中的两张角度较高的图片进行检测,结果如下:
左侧是改进前,右侧是改进后:
通过对比发现两者实际上并没有太大的差异,可能是由于VisDrone数据集拍摄高度还是比较低,无法显示出效果,有待尝试更高分辨率的图片。
帧率检测
在尝试视频检测时,我想到如果能在输出视频中显示帧率就好了。
要实现这个功能只需要在detect.py中插入
# 函数开头插入
tt = time.time()
....# 添加帧率检测
cv2.putText(im0, "FPS:{:.1f}".format(1. / (time.time() - tt)), (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 235), 4)
tt = time.time()# 插入在这个位置
if save_img:...
代码备份
改进后的代码:https://www.aliyundrive.com/s/SyPtH4N2jcD
【目标检测】YOLOv5针对小目标检测的改进模型/添加帧率检测相关推荐
- YOLOV5 的小目标检测网络结构优化方法汇总(附代码)
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨南山 来源丨 AI约读社 YOLOv5是一种非常受欢迎的单阶段目标检测,以其性能和速度著称,其结 ...
- 目标检测论文解读复现之十六:基于改进YOLOv5的小目标检测算法
前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮 ...
- YOLOv5增加小目标检测层
采用增加小目标检测层的方式来使YOLOv5能够检测小目标,只需要修改models下的yaml文件中的内容即可. 主要改变如下: 原yaml: # parameters nc: 80 # number ...
- 【CV】小目标检测问题中“小目标”如何定义?其主要技术难点在哪?
前言: 目标检测是计算机视觉领域中的一个重要研究方向,同时也是解决分割.场景理解.目标跟踪.图像描述和事件检测等更高层次视觉任务的基础.在现实场景中,由于小目标是的大量存在,因此小目标检测具有广泛的应 ...
- 初学者必看,提供海星检测项目从零开始小目标检测sota算法(ppyoloe-sod)
我以我的一个项目进行介绍,各位如果想运行这些程序的话,可以跳转到相应的百度的页面,我放到底下啦.基于ppyoloe-sod海星目标检测(小目标检测) - 飞桨AI Studio 0 赛事背景说明 澳大 ...
- 目标检测(降低误检测率及小目标检测系列笔记)
深度学习中,为了提高模型的精度和泛化能力,往往着眼于两个方面:(1)使用更多的数据(2)使用更深更复杂的网络. ** 一.什么是负样本 ** 负样本是指不包含任务所要识别的目标的图像,也叫负图像(Ne ...
- 摄像头图像分析目标物体大小位置_小目标检测的增强算法
版权声明:本文来源 程序媛的小世界https://zhuanlan.zhihu.com/p/135397874 Augmentation for small object detection 摘要 近 ...
- 解决目标检测中的小目标问题
<解决目标检测中的小目标问题> 目标检测的前身是滑窗 + 图像分类,如果想要对图像进行鲁棒的分类,首先特征要能够覆盖整幅图像,而且编码的前景信息要比噪声背景信息更加显著.这对于小目标来 ...
- 【深度学习】解决物体检测中的小目标问题
为了提高模型在小物体上的性能,我们建议使用以下技术: 提高图像捕获分辨率 提高模型的输入分辨率 平铺图像 通过扩充生成更多数据 自动学习模型锚 过滤掉多余的类 为什么小目标问题很难? 小物体问题困扰着 ...
最新文章
- Docker安装Apache与运行简单的web服务——httpd helloworld
- Struts2防止表单重复提交
- python版权问题_关于版权问题 · Issue #62 · hankcs/HanLP · GitHub
- MySQL中B-tree索引和Hash索引区别
- 《悦趣式连锁反应》玩转STEM教育!529块积木元件,N+1款炫酷模型
- 弹性式分布数据集RDD——Pyspark基础 (二)
- 【面试题22】栈的压入、弹出序列
- centos mysql phpmyadmin_CentOS下phpMyAdmin安装
- 数字经济时代,企业的核心竞争力究竟是什么?
- mysql 时间毫秒值_MySQL存储毫秒数据的方法
- Git报错:another git process seems to be running in this repository
- 客户细分_客户细分初学者指南
- win10的键盘肆无忌惮的乱输入某个字母
- 为什么人脸识别系统总是认错黑人?
- 数据禾|2020年江苏省土地利用数据(矢量)
- SQL 笔记总结-转载
- JAVA 爬虫 抖音视频
- JsonMappingException Infinite recursion StackOverflowError
- Mask RCNN 魔方颜色块识别
- 最近在某外卖平台上点了一份米粉加了份青菜
热门文章
- Python 下载文件获取文件名request.get(...,stream=True)
- Python OCR识别图片验证码(二)
- python调用打印机打印pdf_python连接打印机实现打印文档、图片、pdf文件等功能
- 用python批量插入数据到数据库中
- 安卓内存优化-bitmap优化
- 【平台介绍】元古数字藏品平台即将正式上线
- 电力系统利用远程智能电能表实现远程集抄
- 全球与中国植物培养箱市场现状及未来发展趋势(2022)
- oracle系统表空间和自定义表空间
- 数据模型:概念数据模型,逻辑数据模型,物理数据模型