FashionSearchNet学习笔记

FashionSearchNet解决了图像检索中替换属性的问题,通过属性定位、确认、修改器和进一步优化实现高效检索。使用Alexnet结构进行属性定位,通过ROI Pooling和属性向量表示,结合排序损失函数进行训练,允许对图像属性进行修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FashionSearchNet

(写了一半,现在认为,这种方法就是在AMNet的基础上添加了属性定位)
针对于图像检索中替换属性的问题,一个难点就在于如何表示产品中每个属性的特征。FSNet使用了一种弱定位的方法提取属性区域。通过这种方式,能够使不相关的部分不再对图像检索产生影响。

1. FSNet使用背景

有部分学者已经对如何替换图像中的属性做出了自己的研究,如AMNet。但是这些方法都没有从属性定位的方面进行探索。属性定位其实是由Learning Deep Features for Discriminative Localization这篇论文提出的,在本文中也得到了很好的使用。

2. FSNet核心要点

1. 属性定位

首先使用类似Alexnet的结构对图像进行属性定位。属性定位的方法来自于Learning Deep Features for Discriminative Localization。属性定位就是为了更好的表示一种属性。在神经网络中输入一张图片,通过Alexnet进行卷积,但将Alexnet的两个全连接层换成卷积层,并进行GAP操作,GAP公式如下:
∑ k ( x I ( k ) = ∑ i , j c o n v 7 k ( I , i , j ) ) \sum_{k}(x_{I}(k)=\sum_{i,j}conv7_{k}(I,i,j)) k(xI(k)=i,jconv7k(I,i,j))
这里的 x I ( k ) x_{I}(k) xI(k)是图像 I I I中的第 k k k个通道, c o n v 7 k ( I , i , j ) conv7_{k}(I,i,j) conv7k(I,i,j)是第七卷积层中的第k个特征图的 ( i , j ) (i,j) (i,j)这个位置。进而我们可以定义属性激活图AAMs为:
M a c ( I , i , j ) = ∑ k W a ( k , c ) c o n v 7 K ( I , i , j ) M_{a_{c}}(I,i,j)=\sum_{k}W_{a_{(k,c)}}conv7_{K}(I,i,j) Mac(I,i,j)=kWa(k,c)conv7K(I,i,j)
这里的c是类别, W a ( k , c ) W_{a_{(k,c)}} Wa(k,c)就是属性a在第k个特征图里属于类别c的权重。 W a W_{a} Wa使用下述的分类损失函数进行更新:
L c = − ∑ I = 1 N ∑ a = 1 A l o g ( p ( g I a ∣ x I w a ) ) L_{c}=-\sum_{I=1}^{N}\sum_{a=1}^{A}log(p(g_{I_{a}}|x_{I}w_{a})) Lc=I=1Na=1Alog(p(gIaxIwa))
这里 g I a g_{I_{a}} gIa代表第 I I I张图里第 a a a个属性的ground truth(参考标准)。 x I w a x_{I}w_{a} xIwa计算了 a a a属性在 I I I图像中的权重。 N N N是训练样本的数目, A A A是属性的数量。概率 p p p也就描述了 x I w a x_{I}w_{a} xIwa被分类成 g I a g_{I_{a}} gIa的概率。

在特征激活图中,像素值高于最大值20%的部分被分割出来,放入bounding box中,作为一种属性的表示。分类之后,我们可以得到每个bbox的标签表示,也就是初步的属性分类。

2. 属性确认

我们得到bbox后,利用bbox,对conv5进行ROI pooling操作,就可以很好的表达出属性了。这里可能会有同学问,那我直接对conv5的整张特征图进行ROI pooling不行吗?来看下面一种情况:

如果直接进行ROI pooling,因为anchor图像和neg图像在整体颜色上会更相近,所以dis(anchor,neg)可能会小于dis(anchor,pos).但是实际上anchor和pos的袖口属性才是一致的。所以将属性进行定位,选出最能表示属性的区域进行训练才是最有效的。并且个人认为,这样的解释性会更强。

