本文逻辑不通,仅供自己阅读
1.从0开始设计检测器输出值与损失函数搭配
2.yolov5综述
3.yolov5基础:只用计算一次就得到结果
开发了一个app idetection
最大的特点就是快,方便移动端部署 v5整体还在实践中,论文还没出,论文要等年底
(1)Mean square error :MSE
(2)Cross enporty
再看细节
分类器
输入:矩阵[图片]
输出:onehot 一个向量 [0, 0, 0, 1, 0] 1出现在哪里就是哪个类别
Img3-cbrp16-cbrp32-cbrp64-cbrp128-[]-fc256-fc10
Conv bn relu pooling
检测器
输入:矩阵
输出:x. y. w. h/ p1,p2,p3,p4(四个点表示 quad,每个点一个坐标表示)/cx,cy,w,h(中心点)/angle有一些框是可以旋转的有角度的概念east网络 RBOX || 可以表示位与大小
Rcnn 全家桶 遍历所有位置 遍历所有大小 fast后好一些
性能:跟遍历撤不撤底有关,检测器的耗时占95%以上
8001000 80w个位置
检测器11最小 最大800*1000
简单粗暴,但是耗时没有上限
伪代码
1.本质上还是训练分类器
2.还是训练一个二分类器:背景/前景(待检测目标:人脸)
3.各个尺度的窗口都训练一个分类器?
不是,就用一个进行归一化
4.从原图crop出背景,归一化到统一大小
5.从原图crop出前景,归一化到统一大小
6.背景图片很多,前景图片少:二分类样本不均衡
Fc256-fc5 本质都是矩阵映射至矩阵 2012之前conv对图像没有如此的影响力
思路:img3-cbrp16-cbrp32-cbrp64-cbrp128-[]-fc256-fc5 = c x y w h
前向部分设计如上
c1, x1, y, w2, h1 = fristdetection(img)
Loss[c, x, y, w, h - c1, x1, y1, w1, h1] 然后反向传播调整权重
也就是Conv-w,b bn- α,β 参数 不断调整使得loss变小
img3-cbrp16-cbrp32-cbrp64-cbrp128-[]-fc256-fc5×n = c x y w h
不同的feature map 具有位置不变性,特征在哪就是在哪
多组输出与位置强相关,按空间位置来映射 N = w’×H‘
C*就是每个各自里的ground_truth c_ 就是预测,当框中不含真正的对象时 ground_truth为0,后面就是全0了。
Loss.backword()开始反向传播过程
这个思路的缺点,密集的grid,在一起的目标不容易检测到,固有的特点,可以变成100×100
用C过一个阈值,剩下3个框呢?调整阈值0.3,剩7个,但是目标不对。下一张图片呢?
方法一:按位置聚类,聚成7类,分别在每个类别中取置信度值最大的框。还是有问题
如果两个目标本身比较啊接近呢?
NMS 适用情况:设计完多个目标,涉及到多个目标,输出的候选框有多个(面试常问)
img3-cbrp16-cbrp32-cbrp64-cbrp128-[]-fc256-fc[5+2(类别数)]×n = [c x y w h onehot ] * n
Yolo都可以这样写Loss=loss_c+loss_go+loss_p
人为设定。这就是yolo
他预测7×7个目标,一个打目标框1-5,一个小目标框6-10 11-30 20类别
772 = 98 框 一个grid只能输出一个目标,也就是说最多有49个目标
训练是224224训练,检测是放大到418418,这样效果就会好
这里3个for循环就写在累加里了
For img
For i
For j
实质就是回归坐标值+onehot分类
总体来说还是两阶段的比较好训练,一阶段训练不太好训,对性能追求更高先用faster来做?
动手学深度学习-书籍