这几天看CV论文和视频,经常提及什么上游任务、下游任务。简单来说上游任务一般是训练一个用于特征提取的预训练模型,比如这几年很火的CLIP[1],GPT[2],作用就是提取图像特征;下游任务是具体应用,比如利用主干网络提取的图像特征进行目标检测、语义分割等。上下游在很多场景中都有定义,理解起来也比较直接,就像一条河流(pipeline)的上下游,上游的会留到当前位置,然后从当前位置流向下游。
--------------------------------------------------------------------------------------------------------------------------------
计算机视觉四大基础任务:
分类(解决"what")、定位(解决"where")、检测(解决"what"和"where")、分割(实例分割、语义分割和场景分割等像素级别的处理)
上游任务:
预训练模型。一般就是利用上游数据进行预训练,以生成一个包含视觉表征能力的模型。
比如,我们想要的是一个能够提取图片特征能力的卷积神经网络或者Transformer,我们会用大量图片用图片分类这个下游任务或者其他比如自监督的方法(可以参考CLIP)去进行训练,得到一个权重合适的模型(能够很好地提取出图像的特征),那么最后我们把得到的这个模型最后一层的FC层(原本用于图片分类输出类别)去掉,这个模型就成为了一个很好的预训练模型,输入一张图,就能够提取出图像的特征,就可以用于我们的下游任务(在这个模型后面加一些诸如检测头之类的模块,处理我们想要的下游任务,或者修改下FC层,用于另外一堆类别的图像分类)。
下游任务:
下游任务是计算机视觉应用程序,用于评估通过自监督学习学习到的特征的质量。当训练数据稀缺时,这些应用程序可以极大地受益于预训练模型。
下游任务更多的是评估任务,相当于项目落地,需要去做具体任务来评价模型好坏。
如图像分类,目标检测、语义分割等具体任务。
下游上游的取名就在于下游任务往往是先用上游任务得到的模型(一般会称为backbone,主干网络)提取图像特征,然后再从这些特征中得到我们想要的结果。
图1 目标检测
图2 语义分割
参考文献:
[1] Radford A, Kim J W, Hallacy C, et al. Learning transferable visual models from natural language supervision[C]//International conference on machine learning. PMLR, 2021: 8748-8763
[2] Radford A, Narasimhan K, Salimans T, et al. Improving language understanding by generative pre-training[J]. 2018.