[关闭]
@haoqiang 2018-06-18T12:03:07.000000Z 字数 4667 阅读 162

FashionAI比赛心得


赛程

比赛官网链接


赛题:服饰属性识别

属性维度

属性值

注:初赛数据仅包含单人模特的商品图。在复赛中,衣长、裤长、袖长、裙长四类引入单件平铺商品图。


数据

数据集划分

数据预处理

1. 全局信息(原图)

2. 局部信息(裁切)

衣领相关四类(脖颈设计、领子设计、翻领设计、颈线设计)

SSD行人检测 + openpose人体关键点检测

长度相关四类(衣长、裤长、袖长、裙长)

SSD行人检测 + 填补白边(初赛时未填补白边)

前背景检测 + 填补白边(针对复赛服装平铺图)
cv2.grabCut()

3. 所有数据在送入模型时进行resize和rescale。


模型

训练策略

初赛

验证准确率(原图/裁切图):

属性 \ 模型 Inception-V3 ResNet-50 DenseNet-121 Xception
输入尺寸 299*299 224*224 224*224 299*299
脖颈设计 78.42% / +6.14% 76.32% / +7.89% 79.47% / +5.97% 84.21% / +2.28%
领子设计 79.05% / +4.05% 78.93% / +8.21% 81.67% / +6.19% 81.31% / +7.02%
翻领设计 79.12% / +3.41% 82.24% / +3.13% 85.37% / +0.85% 87.36% / -0.85%
颈线设计 80.99% / +4.26% 82.92% / +5.24% 85.48% / +2.16% 86.36% / +1.34%
衣长 80.30% / +5.21% 84.28% / +1.32% 86.13% / +0.44% 86.48% / +1.59%
袖长 83.46% / -0.23% 86.17% / -0.23% 86.92% / +1.35% 88.72% / -0.45%
裤长 84.18% / +1.61% 84.72% / +0.67% 85.39% / +0.53% 88.61% / -1.48%
裙长 80.39% / -0.98% / / /

注:
1. / 左边为使用原图训练的验证准确率,/ 右边为使用裁切图训练相对于原图的提升。
2. 加粗表示这一属性(每行)的所有模型中最高的验证准确率。
3. 在训练ResNet-50、DenseNet-121、Xception时,由于错误地将热身数据添加到训练集的裙长数据中,导致大部分图像是双份的,分出的验证集大部分与训练集重复,因此裙长属性的验证准确率不具备参考价值。这个问题在复赛时被更正。

复赛

验证准确率:

属性 \ 模型 DenseNet-121 Xception ResNet-152 DenseNet-161
输入尺寸 224*224 299*299 331*331 331*331
脖颈设计 75.61% / +9.68% 81.99% / 82.11% / +6.37% 85.05% /
领子设计 82.45% / +6.29% 85.76% / 87.42% / +2.87% 85.43% /
翻领设计 78.04% / +4.84% 80.41% / 81.76% / +3.15% 83.11% /
颈线设计 79.79% / +6.05% 83.39% / 83.58% / +2.81% 83.52% /
衣长 63.00% / -0.07% 64.80% / +1.38% 66.25% / +0.21% 65.91% /
袖长 66.74% / +0.18% 71.14% / +0.52% 71.43% / -0.52% 70.50% /
裤长 75.32% / +1.84% 75.80% / +0.43% 78.66% / +1.00% 75.23% /
裙长 69.67% / -1.20% 72.61% / +0% 71.26% / +1.51% 69.59% /

模型融合

初赛

最优组合(黄色为选中该模型):

最终测试准确率:91.91%(第1名准确率: 93.94%)

复赛

最优组合:ResNet-152(局部)、DenseNet-161(全局)
最终测试准确率:83.00%(第1名准确率: 86.66%)

其他尝试(翻车集锦)

1. 多任务学习

对复赛领子相关的4种数据的裁剪图进行多任务学习。

属性 \ 模型 DenseNet DenseNet_multi-task
脖颈设计 85.29% +0.11%
领子设计 88.74% -0.68%
翻领设计 82.88% +2.70%
颈线设计 85.84% +0.60%

对领子四种属性而言效果良好,其他四种属性效果一般,对8种属性进行多任务学习的效果不如分开训练。并且在复赛时,仅对领子四种属性使用多任务学习,会占用一个模型名额,导致其他四类只能选用一种模型,不能进行融合。舍弃

2. AM-Softmax损失函数

Softmax:
L2 normalize and

AM-Softmax:
L2 normalize and

对初赛8种属性的裁切图,使用AM-Softmax Loss训练。

属性 \ 模型 DenseNet_Softmax DenseNet_AM-Softmax
脖颈设计 85.44% +1.23%
领子设计 87.86% +0.95%
翻领设计 86.22% -0.99%
颈线设计 87.64% -0.12%
衣长 86.57% -0.35%
袖长 88.27% +0%
裤长 85.92% +0.54%
裙长 / /

AM-Softmax模型的预测结果往往十分稀疏(形如:0.0001,0.0000,0.9999,0.0000),不利于最终得分(平均精度)的计算。舍弃

3. 单人模特商品图、单件平铺商品图分开训练

数据量如下:

属性 \ 数据 单人模特商品图(初赛+复赛) 单件平铺商品图(仅复赛)
衣长 22280 7094
袖长 26496 8362
裤长 17300 6546
裙长 19899 4787

验证准确率如下:

属性 \ 训练策略 合并训练 分开训练
衣长 62.93% +2.69%
袖长 66.92% -0.16%
裤长 77.16% -3.13%
裙长 68.47% +2.15%

无明显提升,且占用模型融合名额,舍弃

4. 双模型特征融合

对初赛领子设计原图进行实验:

属性 \ 训练策略 DenseNet Xception 预测结果平均融合 特征融合
领子设计 81.67% 81.31% 82.73% 81.55%

效果不如对预测结果直接求平均,舍弃

5. 扩充‘不可见’一类

不可见样例:

实验:从长款~及地几类图片中挑选一部分,将其裁切为不可见,以扩充此类。

验证准确率从62.93%变为62.72%,效果不理想。舍弃

6. 填补白边

对复赛四种属性使用DenseNet-121进行实验,验证准确率如下:

属性 \ 训练策略 resize 补白边+resize
衣长 57.68% +5.25%
袖长 64.83% +2.09%
裤长 74.52% +2.64%
裙长 66.80% +1.67%

经验

  1. 熟悉数据,合适的预处理至关重要。
  2. 先进的模型结构配合大尺寸输入,有助于性能提升。
  3. 当单模型性能遇到瓶颈时,模型融合是个不错的选择。
  4. 当存在多个相似的任务,可以考虑采用多任务学习。
  5. 从结果出发,寻找准确率低的原因。
  6. 深层的模型依赖高性能的硬件设施。
  7. 减少脚本个数,提高自动化性能。
  8. 团队成员通力协作。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注