YOLOv1原理详解---训练 & 测试
YOLOv1原理
从论文到代码实现需要知道的具体处理~
一、论文简要解读
1、优点:
- fast,原因:将检测视作回归问题,没有复杂的网络传输过程(如R-CNN分为四个阶段:特征提取、候选框提取、分类、回归)。
【神经网络回归问题与分类问题在损失函数上的区别:回归问题可用平方损失函数,分类问题一般用softmax损失函数】
(可以理解为,要做回归问题则用平方损失,分类问题则用softmax损失,网络其他方面均一致?) - 背景分类准,原因:对整张图片进行卷积等操作,可以推理图片全局而不是局部。
- 可迁移到其他领域,原因:学习目标的一般化表示?
2、单元检测:
- 将输入图片分成 S ∗ S S * S S∗S的cell,如果目标中心落入某个cell,该cell负责检测该目标 ?
- 每个cell预测 B B B 个bounding boxes,每个bounding box有一个置信度 c o n f i d e n c e confidence confidence,如果某bounding box中没有目标,则 c o n f i d e n c e = 0 confidence = 0 confidence=0,反之, c o n f i d e n c e = I O U p r e d t r u t h confidence = IOU_{pred}^{truth} confidence=IOUpredtruth。
- 每个bounding box包含5个预测值, x , y , w , h , c o n f i d e n c e x, y, w, h, confidence x,y,w,h,confidence
- 每个cell预测一个类别,即输出 P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i | Object) Pr(Classi∣Object)
- 假设一共C类,则网络输出: S ∗ S ∗ ( B ∗ 5 + C ) S * S * ( B * 5 + C ) S∗S∗(B∗5+C)
- 预测时,预测概率 = confidence * Pr(Class_i | Object)
二、训练
准备训练数据:图片和标签
1、原始图片和标签
- 输入图片:
【原始图片大小:width:960, height:530】 - xml文件信息
- 目标类别:[‘airplane’,‘ship’,‘storage tank’,‘baseball diamond’,‘tennis court’,
‘basketball court’,‘ground track field’,‘harbor’,‘bridge’,‘vehicle’]
2、转化为训练用的图片和标签
图片转换:
- 原始图片resize到指定尺寸 i m a g e S i z e imageSize imageSize,如 448*448,通道数默认为3。
- 像素值归一化到 (-1,1),方法:设某个像素点的值为 x x x ,归一化后的值为 x 255 ∗ 2 − 1 \frac{x}{255}*2-1 255x∗2−1
标签转换:
- 首先需将该张图片中的每一个bounding box转化成 [ c o n f i d e n c e , x 1 , y 1 , x 2 , y 2 , P r ( C l a s s i ∣ O b j e c t , i = 1 , . . . , C ) ] [confidence, x_1, y_1, x_2, y_2, Pr(Class_i | Object, i=1,...,C)] [confidence,x1,y1,x2,y2,Pr(Class