算力和数据是影响深度学习应用效果的两个关键因素,在算力满足条件的情况下,为了到达更好的效果,我们需要将海量、高质量的素材数据喂给神经网络,训练出高精度的网络模型。吴恩达在深度学习公开课中提到,在算力满足要求的前提下,模型效果会随着素材数量的增多而变好,理论上没有上限。实践证明,在普通基于深度学习的应用开发过程中,素材的数量和质量对最终模型效果的影响出乎意料的大。注意这里提到的“素材质量”,光有“素材数量”还不够,我们还要保证素材标注的质量。本文以目标检测应用为例,来说明如何保证图像素材标注过程中的质量。

常见目标检测算法

常见目标检测算法有SSD、Yolo以及Faster-RCNN等(实际上这是我用过的几种),之间的区别可以上网搜到,我之前的博客也有提到过,各有优劣。三种算法模型训练需要的素材格式基本相同:

  • 二维图像文件;
  • 对应二维图像中人工标注出的感兴趣目标信息,包括目标坐标/大小、目标类型,一般用(left,top,width,height,class)来表示;

模型训练的过程就是将上述素材数据喂给神经网络,反复优化,最后得到效果相对比较好的模型,然后模型就可以上线做推理了。各种目标检测算法模型最终推理输出来的结果也基本一样,对于给定的二维输入图像,输出该图像中检测到的目标信息,包括目标坐标/大小、目标类型以及该目标的可信度,一般用一个list表示,list中每个元素格式为(left,top,width,height,class,score)。Score代表模型认为该目标的可信度,可以通过该值过滤部分检测结果。

图像素材标注

通过这个PPT我们知道,深度学习模型训练的过程就是不断地调整参数,使用预先标注的具体素材数据不停地去拟合通用场景,最后能够准确预测非素材集中的输入。模型训练需要大量素材标注作为基础,就目标检测而言,素材标注的过程就是人工用工具在图像中标出感兴趣的目标,并生成标签数据。

图像素材标注工具有很多,很多人在用的是labelimg,主要用于目标检测素材标注:

如上图,对于每张图片,人工标出图片中感兴趣的目标,比如图像中的人、汽车、卡车等等。保存后,每张图片对应生成一个txt文件,该txt文件中记录人工标注的结果:

如上图,该图片一共标出9个目标,2个Person、3个Car,4个Truck,每个目标对应一行,第一列表示类型ID(从0开始)。模型训练时,将图片和标注数据同时喂进神经网络,不断调整参数,到达效果最优。

素材标注质量如何影响模型的准确性?

图像素材标注时,需要人工标出目标的大小/位置,用一个矩形方框表示,并给出目标类型,模型训练时会根据标注的素材来调整参数。人工标注有时会出一些问题,比如目标矩形框位置不对(框子太大、太小、位置偏了),或者目标类型标错,本来是一个人,人工给它标成了汽车。这些标注时的问题都会影响最终模型训练的效果,仔细想一下,你不断告诉神经网络人是车、而车是人,最后神经网络都分不清了。正常情况下,人工标注的方框大小、位置应该合适,矩形方框刚好将目标包围住,如果框子太大、或者太小、甚至位置偏移了,都会影响神经网络对矩形方框中真实内容的判断。

如果仅仅追求素材的数量而不顾素材标注的质量,即使数量再多,也没有效果,实践证明,模型效果反而越来越差。

图像素材标注重点

目标检测用到的素材,在标注过程中需要注意以下几点:

1. 标注方框大小合适

所谓大小合适,即矩形方框应该刚好将目标包围住,之间的间隙不能太大,也不能太小。太大太小的话,最后模型在推理时,也会出现目标框得不准的情况,或者在视频图像检测中,出现前后帧目标抖动严重,不能锁定。同时在标注的时候,一定要保证矩形方框包含了目标的轮廓信息,因为轮廓信息对于模型训练来讲很重要,它可以区分不同类型的目标。下图标注的矩形方框太小:

2. 标注方框位置合适

原因跟上一条类似,下图虽然矩形方框大小合适,但是明显位置偏太远了:

3. 需要丰富多视角的素材

这个其实跟素材的准备有关,我们不能只标几种视角的素材图片。在道路监控应用场景中,素材应该涵盖各种摄像机视角,正前方、正后方、左侧前方、右侧前方、左侧后方、右侧后方以及俯视视角等等。每种视角的素材都应该被标注,这样训练出来的模型才有更大的通用性。

4. 目标被遮挡也要标注

不能只标注图像中完整的目标,被遮挡的目标,只要人眼能看清是啥的都应该被标注,并且矩形框只需要包含看得见的部分即可。这样做的原因跟上一条类似,提高模型的通用性,实际应用场景中,很多目标被遮挡,模型仍然需要将其检测出来,所以我们需要标注类似的素材。下图道路拥堵,一些车身被遮挡,但是明显可以分辨出是什么目标:

5. 小目标也不能漏掉

虽然不同的算法对小目标的检测效果不同,比如Yolo对小目标检测效果比较好,但是前提是我们需要准备小目标的素材标注。一张图片素材中,近处的大目标需要标注,远处人眼看得清的小目标同样需要标注。原理跟上一条类似:只要人眼能分清是啥的小目标,都应该标出来。下图远处的小目标可以认出是小汽车:

6. 人眼分不清是啥的不要标

