scene graph generation benchmark关于visual genome的数据划分(train,test,val)

news2024/11/28 18:58:42

scene graph generation benchmark关于visual genome的数据划分(train,test,val)

  • 前言

前言

很多做scene graph generation,准备测试的同学,发现visual genome并没有提供官方的训练train,测试test,验证val数据集划分。

不过我们可以参考scene graph generation benchmark的相关代码,然后找到这个代码里对VG150数据的划分,并参考这个领域对VG150的数据的划分,来划分VG150并进行验证。

我们进入scene graph generation benchmark的代码,在这个文件里打上断点。
Scene-Graph-Benchmark.pytorch/maskrcnn_benchmark/data/build.py

def build_dataset(cfg, dataset_list, transforms, dataset_catalog, is_train=True):
    """
    Arguments:
        dataset_list (list[str]): Contains the names of the datasets, i.e.,
            coco_2014_trian, coco_2014_val, etc
        transforms (callable): transforms to apply to each (image, target) sample
        dataset_catalog (DatasetCatalog): contains the information on how to
            construct a dataset.
        is_train (bool): whether to setup the dataset for training or testing
    """
    if not isinstance(dataset_list, (list, tuple)):
        raise RuntimeError(
            "dataset_list should be a list of strings, got {}".format(dataset_list)
        )
    datasets = []
    for dataset_name in dataset_list:
        data = dataset_catalog.get(dataset_name, cfg)
        factory = getattr(D, data["factory"])
        args = data["args"]
        # for COCODataset, we want to remove images without annotations
        # during training
        if data["factory"] == "COCODataset":
            args["remove_images_without_annotations"] = is_train
        if data["factory"] == "PascalVOCDataset":
            args["use_difficult"] = not is_train
        args["transforms"] = transforms

        #Remove it because not part of the original repo (factory cant deal with additional parameters...).
        if "capgraphs_file" in args.keys():
            del args["capgraphs_file"]

        # make dataset from factory
        dataset = factory(**args)
        datasets.append(dataset)

    # for testing, return a list of datasets
    if not is_train:
        return datasets

    # for training, concatenate all datasets into a single one
    dataset = datasets[0]
    if len(datasets) > 1:
        dataset = D.ConcatDataset(datasets)

    return [dataset]

这部分代码的大致意思是说:如果当前的dataset_name 是train(或test,或val),就通过项目中已包装好的参数,来读取相应的文件,处理成数据dataset,也就是我们主要在下面这两行代码上打断点。

dataset = factory(**args)
datasets.append(dataset)

然后我们根据dataset_name把三个相关的dataset用pickle头文件下载下来:(也就是添加这样一些代码:)

if dataset_name == 'VG_stanford_filtered_with_attribute_train':
    with open('data_train.pkl', 'wb') as f:
         pickle.dump(dataset, f)  
if dataset_name == 'VG_stanford_filtered_with_attribute_test':
    with open('data_test.pkl', 'wb') as f:
         pickle.dump(dataset, f)  
if dataset_name == 'VG_stanford_filtered_with_attribute_val':
    with open('data_val.pkl', 'wb') as f:     
         pickle.dump(dataset, f) 

通过不同的模式的运行,得到三个文件pkl:
在这里插入图片描述
但是这三个文件,因为数据格式跟maskrcnn设置有关,只有在scene graph generation benchamrak的项目里才能打开,所以我对这三个数据pkl文件做了如下处理

import os
import bisect
import copy
import logging
from collections import Counter, defaultdict
import matplotlib.pyplot as plt
import random
import numpy as np
import pickle

import json
from maskrcnn_benchmark.utils.comm import get_world_size
from maskrcnn_benchmark.utils.imports import import_file
from maskrcnn_benchmark.utils.miscellaneous import save_labels

import pickle  

file_paths = {
    'train': '/Scene-Graph-Benchmark.pytorch/data_train.pkl',
    'test': '/Scene-Graph-Benchmark.pytorch/data_test.pkl',
    'val': '/Scene-Graph-Benchmark.pytorch/data_val.pkl'
}

# 读取pkl文件并转换为字典格式
def read_pkl_file(file_path):
    with open(file_path, 'rb') as f:
        data = pickle.load(f)
    
    # 将数据转换为字典格式
    data_dict = {
        'categories': data.categories,
        'filenames': data.filenames,
        'gt_boxes': [box.tolist() for box in data.gt_boxes],  # 将numpy数组转换为列表
        'gt_classes': [cls.tolist() for cls in data.gt_classes],   # 将numpy数组转换为列表
        'img_info': data.img_info,
        'ind_to_attributes': data.ind_to_attributes,
        'ind_to_classes': data.ind_to_classes,
        'ind_to_predicates': data.ind_to_predicates,
        'relationships': [rel.tolist() for rel in data.relationships],  # 将numpy数组转换为列表
        'split': data.split
    }
    
    return data_dict

