目标检测讲解

news2025/2/27 17:32:29

环境准备

pip install scikit-image -i https://pypi.tuna.tsinghua.edu.cn/simple

图片读取&画框

from skimage import io
import matplotlib.pyplot as plt
import matplotlib.patches as mp

ss = io.imread('dogs.jpg')

_, ax = plt.subplots(ncols=1, nrows=1, figsize=(6, 6))
ax.imshow(ss)

rect = mp.Rectangle((600, 400), 100, 80, fill=False, edgecolor='red', linewidth=1)
ax.add_patch(rect)

plt.show()

运行代码,显示如下

方法特点

  • 捕捉不同尺度(Capture All Scales)
  • 多样化(Diversification)
  • 快速计算(Fast to Compute)

图像中区域特征比像素更具代表性

  • 计算所有邻近区域之间的相似性;
  • 两个最相似的区域被组合在一起;
  • 计算合并区域和相邻区域的相似度;
  • 重复2、3过程,直到整个图像变为一个区域

 

另外加入一些多样性的衡量

  • 颜色相似性
  • 纹理相似性
  • 尺度相似性
  • 形状重合度

效果如下

 

Selective Search环境准备

pip install selectivesearch

生成示例图片的框

from skimage import io
import selectivesearch

ss = io.imread('dogs.jpg')

# ss生成目标框
_, regions = selectivesearch.selective_search(ss, scale=500, sigma=0.9, min_size=10)

print(len(regions))
for i in regions[0:5]:
    print(i)

运行代码,打印信息如下

2437
{'rect': (0, 0, 1299, 951), 'size': 47450, 'labels': [0.0]}
{'rect': (48, 0, 96, 0), 'size': 97, 'labels': [1.0]}
{'rect': (432, 0, 319, 0), 'size': 320, 'labels': [2.0]}
{'rect': (1120, 0, 47, 1), 'size': 64, 'labels': [3.0]}
{'rect': (0, 7, 340, 0), 'size': 341, 'labels': [4.0]}

对候选框进行过滤

  • 去除重复框
  • 删除小框
  • 删除宽高比较大的框

代码如下

candidates = set()
for r in regions:
    # with different segments
    if r['rect'] in candidates:
        continue
    # 删除 < 2000 pixels
    if r['size'] < 2000:
        continue
    # 删除 宽高比 > 1.2
    x, y, w, h = r['rect']
    if w / h > 1.2 or h / w > 1.2:
        continue
    candidates.add(r['rect'])
print(candidates)

运行代码,打印如下

{(857, 523, 429, 375), (864, 520, 426, 431), (207, 266, 139, 143), (508, 523, 330, 373), (1058, 344, 75, 65), (75, 522, 405, 375), (854, 520, 434, 378), (1060, 344, 73, 64), (23, 32, 233, 268), (75, 522, 406, 375), (176, 600, 307, 298), (1059, 11, 141, 165), (0, 133, 258, 275), (493, 523, 346, 376), (1105, 285, 141, 124), (1102, 280, 144, 129), (855, 521, 431, 377), (776, 8, 519, 503), (396, 122, 279, 285), (1059, 344, 74, 64), (1101, 236, 137, 129), (508, 523, 330, 376), (137, 551, 347, 347), (508, 523, 331, 376), (65, 521, 419, 377), (589, 228, 172, 181), (1057, 11, 93, 88), (0, 8, 349, 401), (1101, 227, 186, 182), (154, 551, 330, 347), (855, 521, 433, 377), (688, 750, 150, 148), (1129, 285, 117, 124), (1057, 9, 229, 216), (1059, 11, 142, 165), (363, 9, 399, 400), (23, 32, 323, 377), (363, 9, 398, 400), (341, 8, 423, 405), (176, 551, 308, 347), (887, 650, 186, 187), (176, 600, 308, 298), (23, 32, 324, 377)}


显示满足条件的候选框

from skimage import io
import selectivesearch
import matplotlib.pyplot as plt
import matplotlib.patches as mp

ss = io.imread('dogs.jpg')

_, regions = selectivesearch.selective_search(ss, scale=500, sigma=0.9, min_size=10)

# 过滤框
candidates = set()
index = 0
for r in regions:
    index += 1
    print(index)
    # with different segments
    if r['rect'] in candidates:
        continue
    # 删除 < 2000 pixels
    if r['size'] < 2000:
        continue
    # 删除 宽高比 > 1.2
    x, y, w, h = r['rect']
    if w / h > 1.2 or h / w > 1.2:
        continue
    candidates.add(r['rect'])

# 画图
fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(6, 6))
ax.imshow(ss)
for x, y, w, h in candidates:
    rect = mp.Rectangle((x, y), w, h, fill=False, edgecolor='red', linewidth=1)
    ax.add_patch(rect)

