几个目标检测loss对比:faster rcnn、ssd、yolov1、yolov2、yolov3的loss

目标检测loss

算法 rcnn fast rcnn faster rcnn ssd yolov1 yolov2 yolov3
输入大小 1000x600 448x448 416x416 416x416
网格大小 40x60 7x7 (降采样了64倍) 13x13 52x52、26x26、 13x13
输出大小 rpn60x40x9个, fast跟设置有关,一般训练256个样本(正负1:1, 正样本不够用负样本补充),conv4提取proposal, conv5之后在输出 MxNx(c+4)xk (7x7) x((4+1)x2+20),其中7x7是网格尺寸,4是位置信息(x,y,h,w),1是置信度(IOU),2是一个格子共回归2个矩形框,最后选定置信度更大的矩形框作为输出 (13x13)x((4+1+20) x5),其中13x13是cell个数,yolov2只有1个尺度 (NxN)x((4+1+20)x3),其中N*N是cell个数,yolov3有3种(52x52、26x26、 13x13),4是位置(x,y,h,w), 1是置信度, 20是类别(coco则是80类),3是每个格点上anchor个数
基础网络 zfnet vgg16 Darknet-19 Darknet-53
anchor/proposals策略 selective search(基于颜色、结构、尺寸、形状,将相似的区域合并成更大的区域)找出大概2000个proposals selective search找出大概2000个proposals rpn产生3 *3个anchor,(128, 256, 512) *(1:1, 1:2, 2:1) 6个anchor 直接预测 5个anchor,聚类产生 9个anchor分在三个scale上,聚类产生
多尺度 无、可以增加FPN 有6个尺度,分别是38x38x512,19x19x512, 10x10x512, 5x5x512, 3x3x512, 1x1x256 有3种尺度
与真值匹配策略 IOU大于0.5为正样本,其余为负样本 IOU大于0.5为正样本,[0.1, 0.5]为负样本,正负样本1:3 IOU大于0.7和IOU最大的anchor为正样本,小于0.3的为负样本,一个真值可以和多个anchor对应 与真值IOU>0.5的,可以多个anchor匹配一个真值 每个grid cell负责检测中心点落在该cell里的1个物体,当有物体中心点落在cell时才和真值匹配,选择2个预测box里置信度最大的作为输出; 每个grid cell产生5个anchor,负责检测出中心落在该cell的物体, 中心点(x,y)是相对于当前cell左上角的偏移(归一化到0-1),w和h是相对于anchor的长宽的变换(变换方式和faster一样) 每个grid cell产生3个anchor,负责检测出中心落在该cell的物体, 中心点(x,y)是相对于当前cell左上角的偏移(归一化到0-1),w和h是相对于anchor的长宽的变换(变换方式和faster一样)
网络输出的(x,y,h,w)含义 (x,y)为相对anchor的偏移,(h,w)为相对anchor长宽的变换 每个尺度有5个ratio的anchor(1, 2, 1/2, 3, 1/3),增加一个scale为sqrt(sk*sk+1)的1:1的anchor,一共6个 位置(x,y,h,w)中的x和y为物体的中心点,范围是(0, 1), 表示相对于当前cell的左上角的偏移, 位置(x,y,h,w)中的x和y为物体的中心点,范围是(0, 1), 表示相对于当前cell的左上角的偏移,(h,w)是相对于anchor的尺度变化 位置(x,y,h,w)中的x和y为物体的中心点,范围是(0, 1), 表示相对于当前cell的左上角的偏移,(h,w)是相对于anchor的尺度变化
roipooling L2 7x7 7x7
定位loss smooth l1 smooth l1 smooth l1 MSE, (x, y) 转化成相对于当前cell左上角的偏移,(w, h) 转换成相对于整张图的大小,范围都是(0, 1) MSE, 和yolov1一样但是w和h不取根号,根据IOU修改loss权重以减少bbox尺寸对训练的影响,增加一项学习先验框形状的loss MSE
置信度loss MSE, 当grid含有目标的时候置信度label是预测bbox和ground truth的IOU(也可以直接设置为1,yolo代码里有个rescore控制设置策略),当无目标时label为0 MSE MSE
分类loss SVM对每类做2分类 交叉熵+softmax,每个类别都需要有 交叉熵+sigmoid,交叉熵+softmax,(rpn中只需要分前景背景两类,fast阶段需要每个类别都分) 交叉熵+softmax mse, softmax取每个类别概率,对应真值为1 mse, softmax取每个类别概率,对应真值为1 MSE+sigmoid每类单独sigmoid
特点 cnn分类 cnn同时分类和回归,引入roi pooling来解决R-CNN中重复卷积问题 把selective search用rpn网络替换,实现真正的end-to-end 单阶段,多尺度,anchor loss全采用MSE loss,单阶段 BN、分类网络高分辨率预训练、Anchor Box替换全连接层、聚类生成anchor、绝对位置预测、细粒度特征、多尺寸训练 加入多尺度、分类改成sigmoid
优点 不采用穷举而用SS的方式找rigin proposals,从DPM HSC的34.3%直接提升到了66%(mAP) 不同SVM而用softmax分类,可以端到端,多任务损失函数 真正的端到端、引入rpn 结合faster的anchor和yolo的单阶段,还有多尺度;效果比yolov1好,速度比faster快;对小目标也不错(因为多尺度) 输出根据整张图预测背景错误率低,艺术作品效果好,快 加入anchor、优化了很多地方 每个尺度的anchor不同,分类不是排他性质的softmax
缺点 训练步骤繁琐(微调网络+训练SVM+训练bbox回归), 而且需要保存特征占用空间多;每个候选框先resize到统一大小,然后分别作为CNN的输入,会重复提取特征 训练测试慢,依旧用ss选proposals 无多尺度、detect head计算量大(因为需要对每个proposals分类,找的太多而且有的有重叠),仍然不是实时 定位误差大, 小目标不好, 每个cell只能预测一个物体 只是融合了两个尺度信息吗,多尺度不够充分 多尺度不够充分

