bcmi / FOPA-Fast-Object-Placement-Assessment

A discriminative object placement approach
MIT License
32 stars 1 forks source link

请问如何制作自己的训练测试集呢 #3

Closed Nomination-NRB closed 1 year ago

Nomination-NRB commented 1 year ago

你好,我clone了仓库,按照readme正确配置好了代码,可以正确的运行,但是我想用我自己的数据进行训练,数据集该如何制作呢,制作数据集有什么规范或者说明吗

WhynotHAHA commented 1 year ago

首先需要构建一个包含自己训练集的前景、背景、mask等相关信息的csv文件,包含imgID、annID、scID、scale、newWidth、newHeight、pos_label、neg_label八列。

对于imgID、annID、scID:由于OPA数据集是基于COCO数据集构建的,COCO在segmentation的时候需要两个id唯一确定一个前景,一个是imgID,一个是annID,构建OPA数据集时保留了这两项并存储分别存储第1、2列(因此自己构建数据集时imgID可能没有实际的意义,仅用annID即可作为前景图片的编号)。对于某个前景有若干可放置的背景图片,scID即为背景图片的编号并以scID.jpg格式存储于相应文件夹。

对于scale、newWidth、newHeight:从COCO数据集中选出的前景图片经过维持长宽比不变的缩放后生成新的前景图片,对于前景物体缩放大小,我们根据 20%、40%、60%、80% 的分位数将前景类别的大小比范围划分为五个区间,并从每个区间中随机采样一个大小比率ratio。此外,我们删除了前景对象不完整的合成图像(例如,前景对象的一半不在背景图像的范围内),因为不完整的信息在实践中增加了人工注释的难度。对于原始宽高为orginalWidth和orginalHeight的前景物体、原始宽高为bg_w和bg_h的背景图片,newWidth/newHeight=ratio*orginalWidth/orginalHeight,scale=max(newWidth/bg_w,newHeight/bg_h)。

对于pos_label、neg_label:pos_label和neg_label是人工标注的在背景图片上放置相应前景的合理/不合理位置,该坐标以二维列表形式存储,并且该坐标为前景物体bounding box左上角的坐标值。

前景图片和mask命名格式为annID_scID_newWidth_newHeight.jpg,背景图片命名格式为scID.jpg,均存放在相应的文件夹下。另外背景图片命名时为annID填充为12位数字,不足时用前导0补充。在构建完csv文件后需要将其转化为json类型文件放置于相同目录,读取时仅读取json文件。

Nomination-NRB commented 1 year ago

首先需要构建一个包含自己训练集的前景、背景、mask等相关信息的csv文件,包含imgID、annID、scID、scale、newWidth、newHeight、pos_label、neg_label八列。

对于imgID、annID、scID:由于OPA数据集是基于COCO数据集构建的,COCO在segmentation的时候需要两个id唯一确定一个前景,一个是imgID,一个是annID,构建OPA数据集时保留了这两项并存储分别存储第1、2列(因此自己构建数据集时imgID可能没有实际的意义,仅用annID即可作为前景图片的编号)。对于某个前景有若干可放置的背景图片,scID即为背景图片的编号并以scID.jpg格式存储于相应文件夹。

对于scale、newWidth、newHeight:从COCO数据集中选出的前景图片经过维持长宽比不变的缩放后生成新的前景图片,对于前景物体缩放大小,我们根据 20%、40%、60%、80% 的分位数将前景类别的大小比范围划分为五个区间,并从每个区间中随机采样一个大小比率ratio。此外,我们删除了前景对象不完整的合成图像(例如,前景对象的一半不在背景图像的范围内),因为不完整的信息在实践中增加了人工注释的难度。对于原始宽高为orginalWidth和orginalHeight的前景物体、原始宽高为bg_w和bg_h的背景图片,newWidth/newHeight=ratio*orginalWidth/orginalHeight,scale=max(newWidth/bg_w,newHeight/bg_h)。

对于pos_label、neg_label:pos_label和neg_label是人工标注的在背景图片上放置相应前景的合理/不合理位置,该坐标以二维列表形式存储,并且该坐标为前景物体bounding box左上角的坐标值。