# 保存数据到json文件
def save_to_json(data_dict, output_path):
    with open(output_path, 'w') as json_file:
        json.dump(data_dict, json_file, indent=4)

# 处理每个文件并保存为json
for split, file_path in file_paths.items():
    data_dict = read_pkl_file(file_path)
    output_path = f'/Scene-Graph-Benchmark.pytorch/data_{split}.json'
    save_to_json(data_dict, output_path)
    print(f'Saved {split} data to {output_path}')

最终得到如下三个json文件(本地就可以运行):
在这里插入图片描述
运行起来是这样的:

import json
import os
import sys

file1_path = './data_train.json'
file2_path = './data_test.json'
file3_path = './data_val.json'

with open(file1_path, 'r', encoding='utf-8') as file:
    data1 = json.load(file)

with open(file2_path, 'r', encoding='utf-8') as file:
    data2 = json.load(file)

with open(file3_path, 'r', encoding='utf-8') as file:
    data3 = json.load(file)

print(data1)
print(data2)
print(data3)

在这里插入图片描述
其他的变量都很好理解,注意gt_classes是gt_boxes每一个物体的类别编号。
ind_to_classes是背景1+150个名词类别
ind_to_predicates是背景1+50个谓词类别
正好对应了vg150的150个名词和50个谓词

接下来大家愉快的使用这个SGG划分的VG150数据集吧。

链接:https://pan.baidu.com/s/1QGaNxPoWi9BIckYafoQrvg
提取码:yw1y
–来自百度网盘超级会员V8的分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1844708.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

竞赛选题 python opencv 深度学习 指纹识别算法实现

1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 python opencv 深度学习 指纹识别算法实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:4分创新点:4分 该项目较为新颖…

【AI大模型】基于ChatGLM-6b从零开始本地部署语言模型,步骤详细无坑版

1.什么是ChatGLM-6B ChatGLM-6B 是的一种自然语言处理模型,属于大型生成语言模型系列的一部分。"6B"在这里指的是模型大约拥有60亿个参数,这些参数帮助模型理解和生成语言。ChatGLM-6B 特别设计用于对话任务,能够理解和生成自然、…

Linux 软链接

# 语法 ln -s <文件夹or文件的真实路径> <自定义路径别名> # 例子 ln -s /etc/sysconfig/network-scripts/ifcfg-ens33 ~/ens33

Android集成mapbox教程

目录 简介准备工作创建Token系统开发简介 Mapbox是来自美国的一家为开发者提供地图服务和开发工具的开放平台。Mapbox以开源的形式构建了矢量瓦片技术生态,开发了矢量切片工具、瓦片服务传输框架。Mapbox的底图平台非常受欢迎,特别是开发者和学生群体,可以使用免费的开源软…

matlab结合python的CoolProp库来进行热泵热循环仿真

前言 需要安装python&#xff0c;不同matlab版本需要下载对用的python版本&#xff01;&#xff01;&#xff01;&#xff01;&#xff0c;切记&#xff01;&#xff01;&#xff01;&#xff01;否则程序无法运行&#xff0c;下图是展示了matlab和python之间的版本对应 安装…

数据分析思考

数据分析工作流程 在我的数据分析职业发展过程中&#xff0c;我从基础的数据提取工作开始&#xff0c;逐步深入到更为复杂和具有战略意义的领域。这包括构建和完善指标体系、设计风险预警模型&#xff0c;以及与多部门协作完成公司整体经营分析等工作。 在这个过程中&#xf…

会声会影2024旗舰版汉化最新安装包下载方法步骤

嗨&#xff0c;亲爱的CSDN的朋友们&#xff01;&#x1f389;今天&#xff0c;我要跟大家分享一款让你的视频编辑体验升级的神器——会声会影2024最新版本&#xff01;✨如果你是一个热衷于创作视频内容的创作者&#xff0c;那么你一定不能错过这个软件。它不仅功能强大&#x…

为什么企业需要数据挖掘平台?哪个比较好呢?

什么是数据挖掘&#xff1f; 数据挖掘就是从大量的数据中去发现有用的信息&#xff0c;然后根据这些信息来辅助决策。听起来是不是跟传统的数据分析很像呢&#xff1f;实际上&#xff0c;数据挖掘就是智能化的数据分析&#xff0c;它们的目标都是一样的。但是&#xff0c…

前端面试js高频手写大全

