天池Fashion AI 比赛失败经历分享

关联比赛:  FashionAI全球挑战赛—服饰关键点定位

昨天是天池Fashion AI初赛Deadline, 成绩出来复赛都没能进,虽然结果很遗憾,但在比赛的过程中也接触到了不少的新东西,希望能在这里把我尝试过的方法都分享出来。作为对自己的总结,如果能让看到的人以后少踩点坑,那也算是一丢丢的贡献吧。

由于各种原因,真的着手在这个比赛的时间大概就一个星期,前后只提交了几次。失败也是对"各种原因"的一个惩罚吧。水平极其有限(不然就不是失败经历分享了),欢迎分享 : )。不多废话,下面进入正题。

# 比赛内容

我参加的是Fashion AI 服装关键点定位的比赛,目标就是通过算法找到图片中衣服的各个关键点。具体关键点如下图所示:

keypoints-demo

详细的赛制和数据可以在这里找到:[FashionAI全球挑战赛——服饰关键点定位](https://tianchi.aliyun.com/competition/introduction.htm?spm=5176.100066.0.0.6acdd780km5qMe&raceId=231648)。

# 算法

这年头碰上图像识别,深度学习基本是没跑了。虽然深度学习模型的可解释性基本没有,但效果就是杠杠的,用的时候嘴上说着不要不要,编辑器里面还是很诚实地 ```import keras```。如果有别的算法可以马上出效果(浮躁啊),我也想改,可惜暂时没有想到。

对于比赛数据,有几点基础的条件可以直接获得:

  1. 每一张图片只对应一件衣物,所以不需要考虑多件衣服的情况。只要单纯地做识别就好了。
  2. 处理对象是图片不是视频,只要把预测结果上交就行,所以不需要太担心模型运算复杂度,也就是不需要把精力放在 real time recognition 上面。
  3. 衣服跟人不一样,不像人手,衣服的衣袖可长可短,夏天来了还可以没有。这相对于一般的 pose estimation 增加了一定的难度。

总的来说,在形状上衣服跟人还是很相像的,所以我把突破口放在了 pose estimation 的一类算法上,反正这类算法本质上也就是给图片圈重点。希望能在比赛结果出来后看到更好的突破口,不然看到自己是输在没时间调参洗数据那也是很郁闷的事情。

数据分5类,分别是 blouse, outwear, dress, skirt, trousers。 我对每一类都训练一个单独的模型,也就是说有5个独立的模型。

## Deeppose

根据上面第一条,我们不需要考虑多人的情况。那最简单粗暴的方法就是对所有关键点x, y坐标进行regression。再怎么不济也会有个结果,对吧?于是我一开始直接上了14年Google大神弄出来的deeppose模型。主要思想就是给每张图片定义一个bounding box,这个bounding box可以是一个绕着衣服的框框,也可以是整张图片。然后计算每个关键点根这个bounding box的相对位置,最后用bounding box的长和宽对这些相对位置进行 normalization。得出来的结果就是模型训练的目标。这是应该是最粗暴的regression模型了。

然而现实却是很骨感的,我分别尝试了以下几个模型作为基模型来构建 deeppose:

  1. 一个简单的4层卷积模型
  2. VGG16
  3. VGG19
  4. Resnet 50

所有这些模型训练后都成了一个鬼样,那就是模型的输出固定不变。也就是说,无论我扔什么图片进去作为输入,输出的结果都是一样的。境遇有点像这位同学[[Tensorflow] Human Pose estimation by Deep Learning ](https://hypjudy.github.io/2017/05/04/pose-estimation/)。我看了一下模型中间层的权重和输出,发现上述模型训练后的第一层卷积的输出都是0,也就是说网络在梯度下降的洗礼后都会不约而同地卡在同一个 local minimum 里面。

我尝试过迁移学,把前面的一些层给锁死,结果就是第一个没有锁死的层的输出还是会变成全零,一样的配方,一样的味道,一样的坑。如果你跟我一样,想到要不就不要对关键点进行 normalization 了,数字大一点说不定会好呢? 别想了,没用的。

## Convolutional pose machine

Regression 不行,那咱就来 classification 呗。于是我做了 Convolutional pose machine, 之间没有接触过,也是看完论文现学现卖。模型的输出是一张believe map,大小可以自定义。我设定是32x32,也尝试过64x64,但这个不是重点,误差的来源主要不在于这里。这个 believe map 需要通过 softmax 来生成。我一开始脑子有点抽,给每一个输出像素点作 sigmoid 输出,也就是说一开始我的模型输出层是一个32x32的 sigmoid 张量。 结果就是所有的 sigmoid 都输出0,掉进了local minimum。后来一拍脑门,才想到要用 softmax, 一个函数对应 $R^{32x32}$ 的输出张量,这样才能强制模型输出0之外的数。

那么按照套路来,我又尝试了上面 deeppose 里面用的几个基模型,这里分享各个模型对应的问题:

  • **4层卷积**:  我也不知道它学了些什么,输出牛头不对马嘴。不过这也是意料之中,这个模型就是拿来debug的嘛。
  • **VGG16, VGG19**:  模型学到了点东西,不过预测结果跟ground true 也是离天隔丈远,第一次提交线上成绩 116%,可谓不堪入目。
  1. **Resnet 50**:  这是很过份的一个模型,整个 believe map 的置信度是一模一样的,模型把 1.0 平均分配到了 believe map 的每个像素点上。又掉进 local minimum 里面了,这是一个名副其实的坑,随便都能卡在里面。

那这样子也不是个办法,于是我又尝试了 **DenseNet**。: 这回结果好了很多。我做了 DenseNet-169 和 DenseNet-201,两个效果差不多,又或者是我没有时间去调。这是上述尝试里面最好的结果了,进入复赛的同学们如果用了别的模型可以尝试一下DenseNet,下面随便找了两张预测图:

ok-0

ok-1

## Faster RCNN

那么上面的训练结果都不行,时间也不剩下多少了,清洗数据是不可能了。于是就考虑要不要先通过物体识别,把要打点的衣物从图片中框选出来,降低图片的复杂度,再做关键点预测,也许关键点预测的模型训练起来就会简单很多。像下面几张图,图片里面东西多了,模型的路子也就开始野了:

multi-objects-0

multi-objects-1

multi-objects-2

于是我又尝试了通过 faster rcnn 做 object localization,希望把每张图片里面的衣服抽出来。这里我实在没时间打代码了,毕竟用Python写出来的bug不是那么好应付的。于是我用了[keras-retinanet](https://github.com/delftrobotics/keras-retinanet)。在这里感谢一下。可能是我没有充足的时间去训练了,localization的结果其实不算差,只是对关键点识别的影响不好。这里举几个问题例子,我暂时称关键点预测的模型为 **预测模型** ,以便跟 rcnn 区分:

大致流程:

[Images] -> Faster RCNN -> [Cropped Images] -> Convolutional Pose Machine -> [Key-points]

  1. 框选出来的图片可能会把某个关键点扔到框框外面。
  2. 如果框选的不好,那还不如用原图。因为框选的不好关键点会丢失,一个丢失的关键点会让你的预测模型错误预测其它所有的关键点。
  3. 抽取出来的图片精度不够,例如我可能希望它抽取上衣,它很可能把裙子也弄进来了,等于没抽取。
  4. 增加了复杂度。这样子训练就是两个阶段了。对于训练预测模型,你先要通过标准答案里面的关键点对训练样本进行物体抽取,然后再拿抽取结果凑成样本集训练预测模型。而在inference阶段,你要先通过 rcnn 对测试样本进行抽取再进行预测。注意,这两种抽取的结果是不会一样的, 一个通过标准答案里面的 key-points, 另外一个通过 rcnn, 除非你的 rcnn 能训练到100的准确率。也就是说,你的预测模型在训练阶段和预测阶段面对的两个数据集并非独立同分布,起码不可能做到同分布。

loss-keypoint

关键点丢失

# 数据预处理和清洗

我做了以下的数据预处理:

  1. Standardization
  2. 旋转
  3. 跳跃 (移动)
  4. 放大缩小
  5. 高斯模糊
  6. 高斯噪点
  7. 改变对比度
  8. 增加训练错误样本的采样率

在过程中有一些小细节:

凡是有不可见点的图片都不要,训练过程中发现那些图片纯粹添堵。

要小心预处理后关键点跑到图片外面,注意添加检测或者限制。

查看更多内容,欢迎访问天池技术圈官方地址:tair性能挑战赛攻略心得-Zzzzz-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143473.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

EPLAN中如何切换编辑区的背景颜色为黑色?

EPLAN中如何切换编辑区的背景颜色为黑色? 如下图所示,打开EPLAN软件,打开或新建一个项目, 如下图所示,点击选项----设置, 在弹出的窗口中找到用户----图形的编辑------2D,在右侧找到颜色设置---…

便携式气象监测站的工作原理

型号:TH-BQX9】便携式气象环境监测站是一种集数据采集、处理、传输于一体的便携式设备,主要用于实时、准确地监测环境中的多种气象要素。便携式气象环境监测站通常能够监测多种气象参数,包括但不限于温度、湿度、风速、风向、气压、降雨量、太…

Java虚拟机 - 实战篇

一、内存调优 1. 什么是内存泄漏 (1)内存溢出和内存泄漏 2. 监控Java内存的常用工具 (1)Top命令 (2)VisualVM (3)Arthas (4)Prometheus Grafana &#xff…

【C++STL简介】——我与C++的不解之缘(八)

前言 学过了C的模版,接下来学习C中的STL(标准模版库),先来了解一下STL是啥 一、什么是STL STL(standard template libaray 标准模版库):是C标准库的重要组成部分,不仅是一个可复用的…

cmake的下载与安装

介绍: CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。 能够输出各种各样的makefile或者project文件,能测试编译器所支持的C特性,类似UNIX下的automake。 CMake 的组态档取名为…

[Java]SpringBoot能力进阶

配置优先级 SpringBoot中支持三种格式的配置文件 优先级: application.properties文件 > application.yml文件 > application.yaml文件 SpringBoot除了通过配置文件配置属性, 还支持Java系统属性和命令行参数的方式 进行属性配置 1.在IDEA中配置java系统属性和命令行参…

网络安全-shire写任务计划、反弹shell、写私钥

目录 一、环境 二、 介绍 三、开始做题 四、写公钥 一、环境 网上自己找 二、 介绍 我们经过前面文章很清楚知道,shiro是将数据存储在内存当中,内存落盘实现一个数据存储,而当其结合python,python将登录的session存储到shiro里…

python绘制月亮

import matplotlib import matplotlib.pyplot as plt import moviepy.editor as mpymatplotlib.rcParams[font.family] SimHei# 坐标列表 positions [(0, 0), (1 / 4, 1 / 4), (1 / 3, 1 / 4), (1 / 2, 1 / 4), (2 / 3, 1 / 4),(3 / 4, 1 / 4), (1, 1 / 4), (5 / 4, 1 / 4), …

桌面上的文件突然不见了怎么找回?快速恢复技巧分享

在日常使用电脑的过程中,我们习惯于将经常使用的文件或者快捷方式放置在桌面上,以便于快速访问。然而,有时我们会发现桌面上的某些文件突然不见了,这可能会让人感到惊慌和困惑。面对这种情况,我们应该如何找回这些突然…

路由器全局配置DHCP实验简述

一、路由器配置 reset saved-configuration Warning: The action will delete the saved configuration in the device. The configuration will be erased to reconfigure. Continue? [Y/N]:y Warning: Now clearing the configuration in the device. Info: Succeeded in c…

02 基于STM32的按键控制继电器驱动电机

本专栏所有源资料都免费获取,没有任何隐形消费。 注意事项:STM32仿真会存在各种各样BUG,且尽量按照同样仿真版本使用。本专栏所有的仿真都采用PROTEUS8.15。 本文已经配置好STM32F103C8T6系列,在PROTUES仿真里,32单片…

教程 | ArcGIS Pro如何自动保存数据编辑内容

目录 1、工程自动保存 2、数据编辑自动保存 世界上最痛苦的事情就是: 软件崩溃,我没保存!!! 电脑死机,我没保存!!! 突然断电,我没保存!&…

开源项目的悲哀

开源下载器 Aria 的开发者因为其项目被诈骗人员使用,导致开发者遭受跨省追捕,作者于 2024 年 8 月 16 日在 GitHub 上宣布删除了项目的全部源码。 Aria 是一个高性能、轻量级、易于使用的文件下载框架,主要应用于Android 平台,拥有…

10个A/B测试指标以分析结果和衡量成功

为什么A/B测试分析很重要? 到现在,您可能已经熟悉了A/B测试的基本概念及其用途。 简而言之,A/B测试是将两个或多个着陆页、营销资产或单个元素(如标题)进行对比,以帮助您找出哪个表现最好。 这些测试帮助…

Varjo在芬兰开设新工厂,以满足国防部门在XR模拟训练中的需求

在军事国防领域,全新技术的投入使用最看重的就是保密与安全。作为全球领先的XR头戴式显示器提供商Varjo,近日正式宣布将在位于芬兰的赫尔辛基开设一家新的安全制造工厂。 此次工厂扩建将使Varjo能够满足国防训练和模拟领域对其高分辨率XR解决方案日益增…

Qwen2-VL环境搭建推理测试

引子 2024年8月30号,阿里推出Qwen2-VL,开源了2B/7B模型,处理任意分辨率图像无需分割成块。之前写了一篇Qwen-VL的博客,感兴趣的童鞋请移步(Qwen-VL环境搭建&推理测试-CSDN博客),这么小的模…

揭秘!当业务方需求模糊,产品经理如何施展‘化雾为金’的神奇策略!

引言 在产品管理的实践中,产品经理经常会遇到业务方无法清晰表达需求的情况。这可能是由于业务方对问题的理解不够深入,或者缺乏将业务需求转化为产品需求的经验。作为资深产品经理,我们需要采取一系列策略来应对这一挑战,确保产…

​‌Macbook如何玩《黑神话:悟空》‌2024最新详细方法

‌Mac用户可以通过几种方法玩《黑神话:悟空》‌。 ‌使用虚拟机‌:通过Parallels Desktop等虚拟机软件,在Mac上运行Windows系统,并在其中安装和运行《黑神话悟空》。这种方法需要Mac电脑满足游戏的基础配置要求。 不过如果电脑有虚…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于模型-数据混合驱动的区域能源互联网韧性在线评估》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

带你深入了解C语言指针(五)

目录 前言一、数组和指针笔试题解析1.整型数组2.字符数组2.1 sizeof2.2strlen()2.2.1字符数组2.2.2字符串2.2.3字符串指针2.2.4二维数组 总结 前言 前面我们已经讲指针的主要知识学完了,这期我们主要进行一些题目的分析;话不多说,正文开始。…