plt.show()

运行代码,显示如下

候选区域预处理

SelectiveSearch在一张图片上提取出来约2000个侯选区域, 需要注意的是这些候选区域的长宽不固定

如下图所示

 

将每个region固定到227*227的尺寸

why ?

  • CNN主要由两部分组成:卷积和全连接部分
  • 卷积部分通过滑窗进行计算,并输出代表激活的空间排布的特征图(feature map),卷积并不需要固定的图像尺寸,可以产生任意尺寸的特征图
  • 全连接层的输入数据维度是固定的

RCNN结构

 

CNN特征提取

 

CNN训练

使用imagenet上预训练的AlexNet,把网络的最后一个fc层的1000改为(论文测试的数据集是20类object+background)N+1(N为类别的数目,1是加一个背景)来fine-tuning用于提取特征的CNN。

正样本

  • 候选区域与人工标注的真实框的IOU >=0.5

负样本

  • IOU小于0.5

正负样本比例

  • 每个batch_size = 128,32个是正样本,96个是负样本

学习率

  • 0.001(初始学习率的1/10

梯度更新:SGD

SVM分类

正样本

  • 候选框包含整个目标

负样本

  • IoU < 0.3

一张图片产生2000个侯选区域,提取出来的就是2000 x 4096这样的特征向量(R-CNN当中默认CNN层输出4096特征向量)

对20类中的每一类,分别训练一个SVM分类器

 

候选框回归

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1841476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[第五名公共排行榜] LGB 连续学习 + Catboost 集成

大家好, 首先,我想感谢竞赛组织者和所有参与讨论的人。这是@ibazhov和我在Kaggle上的第一次正式比赛,我们学到了很多,并希望未来能参与更多的比赛。 总结: 使用5个LGB模型进行连续更新/学习,通过.train(init_model)和.refit()方法,以及5个基于216个特征的Catboost模型…

装备制造行业数据分析指标体系

数字化飞速发展的时代&#xff0c;多品种、定制化的产品需求、越来越短的产品生命周期、完善的售后服务、极佳的客户体验和快速的交货速度等&#xff0c;使得装备制造行业的经营环境越来越复杂&#xff0c;企业竞争从拼产品、拼价格迈向拼服务&#xff0c;装备制造企业正处于数…

javaSE:继承

在谈继承之前&#xff0c;我们先观察下面这个代码&#xff1a; //定义一个猫类 class Cat {public String name;public int age;public float weigth;public void eat(){System.out.println(this.name"正在吃饭");}public void mimi(){System.out.println(this.nam…

校园环境气象实时监测系统

随着物联网技术的发展越来越成熟&#xff0c;它不断地与人们的日常生活和工作深入融合&#xff0c;推动着社会的进步。其中物联网系统集成在高校实践课程中可以应用到许多项目&#xff0c;如环境气象检测、花卉种植信息化监管、水质信息化监管、校园设施物联网信息化改造、停车…

经常混淆的ADC输入类型!

大家好,这里是大话硬件。 这篇文章我们来聊聊ADC的输入类型。 ADC的输入类型根据ADI的官网,分为了3种类型,单端,差分,伪差分。如下图快速选型的界面所示。 同时,TI的官网对ADC的输入类型划分也是同样的3种类型。 可见,两个器件厂家对ADC的输入类型都是这样定义的。 …

FPGA早鸟课程第二弹 | Vivado 设计静态时序分析和实际约束

在FPGA设计领域&#xff0c;时序约束和静态时序分析是提升系统性能和稳定性的关键。社区推出的「Vivado 设计静态时序分析和实际约束」课程&#xff0c;旨在帮助工程师们掌握先进的设计技术&#xff0c;优化设计流程&#xff0c;提高开发效率。 课程介绍 关于课程 权威认证&…

目标检测——YOLOv10算法解读

论文&#xff1a;YOLOv10: Real-Time End-to-End Object Detection (2024.5.23) 作者&#xff1a;Ao Wang, Hui Chen, Lihao Liu, Kai Chen, Zijia Lin, Jungong Han, Guiguang Ding 链接&#xff1a;https://arxiv.org/abs/2405.14458 代码&#xff1a;https://github.com/THU…

Kimichat使用案例019:15个Kimichat提示词案例

文章目录 一、扮演招聘经理二、扮演英语教师三、文章修改润色四、模仿特定作者写文章五、扮演任何一个角色六、像董宇辉一样介绍一本书七、写商业计划书的大纲八、头脑风暴九、总结文章十、推荐书籍十一、写电子邮件十二、学习Python编程十三、Python编程十四、制作菜谱十五、写…

【Python/Pytorch 】-- 滑动窗口算法

文章目录 文章目录 00 写在前面01 基于Python版本的滑动窗口代码02 算法效果 00 写在前面 写这个算法原因是&#xff1a;训练了一个时序网络&#xff0c;该网络模型的时序维度为32&#xff0c;而测试数据的时序维度为90。因此需要采用滑动窗口的方法&#xff0c;生成一系列32…

一种稀疏贝叶斯学习的旋转机械故障诊断方法(MATLAB)

轴承的故障诊断技术是通过检测轴承故障特征信息来判断轴承的具体故障为位置或损伤程度。在轴承发生损坏时&#xff0c;故障特征信息会随着工作时间的增长变得明显。轴承的损坏过程可以分为四个阶段。第一个阶段为损伤初始阶段&#xff0c;轴承故障特征信号一般无法测量。第二个…

一种基于非线性滤波过程的旋转机械故障诊断方法(MATLAB)

在众多的旋转机械故障诊断方法中&#xff0c;包络分析&#xff0c;又称为共振解调技术&#xff0c;是目前应用最为成功的方法之一。首先&#xff0c;对激励引起的共振频带进行带通滤波&#xff0c;然后对滤波信号进行包络谱分析&#xff0c;通过识别包络谱中的故障相关的特征频…

【昇思25天学习打卡营打卡指南-第一天】基本介绍与快速入门

昇思MindSpore介绍 昇思MindSpore是一个全场景深度学习框架&#xff0c;旨在实现易开发、高效执行、全场景统一部署三大目标。 其中&#xff0c;易开发表现为API友好、调试难度低&#xff1b;高效执行包括计算效率、数据预处理效率和分布式训练效率&#xff1b;全场景则指框架…

【windows|004】BIOS 介绍及不同品牌电脑和服务器进入BIOS设置的方法

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 ​ &#x1f3c5;阿里云ACE认证高级工程师 ​ &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社…

使用 CloudFlare 的站长们注意了

最近 CloudFlare 改版升级比较频繁,除了 CloudFlare 后台布局有多处调整外,还包括部分模块弃用的调整,所以明月建议在使用 CloudFlare 的站长们及时跟进调整设置,否则可能会影响网站的加速和安全防护能力的,严重点儿甚至会造成部分网站功能性错误影响用户体验。 尤其要重视…

Java面试八股之myBatis的优缺点

myBatis的优缺点 优点&#xff1a; 灵活性高&#xff1a; MyBatis允许直接编写原生SQL语句&#xff0c;这意味着你可以针对特定的数据库特性进行优化&#xff0c;处理复杂的查询逻辑&#xff0c;从而更好地满足业务需求。 易于上手&#xff1a; 相比Hibernate等其他ORM工具&…

跨越金融服务门槛,智慧银行推动普惠金融全面升级

在数字化浪潮的推动下&#xff0c;金融服务正经历着一场前所未有的变革。智慧银行&#xff0c;作为这场变革的领航者&#xff0c;以其独特的技术优势和创新思维&#xff0c;正在逐步打破传统金融服务的局限&#xff0c;推动普惠金融的全面升级。本文将深入探讨智慧银行如何通过…

Socket 原理和思考

众所周知Reactor是一种非常重要和应用广泛的网络编程模式&#xff0c;而Java NIO是Reactor模式的一个具体实现&#xff0c;在Netty和Redis都有对其的运用。而不管上层模式如何&#xff0c;底层都是走的Socket&#xff0c;对底层原理的了解会反哺于上层&#xff0c;避免空中楼阁…

npm install 安装不成功,node-sass缺失,提示python环境缺失的解决办法

npm install 安装不成功的原因 是因为缺少python的环境 解决方法&#xff1a; 1、去官网下载 https://www.python.org/downloads/release&#xff0c;注意安装3.6版本以上还是会有问题&#xff0c;建议安装3.6版本以上的&#xff0c;我选择安装的是3.9.6&#xff0c;对应的下载…

Git pull下来时合并分支

执行git pull时报错如下 解决方法&#xff1a; VSCode git中手动选取分支&#xff0c;完成合并 这一步&#xff0c;也可以在README.md中进行Tutorial&#xff0c; 上面出现冲突后&#xff0c;README.md会被更改成下述形式&#xff0c; If you have questions, please <…

支持 MKV、MP4、AVI、MPG 等格式视频转码器

一、简介 1、一款开源的视频转码器&#xff0c;适用于 Linux、Mac 和 Windows。它是一个免费的工具&#xff0c;由志愿者们开发&#xff0c;可以将几乎所有格式的视频转换为现代、广泛支持的编码格式。你可以在官网上下载该应用或源代码。该软件支持 MKV、MP4、AVI、MPG 等格式…