深度学习算法
- 1. 各种网络框架及其联系
- 1.1 两阶段与一阶段区别
- 1.1.1 detectron算法框架套路:
- 1.1.2 multi-stage
- 1.1.3 two-stage 算法
- 1.1.4 one-stage 算法
- 2. 常用算法
- 2.1 SS(选择性搜索算法,Selective Search)
- 3. 神经元模型
- 4. 神经网络分类
- 4.1 前馈神经网络
深度学习比较典型的应用领域,包括人脸识别,物体识别,语音识别,以及自然语言处理(机器翻译),风格转换,图像生成六种。在深度学习中,现在效果最好的是在图片,视频,音频领域,也就是对应的人脸识别,物体识别,语音识别,深度学习针对图片,视频,音频领域数据类型应用效果最好,跟传统方法相比提升了30~50%。
分类:根据学习环境不同,神经网络的学习方式可分为监督学习和非监督学习。
1. 各种网络框架及其联系
1.1 两阶段与一阶段区别
1.1.1 detectron算法框架套路:
1.1.2 multi-stage
最早期的检测算法 (主要为R-CNN、SPPNet) 都属于multi-stage系。这个时候的Selective Search、Feature extraction、location regressor、cls SVM是分成多个stage来各自单独train的。故谓之曰“multi-stage”:
1.1.3 two-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”。
1.1.4 one-stage 算法
在YOLOv1中,“生成RP”这一任务被直接丢弃了。因此,整个算法只剩下了一个stage,故谓之曰“one-stage”:
2. 常用算法
2.1 SS(选择性搜索算法,Selective Search)
链接: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()
3. 神经元模型
4. 神经网络分类
神经网络可以分为三种主要类型:前馈神经网络、反馈神经网络和图神经网络。
4.1 前馈神经网络
前馈神经⽹络(feedforward neural network)是⼀种简单的神经⽹络,也被称为多层感知机(multi-layer perceptron,简称MLP),其中不同的神经元属于不同的层,由输⼊层-隐藏层-输出层构成,信号从输⼊层往输出层单向传递,中间⽆反馈,其⽬的是为了拟合某个函数,由⼀个有向⽆环图表⽰,如下:
前馈神经⽹络中包含激活函数(sigmoid函数、tanh函数等)、损失函数(均⽅差损失函数、交叉熵损失函数等)、优化算法(BP算法)等。常⽤的模型结构有:卷积神经⽹络、全连接神经⽹络、BP神经⽹络、RBF神经⽹络、感知机等。
下面介绍下经典的卷积神经网络:
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积运算且具有深度结构的前馈神经网络(Feedforward Neural Networks)。相比早期的BP神经网络,卷积神经网络最重要的特性在于“局部感知”与“参数共享”。
整体架构:输入层——卷积层——池化层——全连接层——输出层