目标检测讲解

环境准备

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 mpss = 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 selectivesearchss = 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 segmentsif r['rect'] in candidates:continue# 删除 < 2000 pixelsif r['size'] < 2000:continue# 删除 宽高比 > 1.2x, y, w, h = r['rect']if w / h > 1.2 or h / w > 1.2:continuecandidates.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 mpss = 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 += 1print(index)# with different segmentsif r['rect'] in candidates:continue# 删除 < 2000 pixelsif r['size'] < 2000:continue# 删除 宽高比 > 1.2x, y, w, h = r['rect']if w / h > 1.2 or h / w > 1.2:continuecandidates.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.mzph.cn/news/855972.shtml

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

相关文章

零编程数据可视化展示:十个简易案例!

数据可视化是呈现数据内在价值的最终手段。数据可视化实例利用各种图表和图形设计手段&#xff0c;合乎逻辑地展示复杂而不直观的数据。为了让用户直观清楚地了解他们想要的数据及其比较关系&#xff0c;数据可视化实例的呈现至关重要。即时设计整理了10个数据可视化实例&#…

C语言练习01-循环

一、打印五行五列的三角形 如下图&#xff1a; #include<stdio.h>int main() {for (int i 1;i < 5; i){for (int j i; j < 5; j){printf("*");}printf("\n");}return 0; }#include<stdio.h>int main() {for (int i 1;i < 5; i){f…

Java 开发面试题精选:RocketMQ 一篇全搞定

前言 RocketMQ作为一个高性能、高可用的分布式消息和流处理平台&#xff0c;广泛应用于分布式系统中的解耦、异步通信和数据流处理场景。这篇文章我精选了一些关于RockerMQ面试题目&#xff0c;这些问题涵盖了RocketMQ的所有关键知识点&#xff0c;从基本概念到高级应用&#…

leetcode21 合并两个有序单链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#xff1a;[]示例…

QT的绘图框架

Qt 的绘图框架主要是建立在 QGraphicsView、QGraphicsScene 和 QGraphicsItem 三个核心类上的。这个框架提供了一种高级的图形视图框架&#xff0c;能够方便地进行图形绘制和交互。 QGraphicsView&#xff1a; QGraphicsView 是一个用于显示图形场景的窗口部件&#xff0c;可以…

压缩pdf文件大小,如何压缩pdf

压缩PDF文件是现代办公中常见的需求&#xff0c;因为PDF文件往往包含了大量的图片、文本和格式信息&#xff0c;导致文件体积较大&#xff0c;不利于传输和存储。本文将详细介绍如何压缩PDF文件&#xff0c;我们一起来看一下。 浏览器打开 "轻云处理pdf官网" &#x…

非递归式实现快速排序

快速排序基本思想是寻找一个元素作为基准&#xff0c;将其他元素划分为两部分&#xff0c;其中一部分比基准元素小&#xff0c;另一部分比基准元素大&#xff0c;然后如此继续对这两部分操作下去 快速排序最简单的实现就是通过简单的递归&#xff0c;实现方式之一是使用双指针…

Go 1.19.4 字符串-Day 06

1. 编码表 计算机中只有数字&#xff08;0和1&#xff09;&#xff0c;如果有一个字符串&#xff08;字符串由字符组成&#xff09;要存储&#xff0c;在内存中该如何表达这个字符串&#xff1f; 那么所有的字符都必须数字化&#xff0c;也就是一个字符对应一个特定的数字&…

C#面:详细阐述什么是 DTO

DTO&#xff08;Data Transfer Object&#xff09;是一种设计模式&#xff0c;用于在不同层之间传输数据。它的主要目的是在应用程序的不同部分之间传递数据&#xff0c;而不是直接传递实体对象。DTO通常是一个简单的POCO&#xff08;Plain Old CLR Object&#xff09;&#xf…

js文件导出功能

效果图&#xff1a; 代码示例&#xff1a; <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>html 表格导出道</title><script src"js/jquery-3.6.3.js"></script><st…

