当前位置:   article > 正文

MAML中few-shot (小样本)learning中数据集的处理_matlab的maml

matlab的maml

Few-shot learning

数据集


小样本学习(few shot learning)里面常用的测试数据集主要有Omniglot和miniImagenet两个,但是网上能查到的下载地址都在谷歌网盘上,而且miniImagenet中还缺少标注数据的csv文件,这里写一下搜索到的地址

 

miniImagenet部分

miniImagenet下载地址 :

百度云链接: https://pan.baidu.com/s/1npRhZajLrLe6-KtSbJsa1A 密码: ztp5
百度云下载速度有些慢,尝试使用谷歌云盘:https://drive.google.com/open?id=1HkgrkAwukzEZA0TpO7010PkAOREb2Nuk
需要csv文件从这里获取:https://github.com/vieozhu/MAML-TensorFlow-1
 

开始主要是跑MAML算法测试,发现github上cbfinn提供的代码https://github.com/cbfinn/maml.git中,处理数据的部分只适用于linux,在win下运行会出错,将proc_images.py中os.system改为对应的os操作即可。
直接贴修改后的代码

 

  1. """
  2. Script for converting from csv file datafiles to a directory for each image (which is how it is loaded by MAML code)
  3. Acquire miniImagenet from Ravi & Larochelle '17, along with the train, val, and test csv files. Put the
  4. csv files in the miniImagenet directory and put the images in the directory
  5. 其实这里的意思就是,你要把下载的原始miniimagenet数据集解压缩之后的images文件夹移动到miniImagenet文件夹之下,
  6. 你的proc_images.py文件也在同一个文件夹之下,这样就可以对数据进行处理了。
  7. 'miniImagenet/images/'.
  8. Then run this script from the miniImagenet directory:
  9. cd data/miniImagenet/
  10. python proc_images.py
  11. """
  12. 上面这部分是finn自己的代码适合linux
  13. from __future__ import print_function
  14. import csv
  15. import glob
  16. import os
  17. from PIL import Image
  18. path_to_images = 'images/'
  19. all_images = glob.glob(path_to_images + '*')
  20. # Resize images
  21. for i, image_file in enumerate(all_images):
  22. im = Image.open(image_file)
  23. im = im.resize((84, 84), resample=Image.LANCZOS)
  24. im.save(image_file)
  25. if i % 500 == 0:
  26. print(i)
  27. # Put in correct directory
  28. for datatype in ['train', 'val', 'test']:
  29. os.system('mkdir ' + datatype)
  30. with open(datatype + '.csv', 'r') as f:
  31. reader = csv.reader(f, delimiter=',')
  32. last_label = ''
  33. for i, row in enumerate(reader):
  34. if i == 0: # skip the headers
  35. continue
  36. label = row[1]
  37. image_name = row[0]
  38. if label != last_label:
  39. cur_dir = datatype + '/' + label + '/'
  40. os.system('mkdir ' + cur_dir)
  41. last_label = label
  42. os.system('mv images/' + image_name + ' ' + cur_dir)
  43. 下面这部分是适用于windows的
  44. from __future__ import print_function
  45. import csv
  46. import glob
  47. import os
  48. from PIL import Image
  49. path_to_images = 'images/'
  50. all_images = glob.glob(path_to_images + '*')
  51. # Resize images
  52. for i, image_file in enumerate(all_images):
  53. im = Image.open(image_file)
  54. im = im.resize((84, 84), resample=Image.LANCZOS)
  55. im.save(image_file)
  56. if i % 500 == 0:
  57. print(i)
  58. # Put in correct directory
  59. for datatype in ['train', 'val', 'test']:
  60. os.mkdir(datatype)
  61. with open(datatype + '.csv', 'r') as f:
  62. reader = csv.reader(f, delimiter=',')
  63. last_label = ''
  64. for i, row in enumerate(reader):
  65. if i == 0: # skip the headers
  66. continue
  67. label = row[1]
  68. image_name = row[0]
  69. if label != last_label:
  70. cur_dir = datatype + '/' + label + '/'
  71. os.mkdir(cur_dir)
  72. last_label = label
  73. os.rename('images/' + image_name, cur_dir+image_name)

 

 

Omniglot数据集

直接下载github整个项目(94M),解压取python版本,新建一个data,将所有压缩包放进data即可。

 

数据集简介

Omniglot 一般会被戏称为 MNIST 的转置,大家可以想想为什么?下面对 Omniglot 数据集进行简要介绍:

Omniglot 数据集包含来自 5050 个不同字母的 16231623 个不同手写字符。每一个字符都是由 2020 个不同的人通过亚马逊的 Mechanical Turk 在线绘制的。

每个图像都与笔画数据配对, 坐标序列为 [x, y, t][x,y,t], 且时间 (t)(t) 以毫秒为单位。笔画数据仅在 matlab/ 文件中可用。

数据集的引用: Lake, B. M., Salakhutdinov, R., and Tenenbaum, J. B. (2015). Human-level concept learning through probabilistic program induction. Science, 350(6266), 1332-1338.

Omniglot 数据集总共包含 5050 个字母。我们通常将这些分成一组包含 3030 个字母的背景(background)集和一组包含 2020 个字母的评估(evaluation)集。

更具挑战性的表示学习任务是使用较小的背景集 “background small 1” 和 “background small 2”。每一个都只包含 55 个字母, 更类似于一个成年人在学习一般的字符时可能遇到的经验。

为了更加直观的感受 Omniglot 的组成,我借助 brendenlake/omniglot 的源码,对该数据集进行了剖析,并以 .ipynb 的文件格式进行展示。数据集具体形式可见 omniglot/python 。查看 数据使用说明 无需解压便可直接获取数据集的相关信息。如果你更喜欢命令行的形式,可以查看 dataloader

更进一步,如果你想要使用 Modified Hausdorff 距离测试 one-shot 在原论文 的效果如何,你可以查看 one-shot-classification

更甚者,如果你仅仅是想要在线查看该数据集,而不想将其下载下来。你可以在 https://mybinder.org/上在线对该数据集进行一些你想要的操作,包括跑程序。具体的做法是:

  1. 点击 Omniglot 进入在线编辑模式;
  2. 数据集见 omniglot/ 目录;数据使用说明.ipynb 文件可以用来操作 Omniglot 数据集;
  3. 测试 one-shot 的数据集见 omniglot/python/one-shot-classification 目录。文件 test_demo.ipynb 可以做一些测试工作。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/499042
推荐阅读
相关标签
  

闽ICP备14008679号