前景图片和mask命名格式为annID_scID_newWidth_newHeight.jpg,背景图片命名格式为scID.jpg,均存放在相应的文件夹下。另外背景图片命名时为annID填充为12位数字,不足时用前导0补充。在构建完csv文件后需要将其转化为json类型文件放置于相同目录,读取时仅读取json文件。

非常非常感谢如此详细的解释!对于前景和背景图片的id只要是唯一的就可以了吧,12位数字是必须的吗

Nomination-NRB commented 1 year ago

首先需要构建一个包含自己训练集的前景、背景、mask等相关信息的csv文件,包含imgID、annID、scID、scale、newWidth、newHeight、pos_label、neg_label八列。

对于imgID、annID、scID:由于OPA数据集是基于COCO数据集构建的,COCO在segmentation的时候需要两个id唯一确定一个前景,一个是imgID,一个是annID,构建OPA数据集时保留了这两项并存储分别存储第1、2列(因此自己构建数据集时imgID可能没有实际的意义,仅用annID即可作为前景图片的编号)。对于某个前景有若干可放置的背景图片,scID即为背景图片的编号并以scID.jpg格式存储于相应文件夹。

对于scale、newWidth、newHeight:从COCO数据集中选出的前景图片经过维持长宽比不变的缩放后生成新的前景图片,对于前景物体缩放大小,我们根据 20%、40%、60%、80% 的分位数将前景类别的大小比范围划分为五个区间,并从每个区间中随机采样一个大小比率ratio。此外,我们删除了前景对象不完整的合成图像(例如,前景对象的一半不在背景图像的范围内),因为不完整的信息在实践中增加了人工注释的难度。对于原始宽高为orginalWidth和orginalHeight的前景物体、原始宽高为bg_w和bg_h的背景图片,newWidth/newHeight=ratio*orginalWidth/orginalHeight,scale=max(newWidth/bg_w,newHeight/bg_h)。

对于pos_label、neg_label:pos_label和neg_label是人工标注的在背景图片上放置相应前景的合理/不合理位置,该坐标以二维列表形式存储,并且该坐标为前景物体bounding box左上角的坐标值。

前景图片和mask命名格式为annID_scID_newWidth_newHeight.jpg,背景图片命名格式为scID.jpg,均存放在相应的文件夹下。另外背景图片命名时为annID填充为12位数字,不足时用前导0补充。在构建完csv文件后需要将其转化为json类型文件放置于相同目录,读取时仅读取json文件。

经过实践,名字确实要严格按照12位等信息命名

Xiangyu33 commented 1 week ago

“对于pos_label、neg_label:pos_label和neg_label是人工标注的在背景图片上放置相应前景的合理/不合理位置,该坐标以二维列表形式存储,并且该坐标为前景物体bounding box左上角的坐标值。”

这里说的应该有问题,实际看,pos_label和neg_label应该是中心点的坐标。 举例如下: imgID,annID,scID,scale,newWidth,newHeight,pos_label,neg_label 25148,4535,367260,0.262697084,151,126,[],"[[557, 344], [399, 296], [453, 221]]"

背景图367260的尺寸为640*480 如果[557, 344]是左上角的点,那么 左上角x坐标+newWidth = 557+151 = 708 >640。超出图像边界

@Nomination-NRB 请作者看看pos_label是否是中心点?

WhynotHAHA commented 1 week ago

上面的解释说明针对原始的OPA数据集,在FOPA所使用的数据集中,为了更好贴近feature map的设置,将原始的OPA数据集经过了处理和坐标变化,即本仓库中pos_label,neg_label的坐标为中心点。

Xiangyu33 commented 1 week ago

@WhynotHAHA 请教两个疑惑的问题:

  1. 这里的pos_label和neg_label是怎么选取的,随机生成的位置吗?
  2. 为什么有很多的case没有pos_label?这种方式是否数据均衡?
Xiangyu33 commented 1 week ago

问题1我看论文中说是人工标注的,那如何生成的这些位置呢?

WhynotHAHA commented 1 week ago

需要随机sample一些candidates,再进行人工标注及之后的筛选。一般positive labels会更少,但是构建的OPA数据集positive labels和negative labels数量上大体均衡。

Xiangyu33 commented 1 week ago

需要随机sample一些candidates,再进行人工标注及之后的筛选。一般positive labels会更少,但是构建的OPA数据集positive labels和negative labels数量上大体均衡。

多谢解释!祝好