Bui~ 新系列博文将专注AI相关领域,想要学习高通蓝牙相关知识请查看之前的系列或关注大博主声波电波就看今朝
在CV(computer vision)中,Object detection是其中的一个核心任务,它可以在输入图像或视频中识别并框出目标。这种应用在生活中应用很多,例如停车场的车牌识别,监控的物体识别,智能驾驶的车道车辆识别等等。平常我们不会看到它是怎么框出识别物的,但是在debug模式下我们经常会看到下图这样的识别,识别到特定物体后会框出来并显示他的类别和置信度,直观得表现模型的准确性。
(图片来自于Prediction - Deci AI Documentation Hub)
这种框框就是Object detection输出的结果,这和我们训练数据时提供的label数据差不多,只是少了置信值。模型通过对比输出结果和输入label的差异来调整模型参数。因此label的输入准不准确,决定了模型输出准不准确。
因为不同的模型要求label的格式会有所不同,目标类型、标记方框坐标这些数据的排序;label存储的方式;有时训练数据的文件架构也要考虑,这些设置都要和训练框架匹配好才能训练出正确的模型。因此在模型训练的时候,我们要留意训练模型的要求,根据要求去调整label数据的格式。
首先我们来了解一下label数据包含的主要数据——目标类型和标记方框坐标。目标类型主要用索引值的方式保存;方框坐标就有多种表达方式:
- 左上角右下角(XYXY):这种是最直观的方式,通过对角坐标画一个矩形
- 左上角宽高(XYWH):这种只有一个左上角坐标,加上宽和高之后得到右下角坐标,就能画出矩形了
- 中心点宽高(CXCYWH):这种只有一个中心点坐标,加减一半的宽和高之后也能得到左上角坐标和右下角坐标
除了格式不一样之外,还有一些会对坐标数据先进行normalized处理,还原坐标时只需要乘上图片对应的宽和高即可。例如一个数据集的坐标格式是CXCYWH,其中一个图片宽高是200*100,有一个label坐标是【0.63 0.66 0.24 0.22】,要将它转成左上右下坐标,
- 将CX乘上图片的宽得到实际中心点x:63 * 200 = 126
- 将CY乘上图片的高得到实际中心点y:66 * 100 = 66
- 将W乘上图片的宽得到实际方框w:24 * 200 = 48
- 将H乘上图片的高得到实际方框h:22 * 100 = 22
- 将实际中心点x分别减加去实际方框w的一半得到x1,x2:126 ± 48/2 = 102和150
- 将实际中心点y分别减加去实际方框h的一半得到y1,y2:66 ± 22/2 = 55和77
- 我们就能得到左上角坐标(102,55)和右下角坐标(150,77)
label的数据格式不固定的,目标类型和标记方框坐标也可以互相调换位置。再来是文件保存格式,一般是保存在文本文档或json文档中。如果是文档格式不兼容的话,可以用python脚本去转换,现在很多训练框架也有提供转换接口。方框坐标也是这样处理。如果是在意文件架构的,也有脚本去整理。如果框架没提供方法,网络也能找到大量的例程。
Object detection的label格式大概是这样,不同的模型或框架有不同的要求。在训练时,甄别出来,用框架api或自写脚本去设置装换。下一篇将介绍pytorch如何准备训练数据,包含label数据在哪进行转换哦。
以上是本期博文的全部内容,如有疑问请在博文下方评论留言,我会尽快解答(o´ω`o)و。谢谢大家浏览,我们下期再见。
简单是长期努力的结果,而不是起点
—— 不是我说的
FAQ 1:数据集的格式没写明,要怎么判断他的坐标格式?
A1:标志这种也能判断:Pascal-VOC format(xyxy)COCO format(xywh)YOLO format(cxcywh)。再不行就在那张图片上把坐标画上去看看
FAQ 2:图像数据格式要匹配吗?
A2:要的,但基本是那三个通道调一下
FAQ 3:有些数据集的json文件还有别的参数,要怎么用?
A3:要根据数据集的说明再去处理
FAQ 4: json文件的label类型用了字符串表示
A4: 如果框架不能识别,就要写一张表,把字符串转成索引,这样模型才好训练
FAQ 5:为什么有些数据集的json文件只有一个,而有些是一张图片对应一个文件
A5: 只有一个文件时,文件里面会记录每个sample的文件名字和对应的label数据,必要时提取出来即可
登录大大通,了解更多详情,解锁1500+完整应用方案,更有大联大700+FAE在线答疑解惑!