相对于R-CNN、Fast RCNN的two-stage目标检测方式,即先在图像中提取候选框,再逐一对图像进行分类。候选框的生成可以是滑动窗口或选择性搜索,再对候选框进行非极大值抑制(一般只在推理时做非极大值抑制,训练时需要这些重复的框)。而YOLO则是one-stage的端到端形式:输入图片,经过深度神经网络的黑盒,得到带候选框和预测概率标注的图像。
YOLO v1
发表论文:Redmon, J. "You only look once: Unified, real-time object detection." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.
数据格式
对于输入的图片,划分为\(S\times S\)个grid(文中S=7),每一个grid包含2个bounding box,box的中心位于grid内,但是范围可以超出grid。
输入图片大小为448x448x3,输出向量为7x7x30。输出向量可抽象为:\(S\times S\times(B*5+C)\),每个grid的有\((B*5+C)\)个属性,也就是30;其中C表示类别数,也就是20个,B表示bounding box数量,也就是2个;每个box有5个值\((x,y,w,h)\),还有置信度,\((x,y)\)表示框的中心
相对于grid的边界;\(w\)宽度和\(h\)高度是相对于整个图像进行预测的;置信度预测表示预测框与任何真实框之间的IOU,在计算时,还乘以了类别的预测概率:
训练
在训练中图像宽高被缩放到[0,1],因此每个grid内的box的x,y也被限制到[0,1]。
对最后一层使用线性激活函数,所有其他层使用Leaky ReLU:
\[\phi(x)=\begin{cases}x,&\mathrm{if~}x>0\\0.1x,&\mathrm{otherwise}&\end{cases} \]损失函数中,\(\mathbb{1}_{ij}^\text{obj}\)表示指示函数,第i个grid中的第j个box存在物体时,为1。否则\(\mathbb{1}_{ij}^\text{noobj}\)为1。
第1项和第2项,通过回归问题计算bounding box的\((x_i,y_i,w_i,h_i)\)与标注\((\hat{x}_i,\hat{y}_i,\hat{w}_i,\hat{h}_i)\)之间的损失。考虑到w、h较大时,允许有一定的误差;而w、h较小时,需要对误差更敏感。因此计算w、h使用了开根号。
第3项和第4项,\(C_i\)表示置信度,第3项中\(\hat{C}_i\)为1;第4项中,\(\hat{C}_i\)为0,因为没有object。
第5项中,计算每一个grid中,所有类的概率分布\(p_i(c)\)与实际分布\(\hat{p}_i(c)\)的损失。
\[\lambda_{\mathbf{coord}}\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}\mathbb{1}_{ij}^{\mathrm{obj}}\left[\left(x_{i}-\hat{x}_{i}\right)^{2}+\left(y_{i}-\hat{y}_{i}\right)^{2}\right] + \]\[\lambda_{\mathbf{coord}}\sum_{i=0}^{S^2}\sum_{j=0}^B1_{ij}^{\text{obj}}\left[\left(\sqrt{w_i}-\sqrt{\hat{w}_i}\right)^2+\left(\sqrt{h_i}-\sqrt{\hat{h}_i}\right)^2\right] + \]\[\sum_{i=0}^{S^2}\sum_{j=0}^B\mathbb{1}_{ij}^{\mathrm{obj}}\left(C_i-\hat{C}_i\right)^2 + \]\[\lambda_{\mathrm{noobj}}\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}1_{ij}^{\mathrm{noobj}} \left(C_{i}-\hat{C}_{i}\right)^{2} + \]\[\sum_{i=0}^{S^{2}}\mathbb{1}_{i}^{\mathrm{obj}}\sum_{c\in\mathrm{classes}}\left(p_{i}(c)-\hat{p}_{i}(c)\right)^{2} \] 标签:right,技术细节,sum,YOLO,更新,grid,left,hat,mathrm From: https://www.cnblogs.com/zh-jp/p/18547479