最早期的检测算法 (主要为R-CNN、SPPNet) 都属于multi-stage系。这个时候的Selective Search、Feature extraction、location regressor、cls SVM是分成多个stage来各自单独train的。故谓之曰“multi-stage”:
到了Fast R-CNN的时候,Feature extraction、location regressor、cls SVM都被整合到了一个network里面,可以实现这三个task一起train了。由于生成RP的task还需要另外train,故谓之曰“two-stage”:
到了Faster R-CNN中,虽然RPN的出现使得四个task可以一起被train,但由于要生成RP,依然被归类为“two-stage”。
在YOLOv1中,“生成RP”这一任务被直接丢弃了。因此,整个算法只剩下了一个stage,故谓之曰“one-stage”:
链接:https://blog.csdn.net/weixin_43694096/article/details/121610856
code:
%matplotlib inline
from keras.preprocessing import image
import skimage.data
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import selectivesearch
import numpy as np
import cv2
# 加载图片数据
#img = skimage.data.checkerboard()
img_path =r'D:\CV\datasets\mypic\2.png'
img = image.load_img(img_path, target_size=(480, 600))#(h,w)
img = image.img_to_array(img)
img=img.astype('uint8')
img_lbl, regions = selectivesearch.selective_search(img, scale=500, sigma=0.9, min_size=20)
#计算一共分割了多少个原始候选区域
temp = set()
for i in range(img_lbl.shape[0]):
for j in range(img_lbl.shape[1]):
temp.add(img_lbl[i,j,3])
print(len(temp))
print(len(regions))#计算利用Selective Search算法得到了多少个候选区域
#创建一个集合 元素list(左上角x,左上角y,宽,高)
candidates = set()
for r in regions:
if r['rect'] in candidates:#排除重复的候选区
continue
if r['size'] < 500:#排除小于 2000 pixels的候选区域(并不是bounding box中的区域大小)
continue
x, y, w, h = r['rect']
if w / h > 2 or h / w > 2: #排除扭曲的候选区域边框 即只保留近似正方形的
continue
candidates.add(r['rect'])
for x, y, w, h in candidates:
#print(x, y, w, h)
cv2.rectangle(img, (x, y), ( x+w,y+h), (0, 0, 255), 1)
plt.figure(figsize=(12,10))
plt.imshow(img)
plt.axis('off')
plt.savefig('ss.png')
plt.show()
神经网络可以分为三种主要类型:前馈神经网络、反馈神经网络和图神经网络。
前馈神经⽹络(feedforward neural network)是⼀种简单的神经⽹络,也被称为多层感知机(multi-layer perceptron,简称MLP),其中不同的神经元属于不同的层,由输⼊层-隐藏层-输出层构成,信号从输⼊层往输出层单向传递,中间⽆反馈,其⽬的是为了拟合某个函数,由⼀个有向⽆环图表⽰,如下:
前馈神经⽹络中包含激活函数(sigmoid函数、tanh函数等)、损失函数(均⽅差损失函数、交叉熵损失函数等)、优化算法(BP算法)等。常⽤的模型结构有:卷积神经⽹络、全连接神经⽹络、BP神经⽹络、RBF神经⽹络、感知机等。
下面介绍下经典的卷积神经网络:
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积运算且具有深度结构的前馈神经网络(Feedforward Neural Networks)。相比早期的BP神经网络,卷积神经网络最重要的特性在于“局部感知”与“参数共享”。
整体架构:输入层——卷积层——池化层——全连接层——输出层