大家好,欢迎来到我们的技术专栏《数据使用》,这一个专栏主要讲解在深度学习技术中数据使用相关的内容。

作者&编辑 | 言有三

今天要介绍的是一个小问题,那就是对于数据的整理。在大部分的时候,尤其进行学术研究时,我们所接触到的数据,都是别人已经整理好的,经过验证比较有效的数据,导致做项目的人其实缺失了1个非常重要的技能积累,那就是如何高有效、完备地整理好一个数据集。以计算机视觉方向为例,有三认为至少以下3点是需要考虑的,下面我们简单来说一说。

1 数据检查 

首先是数据检查,我们获取的数据来源是非常广泛的,包括开源数据集(ImageNet等),从外包平台(阿里众包等)购买,或者通过爬虫爬取,不同的方式采集回来的数据集的质量不同。

以爬虫为例,采集回来的数据来源丰富,但是可能存在较多不符合要求的数据,甚至是坏数据,因此我们需要进行检查筛选后才能用,至少有以下几种图片需要先过滤。

1.1 坏图

有一些图当我们用缩略图的模式看时,显示没有什么问题,但是当你真的用程序去读取的时候,会读取失败,打开后可能是这样的,这些就是坏图。

坏图非常常见,一般都是数据传输过程中出现的问题,我们下载的开源数据集也有时候会出现这样的情况,因此,在使用你的数据之前,一定要先检查一下,图是否是坏的!免得浪费更多时间。

1.2 尺寸异常图

尺寸异常图也是很常见的,这里我们不说特别大或者特别小的图,而是聚焦于长宽比特别大的图,因为这一类图像也非常常见,比如下面的图:

我们在做任务的时候,经常会做一些裁剪类的数据增强操作,长宽比过大的图,容易造成目标变形或者缺失,因此我们最好是设定一个比例进行筛选。

1.3 动图

git动图也是很常见的,这一类图一般内容都不符合我们深度学习项目的需求,很多都是卡通类图像,比如下图中就有几张动图,属于要去除的对象。

最后,对检查完的数据可以再做一些标准化操作,比如统一数据格式类型,统一命名方式。

2 数据去重

数据的去重是必要的操作,尤其是当我们获取的数据来源于网络爬虫与视频的时候,相同与相似数据出现的概率非常高。

2.1 相同数据与相似数据

相同的数据,可能区别仅仅在于命名的不同,如果查看文件的MD5,会发现是同样的数据。相同的数据再多,也并不会增加数据集的丰富程度,不能以此来安慰苦于收集数据的自己。

相似数据则更加常见,因为图片视频数据在网上经过各种渠道的广泛传播,分辨率的差异、不同的数据压缩方式、水印的添加等都会造成相似度很高的图片。

另外,还有一种数据来源,就是从视频中通过抽帧获取的数据,相似度会非常高,而且模式比较复杂,比如下图。

直接抽帧,获得的图片如下,其中有许多图片相似度很高:

所以我们需要进行图片数据的去重,下图展示了去重后的效果。

2.2 去重方法

去重主要包含了两个关键问题,一个是如何计算图片的相似度,一个是如何进行遍历。

(1) 相似度计算。图像相似度的计算本来就是图像检索中的核心问题,关键在于图片特征的提取,我们可以用传统的图像描述算子或者深度学习模型。

不过我们去重的时候可能对相似度的要求很高,目标是为了去除过于相似的图片,所以可能用更加简单的相似度计算方法就可以,比如直接计算图像的平均像素差异。

(2) 遍历。另外一个非常重要的技术,就是图片遍历。假如我们有100,000图要进行去重,如果把所有的图片都进行比较,需要100,000*100,000/2次比较,计算量非常大,复杂度是O(N^2),速度会很慢。

所以,我们必须借助一些技巧,来减少不必要的遍历,比如基于文件的大小进行排序、基于图像的尺寸进行排序、基于图片的名字进行遍历,把相似的图尽可能先排序在一起。在计算相似度的时候,只考虑近邻的一些样本,即只搜索特定的深度,而不是进行穷举。

如此来说,图像去重并不是一个那么简单的工作。

