# 目标检测 Object Detection

## ; 【NMS】

import numpy as np

def py_cpu_nms(dets, thresh):
"""Pure Python NMS baseline."""

x1 = dets[:, 0]
y1 = dets[:, 1]
x2 = dets[:, 2]
y2 = dets[:, 3]
scores = dets[:, 4]

areas = (x2 - x1 + 1) * (y2 - y1 + 1)
order = scores.argsort()[::-1]

keep = []
while order.size > 0:
i = order[0]
keep.append(i)

xx1 = np.maximum(x1[i], x1[order[1:]])
yy1 = np.maximum(y1[i], y1[order[1:]])
xx2 = np.minimum(x2[i], x2[order[1:]])
yy2 = np.minimum(y2[i], y2[order[1:]])

w = np.maximum(0.0, xx2 - xx1 + 1)
h = np.maximum(0.0, yy2 - yy1 + 1)
inter = w * h

ovr = inter / (areas[i] + areas[order[1:]] - inter)

inds = np.where(ovr  thresh)[0]
order = order[inds + 1]

return keep


## 【RCNN：Regions with CNN features】

RCNN的输入为完整图片，首先通过区域建议算法产生一系列的候选目标区域，其中使用的区域建议算法为Selective Search。

RCNN算法分为4个步骤
（1）候选区域生成： 一张图像生成1K~2K个候选区域 （采用Selective Search 方法）
（2）特征提取： 对每个候选区域，使用深度卷积网络提取特征 （CNN）
（3）类别判断： 特征送入每一类的SVM 分类器，判别是否属于该类
（4）位置精修： 使用回归器精细修正候选框位置

1、产生目标区域候选

[En]

Look at the existing small areas and merge the two most likely adjacent areas according to the merge rules. Repeat until the whole image is merged into one region position

[En]

Output all the regions that once existed, the so-called candidate regions

[En]

Similar in color (color histogram)

[En]

2、CNN预训练

[En]

This is the so-called transfer learning. to put it simply, it takes the trained parameters of one task to another task as the initial parameters of the neural network, compared with the method of random initialization directly. The accuracy can be greatly improved.

3、IOU

4、SVM训练

5、NMS

RCNN会从一张图片中找出n个可能是物体的矩形框，然后为每个矩形框为做类别分类概率：

[En]

Just like the picture above, locate a vehicle, and finally the algorithm finds a bunch of boxes, and we need to determine which rectangles are useless.

(1)从最大概率矩形框F开始，分别判断A~E与F的重叠度IOU是否大于某个设定的阈值;
(2)假设B、D与F的重叠度超过阈值，那么就扔掉B、D；并标记第一个矩形框F，是我们保留下来的。
(3)从剩下的矩形框A、C、E中，选择概率最大的E，然后判断E与A、C的重叠度，重叠度大于一定的阈值，那么就扔掉；并标记E是我们保留下来的第二个矩形框。

[En]

Just keep repeating it, finding all the rectangles that have been preserved.

6、回归器修正bbox位置

7、存在的问题

## ; 【fast RCNN】

1、RCNN不足
1、训练分多步。通过上一篇博文我们知道R-CNN的训练先要fine tuning一个预训练的网络，然后针对每个类别都训练一个SVM分类器，最后还要用regressors对bounding-box进行回归，另外region proposal也要单独用selective search的方式获得，步骤比较繁琐。

2、时间和内存消耗比较大。在训练SVM和回归的时候需要用网络训练的特征作为输入，特征保存在磁盘上再入的时间消耗还是比较大的。
3、测试的时候也比较慢，每张图片的每个region proposal都要做卷积，重复操作太多

Q1：将整张图片归一化送入神经网络，在最后一层再加入候选框信息（这些候选框还是经过 提取，再经过一个 层统一映射到最后一层特征图上,而RCNN是通过拉伸来归一化尺寸），这样提取特征的前面层就不再需要重复计算。

2、算法
Fast R-CNN网络将整个图像和一组候选框作为输入。

[En]

First of all, the network uses the convolution layer and the maximum pool layer to process the whole image to produce the convolution feature map.

（1）一个输出K个类别加上1个背景类别的Softmax概率估计
（2）另一个为K个类别的每一个类别输出四个实数值。每组4个值表示K个类别的一个类别的检测框位置的修正。

3、ROI Pooling

4、多任务损失函数

cls_score层用于分类，输出K+1维数组p pp，表示属于K类和背景的概率。
bbox_prdict层用于调整候选区域位置，输出4*K维数组，表示分别属于K类时，应该平移缩放的参数（x/y方向平移/缩放）。

## ; 【faster RCNN】

1、Conv layers。

2、Region Proposal Networks。
RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative，再利用bounding box regression修正anchors获得精确的proposals。
3、Roi Pooling。

4、Classification。

## ; 【SPPNet：Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition】

