半监督中的基础论文,自监督和模型一致性的代表作。
- Consistency regularization: 无监督学习的方式,数据\(A\)和经过数据增强的\(A\)计做\(A'\) ,同时输入模型\(f\) ,由于其种类相同(未知但相同),所以\(f(A)=f(A')\) ,利用分布相同进行训练即可。
- Pseudo-labeling: 伪标签,使用人工标注数据集训练模型\(f\),然后使用此模型去预测未标注数据集,结果使用阈值进行过滤当做未标注数据的标签。
假设存在数据集 \(D\),有标签数据集\(D^l\) ,无标签数据集\(D^u\) ,所以\(D=\{D^l,D^u\}\) ,训练模型\(f\),训练步骤如下:
- 有标签的数据直接使用交叉熵loss
- 无标签的数据线进行前向计算得到结果计做\(Result\) ,设定阈值\(T\),\(0 \ \ if \ softmax(Result)>T \ else \ 0\) 制作一个one-hot的label,利用此label进行交叉熵loss计算
- 在训练的初期会经常出现loss为0的情况,因为前期不稳定,无标签的置信度小于阈值
- 这篇论文主要叙述数据增强的作用,阅读较为简单
将半监督迁移至目标检测的论文,训练步骤:
使用已标注的数据训练一个大模型\(f_{large}\)
使用这个大模型对未标注数据集进行预测,经过NMS,使用置信度阈值进行过滤,获得\(Pseudo-labeling\)
如果使用数据增强(几何变换),需要将label进行对齐
计算loss即可
2021最新的半监督目标检测,下面的论文是其中一个模块(Co-rectify)参考论文,以下给出训练步骤:
- 先使用标注图像训练一个大模型,未标注图像直接使用大模型生成(先进行NMS,后面置信度设置一个阈值进行过滤)
- 使用伪标签训练模型\(f_a\) ,其中数据使用弱数据增强(RandomFlip)
- 使用伪标签训练模型\(f_b\),其中数据使用强数据增强(mosaic、mixup等),模型\(f_b\)可以不等于\(f_b\)
- 模型 \(f_a\) 和 \(f_b\) 预测的结果进行联合预测,假设模型\(f_a\)的Head网络为\(head_a\),其他类似。例如模型输入为 \(data\) ,\(out_a = f_a(data),out_a'=f_b(data,out_a)\) 其中\(out_a\)为模型\(f_a\)的直接输出,\(out_a'\)是模型\(f_b\)的Head层输出(相当于RPN的结果)。最后将两个结果进行加权平均即可。
- loss使用下面的函数表示,监督loss和伪监督loss
- 总结
由于看到Waymo object detect 2D比赛中有人使用此方案,所以才进行探索一下:第二名方案论文。这里总结一下这个比赛的方案,关于弱监督套路一样,以上三篇论文完全代表其发展进程了。
- (基础)将手动标注的图像进行训练,且此模型尽量是大模型(比赛有速度和精度要求,论文使用YoloR)。参赛给的训练数据集
- (基础)将未标注的图像进行伪标注。参赛给的测试集
- (优化)anchor的选择,由于目标差异比较大(自行车和汽车两类bbox分布较为接近、自行车单独计算),和后面模型结合起来分析
- (优化)针对小目标的处理,由于数据在图像中间分布,所以裁剪之后进行放大,提高小目标的出镜率
- (优化)使用TensorRT进行加速
- (优化)针对困难样本(模糊等),使用弱监督的Co-rectify方案,论文里面说是
we learn from the self-learning method which use multi-different models check with each other to automatically clean the dataset during the model training process to solve this problem and improve the model performance.
也就仅仅一句话带过,这里后面进行拓展说明。 - (优化)Model Ensemble,多个模型进行投票。这里采用不用模型预测不同目标的方式,YOLOR-W6预测车辆和行人,YOLOR-P6预测自行车。
这里主要说明一下采用的Co-rectify方案(出自Paper),两个结构相同且参数不同的模型YOLOR-W/P,由于是单阶段网络,所以只能直接预测,而不是像原始论文使用Head分支进行。假设模型 \(f_w\) 和 \(f_p\) 预测的结果进行联合预测。如模型输入为 \(data\) ,\(out_w = f_w(data),out_w'=f_b(data)\) 其中\(out_w\)为模型\(f_a\)的直接输出,\(out_w'\)是模型\(f_b\)的输出。直接进行加权平均,会使得模型朝着一个方向学习。如原始论文中原文:
The key to the success of co-rectify is that the two models will not converge to the same model. We take two measures to ensure that the two models converge independently.
First, although the two models have the same structure, they use different initialization parameters. Second, although the two models share the same data in each mini-batch, their data augmentations and pseudo annotations are also different.
虽然说两个模型的参数是不同的,但是此处的目的是去除模糊框,如何做到两个模型就能去除模糊框?
个人猜测是1)模糊框是少数,大量的数据训练本身就能去除这类样本。2)两个型模同时训练,会增加网络的鲁棒性,毕竟每个网络都有自己擅长的点(不同目标的检测精度不同),联合之后各取所长吧。