最近参加了百度Aistudio深度学习七天训练营cv疫情的课程,临近结束,发布了PaddlePaddle的比赛,是关于人流密度检测的比赛。于是我打开电脑,一时不知道如何下手。虽然我知道任务的目的是什么,也有一些了解的网络结构可以应用,但我被卡在了看似最基础的部分 : 数据准备。
计算机视觉的任务主要分为三种:图像分类,图像分割,图像检测。
- 分类任务很简单,数据的输入输出对之间有明确的一一对应的关系,最主要的形式就是(Img图片, class类别)。一般情况下class类别以是个hot vector
- 分割任务也很明确,输入输出数据之间的关系也很明显,主要形式就是(IMG图片, MASK掩膜),输出的mask和输入图片的大小一致,mask上像素级别的分类可以告诉我们实际图片上对应像素属于哪一类,从而实现将原图片分割为不同类别的目标。
但到了图像检测(目标检测)的任务我就有些慌乱,为啥呢,前两个任务的输入输出都很明确且是固定的,但对于检测任务来说,没一张图片上可以检测出来的目标是不确定的,那这个数据应该怎么准备呢。我陷入了思考。但幸运的是,课程老师发布了Baseline的版本,上面带有对数据的处理,于是,我来研究和总结一下对于目标检测的任务,他的数据是怎么准备的。
当然了,也可以说,在人流密度检测中可以简单将任务的数据处理为(IMG图片, COUNT人数),这样就变成了一个回归问题,但我还是想借此机会了解一下不定数量的标注框在目标检测任务中,是怎么放到模型中去的。
【2 Days Later】
朋友们,我看了baseline的程序之后发现,原来人流密度计算更多是用人流密度图来做参考的,也就是说这边作为目标的不是一个一个框框的位置标定,而是将框转化为点,然后将点表示在和输入图像相同大小的图片中。因为数据集还考虑了ignore region,也就是需要被忽略部分的点,而这些点在density图上被直接挖空,不再考虑。
(可能也还是有用人像的框做标记的人流密度计算的方法的?这里先考虑的是转化为人流密度图)
那我们就先来看一下人流密度图的数据是如何构造的。
数据整理
其实对于数据的整理和读取也是很范式化的过程。
- 明确已有数据构成
- 明确需要数据构成
这其实是很简单也显而易见的,并且正因为这部分的大同小异,我们在参考别人的porject的时候,关于数据的读取部分也是相似的。除了一些训练上的需要,其他部分都类似。
文件读取
以文件夹形式存在的
我见识的比较少,一般常见的都是以文件夹形式存在的,也就是说,每个文件夹的名称代表的数据类别。这种一般出现在分类和分割的任务中。我们一般会把训练集的文件名保存在.txt 文件中,之后用的时候直接读取就可以了。
文件夹已分好类别,很简单,只要了解一些电脑的io知识以及读写txt文件的知识就可以了。
1
2
3
4
5
6import os
os.listdir(path) # 根据输入的path输出不同的path中的文件名
os.listdir(os.path.join(path +'***')) # 可拼凑组合不同给的文件夹名称
with ('filename') open as f:
f.write()
f.close()文件夹没分好类,类别在文件名中表示,这时候需要一些简单的字符串处理就可以了。
1
以json和文件夹形式存在的
如果除了图片本身和文件夹说明的标签之外我们还需要其他的信息,那么这时候,就需要用json文件描述更多信息。我接触的目标检测的project不是很多,目前来说就见到了这一种。但很显然的是,除了文件夹能表示的标签之外,这类任务需要其他的文件来表明更多的信息。