res.push(fn(arr[i])) } return res } 3. reduce实现数组的map方法 Array.prototype.myMap function(fn,thisValue){ var res []; thisValue thisValue||[]; this.reduce(function(pre,cur,index,arr){ return res.push(fn.call(thisValue,cur,index,arr)); },[])…

【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】

卷积经常用在信号处理中&#xff0c;用于计算信号的延迟累积。假设一个信号发射器每个时刻 t t t产生一个信号 x t x_t xt​&#xff0c;其信息的衰减率为 w k w_k wk​&#xff0c;即在 k − 1 k-1 k−1个时间步长后&#xff0c;信息为原来的 w k w_k wk​倍&#xff0c;时刻 …

PMBOK® 第六版 指导与管理项目工作

目录 读后感—PMBOK第六版 目录 我们都不情愿去做重复的工作&#xff0c;也不期望只得到一个计划&#xff0c;而具体的工作任务却笼统模糊&#xff0c;需要在做的过程中一边摸索。如此一来&#xff0c;对于熟悉的事情会因反复而影响心态&#xff0c;对于不熟悉的事情则由于痛苦…

在SQL中使用explode函数展开数组的详细指南

目录 简介示例1&#xff1a;简单数组展开示例2&#xff1a;展开嵌套数组示例3&#xff1a;与其他函数结合使用处理结构体数组示例&#xff1a;展开包含结构体的数组示例2&#xff1a;展开嵌套结构体数组 总结 简介 在处理SQL中的数组数据时&#xff0c;explode函数非常有用。它…

pytorch十大核心操作

PyTorch的十大核心操作涵盖了张量创建、数据转换、操作变换等多个方面。以下是结合参考文章信息整理出的PyTorch十大核心操作的概述&#xff1a; 张量创建&#xff1a; 从Python列表或NumPy数组创建张量。使用特定值创建张量&#xff0c;如全零、全一、指定范围、均匀分布、正…

AI与区块链的融合:Web3时代下的新应用探索

本文来源香港Web3媒体Techub News AI与区块链&#xff1a;Web3时代的新机遇 在香港这座金融与科技交汇的繁荣都市&#xff0c;AI与区块链的结合已经成为Web3时代的重要议题&#xff0c;为行业发展带来了新的可能性和机遇。越来越多的开发者正在积极探索这一领域的融合&#xff…

FlinkCDC 3.1.0 与 Flink 1.18.0 安装及使用 Mysql To Doris 整库同步,使用 pipepline连接器

cd flink-cdc-3.1.0 bin/flink-cdc.sh 会用到 linux的系统环境变量&#xff08;vim /etc/profile配置&#xff09;&#xff0c;使用环境变量 FLINK_HOME flinkcdc & flink 安装及使用&#xff1a; 1、flink-cdc-3.1.0/lib/ 内容如下&#xff1a; 2、flink-cdc-3.1.0/mysql…

win10免安装配置MySQL8.4.0

注&#xff1a;此教程基于win10 22H2 版本 1、下载最新版本MySQL压缩包 下载链接&#xff1a;MySQL官网下载地址 点击第二行的 ZIP Archive 后面的Download&#xff08;当前时间2024-06-19最新版本是8.4.0&#xff09; 2、解压并添加配置文件 下载完毕后&#xff0c;解压缩…

Ncorr使用过程的问题解答

问题系列 文章目录 问题系列前言一、如何更改单位&#xff1f;情景&#xff1a;DIC Analysis 二、拉格兰日和欧拉绘图的区别直观 三、控制图像中的显示条上下界限问题展示&#xff1a;解决方案&#xff1a; 更新动态 前言 主要用于记录使用过程中出现的相关问题。 一、如何更改…

k8s中 docker和containerd 镜像相互导入导出

containerd镜像导出并导入docker 1 查看containerd 本地镜像列表 crictl images 2 containerd 导出本地镜像到当前目录下&#xff08;注意&#xff1a; 导出导入需要指定镜像平台类型 --platform&#xff09; ctr -n k8s.io images export nacos-server-24-06-30-13-02-…

【尚庭公寓SpringBoot + Vue 项目实战】移动端登录管理(二十)

【尚庭公寓SpringBoot Vue 项目实战】移动端登录管理&#xff08;二十&#xff09; 文章目录 【尚庭公寓SpringBoot Vue 项目实战】移动端登录管理&#xff08;二十&#xff09;1、登录业务2、接口开发2.1、获取短信验证码2.2、登录和注册接口2.3、查询登录用户的个人信息 1、…

SFF1006A-ASEMI无人机专用SFF1006A

编辑&#xff1a;ll SFF1006A-ASEMI无人机专用SFF1006A 型号&#xff1a;SFF1006A 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;10A 最大循环峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;600V 最大…