3 数据集划分

当数据经过整理和去重后,就剩下最后的工作,数据集的划分,这里有两个重要的工作。

3.1 训练集/验证集/测试集

大家在书籍上或者机器学习的课程,会看到数据集会被划分成3类,训练集,验证集,测试集,他们各自有不同的作用。

训练集和验证集的分布是一样的,是对同一批数据进行划分得来的。训练集用于对参数进行学习,如卷积核的权重;而验证集,则是用于对训练的一些超参数调整,比如学习率/批处理大小等。我们评估模型的精度,是以验证集的精度为准的,而不同的训练参数会影响结果。

测试集,一般是指模型在真实的生产环境中处理的数据,这些数据的分布和训练集、验证集可能存在一定的差异。

虽然我们有时候不区分测试集和验证集,但还是要明白,他们本质上是不同的。

3.2 不同难度数据集的划分

这部分内容可能是大部分项目人员都没有做的,但却是非常重要的,因项目而异,没有理论上的指导,依赖于项目经验。

如果你做的项目多了,应该会发现,很多数据集都分了不同难度等级,比如下图是人脸检测数据集Widerface数据集上的结果,有3类数据集,easy set,medium set,hard set。

划分的依据是EdgeBox方法的检测率。检测率越低的样本表明越难,可能是尺度很小,遮挡严重,姿态很大,特征模糊等,如下图中的各种人脸:

为什么一定要进行区分呢?因为对于很多的工程项目来说,我们不可能取得百分百的精度,一个能处理大部分场景的模型可能就足够了,一些极端案例下失败是可以接受的。

如果将不同难度的样本混在一起,我们很难获得模型的准确评估。难样本过多,指标太低,导致模型无法上线,但其实该模型已经可以在业务上使用了。而过多的简单样本,也会导致我们对模型产生乐观的估计。

下图是PASCAL VOC数据集的标注案例,其中虚线框里的目标被标识为‘difficult’,这些目标是不会纳入评测指标计算的,就是为了更好地评估模型的性能,尽管该标签仍然被保留。

总结

我们这篇文章介绍了3个在深度学习项目中的数据处理问题,并不难,但你是否都掌握好了呢?

数据的使用是AI项目中的第一环,也是影响项目成败至关重要的一环,如果你觉得自己相关的能力尚有欠缺,可以重点关注下我们的《深度学习之数据使用-理论实践篇》课程。

深度学习之数据使用

该视频课程内容包括数据的获取,整理,标注,数据增强,详情可以阅读下面文章:

【视频课】深度学习入门必修,子欲学算法,必先搞数据!

课程相关问题咨询,请扫码添加小助手微信:

转载文章请后台联系

侵权必究

往期精选

  • 【年终总结】2021年有三AI做了什么,2022年我们要做什么?

