[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的大规模目标检测竞赛.当今计算 ...
随机推荐
- Mac上PyCharm运行多进程报错的解决方案
Mac上PyCharm运行多进程报错的解决方案 运行时报错 may have been in progress in another thread when fork() was called. We ...
- pytorch实现yolov3(4) 非极大值抑制nms
在上一篇里我们实现了forward函数.得到了prediction.此时预测出了特别多的box以及各种class probability,现在我们要从中过滤出我们最终的预测box. 理解了yolov3 ...
- Codeforces Gym101341K:Competitions(DP)
http://codeforces.com/gym/101341/problem/K 题意:给出n个区间,每个区间有一个l, r, w,代表区间左端点右端点和区间的权值,现在可以选取一些区间,要求选择 ...
- python generator与coroutine
python generator与coroutine 协程 简单介绍 协程,又称微线程,纤程,英文名Coroutine.协程是一种用户态的轻量级线程,又称微线程.协程拥有自己的寄存器上下文和栈,调度 ...
- Python 的8个关键要素
1.数据类型 2.对象引用 3.组合数据类型 4.逻辑操作符 5.控制流语句 6.算术操作符 7.输入/输出 8.函数的创建与调用
- c++ 逆序对
c++ 求逆序对 例如数组(3,1,4,5,2)的逆序对有(3,1)(3,2)(4,2)(5,2)共4个 逆序对就是左边的元素比右边的大,那么左边的元素和右边的元素就能产生逆序对 代码跟归并排序差不多 ...
- RDBMS与数据库之间的关系
什么是数据库? 数据库就是用来存放数据的仓库,它是一种特殊的文件. 什么是关系型数据库? 关系型数据库就是指建立在关系模型基础上的数据库,通常由多张表组成,这些表之间存在一定的关系. 什么是RDBMS ...
- NOIP 2004 虫食算题解
问题 E: [Noip2004]虫食算 时间限制: 1 Sec 内存限制: 128 MB 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一 ...
- [POI2007]洪水pow 题解
[POI2007]洪水pow 时间限制: 5 Sec 内存限制: 128 MB 题目描述 AKD市处在一个四面环山的谷地里.最近一场大暴雨引发了洪水,AKD市全被水淹没了.Blue Mary,AKD ...
- Spring+MyBatis时Access denied for user '高欢欢'@'localhost' (using password: YES)的异常解决方案
今天在做spring+mybatis整合的时候系统只要一运行就会报下面的错误,搞了几个小时硬是没有找的原因 警告: com.mchange.v2.resourcepool.BasicResourceP ...