https://www.jianshu.com/p/90f9d41c6436
SPPnet是目标检测领域不可忽略的一篇论文，中国人何恺明大神的作品，阅读起来感觉亲（简）切（单）多了。

1.它解决了深度卷积神经网络（CNNs）的输入必须要求固定图像尺寸（例如224*224）的限制。
2.在目标检测领域它提高了提取特征的效率，速度相比R-CNN提升24-102倍。

[En]

The process of pooling with the combination of different sizes of lattices is the pooling of space pyramids.

## ; 【selective search】

CSDN：https://blog.csdn.net/u011436429/article/details/80277633

[En]

In target detection, in order to locate the specific location of the target, the image is usually divided into many sub-blocks, and then the sub-blocks are sent to the target recognition model as input.

[En]

The most direct method of molecular blocks is called sliding window method. The way to slide the window is to enumerate all the sub-blocks on the whole image according to the size of the sub-blocks. The amount of data generated by this method is too large to think about.

[En]

Finally, in terms of calculation speed, it can only be said that this idea is relatively exhaustive, which greatly reduces the amount of calculation in the later classification process.

1、算法

[En]

First of all, the original region is initialized by the graph-based image segmentation method, that is, the image is divided into many small blocks.

[En]

Then we use the greedy strategy to calculate the similarity of each two adjacent regions, and then merge the two most similar pieces each time, until there is only one complete picture left.

[En]

Then we save the image blocks generated each time, including the merged image blocks, so that we can get a hierarchical representation of the image.

step0：生成区域集R，具体参见论文《Efficient Graph-Based Image Segmentation》
step1：计算区域集R里每个相邻区域的相似度S={s1,s2,…}
step2：找出相似度最高的两个区域，将其合并为新集，添加进R
step3：从S中移除所有与step2中有关的子集
step4：计算新集与所有子集的相似度
step5：跳至step2，直至S为空

2、区域相似度计算
1.颜色距离就是对各个通道计算颜色直方图，然后取各个对应bins的直方图最小值。这样做的话两个区域合并后的直方图也很好计算，直接通过直方图大小加权区域大小然后除以总区域大小就好了。
2.纹理距离计算方式和颜色距离几乎一样，我们计算每个区域的快速sift特征，其中方向个数为8，3个通道，每个通道bins为10，对于每幅图像得到240维的纹理直方图。
3.优先合并小的区域，如果仅仅是通过颜色和纹理特征合并的话，很容易使得合并后的区域不断吞并周围的区域，后果就是多尺度只应用在了那个局部，而不是全局的多尺度。因此我们给小的区域更多的权重，这样保证在图像每个位置都是多尺度的在合并。
4.区域的合适度度距离，不仅要考虑每个区域特征的吻合程度，区域的吻合度也是重要的，吻合度的意思是合并后的区域要尽量规范，不能合并后出现断崖的区域，这样明显不符合常识，体现出来就是区域的外接矩形的重合面积要大。
5.综合各种距离，通过多种策略去得到区域建议，最简单的方法当然是加权。
6.参数初始化多样性，我们基于基于图的图像分割得到初始区域，而这个初始区域对于最终的影响是很大的，因此我们通过多种参数初始化图像分割，也算是扩充了多样性。

3、给区域打分

[En]

Through the above steps, we can get a lot of areas, but obviously not every region has the same possibility as a target, so we need to measure this possibility. in this way, we can screen the number of regional suggestions according to our needs.

[En]

The practice of this article is to give more weight to the image blocks that are merged first, such as the weight of the last complete image is 1, the region weight of the penultimate merge is 2, and so on.

[En]

But when we have a lot of strategies and a lot of diversity, there will be too much overlap in this weight, so it’s not easy to sort. The method of the article is to multiply them by a random number, after all, 3 points depends on luck, and then add weights to those that appear many times in the same area. after all, there are many ways to say that you are the target, and there is a reason.

[En]

In this way, I get the target score for all areas, and I can choose how many regions I need according to my needs.

## 【YOLO】

https://zhuanlan.zhihu.com/p/25236464

## 【小目标检测】

https://mp.weixin.qq.com/s?__biz=MzI5MDUyMDIxNA==&mid=2247572026&idx=1&sn=caf76a9b9c9989245aa52505d780a17a&chksm=ec1d37c3db6abed5699f8a92affb009b9d6fe3e4ce9e08a50c4e4193c98a7ffe7c8d646f4219&mpshare=1&scene=23&srcid=0828642UuwAHUqDOqZsEtmct&sharer_sharetime=1631259246112&sharer_shareid=6efdf072deecec3959d1f809f9cbee5c#rd

Original: https://blog.csdn.net/qq_37435458/article/details/123253389
Author: 今天刷leetcode了吗
Title: 目标检测 Object Detection

(0)

### 大家都在看

• #### 大疆M2006电机测试文档