很多时候,由于素材图片本身的原因、或者目标被遮挡大部分、或者远处目标实在太远,人眼无法分辨是什么,虽然知道是一个目标,但是不知道它到底是汽车Car还是客车Bus甚至是人,这种时候不要标注。否则会给神经网络带来误导。下图被遮挡部分太多,可以忽略不用标注:

如何保证素材标注的质量

上面说了这么多,其实要保证素材标注质量的有效方式有两条:

1. 不要光追求速度

给做素材标注的团队强调,虽然有数量上的指标,但是指标不能定得太高,如果定得太高,大家都为了完成数量任务,自然会忽略了质量。最后标注质量肯定上不去,类型出错、方框位置忽大忽小,必然需要大量返工。

2. 专人做素材审核

专门找一小撮人做素材审核,主要负责素材标注后的验证,看看类型是否出错,方框的位置、大小是否错得离谱等等。千万不要小看这项工作,它的作用跟code review一样,容易被忽视,其实它提高效率不是一星半点。

[AI开发]目标检测之素材标注的更多相关文章

  1. AI R-CNN目标检测算法

    Region-CNN,简称R-CNN,是首次将深度学习应用于目标检测的算法. bounding box IOU 非极大值抑制 selective search 参考链接: https://blog.c ...

  2. AI SSD目标检测算法

    Single Shot multibox Detector,简称SSD,是一种目标检测算法. Single Shot意味着SSD属于one stage方法,multibox表示多框预测. CNN 多尺 ...

  3. [AI开发]目标跟踪之行为分析

    基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...

  4. [AI开发]目标跟踪之计数

    基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...

  5. [AI开发]目标跟踪之速度计算

    基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...

  6. 带你了解CANN的目标检测与识别一站式方案

    摘要: 了解通用目标检测与识别一站式方案的功能与特性,还有实现流程,以及可定制点. 本文分享自华为云社区<玩转CANN目标检测与识别一站式方案>,作者: Tianyi_Li. 背景介绍 目 ...

  7. 语义分割(semantic segmentation) 常用神经网络介绍对比-FCN SegNet U-net DeconvNet,语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类;目标检测只有两类,目标和非目标,就是在一张图片中找到并用box标注出所有的目标.

    from:https://blog.csdn.net/u012931582/article/details/70314859 2017年04月21日 14:54:10 阅读数:4369 前言 在这里, ...

  8. AI佳作解读系列(五) - 目标检测二十年技术综述

    计算机视觉中的目标检测,因其在真实世界的大量应用需求,比如自动驾驶.视频监控.机器人视觉等,而被研究学者广泛关注.   上周四,arXiv新出一篇目标检测文献<Object Detection ...

  9. Google AI推出新的大规模目标检测挑战赛

    来源 | Towards Data Science 整理 | 磐石 就在几天前,Google AI在Kaggle上推出了一项名为Open Images Challenge的大规模目标检测竞赛.当今计算 ...

随机推荐

  1. Scala 学习之路(四)—— 数组Array

    一.定长数组 在Scala中,如果你需要一个长度不变的数组,可以使用Array.但需要注意以下两点: 在Scala中使用(index)而不是[index]来访问数组中的元素,因为访问元素,对于Scal ...

  2. 戏说 .NET GDI+系列学习教程(一、Graphics类--纸)

    Graphics类(纸) Graphics类封装一个GDI+绘图图面,提供将对象绘制到显示设备的方法,Graphics与特定的设备上下文关联. 画图方法都被包括在Graphics类中,在画任何对象时, ...

  3. Spark2.4.0源码——DAGScheduler

    前言 Spark会将用户提交的作业看作一个job,在提交的时候首先将job转换为一系列的RDD,并按照RDD之间的依赖关系构建DAG(有向无环图),DAGScheduler会按照RDD依赖的不同将DA ...

  4. PATB 1019. 数字黑洞 (20)

    一个神奇的数字. 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定任一个各位数字不完全相同的4位正整数,如果我 ...

  5. Charles抓包工具_基本功能

    一. 安装及破解 1. 安装: 下载地址:http://www.charlesproxy.com/download/,然后进行安装: 2. 破解: 将补丁文件charles.jar复制到安装目录并替换 ...

  6. 借助URLOS快速安装WordPress

    ### 简介 WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统.WordPress具有插件架构和模板系统.截至2018年4月,排名前1000万的网站超过30.6%使 ...

  7. Vue技术点整理 vue-devtools

    注:默认浏览器调试工具,在调试vue的页面时,是不能看到vue项目的属性状态值的,所以最好是在浏览器上安装 vue-devtools,这样就可以在浏览器里面审查和调试vue的应用了 1,Chrome浏 ...

  8. sqlserver、oracle数据库排序空值null问题解决办法

    转:https://www.cnblogs.com/pacer/archive/2010/03/02/1676371.html [sqlserver]: sqlserver 认为 null 最小. 升 ...

  9. 利用Jmeter模拟Github登录

    最近学习了Jmeter的简单操作,很想找点东西来实战一下,因为我之前写过一篇通过Python模拟登录的文章,于是便想尝试下学习通过Jmeter来模拟登录. 本人环境:Jmeter5.1.1 关于Git ...

  10. JavaScript 之迭代方法

    前言:关于 JS 中为数组定义的迭代方法,我最开始是在<JavaScript高级程序设计>中学习的,然后...我并没有看懂,后来翻阅各个大佬的博客,稍微理解了那么一丢丢.以下就是我的一点见 ...