Yolo是“You only look once”的简写,是一种物体检测算法,因为它的检测速度和准确性而闻名。
Yolov5实在yolov4发布后一个月后由Ultralystics公司的Glenn Jocher发布的,和以前的yolo算法不同,它是用python写的,而yolov4以前是Alexey Bochkovsky用C语言写的。
在聊yolov5之前,先得讲一下卷积神经网络Convolutional Neural Networks(CNNs),它是利用权值共享策略挖掘图像中不同位置出现的相似结构。
传统的神经网络叫多层感知机Multilayer perceptron(MLP).它在处理图像方面有天生的缺陷: 1.训练工作量随图像变大而异常变大 2.修正模型时不能解决物体出现位置不同的问题
卷积神经网络: 通过移动3*3或5*5的过滤器,以扫描的方式从图像的左上角移动到右下角,每移动一个点,就算出和过滤器中心点重合的点的卷积。 对每个过滤器来讲,移动一遍会生成特征图。然后通过激活函数,就会保留指定位置的一定特征。我们可以通过持续的操作来获得更为抽象的特征(Deeper CNNs)
卷积神经网络中有三层:
- 卷积层:用过滤器抓取特征
- 池化层:降维
- 全连接层:在最终特征图获取总的信息并分类
具体可参考网页https://www.cs.ryerson.ca/~aharley/vis./conv中的例子,演示了从手写字到识别用到的层
卷积的计算:
平滑卷积核和边缘提取卷积核:平滑卷积核就是将中心像素与周围像素值进行平均,实现平滑处理 边缘提取卷积核就是将中心像素值复制4份,然后减去周围的4个临近像素值。如果所在区域周围像素值比较近,像素值减为0,边缘像素值有差值,就保留了下来。
1 | 1 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 | |
1/25* | 1 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 |
0 | -1 | 0 |
-1 | 4 | -1 |
0 | -1 | 0 |
池化层类型包括Max和Average.Max举例如下:
激活函数(ReLU): 线性模型的表达能力不够,激活函数增加神经网络的非线性,提升神经网络表达能力,使得神经网络可以任意逼近非线性函数。
查看网络结构图:
- 安装Netron
- 下载yolov5s.onnx(https://github.com/ultralytics/yolov5/releases)
- 打开yolov5s.onnx就可以看到yolov5的网络结构图了