一、faster rcnn:

  • 分为RPN和Fast rcnn两个部分,每个部分再分为分类和回归损失:
    • RPN损失: L ( { p i } , { t i } ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ i p i ∗ L r e g ( t i , t i ∗ ) \begin{aligned} L\left(\left\{p_{i}\right\},\left\{t_{i}\right\}\right)=\frac{1}{N_{c l s}} & \sum_{i} L_{c l s}\left(p_{i}, p_{i}^{*}\right) \\+\lambda & \frac{1}{N_{r e g}} \sum_{i} p_{i}^{*} L_{r e g}\left(t_{i}, t_{i}^{*}\right) \end{aligned} L({pi},{ti})=Ncls1+λiLcls(pi,pi)Nreg1ipiLreg(ti,ti)
      Lcls表示二分类的log loss(是否是目标),Lreg表示 smooth l1 loss(更鲁棒,收敛更快);
    • Fast rcnn损失: L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) L\left(p, u, t^{u}, v\right)=L_{c l s}(p, u)+\lambda[u \geq 1] L_{l o c}\left(t^{u}, v\right) L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v) 【u>=1 】的意思是需要是前景才反传定位损失, 分类采用采用log loss(即对真实分类的概率取负log,分类输出K+1维);
  • 回归损失采用smoothL1:
    t x = ( x − x a ) / w a ; t y = ( y − y a ) / h a t w = log ⁡ ( w / w a ) ; t h = log ⁡ ( h / h a ) t x ∗ = ( x ∗ − x a ) / w a ; t y ∗ = ( y ∗ − y a ) / h a t w ∗ = log ⁡ ( w ∗ / w a ) ; t h ∗ = log ⁡ ( h ∗ / h a ) \begin{aligned} t_{x}=\left(x-x_{a}\right) / w_{a} ; t_{y}=\left(y-y_{a}\right) / h_{a} \\ t_{w}=\log \left(w / w_{a}\right) ; t_{h}=\log \left(h / h_{a}\right) \\ t_{x}^{*}=\left(x^{*}-x_{a}\right) / w_{a} ; t_{y}^{*}=\left(y^{*}-y_{a}\right) / h_{a} \\ t_{w}^{*}=\log \left(w^{*} / w_{a}\right) ; t_{h}^{*}=\log \left(h^{*} / h_{a}\right) \end{aligned} tx=(xxa)/wa;ty=(yya)/hatw=log(w/wa);th=log(h/ha)tx=(xxa)/wa;ty=(yya)/hatw=log(w/wa);th=log(h/ha)
    smooth ⁡ L 1 ( x ) = { 0.5 x 2  if  ∣ x ∣ < 1 ∣ x ∣ − 0.5  otherwise  \operatorname{smooth}_{L_{1}}(x)=\left\{\begin{array}{ll}{0.5 x^{2}} & {\text { if }|x|<1} \\ {|x|-0.5} & {\text { otherwise }}\end{array}\right. smoothL1(x)={0.5x2x0.5 if x<1 otherwise 
  • 其他:
    公式里的x代表 (tx - tx*),即预测值和真实值的差距,xa和ya代表anchor的中心点坐标,wa和ha代表anchor的长和宽,x和x*则分别代表预测值和真值的;

二、ssd

L ( x , c , l , g ) = 1 N ( L c o n f ( x , c ) + α L l o c ( x , l , g ) ) L(x, c, l, g)=\frac{1}{N}\left(L_{c o n f}(x, c)+\alpha L_{l o c}(x, l, g)\right) L(x,c,l,g)=N1(Lconf(x,c)+αLloc(x,l,g))
L l o c ( x , l , g ) = ∑ i ∈ P o s N ∑ m ∈ { c x , c y , w , h } x i j k  smooth  L I ( l i m − g ^ j m ) g ^ j c x = ( g j c x − d i c x ) / d i w g ^ j c y = ( g j c y − d i c y ) / d i h g ^ j w = log ⁡ ( g j w d i w ) g ^ j h = log ⁡ ( g j h d i h ) \begin{aligned} L_{l o c}(x, l, g)=\sum_{i \in P o s}^{N} \sum_{m \in\{c x, c y, w, h\}} & x_{i j}^{k} \text { smooth }_{\mathrm{LI}}\left(l_{i}^{m}-\hat{g}_{j}^{m}\right) \\ \hat{g}_{j}^{c x}=\left(g_{j}^{c x}-d_{i}^{c x}\right) / d_{i}^{w} & \hat{g}_{j}^{c y}=\left(g_{j}^{c y}-d_{i}^{c y}\right) / d_{i}^{h} \\ \hat{g}_{j}^{w}=\log \left(\frac{g_{j}^{w}}{d_{i}^{w}}\right) & \hat{g}_{j}^{h}=\log \left(\frac{g_{j}^{h}}{d_{i}^{h}}\right) \end{aligned} Lloc(x,l,g)=iPosNm{cx,cy,w,h}g^jcx=(gjcxdicx)/diwg^jw=log(diwgjw)xijk smooth LI(limg^jm)g^jcy=(gjcydicy)/dihg^jh=log(dihgjh)
L c o n f ( x , c ) = − ∑ i ∈ P o s N x i j p log ⁡ ( c ^ i p ) − ∑ i ∈ N e g log ⁡ ( c ^ i 0 )  where  c ^ i p = exp ⁡ ( c i p ) ∑ p exp ⁡ ( c i p ) L_{c o n f}(x, c)=-\sum_{i \in P o s}^{N} x_{i j}^{p} \log \left(\hat{c}_{i}^{p}\right)-\sum_{i \in N e g} \log \left(\hat{c}_{i}^{0}\right) \quad \text { where } \quad \hat{c}_{i}^{p}=\frac{\exp \left(c_{i}^{p}\right)}{\sum_{p} \exp \left(c_{i}^{p}\right)} Lconf(x,c)=iPosNxijplog(c^ip)iNeglog(c^i0) where c^ip=pexp(cip)exp(cip)

  • 其他:
    ssd参考faster rcnn的loss ,Lloc是smooth l1 loss, Lconf是softmax(positive和negitive都是,这点和faster不同,faster的rpn采用log loss)

三、yolov1

λ coord  ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj  [ ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 ] + λ coord  ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj  [ ( w i − w ^ i ) 2 + ( h i − h ^ i ) 2 ] + ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj  ( C i − C ^ i ) 2 + λ noobj ∑ i = 0 S 2 ∑ j = 0 B 1 i j noobj  ( C i − C ^ i ) 2 + ∑ i = 0 S 2 1 i obj  ∑ c ∈  classes  ( p i ( c ) − p ^ i ( c ) ) 2 \begin{aligned} \lambda_{\text {coord }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj }}\left[\left(x_{i}-\hat{x}_{i}\right)^{2}+\left(y_{i}-\hat{y}_{i}\right)^{2}\right] \\+\lambda_{\text {coord }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj }}\left[(\sqrt{w_{i}}-\sqrt{\hat{w}_{i}})^{2}+(\sqrt{h_{i}}-\sqrt{\hat{h}_{i}})^{2}\right] \\+\sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj }}\left(C_{i}-\hat{C}_{i}\right)^{2} \\+\lambda_{\text {noobj}} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {noobj }}\left(C_{i}-\hat{C}_{i}\right)^{2} \\+\sum_{i=0}^{S^{2}} \mathbb{1}_{i}^{\text {obj }} \sum_{c \in \text { classes }}\left(p_{i}(c)-\hat{p}_{i}(c)\right)^{2} \end{aligned} λcoord i=0S2j=0B1ijobj [(xix^i)2+(yiy^i)2]+λcoord i=0S2j=0B1ijobj [(wi w^i )2+(hi h^i )2]+i=0S2j=0B1ijobj (CiC^i)2+λnoobji=0S2j=0B1ijnoobj (CiC^i)2+i=0S21iobj c classes (pi(c)p^i(c))2