对于图像中不同属性代表的不同区域,采用与softmax思路相似的triplet ranking loss进行排序,softmax function定义如下:
d + ( h ( I ^ ) , h ( I + ) , h ( I − ) ) = e x p ( ∣ ∣ h ( I ^ ) − h ( I + ) ∣ ∣ 2 ) e x p ( ∣ ∣ h ( I ^ ) − h ( I + ) ∣ ∣ 2 ) + e x p ( ∣ ∣ h ( I ^ ) − h ( I − ) ∣ ∣ 2 ) d^{+}(h(\hat I),h(I^{+}),h(I^{-}))=\frac {exp(||h(\hat I)-h(I^{+})||_{2})}{exp(||h(\hat I)-h(I^{+})||_{2})+exp(||h(\hat I)-h(I^{-})||_{2})} d+(h(I^),h(I+),h(I))=exp(h(I^)h(I+)2)+exp(h(I^)h(I)2)exp(h(I^)h(I+)2)
d − ( h ( I ^ ) , h ( I + ) , h ( I − ) ) = e x p ( ∣ ∣ h ( I ^ ) − h ( I − ) ∣ ∣ 2 ) e x p ( ∣ ∣ h ( I ^ ) − h ( I + ) ∣ ∣ 2 ) + e x p ( ∣ ∣ h ( I ^ ) − h ( I − ) ∣ ∣ 2 ) d^{-}(h(\hat I),h(I^{+}),h(I^{-}))=\frac {exp(||h(\hat I)-h(I^{-})||_{2})}{exp(||h(\hat I)-h(I^{+})||_{2})+exp(||h(\hat I)-h(I^{-})||_{2})} d(h(I^),h(I+),h(I))=exp(h(I^)h(I+)2)+exp(h(I^)h(I)2)exp(h(I^)h(I)2)
其中 I ^ \hat I I^表示ref 图像, I + I^{+} I+表示pos图像, I − I^{-} I表示neg图像. h ( I ) h(I) h(I)就是第 I I I层中的图像表示。因为 d − d^{-} d可以用 d + d^{+} d+表示,同时当 h = f c 10 _ a h=f_{c_{10\_a}} h=fc10_a时(第10层中c类别代表的是a属性),排序损失函数可以写做:
L T = ∑ I = 1 N ∑ a = 1 A d + ( f c 10 _ a ( I ^ ) , f c 10 _ a ( I + ) , f c 10 _ a ( I − ) ) L_{T}=\sum_{I=1}^{N}\sum_{a=1}^{A}d^{+}(f_{c_{10\_a}}(\hat I),f_{c_{10\_ a}}(I^{+}),f_{c_{10\_a}}(I^{-})) LT=I=1Na=1Ad+(fc10_a(I^),fc10_a(I+),fc10_a(I))
这里A是属性数量。我们通过rank loss最小化 ∣ ∣ f c 10 _ a ( I ^ ) , f c 10 _ a ( I + ) ∣ ∣ 2 ||f_{c_{10\_a}}(\hat I),f_{c_{10\_a}}(I^{+})||_{2} fc10_a(I^),fc10_a(I+)2,最大化 ∣ ∣ f c 10 _ a ( I ^ ) , f c 10 _ a ( I − ) ∣ ∣ 2 ||f_{c_{10\_a}}(\hat I),f_{c_{10\_a}}(I^{-})||_{2} fc10_a(I^),fc10_a(I)2。最终得到训练好的 f c 10 _ a f_{c_{10\_a}} fc10_a

3. 属性修改器

有了不同的属性表示方法,想要修改一些属性就很直接了。在训练后,将有相同attribute value的图片提取特征并取平均,需要替换的时候,这些averaged features就可以直接将不需要的特征进行替换(与AMNet的思路相同)

4. 进一步优化

通过ROI Pooling层,我们可以得到一系列的图像特征向量。如果直接将这些向量连接,虽然结果会好一点,但是会导致向量处理起来过于庞大。为了让整个网络速度更快,作者使用了权重矩阵 W a W^{a} Wa让全连接层的特征向量减少到4096个。同时,由于一些属性会更重要,一些属性会不那么重要,比如,当人们选择衣服的时候,大多数人还是会更关注衣服的颜色,而不是衣服的材质。所以使用附加的的loss function来对权重矩阵 W a ∗ W_{a^{*}} Wa进行训练也是有必要的。融合全连接层的表达式如下:
F ( I , a ∗ ) = [ f c 10 _ 1 ( I ) λ 1 , a ∗ , . . . , f c 10 _ 1 ( I ) λ a , a ∗ ] W a ∗ F(I,a^{*})=[f_{c_{10\_1}}(I)\lambda _{1,a^{*}},...,f_{c_{10\_1}}(I)\lambda_{a,a^{*}}]W_{a^{*}} F(I,a)=[fc10_1(I)λ1,a,...,fc10_1(I)λa,a]Wa
相应的全局排序损失函数定义为:
L G = ∑ I = 1 N ∑ a ∗ = 1 A + 1 d + ( F ( I ^ , a ∗ ) , F ( I + , a ∗ ) , F ( I − , a ∗ ) ) L_{G}=\sum_{I=1}^{N}\sum_{a^{*}=1}^{A+1}d^{+}(F(\hat I,a^{*}),F(I^{+},a^{*}),F(I^{-},a^{*})) LG=I=1Na=1A+1d+(F(I^,a),F(I+,a),F(I,a))
这里的 a ∗ a^{*} a,就是经过属性修改器,替换了不需要的属性后的属性。

