Hamilton M., Zhang Z., Hariharan B., Snavely N., Freeman W. T. Unsupervised semantic segmentation by distilling feature correspondences. In International Conference on Learning Representations, 2022
概
本文介绍了一种无监督的语义分割方法, 只需在 frozen backbone 上训练一个 head 就可以起到语义分割的作用. 感觉比较好利用.
流程

-
backbone N 将两个图片 x,x′ 映射为特征 f∈RCHW,g∈RCIJ;
-
计算二者间的 feature correspondence:
Fhwij:=∑cfchw⋅gcij∥fhw∥⋅∥gij∥,(1)
即 spatial element-wise 的 cosine similarity. 倘若 f=g, 则可以衡量不同区域间的 correspondence;
-
segmentation head S 将 f,g 分别映射为
s=S(f)∈RKHW,t=S(g)∈RKIJ,(2)
类似 (1) 计算二者间的 feature correspondence Shwij;
-
得到如下的损失函数:
Lsimple−corr(x,x′,b):=−∑hwij(Fhwij−b)Shwij,(3)
其中 b 为一个超参数. 注意到, 关于 S 最小化上式, 有
Shwij↑ if Fhwij>b,Shwij↓ if Fhwij<b.
故合适的 b 会促使 Shwij 准确度量一致性;
-
但是 (3) 在训练的时候并不稳定, 作者先将 Fhwij 进行中心化, 即
FSChwij:=Fhwij−1IJ∑i′j′Fhwi′j′.
然后用如下的损失进行替代:
Lcorr(x,x′,b):=−1HWIJ∑hwij(FSChwij−b)max(Shwij,0);(4)
-
最后的损失为
L=λselfLcorr(x,x,bself)+λknnLcorr(x,xknn,bself)+λrandLcorr(x,xrand,bself).(5)
其中 x 和其本身 x 或类似的 (positive) 样本 xknn (通过 KNN 选取的) 的损失主要是为了学习正向的 Shwij↑ 的信息, 而 x 和随机的样本 xrand 之间的损失则是为了更多的提供 Shwij↓ 等负向的排斥的信息的学习;
-
为了给学习得到的特征图 S(f) 进行语义分割, 可以采用如下两种方式:
- Linear Probe: 以线性网络和部分监督信息, 凭借交叉熵损失即可训练;
- Clustering.
-
通过 connected Conditional Random Field (CRF) 对语义分割进行微调.
注: Clustering 我看代码是按照如下方式训练的:
-
随机初始化一些类别中心 μ1,μ2,⋯,μK;
-
对于每个 batch {x1,⋯,xn} 得到 {s1,⋯,sn}, 每个 si∈RCHiWi;
-
对每个 xi,μk 进行标准化 xi=xi∥xi∥,μk=μk∥μk∥;
-
对于每个 channel 计算内积:
zikc=sThwμk,i∈[n],k∈[K],c∈[C];
-
对于每组 zik∈RC 找到最大的:
mik=argmaxczikc;
-
然后通过如下损失优化:
minμk−1NK∑ikzikmik.
个人感觉, 这就是一种特殊的梯度版的 K-means 算法来更新 μ.
代码
[official]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix