最近在读few-shot Learning 的论文,这个Tiered ImageNet可以说是很多期刊论文的few-shot learning文章都喜欢用来做实验对比了,所以我也很好奇这个Tiered ImageNet到底是个什么样子的。通过这篇博客和大家一起探索一下Tiered ImageNet。

Tiered ImageNet是在2018年的论文 META-LEARNING FOR SEMI-SUPERVISED FEW-SHOT CLASSIFICATION 中提出来的一个数据集,根据作者的介绍,这个数据集是数据集 ILSVRC-12 (ImageNet 2012)的一个子集。熟悉few-shot learning的朋友都知道,mini-ImageNet作为另一个few-shot learning的热门数据集,它也是 ILSVRC-12 的一个子集。不同的是,mini-ImageNet只有100个类,划分成64个training categories,16个val categories和20个test categories。而Tiered ImageNet类似于Omniglot(手写符号数据集),它的分类有层次概念。数据集分成34个大类(比如乐器,工具,载具之类的),这34个大类中每个类包含10~30个更细致的小类(比如乐器这个大类包含吉他,钢琴等)。34个大类分成20个training categories,6个val categories和8个test categories。根据作者的说法,这样做的好处是让大类相同的小类不要分别出现在training和test categories中。比如mini-ImageNet中将管风琴作为训练集,电吉他作为测试集,即便这两种都是乐器。

OK。上面这些差不多就是论文里对Tiered ImageNet的全部描述了,如果有兴趣的读者可以自己去读读原文。可是对于我这种想要使用Tiered ImageNet做训练的人来说,这些信息太粗糙了,我需要知道这个数据集怎么加载,怎么划分,标签是什么样的。

首先,找到原始数据集。
https://github.com/renmengye/few-shot-ssl-public
这是META-LEARNING FOR SEMI-SUPERVISED FEW-SHOT CLASSIFICATION 的github链接。往下翻可以发现

Nice!作者给出了Tiered ImageNet的链接。不过有一点问题,他们给的是谷歌的网盘链接,这就要看本事了,把它下载下来。


下载好之后是这样的,一个压缩包。

解压之后的样子。好家伙,数据全部被保存成pkl了,我又不知道作者当初是怎么压缩的,所以怎么解压这个pkl文件是一个大问题。还是要去看源码,这是最恶心人的部分了。那么下面是我看完源码之后从里面抽取出来的一点关键代码,以training categories为例。

import numpy as np
import pandas as pd
import pickle as pklcache_path_labels = 'F:/数据库/tiered-imagenet/train_labels.pkl'f = open(cache_path_labels, 'rb')
data = pkl.load(f, encoding='bytes')
label_specific = data["label_specific"]
label_general = data["label_general"]
label_specific_str = data["label_specific_str"]
label_general_str = data["label_general_str"]print('label_specific: ')
print(len(label_specific))
print(label_specific)
print(label_specific_str)
print('\nlabel_general:')
print(len(label_general))
print(set(label_general))
print(label_general_str)

可以看出来,training categories里面,精细划分的有351个类,粗糙划分的有20个类,总共有448695张图片。再分别测试一下val和test。

这是val categories的运行结果,精细划分的有97个类,粗糙划分的有6个类,总共有124261张图片。

这是test categories的运行结果,精细划分的有160个类,粗糙划分的有8个类,总共有206209张图片。

上面都是对于label的压缩文件的解压操作,下面会介绍图片的解压操作。
突然发现解压图片要用到cv2,我还没安装这个包,那就下次再说了,等我弄好了再继续写图片解压。

弄好了,继续说图片的解压缩。直接上代码:

import pickle as pkl
import cv2f_txt = open('F:/数据库/tiered-imagenet/val_labels.txt', 'w')save_path = 'F:/数据库/tiered-imagenet/val_images/'cache_path_labels = 'F:/数据库/tiered-imagenet/val_labels.pkl'
png_pkl = 'F:/数据库/tiered-imagenet/val_images_png.pkl'f_labels = open(cache_path_labels, 'rb')
data_labels = pkl.load(f_labels, encoding='bytes')
label_specific_str = data_labels["label_specific_str"]
label_specific = data_labels["label_specific"]f_images = open(png_pkl, 'rb')
array = pkl.load(f_images)image_no = 0
class_no = []
for ii, item in enumerate(array):im = cv2.imdecode(item, 1)cls = label_specific[ii]if not cls in class_no:class_no.append(cls)image_no = 0if len(class_no) > 1:print('class %d finished [ %d / %d ]' % (class_no[-2], ii + 1, len(array)))image_no += 1cv2.imencode('.jpg', im)[1].tofile(save_path + 'C%04dNo%04d.jpg' % (cls, image_no))f_txt.write('%04d val_images/C%04dNo%04d.jpg\n' % (cls, cls, image_no))