yolov1最经典的地方就是这个loss,

前两项为定位loss:

λ coord  ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj  [ ( x i − x ^ i ) 2 + ( y i y ^ i ) 2 ] + λ coord ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj [ ( w i − w ^ i ) 2 + ( h i − h ^ i ) 2 ] \lambda_{\text {coord }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj }}\left[\left(x_{i}-\hat{x}_{i}\right)^{2}+\left(y_{i} \hat{y}_{i}\right)^{2}\right] \\+\lambda_{\text{coord}}\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}\mathbb{1}_{i j}^{\text{obj}}\left[(\sqrt{w_{i}}-\sqrt{\hat{w}_{i}})^{2}+(\sqrt{h_{i}}-\sqrt{\hat{h}_{i}})^{2}\right] λcoord i=0S2j=0B1ijobj [(xix^i)2+(yiy^i)2]+λcoordi=0S2j=0B1ijobj[(wi w^i )2+(hi h^i )2]

1 i j obj  \mathbb{1}_{i j}^{\text {obj }} 1ijobj 取值为{0, 1},当格子里有匹配的真值时为1,否则为0;
λ coord \lambda_{\text {coord}} λcoord 为 定位loss权重,取5;
这里对 w 和 h 取根号是因为降低大目标的对定位的影响(损失函数更倾向于调整尺寸比较大的目标,但是小目标很小的偏移对定位影响可能会很大,其实应该有更大的loss);
(x, y) 表示bbox的中心坐标,是相对于每个单元格左上角坐标点的偏移值,左上角偏移为0,并且单位是相对于单元格大小的;
w 和 h 是bbox的宽和高, 是相对于整个图片的宽与高的比例,单位是相对于整张图的;