通过最终的优化,我们就可以得到图像的F向量。

3. FSNet 流程

上图就是FSNet的整体结构。输入为一张图片,输出是4096维的向量。主要流程如下:
  1. 依次将所有的train图片经过7层conv,再使用GAP对图像的属性进行定位,并通过 L c L_{c} Lc分类函数,得到第一部分的输出:bbox及标签。
  2. 将第一部分训练得到的bbox加入到conv5中,通过ROI pooling,将输入的大小固定,并通过一系列全连接层的处理,得到多个1024维的向量,每一个向量都代表了一种属性。再对每一个向量都进行分类和排序损失,得到第二部分输出:每个属性的向量表示。注意:进行排序和分类损失计算的时候,所选的anchor和pos属性必须属于同一标签。
  3. 将第二部分得到的属性向量,通过权重矩阵的方式整合成一个4096维向量,再通过全局的排序损失,得到最终输出F。注意,如果用户有额外的需求,比如想把红色属性换成黄色属性,就可以直接修改第二部分得到的属性向量。进行排序计算的时候,所选的anchor和pos属性必须相同。
  4. 经过大量的图片训练,可以得到训练好的 W a ( k , c ) W_{a_{(k,c)}} Wa(k,c), W a ∗ W_{a^{*}} Wa等权重矩阵。利用这些矩阵和卷积层,对test图像进行计算得到test图像的 F F F向量,与图库中的图像的 F F F进行欧式距离计算,选出最相近的K张图像。

4. 总结

疑问
  1. p ( g I a ∣ x I w a ) p(g_{I_{a}}|x_{I}w_{a}) p(gIaxIwa)是怎么算的?
感受

属性定位的方法真的不错,我认为这样的训练是比AMNet更好的,作者的后续实验也证明了这一点。最后加了一个全局排序损失,也是有理有据的。

[本课程属于AI完整学习路线套餐,该套餐已“硬核”上线,点击立即学习!] 【为什么要学习深度学习和计算机视觉?】 AI人工智能现在已经成为人类发展中最火热的领域。而计算机视觉(CV)是AI中最热门,也是落地最多的一个应用方向(人脸识别,自动驾驶,智能安防,车牌识别,证件识别)。所以基于人工智能的计算视觉行业必然会诞生大量的工作和创业的机会。如何能快速的进入CV领域,同时兼备理论基础和实战能力,就成了大多数学习者关心的事情,而这门课就是因为这个初衷而设计的。 【讲师介绍】 CHARLIE 老师 1、人工智能算法科学家2、深圳市海外高层次人才认定(孔雀人才)3、美国圣地亚哥国家超算中心博士后4、加利福尼亚大学圣地亚哥全奖博士5、参与美国自然科学基金(NSF)及加州能源局 (CEC)资助的392MWIVANPAH等智慧电网项目6、21篇国际期刊文章(sci收录17篇),总引用接近10007、第一作者发明专利11份【推荐你学习这门课的理由:知识体系完整+丰富学习资料】 1、本课程总计9大章节,是一门系统入门计算机视觉的课程,未来将持续更新。2、课程从计算机视觉理论知识出发,理论结合实战,手把手的实战代码实现(霍夫变换与模板匹配,AlexNet OCR应用,VGG迁移学习,多标签分类算法工程) 3、带你了解最前沿技术,各类型算法的优点和缺点,掌握数据增强,Batchnormalization, Dropout,迁移学习等优化技巧,搭建实用的深度学习应用模型 4、学习完后,你将具有深度学习与计算视觉的项目能力,比如大学生学完可以具备独立完成机器视觉类毕业设计的能力,在求职过程中可以体系化的讲解机器视觉核心知识点,初步达到人工智能领域机器视觉工程师的水平 【学完后我将达到什么水平?】 1、零基础入门计算视觉,学习掌握并应用从经典图像处理到深度学习分类任务的要点知识 2、掌握数据增强,迁移学习等优化技巧,搭建实用的深度学习应用模型 3、学习完课程,可以独立应用多个经典算法和深度学习算法 4、以大学毕业设计,面试找工作为目标,手把手带大家编程,即使没有太多计算视觉的背景知识也可以循序渐进完成课程,获得实战项目的经验 【面向人群】 1、对AI感兴趣,想要系统学习计算机视觉的学员 2、需要毕业设计的大学生 3、做图像分析或相关数据分析的研究生 4、准备面试计算视觉和深度学习岗位的应聘者 5、希望在项目中引入计算视觉/深度学习技术的开发人员 【课程知识体系图】 【实战项目】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值