AI学习指南机器学习篇-K-最近邻算法(KNN)简介

AI学习指南机器学习篇-K-最近邻算法&#xff08;KNN&#xff09;简介 机器学习是人工智能的重要分支&#xff0c;它的发展推动了人工智能技术的迅猛进步。而在机器学习领域&#xff0c;K-最近邻算法&#xff08;KNN&#xff09;是一种简单而有效的算法&#xff0c;它在分类和回…

18个机器学习核心算法模型总结

最强总结&#xff01;18个机器学习核心算法模型&#xff01;&#xff01; 大家好~ 在学习机器学习之后&#xff0c;你认为最重要的算法模型有哪些&#xff1f; 今儿的内容涉及到~ 线性回归逻辑回归决策树支持向量机朴素贝叶斯K近邻算法聚类算法神经网络集成方法降维算法主成…

Python面试题-4

61. 如何在Python中实现字符串过滤&#xff1f; 在Python中&#xff0c;你可以使用多种方法对字符串进行过滤。其中&#xff0c;最常用的是使用列表推导式&#xff08;list comprehension&#xff09;或者内置的filter()函数。 使用列表推导式过滤字符串 列表推导式是一种简…

面试篇-求两个有序数组的交集

题目 两个有序数组&#xff0c;第一个有序数组m是1000w个元素&#xff0c;第二个有序数组n是1000个元素&#xff0c;求交集&#xff0c;需要考虑时间复杂度和空间复杂度。 解题思路 解法1&#xff1a;遍历小数组n&#xff0c;在m数组中进行折半查找&#xff0c;根据数组有序…

pinia

vuex的替代者&#xff0c;&#xff0c;可以使用组合式api&#xff0c;&#xff0c;像写每个组件一样&#xff0c;&#xff0c;&#xff0c;没有了之前vuex中mutation&#xff0c;&#xff0c;一个defineStore就是一个模块&#xff0c;&#xff0c;直接引用使用即可&#xff0c;…

定义子组件的ref类型

在我们定义子组件时给他一个ref为rightWrapRef,那么我们怎么定义它的数据类型呢&#xff1f; <RightWrap ref"rightWrapRef" :varietyOpenedList"varietyOpenedList"></RightWrap> 定义如下&#xff1a;InstanceType<typeof RightWrap>…

AIGC文生图PixArt-Sigma使用

参考:https://huggingface.co/PixArt-alpha/PixArt-Sigma-XL-2-1024-MS 下载: export HF_ENDPOINT=https://hf-mirror.comhuggingface-cli download --resume-download --local-dir-use-symlinks False PixArt-alpha/PixArt-Sigma-XL-2-1024

LabVIEW版本、硬件驱动和Windows版本之间兼容性

在LabVIEW应用开发和部署过程中&#xff0c;确保LabVIEW版本、硬件驱动和Windows版本之间的一致性和兼容性至关重要。这不仅影响程序的稳定性和性能&#xff0c;还关系到项目的成功实施。本文从多角度详细分析这些因素之间的兼容性问题&#xff0c;并提供相关建议。 兼容性考虑…

使用 `select` 实现文件描述符监控的深入解析与示例

文章目录 0. 概述1. select 函数概述2. 普通文件描述符的 select 行为3. 监控普通文件描述符的实际应用3.1 C 代码示例3.2 使用 stat 函数监控文件修改时间 结论 0. 概述 在编程中&#xff0c;select 函数可以用于监控多个文件描述符&#xff08;包括 socket、串口和普通文件&…

【尚庭公寓SpringBoot + Vue 项目实战】登录管理(十八)

【尚庭公寓SpringBoot Vue 项目实战】登录管理&#xff08;十八&#xff09; 文章目录 【尚庭公寓SpringBoot Vue 项目实战】登录管理&#xff08;十八&#xff09;1、登录业务介绍2、接口开发2.1、获取图形验证码2.2、登录接口2.3、获取登录用户个人信息 1、登录业务介绍 登…