【数据使用】3问视觉项目中的数据整理,这点小事你是不是都掌握好了?相关推荐

  1. 前端vue适配不同的分辨率_前端面试时,被问到项目中的难点有哪些?

    在每个前端求职者的面试过程中,一定都有过被面试官问到项目中的难点,而答不上来的情况.为了让大家在前端面试前准备得更加充足,小编准备了一些易被忽视且难度较高的前端面试题,希望可以帮助大家更加顺利完成求职 ...

  2. 数据可视化:在 React 项目中使用 Vega 图表 (一)

    相关包 打开搜索引擎,一搜 Vega,发现相关的包有好几个,Vega, Vega-Lite, Vega-Embed,React-Vega 等等,不免让人头晕. 别急,它们之间的关系三四句话就能说明白, ...

  3. Vue项目中获取数据后使用swiper轮播,无法轮播且 autoplay 和 loop 失效问题!

    Vue项目中获取数据后使用swiper轮播,无法轮播且 autoplay 和 loop 失效问题! 问题表现:轮播组件显示第一张图,可拖动但无法切换到下一张图.但是F12控制台切换屏幕后能正常轮播但无 ...

  4. 《项目经验》--简单三层使用DataTable向数据库表批量导入数据---向SqlServer多张张表中导入数据

    前面已经介绍过如何向数据库的一张表中批量导入数据,详情见博客<项目经验---简单三层使用DataTable向数据库表批量导入数据---向SqlServer一张表中导入数据>:本文主要介绍如 ...

  5. 【数据库基础知识二】数据库DataBase(简称DB),数据库基本概念、DDL:数据定义语言,用来操作数据库对象、DML:数据操作语言,用来操作表中的数据

    14天阅读挑战赛 目录 数据库基本概念 数据库DataBase(简称DB) 数据库管理系统Database management system(简称DBMS) 如何操作DBMS? 连接数据库的方式: ...

  6. excel如何晒出重复数据_怎么筛选出excel中重复数据

    本文收集整理关于怎么筛选出excel中重复数据的相关议题,使用内容导航快速到达. 内容导航: Q1:Excel的数据怎么筛选一列中重复的数据 假如1在A2单元格,在B2单元格输入公式, =IF(COU ...

  7. 【Oracle】Oracle 删除一条数据,同时删除多表中关联数据

    1.从数据表t1中把那些id值在数据表t2里有匹配的记录全删除掉 DELETE t1 from t1,t2 WHERE t1.id=t2.id 或DELETE from t1 USING t1,t2 ...

  8. 堆栈(Strack)是指这样一段内存,它可以理解为一个筒结构,先放进筒中的数据被后放进筒中的数据“压住”,只有后放进筒中的数据都取出后,先放进去的数据才能被取出,称为“后进先出”。堆栈的长度可随意增加

    堆栈(Strack)是指这样一段内存,它可以理解为一个筒结构,先放进筒中的数据被后放进筒中的数据"压住",只有后放进筒中的数据都取出后,先放进去的数据才能被取出,称为"后 ...

  9. 缓存三连问:项目中如何使用、为什么要使用、使用不当会造成什么后果?

    点击关注公众号,利用碎片时间学习 问题 项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果? 分析 这个问题,互联网公司必问,要是一个人连缓存都不太清楚,那确实比较尴尬. 只要问到缓存 ...

最新文章

  1. web移动端Fixed在Input获取焦点时ios下产生的BUG及处理
  2. 第十四次ScrumMeeting博客
  3. Silverlight与JavaScript通信
  4. Git命令按人统计提交次数和代码量
  5. [Codeforces757G]Can Bash Save the Day?——动态点分治(可持久化点分树)
  6. SQL SERVER 的 INFORMATION_SCHEMA 的使用
  7. 全国省市编码_地区编码
  8. android fragment 设置透明,Android透明DialogFragment
  9. 牛客网算法工程师能力评估
  10. 客户让无数销售员卑躬屈膝的四大陷阱
  11. Echo团队Alpha冲刺随笔 - 第六天
  12. stm32f103c8t6使用LORA传输数据
  13. ipad协议828版
  14. 苹果手机的计算机怎么设置快捷键大全,教程方法;苹果电脑快捷键大全最常用的都在这里了电脑技巧-琪琪词资源网...
  15. 炫我科技渲染集群管理软件
  16. 个人认为最low的10款鞋子
  17. Windows XP迎来20岁生日,仍有上百万用户坚守
  18. Storm Windowing(翻译)
  19. redis桌面管理工具 redis-desktop-manager使用指南
  20. 解决Chrome无法自动同步书签

热门文章

  1. cad记忆口诀_CAD制图口诀你值得拥有!
  2. SpringBoot接口幂等性实现的4种方案!
  3. 字节/阿里/ 百度2021年Java岗发布+最新内部面试题
  4. Java8之Consumer、Supplier、Predicate和Function攻略
  5. (Java常用类)日期时间类
  6. Gentoo 安装日记 18(重新配置网络和设置密码)
  7. RHEL 5.4 安装Oracle 11gR2, 安装篇2
  8. linux分配iomem,Linux中__iomem
  9. ai钢笔工具怎么描线_AI钢笔工具技巧,怎么画出完美的贝塞尔曲线
  10. 权限管理系统中 管理员能看到所有用户的密码么_计算机毕设项目002之学生成绩管理系统...