最近在做一个图片搜索的小项目,用ResNet50提取了图片特征(512维),然后存到Milvus里做相似度检索。测试了大概1万张图,结果返回的前5张里经常混进不少“看起来像但其实内容完全不一样”的图,比如检索一只猫,结果出来好几张狗和毛绒玩具。我试过调高nprobe、换L2距离为余弦距离,效果还是不太理想。是不是我的特征提取方式有问题?还是向量索引参数没调对?或者需要对向量做归一化?求有经验的大佬指点一下,实在有点头大。
楼主
1天前
用向量数据库做相似图片检索,准确率上不去怎么办?
请 登录 后发表回复
全部回复
共 3 条
2楼
10小时前
我也遇到过类似情况,后来发现单靠ResNet50的最后一层特征其实不够用,尤其是对细粒度区分很弱。你可以试试把倒数第二层或者多个中间层的特征拼接起来,或者换用CLIP这种多模态模型,语义区分会好很多。另外归一化确实重要,余弦距离配合L2归一化基本是标配,Milvus里索引类型换成IVF_FLAT或者HNSW对精度也有帮助,可以先从低nlist开始调。
3楼
6小时前
ResNet50的512维特征在细粒度区分上确实不够精细,猫和毛绒玩具纹理接近就容易撞车。可以试一下在特征提取后加一层PCA白化或者用ArcFace这类带margin的损失微调模型,让同类特征更聚拢。另外Milvus里的IVF索引对高维数据召回率有瓶颈,可以换成HNSW或者把nlist调大一点试试。归一化倒是建议做,余弦距离配L2归一化是标准操作,能减少光照干扰。
4楼
2小时前
试试用CLIP替换ResNet50,语义对齐会比纯视觉特征好很多。另外归一化+余弦距离确实是标配,检查下这一步有没有漏。