FSC147数据集格式解析

本文详细介绍了FSC147数据集的构成,包括图片类型文本、Train_Test_Val_FSC_147.json、annotation_FSC147_384.json的解析。通过示例脚本展示了点框标签的可视化、密度图的制作以及大标签json文件的生成过程,为使用FSC147进行深度学习的few-shot计数任务提供了参考。
摘要由CSDN通过智能技术生成

一. 引言

         在研究很多深度学习框架的时候,往往需要使用到FSC147格式数据集,若要是想在自己的数据集上验证深度学习框架,就需要自己制作数据集以及相关标签,在论文Learning To Count Everything中,该数据集首次被提出。

二. FSC147数据集简介

        FSC147是由147个对象类别组成的数据集,其中包含6000多张图像,适用于少镜头计数(few-shot)任务,少镜头计数大致框架可见下图。图像用两种类型标签,即点和边界框,它们可以用于开发少镜头计数模型。learning to count everything开源代码以及数据集链接:https://github.com/cvlab-stonybrook/LearningToCountEverything

 少镜头计数(few-shot)的大致框架图

 三. FSC147数据集格式的探索

3.1 FSC147数据集的构成

        本次咱们的目标并不是探讨少镜头计数的原理以及应用,故暂且放在一边,打开FSC147数据集,我们会发现该数据集由以下几部分构成。

一个密度图文件夹,一个原图片文件夹,两个json文件,一个txt文本,下面咱们一个一个来解析

 3.2 FSC147图片类型文本

打开ImageClasses_FSC147.txt文件,发现左侧是图片的名字,右侧是图片的类型

这个比较简单,下面提供一个脚本将图片名字和目标类名传入txt文本中

其中的watermelon是图片的类名,当然,如果图片的类比较多可以自己改进一下代码,这里我只是用作测试,就没有整复杂一点

import os
import sys

path = 'D:\\Original_Images_Watermelon'   # 所需读取的文件夹路径
txt_path = 'D:\\ImageClass.txt'   # 所需写入数据的txt文档
write_txt = open(txt_path, 'w')        # 打开txt文档
for file_name in os.listdir(path):   # 读取文件夹下的文件名
    print(file_name)   # 测试一下有没有读取到信息  
    write_txt.write(file_name+'   '+'watermelon'+'\n')

输出结果如下

 3.3 Train_Test_Val_FSC_147.json

这个json文件其实很简单,打开发现就是测试集,训练集,验证集组成的图片名字的字典

 

 下面也提供一个脚本

import os
import json 
# from itertools import zip_longest    # 遍历不同长度列表的库
test_dic = {'test':[],'train':[],'val':[]}  # 创建好字典模板,其中键值对中的值是空列表用于存储所需的内容
test_name = os.listdir('D:\\Original_Images_Watermelon\\test')
train_name = os.listdir('D:\\Original_Images_Watermelon\\train')
val_name = os.listdir('D:\\Original_Images_Watermelon\\val')
# print(test_name, '\n', train_name, '\n', val_name)  # 测试有没有读取到数据
# for i, j, k in zip_longest(test_name, train_name, val_name):   这个遍历不好向字典中追加数据,因为有None元素
#     # print(i,'\n',j,'\n',k)   # 测试有没有读取到数据
#     test_dic['test'].append(i)
# print(test_dic)
# 直接采用下面简单粗暴的方式向字典中追加数据,当然,键值对太多的时候还是不建议这么干,建议研究研究上面的方法
for i in test_name:
    print(i)
    test_dic['test'].append(i)
for j in train_name:
    test_dic['train'].append(j)
for k in val_name:
    test_dic['val'].append(k)
# print(test_dic)    # 测试有没有将数据写入字典中
# 将字典内容传到json当中
with open("D:\\plant_counting\\test\\train_test_val.json", 'w') as f:
    json.dump(test_dic, f, indent=4, ensure_ascii=False)

输出结果如下,当然,我这也是小批量的验证,数据集庞大的娃可以自己改善一下代码

 3.4 annotation_FSC147_384.json

 这是最麻烦的一块,可以看到json文件包含了每一张图片的各种信息,其中H和W还不是原图片的尺寸,H和W乘以ratio_h和ratio_w才是原图片的尺寸,但是本人的框架用不上这个信息,在后续的脚本中我也会省去,需要的娃子可以自行根据脚本添加。

 3.4.1 fsc147的点框标签可视化

在论文中提到fsc147数据集有两种标签,一个是点一个是框

这里提供一个脚本研究一张图片,以数据集的一张图片为例子

 以下是可视化脚本,其中点和框的坐标都是从json文件中直接复制过来的

import cv2
img_path = 'D:\\plant_counting\\FSC147_384_V2\\images_384_VarV2\\1050.jpg'
img = cv2.imread(img_path)
# 以下是点坐标值
point_list =  \
[
    (
        247.53459230769232,
        212.71076056338032
    ),
    (
        247.14496153846153,
        194.39414084507044
    ),
    (
        229.89658461538463,
        66.2174647887324
    ),
    (
        251.08816923076924,
        62.02771830985916
    ),
    (
        229.66208461538463,
        51.6687323943662
    ),
    (
        254.58041538461538,
        48.35515492957747
    ),
    (
   
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值