AlibabaResearch / efficientteacher

A Supervised and Semi-Supervised Object Detection Library for YOLO Series
GNU General Public License v3.0
820 stars 147 forks source link

domain adaptation 为什么能够缩小有标签数据和无标签数据的分布差距呢? #94

Open guixuef opened 1 year ago

guixuef commented 1 year ago

论文中提到了一个损失Lda,这个损失加到有监督损失Ls上为什么就能缩小 有标签和无标签的数据分布呢?能帮忙详细描述一下吗?万分感谢!

kv1830 commented 1 year ago

可以看这篇论文: https://arxiv.org/abs/1409.7495 简单的说,就是在yolov5的特征图上再接一个域分类器(实际上是接在neck的输出上),二分类,判定输入是源域(有监督图像域),还是目标域(无监督图像域)。这个域分类器前面还插了一个梯度反转层。 网络正向传播的时候,没啥特殊的,head用来预测物体,域分类器用来预测是哪个域的。 反向传播的时候,域分类器正常地进行梯度更新,但是再往前传播的时候,梯度会乘上一个-1(即梯度反转)。也就是说域分类器本身的目标是分类地越正确越好。 但是backbone+neck的目标是,域分类越混淆越好。有点对抗学习的意思哈。 理论上这样就能让backbone+neck提取出的特征是域无关的特征,那么就可以让无监督图像学习效果跟有监督图像的学习效果相接近了。 计算Lda有一个开关,即SSOD.with_da_loss,比如如下配置文件,True才计算,False不计算 configs/ssod/coco-standard/yolov5l_coco_ssod_1_percent.yaml 但问题是,代码中默认居然是False,不知道是不是因为实际效果不行。