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

常见目标检测算法

常见目标检测算法有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. Hadoop —— 集群环境搭建

    一.集群规划 这里搭建一个3节点的Hadoop集群,其中三台主机均部署DataNode和NodeManager服务,但只有hadoop001上部署NameNode和ResourceManager服务. ...

  2. Scala 学习之路(二)—— 基本数据类型和运算符

    一.数据类型 1.1 类型支持 Scala 拥有下表所示的数据类型,其中Byte.Short.Int.Long和Char类型统称为整数类型,整数类型加上Float和Double统称为数值类型.Scal ...

  3. Paxos算法——前世

    Paxos算法是基于消息传递且具有高度容错特性的一致性算法.我们将从一个简单的问题开始,逐步的改进我们的设计方案,最终得到Paxos,一个可以在逆境下工作的协议. 一.客户端-服务器模型 我们从最小的 ...

  4. Mac上使用brew update会卡住的问题

    Mac上使用brew update会卡住的问题 brew默认的源是Github,会非常慢,建议换为国内的源.推荐中科大的镜像源,比较全面. 解决方案 Homebrew Homebrew源代码仓库 替换 ...

  5. Python基础(九) 常用模块汇总

    3.8 json模块重点 json模块是将满足条件的数据结构转化成特殊的字符串,并且也可以反序列化还原回去. 不同语言都遵循的一种数据转化格式,即不同语言都使用的特殊字符串.(比如Python的一个列 ...

  6. Docker搭建MySQL主从集群,基于GTID

    写在前边 搭建MySQL读写分离主从集群,这里未使用binlog方式,使用的是GTID方式 源码见我的Github https://github.com/hellxz/mysql-cluster-do ...

  7. POJ 3318:Matrix Multiplication(随机算法)

    http://poj.org/problem?id=3318 题意:问A和B两个矩阵相乘能否等于C. 思路:题目明确说出(n^3)的算法不能过,但是通过各种常数优化还是能过的. 这里的随机算法指的是随 ...

  8. 嵊州D2T3 玛利亚∙多斯普拉泽雷斯 完美配对

    嵊州D2T3 玛利亚∙多斯普拉泽雷斯 公墓一共有 n 个墓地,通过 n − 1 条通道相连. 每次,推销员可以在选择一个墓地推销给玛利亚. 但是,考虑很多的玛利亚会尽量否决这个提议. 她会选择一个墓地 ...

  9. 《深入浅出MFC》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <深入浅出MFC>内含光盘一片,书中所有原始码与可执行文件尽在其中. 作者简介 侯俊杰,先生不知何许人也,闲静少言,不慕荣利.好读书,求甚解:每有 ...

  10. 移动app商城UI模板(仿淘宝)

    该商城UI模板是仿照手机淘宝,实现了搜索商品-查看商品详情-加入购物车-结算的流程,共7个页面,由于没有数据库,所有页面上的数据都来自tempData.cs及tempPro.cs ,具体页面参考如下 ...