|
446 | 446 |
|
447 | 447 | </li>
|
448 | 448 |
|
449 |
| - <li class="md-nav__item"> |
| 449 | + </ul> |
| 450 | + </nav> |
| 451 | + |
| 452 | +</li> |
| 453 | + |
| 454 | + </ul> |
| 455 | + </nav> |
| 456 | + |
| 457 | +</li> |
| 458 | + |
| 459 | + <li class="md-nav__item"> |
450 | 460 | <a href="#_4" class="md-nav__link">
|
451 | 461 | <span class="md-ellipsis">
|
452 | 462 | 损失计算
|
453 | 463 | </span>
|
454 | 464 | </a>
|
455 | 465 |
|
456 |
| -</li> |
| 466 | + <nav class="md-nav" aria-label="损失计算"> |
| 467 | + <ul class="md-nav__list"> |
457 | 468 |
|
458 | 469 | <li class="md-nav__item">
|
459 |
| - <a href="#_5" class="md-nav__link"> |
| 470 | + <a href="#yolov8_2" class="md-nav__link"> |
460 | 471 | <span class="md-ellipsis">
|
461 |
| - 数据增强和训练策略 |
| 472 | + yolov8 |
462 | 473 | </span>
|
463 | 474 | </a>
|
464 | 475 |
|
|
467 | 478 | </ul>
|
468 | 479 | </nav>
|
469 | 480 |
|
| 481 | +</li> |
| 482 | + |
| 483 | + <li class="md-nav__item"> |
| 484 | + <a href="#_5" class="md-nav__link"> |
| 485 | + <span class="md-ellipsis"> |
| 486 | + 数据增强和训练策略 |
| 487 | + </span> |
| 488 | + </a> |
| 489 | + |
| 490 | + <nav class="md-nav" aria-label="数据增强和训练策略"> |
| 491 | + <ul class="md-nav__list"> |
| 492 | + |
| 493 | + <li class="md-nav__item"> |
| 494 | + <a href="#yolov8_3" class="md-nav__link"> |
| 495 | + <span class="md-ellipsis"> |
| 496 | + yolov8 |
| 497 | + </span> |
| 498 | + </a> |
| 499 | + |
470 | 500 | </li>
|
471 | 501 |
|
472 | 502 | </ul>
|
|
755 | 785 |
|
756 | 786 | </li>
|
757 | 787 |
|
758 |
| - <li class="md-nav__item"> |
| 788 | + </ul> |
| 789 | + </nav> |
| 790 | + |
| 791 | +</li> |
| 792 | + |
| 793 | + </ul> |
| 794 | + </nav> |
| 795 | + |
| 796 | +</li> |
| 797 | + |
| 798 | + <li class="md-nav__item"> |
759 | 799 | <a href="#_4" class="md-nav__link">
|
760 | 800 | <span class="md-ellipsis">
|
761 | 801 | 损失计算
|
762 | 802 | </span>
|
763 | 803 | </a>
|
764 | 804 |
|
765 |
| -</li> |
| 805 | + <nav class="md-nav" aria-label="损失计算"> |
| 806 | + <ul class="md-nav__list"> |
766 | 807 |
|
767 | 808 | <li class="md-nav__item">
|
768 |
| - <a href="#_5" class="md-nav__link"> |
| 809 | + <a href="#yolov8_2" class="md-nav__link"> |
769 | 810 | <span class="md-ellipsis">
|
770 |
| - 数据增强和训练策略 |
| 811 | + yolov8 |
771 | 812 | </span>
|
772 | 813 | </a>
|
773 | 814 |
|
|
776 | 817 | </ul>
|
777 | 818 | </nav>
|
778 | 819 |
|
| 820 | +</li> |
| 821 | + |
| 822 | + <li class="md-nav__item"> |
| 823 | + <a href="#_5" class="md-nav__link"> |
| 824 | + <span class="md-ellipsis"> |
| 825 | + 数据增强和训练策略 |
| 826 | + </span> |
| 827 | + </a> |
| 828 | + |
| 829 | + <nav class="md-nav" aria-label="数据增强和训练策略"> |
| 830 | + <ul class="md-nav__list"> |
| 831 | + |
| 832 | + <li class="md-nav__item"> |
| 833 | + <a href="#yolov8_3" class="md-nav__link"> |
| 834 | + <span class="md-ellipsis"> |
| 835 | + yolov8 |
| 836 | + </span> |
| 837 | + </a> |
| 838 | + |
779 | 839 | </li>
|
780 | 840 |
|
781 | 841 | </ul>
|
|
798 | 858 |
|
799 | 859 |
|
800 | 860 |
|
801 |
| -<h1 id="yolo">yolo系列介绍</h1> |
| 861 | +<h1 id="yolo">YOLO系列介绍</h1> |
802 | 862 | <h2 id="_1">性能比较</h2>
|
803 | 863 | <p>YOLOv8 相比 YOLOv5 精度提升非常多,但是 N/S/M 模型相应的参数量和 FLOPs 都增加了不少</p>
|
804 | 864 | <table>
|
@@ -927,32 +987,6 @@ <h4 id="backboneneck">backbone和neck</h4>
|
927 | 987 | 可以看出,不再有之前的 objectness 分支,只有解耦的分类和回归分支,并且其回归分支使用了 Distribution Focal Loss 中提出的积分形式表示法<br />
|
928 | 988 | 其结构如下所示:<br />
|
929 | 989 | <a class="glightbox" href="../pics/yolo_head.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="" src="../pics/yolo_head.png" /></a></p>
|
930 |
| -<p><strong>Generalized Focal Loss</strong><br /> |
931 |
| -之前面临的问题:<br /> |
932 |
| -1. 类别分数和框的质量分数分开训练 不够端到端 |
933 |
| -<a class="glightbox" href="../pics/GFL_1.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="" src="../pics/GFL_1.png" /></a> |
934 |
| -2. 坐标框回归的方式不够灵活 没有办法建模复杂场景下的情况 希望用一种general的分布去建模边界框的表示</p> |
935 |
| -<p>对于第一个问题,为了保证training和test一致,同时还能够兼顾分类score和质量预测score都能够训练到所有的正负样本,将两者的表示进行联合。从物理上来讲,我们依然还是保留分类的向量,但是对应类别位置的置信度的物理含义不再是分类的score,而是改为质量预测的score<br /> |
936 |
| -对于第二个问题,我们选择直接回归一个任意分布来建模框的表示。当然,在连续域上回归是不可能的,所以可以用离散化的方式,通过softmax来实现即可 </p> |
937 |
| -<p><strong>Focal Loss</strong><br /> |
938 |
| -为了解决单阶段目标检测场景存在的前景类和背景类之间的极端不平衡,缩放因子在训练期间自动降低简单示例的贡献,并且快速将模型集中在困难的例子上<br /> |
939 |
| -$$ |
940 |
| -\text{FL}(p) = -(1 - p_t)^\gamma \log(p_t), \quad p_t = \begin{cases} |
941 |
| -p, & \text{when } y = 1 \ |
942 |
| -1 - p, & \text{when } y = 0 |
943 |
| -\end{cases} |
944 |
| -$$</p> |
945 |
| -<p><strong>Quality Focal Loss</strong><br /> |
946 |
| -为了将定位和分类联合,y表示训练期间预测边界框与其相应的地面实况边界框之间的 IoU 分数,动态值为 0∼1<br /> |
947 |
| -采用 sigmoid 运算符 σ(·) 的多重二元分类来进行多类实现<br /> |
948 |
| -由于不平衡问题仍在存在,需要在Focal Loss基础上进行扩展,使支持连续标签<br /> |
949 |
| -(1)将交叉熵部分 − log(pt) 扩展为其完整版本 −((1 − y) log( 1 − σ) + y log(σ)); (2) 比例因子部分 (1 − pt)γ 被推广为估计 σ 与其连续标签 y 之间的绝对距离,即 |y − σ|β (β ≥ 0)<br /> |
950 |
| -完整的公式如下<br /> |
951 |
| -$$ |
952 |
| -\text{QFL}(\sigma) = -|y - \sigma|^\beta \left( (1 - y) \log(1 - \sigma) + y \log(\sigma) \right). |
953 |
| -$$ |
954 |
| -参数 β 控制权重降低率(实验得到 β = 2 最合适) </p> |
955 |
| -<p><strong>Distribution Focal Loss</strong> </p> |
956 | 990 | <h4 id="c2f">C2f模块</h4>
|
957 | 991 | <p>将yolov5中的C3模块换成梯度流更丰富的C2f模块<br />
|
958 | 992 | csp模块的示意图如下:<br />
|
@@ -984,18 +1018,64 @@ <h4 id="c2f">C2f模块</h4>
|
984 | 1018 | y.extend(m(y[-1]) for m in self.m)
|
985 | 1019 | return self.cv2(torch.cat(y, 1))
|
986 | 1020 | </code></pre>
|
987 |
| -<h4 id="_4">损失计算</h4> |
| 1021 | +<h2 id="_4">损失计算</h2> |
| 1022 | +<h3 id="yolov8_2">yolov8</h3> |
988 | 1023 | <p>yolov8采用了动态分配正负样本策略 根据分类与回归的分数加权的分数选择正样本<br />
|
989 | 1024 | 具体步骤为:<br />
|
990 | 1025 | 计算真实框和预测框的匹配程度<br />
|
991 |
| -$$ align_metric= s ^\alpha *u^\beta $$ |
| 1026 | +<script type="math/tex; mode=display"> align\_metric= s ^\alpha *u^\beta </script> |
992 | 1027 | 其中,s是预测类别分值,u是预测框和真实框的ciou值,α和β为权重超参数,两者相乘就可以衡量匹配程度,当分类的分值越高且ciou越高时,align_metric的值就越接近于1,此时预测框就与真实框越匹配,就越符合正样本的标准<br />
|
993 | 1028 | 对于每个真实框,直接对align_metric匹配程度排序,选取topK个预测框作为正样本<br />
|
994 |
| -对一个预测框与多个真实框匹配测情况进行处理,保留ciou值最大的真实框<br /> |
995 |
| -分类分支依然采用 BCE Loss<br /> |
| 1029 | +对一个预测框与多个真实框匹配测情况进行处理,保留ciou值最大的真实框 </p> |
| 1030 | +<p>分类分支依然采用 BCE Loss<br /> |
| 1031 | +<script type="math/tex; mode=display">L=\frac1N\sum_iL_i=\frac1N\sum_i-[y_i\cdot log(p_i)+(1-y_i)\cdot log(1-p_i)]</script> |
996 | 1032 | 回归分支需要和 Distribution Focal Loss 中提出的积分形式表示法绑定,因此使用了 Distribution Focal Loss, 同时还使用了 CIoU Loss<br />
|
997 |
| -3个Loss 采用一定权重比例加权即可 </p> |
998 |
| -<h4 id="_5">数据增强和训练策略</h4> |
| 1033 | +yolov8引入Anchor-Free的Center-based methods(基于中心点)后,模型从输出“锚框大小偏移量(offest)”变为"预测目标框左、上、右、下边框距目标中心点的距离(ltrb = left, top, right, bottom)"<br /> |
| 1034 | +CIOU loss用以令锚框更加接近标签值的损失,在(IOU)交并比损失上加上了宽高比的判据,从而更好在三种几何参数:重叠面积、中心点距离、长宽比上拟合目标框<br /> |
| 1035 | +单独的CIOU loss的目标为“预测一个绝对正确的值(标签值)”,在数学上可以看做是一种“狄拉克分布”(一个点概率为无穷大,其他点概率为0),如果把标签认为是"绝对正确的目标",那么学习出的就是狄拉克分布,概率密度是一条尖锐的竖线。然而真实场景,物体边界并非总是十分明确的<br /> |
| 1036 | +为配合Anchor-Free、以及提升泛化性,增加了DFL损失,DFL以交叉熵的形式,衡量模型输出分布和真实标签的差异,去优化与标签y最接近的一左一右2个位置的概率。模型输出的是边框在每个位置的概率值,为了防止随机性太强,损失只考虑离真值最近的两个位置,让网络迅速关注标签y附近的值,得到正确结果<br /> |
| 1037 | +DFL公式如下<br /> |
| 1038 | +<script type="math/tex; mode=display">\mathbf{DFL}(P_i,P_{i+1})=-((y_{i+1}-y)\mathrm{log}(P_i)+(y-y_i)\mathrm{log}(P_{i+1}))</script> |
| 1039 | +DFL的全局最小解,即$P_i=\frac{y_{i+1}-y}{y_{i+1}-y_i},P_{i+1}=\frac{y-y_i}{y_{i+1}-y_i}$可以保证估计的回归目标\hat{y}无限接近对应的标签y,即$\hat{y}=\sum_{j=0}^nP(y_j)y_j=P_iy_i+P_{i+1}y_{i+1}=\frac{y_{i+1}-y}{y_{i+1}-y_i}y_i+\frac{y-y_i}{y_{i+1}-y_i}y_{i+1}=y$<br /> |
| 1040 | +yolov8中的DFL Loss代码如下 </p> |
| 1041 | +<pre><code>tl = target.long() # target left |
| 1042 | +tr = tl + 1 # target right |
| 1043 | +wl = tr - target # weight left |
| 1044 | +wr = 1 - wl # weight right |
| 1045 | +return (F.cross_entropy(pred_dist, tl.view(-1), reduction='none').view(tl.shape) * wl + |
| 1046 | + F.cross_entropy(pred_dist, tr.view(-1), reduction='none').view(tl.shape) * wr).mean(-1, keepdim=True) |
| 1047 | +</code></pre> |
| 1048 | +<p>感觉其实就是一个浮点数由离它最近的两个整数决定,越接近的整数权重越大 </p> |
| 1049 | +<p>3个Loss 采用一定权重比例加权即可 </p> |
| 1050 | +<p><strong>Generalized Focal Loss</strong><br /> |
| 1051 | +之前面临的问题:<br /> |
| 1052 | +1. 类别分数和框的质量分数分开训练 不够端到端 |
| 1053 | +<a class="glightbox" href="../pics/GFL_1.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="" src="../pics/GFL_1.png" /></a> |
| 1054 | +2. 坐标框回归的方式不够灵活 没有办法建模复杂场景下的情况 希望用一种general的分布去建模边界框的表示</p> |
| 1055 | +<p>对于第一个问题,为了保证training和test一致,同时还能够兼顾分类score和质量预测score都能够训练到所有的正负样本,将两者的表示进行联合。从物理上来讲,我们依然还是保留分类的向量,但是对应类别位置的置信度的物理含义不再是分类的score,而是改为质量预测的score<br /> |
| 1056 | +对于第二个问题,我们选择直接回归一个任意分布来建模框的表示。当然,在连续域上回归是不可能的,所以可以用离散化的方式,通过softmax来实现即可 </p> |
| 1057 | +<p><strong>Focal Loss</strong><br /> |
| 1058 | +为了解决单阶段目标检测场景存在的前景类和背景类之间的极端不平衡,缩放因子在训练期间自动降低简单示例的贡献,并且快速将模型集中在困难的例子上<br /> |
| 1059 | +<script type="math/tex; mode=display"> |
| 1060 | +\text{FL}(p) = -(1 - p_t)^\gamma \log(p_t), \quad p_t = \begin{cases} |
| 1061 | +p, & \text{when } y = 1 \\ |
| 1062 | +1 - p, & \text{when } y = 0 |
| 1063 | +\end{cases} |
| 1064 | +</script> |
| 1065 | +</p> |
| 1066 | +<p><strong>Quality Focal Loss</strong><br /> |
| 1067 | +为了将定位和分类联合,y表示训练期间预测边界框与其相应的地面实况边界框之间的 IoU 分数,动态值为 0∼1<br /> |
| 1068 | +采用 sigmoid 运算符 σ(·) 的多重二元分类来进行多类实现<br /> |
| 1069 | +由于不平衡问题仍在存在,需要在Focal Loss基础上进行扩展,使支持连续标签<br /> |
| 1070 | +(1)将交叉熵部分 − log(pt) 扩展为其完整版本 −((1 − y) log( 1 − σ) + y log(σ)); (2) 比例因子部分 (1 − pt)γ 被推广为估计 σ 与其连续标签 y 之间的绝对距离,即 |y − σ|β (β ≥ 0)<br /> |
| 1071 | +完整的公式如下<br /> |
| 1072 | +<script type="math/tex; mode=display"> |
| 1073 | +\text{QFL}(\sigma) = -|y - \sigma|^\beta \left( (1 - y) \log(1 - \sigma) + y \log(\sigma) \right). |
| 1074 | +</script> |
| 1075 | +参数 β 控制权重降低率(实验得到 β = 2 最合适) </p> |
| 1076 | +<p><strong>Distribution Focal Loss</strong> </p> |
| 1077 | +<h2 id="_5">数据增强和训练策略</h2> |
| 1078 | +<h3 id="yolov8_3">yolov8</h3> |
999 | 1079 | <p>最后 10 个 epoch 关闭 Mosaic 的操作<br />
|
1000 | 1080 | <a class="glightbox" href="../pics/yolov8_train.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="" src="../pics/yolov8_train.png" /></a></p>
|
1001 | 1081 | <p>训练参数如下<br />
|
@@ -1062,11 +1142,7 @@ <h4 id="_5">数据增强和训练策略</h4>
|
1062 | 1142 |
|
1063 | 1143 | <script src="../assets/javascripts/bundle.ebd0bdb7.min.js"></script>
|
1064 | 1144 |
|
1065 |
| - <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script> |
1066 |
| - |
1067 |
| - <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> |
1068 |
| - |
1069 |
| - <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-MML-AM_CHTML"></script> |
| 1145 | + <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> |
1070 | 1146 |
|
1071 | 1147 |
|
1072 | 1148 | <script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
|
|
0 commit comments