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

常见目标检测算法
常见目标检测算法有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开发]目标检测之素材标注的更多相关文章
- AI R-CNN目标检测算法
Region-CNN,简称R-CNN,是首次将深度学习应用于目标检测的算法. bounding box IOU 非极大值抑制 selective search 参考链接: https://blog.c ...
- AI SSD目标检测算法
Single Shot multibox Detector,简称SSD,是一种目标检测算法. Single Shot意味着SSD属于one stage方法,multibox表示多框预测. CNN 多尺 ...
- [AI开发]目标跟踪之行为分析
基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...
- [AI开发]目标跟踪之计数
基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...
- [AI开发]目标跟踪之速度计算
基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...
- 带你了解CANN的目标检测与识别一站式方案
摘要: 了解通用目标检测与识别一站式方案的功能与特性,还有实现流程,以及可定制点. 本文分享自华为云社区<玩转CANN目标检测与识别一站式方案>,作者: Tianyi_Li. 背景介绍 目 ...
- 语义分割(semantic segmentation) 常用神经网络介绍对比-FCN SegNet U-net DeconvNet,语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类;目标检测只有两类,目标和非目标,就是在一张图片中找到并用box标注出所有的目标.
from:https://blog.csdn.net/u012931582/article/details/70314859 2017年04月21日 14:54:10 阅读数:4369 前言 在这里, ...
- AI佳作解读系列(五) - 目标检测二十年技术综述
计算机视觉中的目标检测,因其在真实世界的大量应用需求,比如自动驾驶.视频监控.机器人视觉等,而被研究学者广泛关注. 上周四,arXiv新出一篇目标检测文献<Object Detection ...
- Google AI推出新的大规模目标检测挑战赛
来源 | Towards Data Science 整理 | 磐石 就在几天前,Google AI在Kaggle上推出了一项名为Open Images Challenge的大规模目标检测竞赛.当今计算 ...
随机推荐
- java文件操作和文件过滤器
文件操作 java提供了File类来供我们操作文件,FIle是文件或文件夹的抽象表示,也就是对象表示.总结了几个常用的方法 File(File parenrt,String child).FIle(S ...
- 动手写一个简单版的谷歌TPU-指令集
系列目录 谷歌TPU概述和简化 基本单元-矩阵乘法阵列 基本单元-归一化和池化(待发布) TPU中的指令集 SimpleTPU实例: (计划中) 拓展 TPU的边界(规划中) 重新审视深度神经网络中的 ...
- 【dateFormatSymbols】JAVA特殊日期格式转换
记录:特殊日期格式转换,如将yyyyMMdd转为01MAY2019 public static final String DATE_VIP_FORMAT = "yyyyMMdd"; ...
- python 基础学习笔记(2)---字符串功能函数
**上一篇写到了,基本的数据类型,今天重点来讲一下字符串的功能函数**回顾一下上篇的内容:一.int 整型,在python 3 中与long型合并 可以达到 -9223372036854775808- ...
- Sublime Text 3 安装 BracketHighlighter
1 概述 由于最近在Sublime Text 3安装 BracketHighlighter遇到不少问题,其中踩了不少坑,因此总结下来,形成博客,希望能帮助更多的人 2 电脑环境 windows 10 ...
- HDU 1533:Going Home(KM算法求二分图最小权匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=1533 Going Home Problem Description On a grid map there ...
- python中的 == 和 is 的区别
== 比较的是两边的值 is 比较的是两边的内存地址 通过 id()获取内存地址 小数据池:我们使用过的值存储在小数据池中,供其他数据使用. 小数据池仅限于 数字 和 字符串: 数字的小数池范围 ...
- 和朱晔一起复习Java并发(一):线程池
和我之前的Spring系列文章一样,我们会以做一些Demo做实验的方式来复习一些知识点. 本文我们先从Java并发中最最常用的线程池开始. 从一个线程池实验开始 首先我们写一个方法来每秒一次定时输出线 ...
- WeUI Picker组件 源代码分析
前言 由于最近做的一个移动端项目需要使用到类似 WeUI Picker组件 的选择效果, 所以在这里来分析下 WeUI Picker 的实现逻辑.(weui.js项目地址) 之前也做过类似的组件, ...
- Django rest framework(3)----节流
目录 Django组件库之(一) APIView源码 Django restframework (1) ----认证 Django rest framework(2)----权限 Django res ...