最近看到旷视南京研究院发布的一个新零售自动结算场景下的大型商品数据集RPC(Project,Paper)。
其中利用GAN对人造数据进行渲染前后所训练出的检测器的检测效果有较大提升,因此想尝试复现一下论文中所展示的效果。
先对论文中的内容做一下简单的梳理:
这个数据集一共拍摄了200种商品,在项目中有提供数据集,内容包括:
train2019,val2019,test2019三个文件夹,分别包含了53739(8.54GB),6000(1.23GB),24000(4.95GB)个文件,均为JPG格式图像。训练数据集中每个图像包含了一件商品,置放在一个圆形展示台上,根据不同的摄像头位置和不同的圆台转动角度来分别拍摄。
验证和测试数据集中每个图像包含了多个商品,置放在纯白色台面,根据摆放商品的个数和种类被分为了三个等级:Easy ,Medium ,Hard 。
Clutter levels | categories | instances |
---|---|---|
Easy mode | 3-5 | 3-10 |
Medium mode | 5-8 | 10-15 |
Hard mode | 8-10 | 15-20 |
验证数据集:
测试数据集:
和instances_train2019,instances_val2019,instances_test2019三个json格式文件,每个json文件都包含了info,licenses,categories,__raw_Chinese_name_df,images,annotations六种信息。
对于前四种信息,三个json文件的内容都是一样的,info和licenses记录了这个项目的一些基本信息,categories和raw_Chinese_name_df则记录了200种商品的基本信息,images和annotations则是对每张图的内容做一个说明和注释.。
categories | Chinese_name | images | annotations |
---|---|---|---|
supercategory | sku_name | file_name | area |
id | category_id | width | bbox |
name | sku_class | height | category_id |
code | id | id | |
shelf | image_id | ||
num | iscrowd | ||
name | segmentation | ||
clas | point_xy | ||
known | |||
ind |
在说实验之前,先提及一下论文中提出的几个指标,这是判断检测器效果好坏的客观依据。
先定义各符号所表示的意思。从类商品中选出N件商品,表示第张图中类商品的预测数量,表示第张图中类商品的真实数量,表示和之间的距离,能反映出图中某一类别商品的错误计数:
反映第张图中所有类商品的预测误差,为0的话表示预测完全正确:
结账准确率,表示检测过程中发生的概率。当且仅当时为1否则为0,所以的取值范围是:
平均类别交并比,表示每个类别预测值和真实值之间误差的平均值,就是每个类别检测结果IoU的平均值。
除了以上四个指标,论文中还引用了和两个指标来客观验证检测效果的好坏。
论文中设置了四种不同的基线实验Single,Syn,Render和Syn+Render,这四个实验实际上是使用四种不同的数据集去训练相同的检测器。
检测器:用特征金字塔网络 (FPN) 作为检测器.
Single:使用单个商品的数据集去训练。直接用单个商品的图像去训练检测器。
Syn:使用合成图像去训练。将单个商品图像中的商品抠出来,按照一定要求复制黏贴到空白背景中,合成模拟图像。
Render:使用渲染图像去训练。对合成好的图像进行渲染,补充其丢失的光影特征。
Syn+Render:用合成图像以及渲染图像一起去训练。
下图是论文中展示的流程图,我正是根据这个流程图来复现论文中的效果,其过程在Recurring_experiment
中有详细记录。