一、项目 MilkTeaBrother是使用麦克纳姆移动方式的室内服务小车，动力系统为RoboMaster M2006，文中提到的相关文件可以在下方获取。点击此处了解MilkTea…

人工智能 2023年6月10日
0200
• #### 深度估计自监督模型monodepth2在自己数据集的实战——单卡/多卡训练、推理、Onnx转换和量化指标评估

本文详细介绍monodepth2模型在自己数据集的实战方法，包括单卡/多卡训练、推理、Onnx转换和量化评估等，关于理论部分请参见另一篇博客：深度估计自监督模型monodepth2…

人工智能 2023年7月21日
0153
• #### 时间序列 工具库学习（1） tsfresh特征提取、特征选择

更新清单： 2022.01.07：初次更新文章 了解、安装tsfresh tsfresh 可以自动计算大量的时间序列特性，包含许多特征提取方法和强大的特征选择算法。tsfresh …

人工智能 2023年7月5日
0216
• #### yolox-nano训练和ncnn安卓部署总结（自己的数据集）

yolox_nano模型的参数量极小，并且有着一定的准确度而被使用到手机端的yolox部署： 部署的结果我已经上传到GitHub：https://github.com/Elsa-z…

人工智能 2023年7月10日
0158
• #### 图像分类、目标检测、图像分割—-简介

（1）MNIST：10个类别，手写数字体数据集，6万条训练数据和1万条测试数据，28*28的灰度图； （2）FashionMNIST：10个类别，6万条训练数据和1万条测试数据，2…

人工智能 2023年7月2日
0191
• #### 在部署过程中如何处理模型的更新和版本控制

问题背景： 在机器学习模型的部署过程中，我们经常需要更新模型以提升性能或修复bug。同时，为了能够追踪模型的版本历史，并保持模型和代码的一致性，我们也需要进行模型的版本控制。本文将…

人工智能 2024年1月3日
0127
• #### 回归预测 | MATLAB实现RF(随机森林)多输入单输出

回归预测 | MATLAB实现RF(随机森林)多输入单输出 目录 * – 回归预测 | MATLAB实现RF(随机森林)多输入单输出 – + 基本介绍 + …

人工智能 2023年6月17日
0188
• #### YOLO 超详细入门02 v2 （含代码及原文）

文章目录 前言 背景 总结 一、YOLOv2改进之框架 * 1.1 网络架构 1.2 Batch Normalization 二、YOLOv2改进方法之尺寸相关 * 2.1 Hig…

人工智能 2023年6月2日
0200
• #### python：数组取值

在python中经常会出现在一个数组中进行取值，所以就来介绍以下常见的数组索引取值： 一、单维数据处理时： a=[1,2,3,4,5]； a[0]=1；a[1]=2；a[2]=3；…

人工智能 2023年7月4日
0148
• #### 手把手教你下载ILSVRC2012（ImageNet2012）分类部分数据集以及使用Pytorch训练

ILSVRC2012下载并使用 0 前言 * 数据集简介 1 下载数据集 * 1.1 官网下载 – 1.1.1 账号注册 1.1.2 登录账号 1.1.3 更新信息 1…

人工智能 2023年7月3日
0178
• #### pytorch：多标签分类的损失函数和准确率计算

1 损失函数 我们先用sklearn生成一个多标签分类数据集。 from sklearn.datasets import make_multilabel_classificatio…

人工智能 2023年6月30日
0138
• #### PointNet：基于深度学习的3D点云分类和分割模型

啊哦~你想找的内容离你而去了哦 内容不存在，可能为如下原因导致： ① 内容还在审核中 ② 内容以前存在，但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

人工智能 2023年6月30日
0148
• #### 黑马程序员—三天快速入门Python机器学习（第一天）

机器学习入门 一、机器学习概述 * 1.1 人工智能概述 – 1.1.1 机器学习与人工智能、深度学习 1.1.2 机器学习、深度学习能做什么 1.1.3 人工智能阶段…

人工智能 2023年7月3日
0140
• #### pandas的DataFrame的行列选择

Pandas可根据列名称选取，还可以根据列所在的position（数字，在第几行第几列，注意pandas行列的position是从0开始）选取。相关函数如下： 1）loc，基于列l…

人工智能 2023年6月2日
0165
• #### 【图像分类】Swin Transformer理论解读+实践测试

前言 Swin Transformer是2021年微软研究院发表在ICCV上的一篇文章，问世时在图像分类、目标检测、语义分割多个领域都屠榜。 根据论文摘要所述，Swin Trans…

人工智能 2023年7月3日
0152
• #### 【目标检测】YOLOX ，YOLO系列的集大成者

文章目录 * – 一、YOLOX简介 – 二、YOLOX模型结构（Decouple head） – 三、YOLOX的改进之处 – +…

人工智能 2023年7月12日
0173