这里置顶的第一个项目是git上star超过k的一个yolo部署项目:
https://github.com/DefTruth/lite.ai.toolkit/
本项目入口地址
配套yolov1入口地址
配套yolov2入口地址
里面截图都来自这几个视频
DeepStream.io简介
机器不学习
说明:机器不学习是知乎专栏,这个博客非常详细,学习的好地方
铁心核桃
说明:对yolov有代码级别的说明
比如:目标检测那点儿事——快到飞起的YOLO-V1,如果想看代码级别的就看这个博客。
简直描述的太好了,人家是清华的
或者说:
精度=(检测到的正确数量)/(检测到的所有数量)
召回率=(检测到的正确质量)/(所有的正确数量)
但是(检测到的正确数量)跟设置的阈值有关系
这里要重点说一下14701这个一维张量,很多人问我,为什么他就能按照你说的77*30来排列,这个就是损失函数来控制的,如下:
(上面这个图有问题,大家都在引用)
上面这两张图解释一下,上面解释了预测阶段的框和置信度图形化标示,框颜色深的代表了框有没有物体的置信度高,下面红黄等标示了,这个框某个物体置信度高。
这里大致说明一下:
其中S^2就是7*7,B=2,代表有两个框,
位置误差的平方和开根号,主要是为了减少大框和小框对位置偏差的容忍度。
置信度误差是,每个候选框跟实际物体框IOU大小,选出来一个最大的IOU比。注意不含物体的有了一个权重,这是因为图片大部分是背景,如果背景不增加权重,会导致物体检测不出来,加了权重,告诉网络,背景的影响要小一点,比如权重是0.1
所以任何算法都是两部分组成:
网络结构
损失函数
NMS:
将同类别排序,然后做IOU,剔除IOU大的,然后再对后边的进行重复操作。
Yolov1缺点:
1、小物体无法检测
2、狗(哈士奇 花点狗)这种无法检测出来
dropout原理
线性层后边,激活前面,BN对初始化条件不那么敏感
也就是说BN在训练阶段调整两个参数,预测就可以直接用了。
BN层是为了防止输出数据进入激活函数的饱和区,导致梯度消失。将输出结果强制归纳到0附近。
所以目前卷积后面就有一个BN层。
Yolov2详细介绍
YOLO V2目标检测算法
这里5次降采样,2^5=32,416/32=13,就是这么来的
VGG 和RESNET组合,这里没有了全连接层,全连接层参数多,训练慢,比如全连接层是1048 1048那么参数就是10481048,但是如果是全连接33 获取64通道,就是3364,所以输入大小一定要被32整除
为什么要全连接,直接做成3370的不好吗?
VGG发现的33卷积核,darknet19个卷基层,就是19个卷基层,里面还有11的卷积核,主要用来增加通道数量,3*3的感受野比较大
faster-rcnn设置了9种框,比例是自己设置的。yolo作者剔除了K-means聚类的算法,聚类出5个框
这里K means的距离是通过IOU比值。
感受野越大,将来识别到的物体越大
上面是yolov1.
这些框都是从所有框里面聚合分类后的5个类别,预测的时候只要偏移一下框就好了,不用去变换框的大小
为什么是奇数而不是偶数
三个黄色框都是非0即1,紫色框是权重,超参数