那么上面这一段代码就可以直接把图片解压缩,然后以 .jpg 的形式保存到本地,而且会给每个图片都附带一个标签。上面是以val_images为例进行操作。


运行完代码之后就可以获取图片以及图片对应的类别标签了。

Tiered ImageNet(few-shot learning最近很常用)的详细介绍及python处理方法相关推荐

  1. MegaCli常用命令详细介绍

    MegaCli常用参数介绍 MegaCli -adpCount [显示适配器个数] MegaCli -AdpGetTime –aALL [显示适配器时间] MegaCli -AdpAllInfo -a ...

  2. redis常用命令getex_Redis常用命令详细介绍(摘抄)

    一.字符串 字符串键是Redis最基本的键值对类型,将一个单独的键和一个单独的值关联起来.通过字符串键,不仅可以存储和读取字符串,如果输入能被解释为整数和浮点数,还能执行自增或自减操作. 1.SET: ...

  3. Linux 目录结构及常用命令详细介绍

    目录 一.Linux 目录结构 二.常用快捷键 三.常用命令 1.软件管理 apt ( Advanced Packaging Tool ) 2.帮助命令 --help  info  man 3.显示或 ...

  4. HTML学习2之常用标签详细介绍

    hx标签 内容标题 <!DOCTYPE html> <html> <head><title>网站的标题</title> </head& ...

  5. html5-canvas常用的api介绍

    转载请注明出处: http://blog.csdn.net/lishihong108/article/details/52448276 在本文中主要是介绍下canvas中一些常用的.重要的函数的使用. ...

  6. 论文阅读-2 | Meta-Learning with Task-Adaptive Loss Function for Few Shot Learning

    论文目录 0 概述 0.1 论文题目 0.2 摘要 1 简介 2 相关的工作 3 提出的方法 3.1 前言 3.1.1 提出问题 3.1.2 模型无关元学习 Model-agnostic meta-l ...

  7. 语音识别(ASR)论文优选:挑战ASR规模极限Scaling ASR Improves Zero and Few Shot Learning

    声明:平时看些文章做些笔记分享出来,文章中难免存在错误的地方,还望大家海涵.搜集一些资料,方便查阅学习:http://yqli.tech/page/speech.html.语音合成领域论文列表请访问h ...

  8. Zero Shot Learning for Code Education: Rubric Sampling with Deep Learning Inference理解

    Wu M, Mosse M, Goodman N, et al. Zero Shot Learning for Code Education: Rubric Sampling with Deep Le ...

  9. 元学习之《Matching Networks for One Shot Learning》代码解读

    元学习系列文章 optimization based meta-learning <Model-Agnostic Meta-Learning for Fast Adaptation of Dee ...

最新文章

  1. 程序员过关斩将--从用户输入手机验证码开始
  2. Oracle字符集的查看查询和Oracle字符集的设置修改
  3. Android ProGuard使用要点
  4. 怎么检查linux是否中病毒,linux中怎么检查是否有安装xinted这个服务
  5. python毕业设计有哪些方向-Python毕业选题档案管理系统 开题报告
  6. 两个input在一行让它们能对齐
  7. redis-高级特性
  8. python标记跳转_Geany的跳转到标记定义“功能如何使用
  9. Golang之变量去哪儿
  10. 2019.NET Conf China,.NET之崛起,已势不可挡
  11. tableau度量值计算_Tableau图表界面组成介绍
  12. 《面向对象程序设计》作业(四)
  13. 本地mongo 连接远程数据库_本地搭建esaymock
  14. Intellij mac快捷键
  15. n=sizeof(a)/sizeof(int)的含义(C语言)
  16. php蓝奏云网盘源码,蓝奏云网盘pc版易语言开源软件源码
  17. linux升级libpng,在Linux中安装libpng-dev以解决pngquant构建失败的问题
  18. 计算机十二种常用密码的破解方法
  19. vue、四级联动(省市区街道)
  20. C语言零碎知识点之输入字符数组

热门文章

  1. ASEMI代理NXP汽车芯片FS32K146HAT0MLQT
  2. Java第十四课——相声和群口相声
  3. Dedecms移动站静态化实操分享 - 堪称完美(附文件)
  4. js 获取当前gmt时间_js 获取时区
  5. CLion安装与配置教程
  6. 42.数据采集实现(canal)
  7. SAP系统 查询供应商余额
  8. 晶振在汽车系统中的重要作用
  9. 达梦数据库生产环境的单机部署
  10. 应用层 —— HTTP协议