第三、四项是置信度loss:

∑ i = 0 S 2 ∑ j = 0 B 1 i j obj  ( C i − C ^ i ) 2 + λ noobj  ∑ i = 0 S 2 ∑ j = 0 B 1 i j noobj  ( C i − C ^ i ) 2 \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj }}\left(C_{i}-\hat{C}_{i}\right)^{2}\\+\lambda_{\text {noobj }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {noobj }}\left(C_{i}-\hat{C}_{i}\right)^{2} i=0S2j=0B1ijobj (CiC^i)2+λnoobj i=0S2j=0B1ijnoobj (CiC^i)2
1 i j noobj  \mathbb{1}_{i j}^{\text {noobj }} 1ijnoobj 在格子内没有匹配的真值时为1,否则为0;
1 i j obj  \mathbb{1}_{i j}^{\text {obj }} 1ijobj 在格子内有匹配的真值时为1,否则为0;
λ noobj \lambda_{\text {noobj}} λnoobj 是无目标时的置信度损失权重,取0.5;
置信度为 Pr ⁡ ( Object ) ∗ I O U pred truth \operatorname{Pr}(\text {Object}) * IOU_{\text {pred}}^{\text {truth}} Pr(Object)IOUpredtruth Pr ⁡ ( Object ) \operatorname{Pr}(\text {Object}) Pr(Object) 取值为{0, 1},即当格子不含有物体时,置信度的label为0,当含有物体时,置信度的label为预测框与真实物体框的IOU;

最后一项是分类loss:

∑ i = 0 S 2 1 i obj  ∑ c ∈  classes  ( p i ( c ) − p ^ i ( c ) ) 2 \sum_{i=0}^{S^{2}} \mathbb{1}_{i}^{\text {obj }} \sum_{c \in \text { classes }}\left(p_{i}(c)-\hat{p}_{i}(c)\right)^{2} i=0S21iobj c classes (pi(c)p^i(c))2
类别loss,当格点位置有物体时候才计算物体类别概率P;

四、yolov2

loss ⁡ t = ∑ i = 0 W ∑ j = 0 H ∑ k = 0 A 1 Max ⁡  IOU  <  Thresh  λ roobj  ∗ ( − b i j k o ) 2 + 1 t < 12800 λ pior  ∗ ∑ r ∈ ( x , y , w , h ) (  prior  k r − b i j k r ) 2 + 1 k truth  ( λ coord  ∗ ∑ r ∈ ( x , y , w , h ) (  truth  r − b i j k r ) 2 + λ o b j ∗ ( I O U truh  k − b i j k o ) 2 + λ class  ∗ ( ∑ c = 1 c ( truth ⁡ c − b i j k c ) 2 ) ) \begin{array}{rl}{\operatorname{loss}_{t}=\sum_{i=0}^{W} \sum_{j=0}^{H} \sum_{k=0}^{A}} & {1_{\operatorname{Max} \text { IOU }<\text { Thresh }} \lambda_{\text {roobj }} *\left(-b_{i j k}^{o}\right)^{2}} \\ {} & {+1_{t<12800} \lambda_{\text {pior }} * \sum_{r \in(x, y, w, h)}\left(\text { prior }_{k}^{r}-b_{i j k}^{r}\right)^{2}} \\ {} & {+1_{k}^{\text {truth }}\left(\lambda_{\text {coord }} * \sum_{r \in(x, y, w, h)}\left(\text { truth }^{r}-b_{i j k}^{r}\right)^{2}\right.} \\ {} & {+\lambda_{o b j} *\left(I O U_{\text {truh }}^{k}-b_{i j k}^{o}\right)^{2}} \\ {} & {\left.+\lambda_{\text {class }} *\left(\sum_{c=1}^{c}\left(\operatorname{truth}^{c}-b_{i j k}^{c}\right)^{2}\right)\right)}\end{array} losst=i=0Wj=0Hk=0A1Max IOU < Thresh λroobj (bijko)2+1t<12800λpior r(x,y,w,h)( prior krbijkr)2+1ktruth (λcoord r(x,y,w,h)( truth rbijkr)2+λobj(IOUtruh kbijko)2+λclass (c=1c(truthcbijkc)2))

第一、四项(置信度loss):

1 Max ⁡  IOU  <  Thresh  λ roobj  ∗ ( − b i j k o ) 2 + λ o b j ∗ ( I O U truh  k − b i j k o ) 2 {1_{\operatorname{Max} \text { IOU }<\text { Thresh }} \lambda_{\text {roobj }} *\left(-b_{i j k}^{o}\right)^{2}} \\{+\lambda_{o b j} *\left(I O U_{\text {truh }}^{k}-b_{i j k}^{o}\right)^{2}} 1Max IOU < Thresh λroobj (bijko)2+λobj(IOUtruh kbijko)2
第一项计算background的置信度误差,计算各个预测框和所有真值的IOU,最大IOU小于阈值(论文里是0.6)的预测框就标记为background,即noobj的置信度误差,希望把没真值的预测框的预测置信度降低为0;
第四项计算foreground的置信度误差;
这里的置信度和yolov1是一样的,都是 Pr ⁡ ( Object ) ∗ I O U pred truth \operatorname{Pr}(\text {Object}) * I O U_{\text {pred}}^{\text {truth}} Pr(Object)IOUpredtruth
YOLOv1中no_objects_loss和objects_loss权重分别是0.5和1,而YOLOv2中则是1和5;

第二、三项(定位loss):

1 t < 12800 λ prior  ∗ ∑ r ∈ ( x , y , w , h ) ( prior k r − b i j k r ) 2 + 1 k truth  ( λ coord ∗ ∑ r ϵ ( x , y , w , h ) ( truth ⁡ r − b i j k r ) 2 1_{t<12800} \lambda_{\text {prior }} * \sum_{r \in(x, y, w, h)}\left(\text {prior}_{k}^{r}-b_{i j k}^{r}\right)^{2} \\+1_{k}^{\text {truth }}\left(\lambda_{\text {coord}} * \sum_{r \epsilon(x, y, w, h)}\left(\operatorname{truth}^{r}-b_{i j k}^{r}\right)^{2}\right. 1t<12800λprior r(x,y,w,h)(priorkrbijkr)2+1ktruth λcoordrϵ(x,y,w,h)(truthrbijkr)2
第二项是计算先验框与预测框的误差,只在前12800个iterations时才计算,目的是为了让网络更快的学习到先验框的形状,这一项不考虑是否包含真值;
第三项是定位loss,当某个anchor与真值匹配时计算。

第五项(分类loss):

计算类别loss,每个真值都会给对应anchor一个类别label,对应预测值和anchor来算loss;

anchor、真值、预测框如何对应?

对于每个ground truth,可以确定它的中心落在哪个cell中,每个cell有5个anchor,计算这5个anchor和ground truth的IOU,(这里计算IOU不是把真值和anchor都在原图上画出来计算的,而且假设中心点对齐, 即只考虑它们的形状能达到的最大IOU),找到IOU最大的anchor来和ground truth匹配(最多只能有一个匹配),这个anchor负责检测出这个ground truth;

注意

yolo中的一个ground truth只与一个anchor匹配(ground truth中心落在的grid cell的5个anchor里面和它IOU值最大的),对于那些IOU值小于阈值的先验框,预测结果直接忽略;
SSD与FASTER RCNN的RPN网络可以将一个ground truth分配给多个先验框;
yolov2 和 yolov1 都采用均方差来计算loss;
yolov1里面定位loss的 h 和 w 都取了根号,为了降低bboxs的大小对误差的影响, yolov2采用的方式是根据目标大小给与不同权重,l.coord_scale * (2 - truth.w*truth.h)(w 和 h 取值范围是 (0, 1));
yolov2 和 yolov1 的损失函数都为均方差函数;

五、yolov3

loss = λ cord ∑ i = 0 N × N ∑ j = 0 K 1 i j obj [ ( t x − t x ′ ) 2 + ( t y − t y ′ ) 2 ] + λ coord ∑ i = 0 N × N ∑ j = 0 K 1 i j obj [ ( t w − t w ′ ) 2 + ( t h − t h ′ ) 2 ] − ∑ i = 0 N × N ∑ j = 0 K 1 i j obj [ c i ′ log ⁡ ( c i ) + ( 1 − c i ′ ) log ⁡ ( 1 − c i ) ] − λ noobj ∑ i = 0 N × N ∑ j = 0 K 1 i j noobj [ c i ′ log ⁡ ( c i ) + ( 1 − c i ′ ) log ⁡ ( 1 − c i ) ] − ∑ i = 0 N × N 1 i obj ∑ c e ˊ classes  [ p i ′ ( c ) log ⁡ ( p i ( c ) ) + ( 1 − p i ′ ( c ) ) log ⁡ ( 1 − p i ( c ) ) ] \begin{aligned} \text {loss} &=\lambda_{\text {cord}} \sum_{i=0}^{N \times N} \sum_{j=0}^{K} 1_{i j}^{\text {obj}}\left[\left(t_{x}-t_{x}^{\prime}\right)^{2}+\left(t_{y}-t_{y}^{\prime}\right)^{2}\right] \\ &+\lambda_{\text {coord}} \sum_{i=0}^{N \times N} \sum_{j=0}^{K} 1_{i j}^{\text {obj}}\left[\left(t_{w}-t_{w}^{\prime}\right)^{2}+\left(t_{h}-t_{h}^{\prime}\right)^{2}\right] \\ &-\sum_{i=0}^{N \times N} \sum_{j=0}^{K} 1_{i j}^{\text {obj}}\left[c_{i }^{\prime} \log \left(c_{i}\right)+\left(1-c_{i}^{\prime}\right) \log \left(1-c_{i}\right)\right] \\ &-\lambda_{\text {noobj}} \sum_{i=0}^{N \times N} \sum_{j=0}^{K} 1_{i j}^{\text {noobj}}\left[c_{i}^{\prime} \log \left(c_{i}\right)+\left(1-c_{i}^{\prime}\right) \log \left(1-c_{i}\right)\right] \\ &-\sum_{i=0}^{N \times N} 1_{i}^{\text {obj}} \sum_{\text {céclasses }}\left[p_{i}^{\prime}(c) \log \left(p_{i}(c)\right)+\left(1-p_{i}^{\prime}(c)\right) \log \left(1-p_{i}(c)\right)\right] \end{aligned} loss=λcordi=0N×Nj=0K1ijobj[(txtx)2+(tyty)2]+λcoordi=0N×Nj=0K1ijobj[(twtw)2+(thth)2]i=0N×Nj=0K1ijobj[cilog(ci)+(1ci)log(1ci)]λnoobji=0N×Nj=0K1ijnoobj[cilog(ci)+(1ci)log(1ci)]i=0N×N1iobjceˊclasses [pi(c)log(pi(c))+(1pi(c))log(1pi(c))]

第一二项是定位loss:

和yolov2一样;

第三四项(置信度loss):

从MSE改为采用交叉熵和sigmoid,置信度IOU,当有目标时最小化预测和真值的差距,当无目标是希望把置信度优化成0;

第五项(分类loss):

采用交叉熵和sigmoid来对每个类别分类,和v1和v2的softmax不同;

在COCO数据集有9个不同尺寸anchor box:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326);
anchor和yolov2一样由聚类生成;
最小的13 * 13 特征图上应用最大的anchor box (116x90),(156x198),(373x326),适合检测较大的目标,因为感受野较大;
中等的26*26特征图上应用中等的anchor box (30x61),(62x45),(59x119),适合检测中等大小的目标,因为感受野适中;
较大的52*52特征图上应用最小的anchor box(10x13),(16x30),(33x23),适合检测较小的目标,因为感受野较小;
换算anchor和ground truth的坐标到feature map上需要 坐标/ stride,比如13 * 13的feature上的坐标都需要原始坐标除以32(416 * 416 降采样32倍成为13 * 13);

一篇不错的文章:https://cloud.tencent.com/developer/news/281788

你可能感兴趣的:(深度学习)