外部数据

! [ -e /content ] && pip install -Uqq fastai  # 在Colab上升级fastai
from __future__ import annotations
from fastai.torch_basics import *
from fastdownload import FastDownload
from functools import lru_cache
import fastai.data

辅助函数用于下载fastai数据集

要下载任何数据集或预训练权重,只需运行 untar_data,并传递上述提到的任何数据集名称,如下所示:

path = untar_data(URLs.PETS)
path.ls()

>> (#7393) [Path('/home/ubuntu/.fastai/data/oxford-iiit-pet/images/keeshond_34.jpg'),...]

要下载模型的预训练权重:

path = untar_data(URLs.WT103_BWD)
path.ls()

>> (#2) [Path('/home/ubuntu/.fastai/data/wt103-bwd/itos_wt103.pkl'),Path('/home/ubuntu/.fastai/data/wt103-bwd/lstm_bwd.pth')]

数据集

库中默认可用的数据集的完整列表如下:

主要数据集

  1. ADULT_SAMPLE: 一个小型的 成年人数据集,用于预测收入是否超过每年50K美元,基于人口普查数据。
  • BIWI_SAMPLE: BIWI Kinect 头部姿态数据库。该数据集包含超过15000张20个人的图像(6名女性和14名男性 - 4人被录制了两次)。每帧提供一个深度图像、相应的RGB图像(均为640x480像素)及其注释。头部姿态范围覆盖约±75度偏航和±60度俯仰。
  1. CIFAR: 著名的 cifar-10 数据集,由60000张32x32的彩色图像组成,分为10个类别,每个类别有6000张图像。
  2. COCO_SAMPLE: coco数据集 的一个物体检测样本。
  3. COCO_TINY: coco数据集 的一个微型版本,用于物体检测。
  • HUMAN_NUMBERS: 一个合成数据集,由文本中的人类数字计数组成,例如一、二、三、四……适用于语言模型的实验。

  • IMDB: 完整的 IMDB情感分析数据集

  • IMDB_SAMPLE: 完整 IMDB情感分析数据集 的一个样本。

  • ML_SAMPLE: 用于推荐引擎的movielens样本数据集,以推荐电影给用户。

  • ML_100k: 用于推荐引擎的movielens 100k数据集,以推荐电影给用户。

  • MNIST_SAMPLE: 著名的 MNIST数据集 的一个样本,由手写数字组成。

  • MNIST_TINY: 著名的 MNIST数据集 的一个微型版本,由手写数字组成。

  • MNIST_VAR_SIZE_TINY:

  • PLANET_SAMPLE: 来自Kaggle竞赛 Planet: Understanding the Amazon from Space 的行星数据集样本。

  • PLANET_TINY: 来自Kaggle竞赛 Planet: Understanding the Amazon from Space 的行星数据集微型版本,用于更快的实验和原型设计。

  • IMAGENETTE: imagenet数据集 的一个较小版本,发音与’Imagenet’相同,只是带有一点搞笑的不正宗法语口音。

  • IMAGENETTE_160: Imagenette数据集的160px版本。

  • IMAGENETTE_320: Imagenette数据集的320px版本。

  • IMAGEWOOF: Imagewoof是来自Imagenet的10个类的子集,这些类并不容易分类,因为它们都是犬种。

  • IMAGEWOOF_160: ImageWoof数据集的160px版本。

  • IMAGEWOOF_320: ImageWoof数据集的320px版本。

  • IMAGEWANG: Imagewang包含了Imagenette和Imagewoof的结合体,但有一些变化,使其成为一个棘手的半监督不平衡分类问题。

  • IMAGEWANG_160: Imagewang的160px版本。

  • IMAGEWANG_320: Imagewang的320px版本。

Kaggle 竞赛数据集

  1. :图像数据集,由来自猫狗大战kaggle比赛的狗和猫的图像组成。

图像分类数据集

  1. CALTECH_101: 属于101个类别的物体图片。每个类别约有40到800张图像。大多数类别大约有50张图片。由Fei-Fei Li, Marco Andreetto和Marc ’Aurelio Ranzato于2003年9月收集。
  2. CARS: 汽车数据集包含196类汽车的16,185张图像。
  3. CIFAR_100: CIFAR-100数据集由100个类别的60000张32x32彩色图像组成,每个类别有600张图像。
  4. CUB_200_2011: Caltech-UCSD Birds-200-2011 (CUB-200-2011)是CUB-200数据集的扩展版本,包含每个类别大约两倍的图像数量和新的部分位置注释。
  5. FLOWERS: 通过从各种网站收集图片创建的17个类别的花卉数据集
  6. FOOD:
  7. MNIST: 由手写数字组成的MNIST数据集
  8. PETS: 一个37类的宠物数据集,每个类别大约有200张图像。

NLP 数据集

  1. AG_NEWS:AG News语料库包含来自AG在网上的新闻文章,涉及四个最大的类别。该数据集每个类别包含30,000个训练样本和1,900个测试样本。
  2. AMAZON_REVIEWS:该数据集包含来自亚马逊的产品评论和元数据,包括涵盖1996年5月到2014年7月的1.428亿条评论。
  3. AMAZON_REVIEWS_POLARITY:用于情感分析的亚马逊评论数据集。
  4. DBPEDIA:DBpedia本体数据集包含来自DBpedia的14个不重叠类别的560,000个训练样本和70,000个测试样本。
  5. MT_ENG_FRA:从英语到法语的机器翻译数据集。
  6. SOGOU_NEWSSogou-SRR(搜索结果相关性)数据集旨在支持搜索引擎相关性估计和排名任务的研究。
  7. WIKITEXTWikiText语言建模数据集是从维基百科验证的优质和特色文章中提取的超过1亿个标记的集合。
  8. WIKITEXT_TINY:WIKITEXT数据集的一个小型版本。
  9. YAHOO_ANSWERS:雅虎的问答数据集。
  10. YELP_REVIEWSYelp数据集是YELP业务、评论和用户数据的一个子集,用于个人、教育和学术目的。
  11. YELP_REVIEWS_POLARITY:用于YELP评论的情感分类。

图像定位数据集

  1. BIWI_HEAD_POSE: 一个BIWI kinect 头部姿态数据库。该数据集包含超过15,000张20个人(6名女性和14名男性——4人被记录了两次)的图像。对于每一帧,提供深度图像、对应的RGB图像(均为640x480像素)和注释。头部姿态范围约为+-75度偏航和+-60度俯仰。
  2. CAMVID: 由用于分割类型模型的驾驶标注数据集组成。
  3. CAMVID_TINY: 用于分割类型模型的小型camvid数据集。
  4. LSUN_BEDROOMS: 大规模图像数据集,使用深度学习与人类互动。
  5. PASCAL_2007: Pascal 2007数据集,用于识别现实场景中多个视觉物体类别的对象。
  6. PASCAL_2012: Pascal 2012数据集,用于识别现实场景中多个视觉物体类别的对象。

音频分类

  1. 猕猴: 7285 只猕猴的叫声 来自 分布式声学线索用于猕猴声音中的发声者身份识别 的 8 只个体。
  2. 斑马雀: 3405 只斑马雀的叫声 被分类 为 11 种叫声类型。额外标签包括发声个体的名称和年龄。

医学成像数据集

  1. SIIM_SMALL: SIIM数据集的一个较小版本,目标是从一组胸部X射线图像中分类气胸。

  2. TCGA_SMALL: TCGA-OV数据集的一个较小版本,带有皮下和内脏脂肪的分割。引用:

    Holback, C., Jarosz, R., Prior, F., Mutch, D. G., Bhosale, P., Garcia, K., … Erickson, B. J. (2016). 来自癌症基因组图谱卵巢癌[TCGA-OV]集的放射学数据。癌症影像档案。 论文

    Clark K, Vendt B, Smith K, Freymann J, Kirby J, Koppel P, Moore S, Phillips S, Maffitt D, Pringle M, Tarbox L, Prior F. 癌症影像档案(TCIA):维护和运营公共信息库,《数字成像杂志》,第26卷,第6期,2013年12月,第1045-1057页。 论文

预训练模型

  1. OPENAI_TRANSFORMER: GPT2 Transformer 的预训练权重。
  2. WT103_FWD: WikiText-103 前向语言模型的权重。
  3. WT103_BWD: WikiText-103 反向语言模型的权重。

配置

@lru_cache(maxsize=None)
def fastai_cfg() -> Config: # 包含默认下载路径的配置,适用于`data`、`model`、`storage`和`archive`。
    "`Config` object for fastai's `config.ini`"
    return Config(Path(os.getenv('FASTAI_HOME', '~/.fastai')), 'config.ini', create=dict(
        data = 'data', archive = 'archive', storage = 'tmp', model = 'models'))

这是一个基本的 Config 文件,包含 datamodelstoragearchive。所有未来的下载都发生在根据下载类型在配置文件中定义的路径。例如,所有未来的 fastai 数据集将下载到 data,而所有预训练模型权重将下载到 model,除非更新了默认下载位置。配置文件目录由环境变量 FASTAI_HOME 定义(如果存在),否则设置为 ~/.fastai

cfg = fastai_cfg()
cfg.data,cfg.path('data')
('data', Path('/home/jhoward/.fastai/data'))
def fastai_path(folder:str) -> Path: 
    "Local path to `folder` in `Config`"
    return fastai_cfg().path(folder)
fastai_path('archive')
Path('/home/jhoward/.fastai/archive')

URLs -

class URLs():
    "Global constants for dataset and model URLs."
    LOCAL_PATH = Path.cwd()
    MDL = 'http://files.fast.ai/models/'
    GOOGLE = 'https://storage.googleapis.com/'
    S3  = 'https://s3.amazonaws.com/fast-ai-'
    URL = f'{S3}sample/'

    S3_IMAGE    = f'{S3}imageclas/'
    S3_IMAGELOC = f'{S3}imagelocal/'
    S3_AUDI     = f'{S3}audio/'
    S3_NLP      = f'{S3}nlp/'
    S3_COCO     = f'{S3}coco/'
    S3_MODEL    = f'{S3}modelzoo/'

    # 主要数据集
    ADULT_SAMPLE        = f'{URL}adult_sample.tgz'
    BIWI_SAMPLE         = f'{URL}biwi_sample.tgz'
    CIFAR               = f'{URL}cifar10.tgz'
    COCO_SAMPLE         = f'{S3_COCO}coco_sample.tgz'
    COCO_TINY           = f'{S3_COCO}coco_tiny.tgz'
    HUMAN_NUMBERS       = f'{URL}human_numbers.tgz'
    IMDB                = f'{S3_NLP}imdb.tgz'
    IMDB_SAMPLE         = f'{URL}imdb_sample.tgz'
    ML_SAMPLE           = f'{URL}movie_lens_sample.tgz'
    ML_100k             = 'https://files.grouplens.org/datasets/movielens/ml-100k.zip'
    MNIST_SAMPLE        = f'{URL}mnist_sample.tgz'
    MNIST_TINY          = f'{URL}mnist_tiny.tgz'
    MNIST_VAR_SIZE_TINY = f'{S3_IMAGE}mnist_var_size_tiny.tgz'
    PLANET_SAMPLE       = f'{URL}planet_sample.tgz'
    PLANET_TINY         = f'{URL}planet_tiny.tgz'
    IMAGENETTE          = f'{S3_IMAGE}imagenette2.tgz'
    IMAGENETTE_160      = f'{S3_IMAGE}imagenette2-160.tgz'
    IMAGENETTE_320      = f'{S3_IMAGE}imagenette2-320.tgz'
    IMAGEWOOF           = f'{S3_IMAGE}imagewoof2.tgz'
    IMAGEWOOF_160       = f'{S3_IMAGE}imagewoof2-160.tgz'
    IMAGEWOOF_320       = f'{S3_IMAGE}imagewoof2-320.tgz'
    IMAGEWANG           = f'{S3_IMAGE}imagewang.tgz'
    IMAGEWANG_160       = f'{S3_IMAGE}imagewang-160.tgz'
    IMAGEWANG_320       = f'{S3_IMAGE}imagewang-320.tgz'

    # kaggle 竞赛下载 dogs-vs-cats -p {DOGS.absolute()}
    DOGS = f'{URL}dogscats.tgz'

    # 图像分类数据集
    CALTECH_101  = f'{S3_IMAGE}caltech_101.tgz'
    CARS         = f'{S3_IMAGE}stanford-cars.tgz'
    CIFAR_100    = f'{S3_IMAGE}cifar100.tgz'
    CUB_200_2011 = f'{S3_IMAGE}CUB_200_2011.tgz'
    FLOWERS      = f'{S3_IMAGE}oxford-102-flowers.tgz'
    FOOD         = f'{S3_IMAGE}food-101.tgz'
    MNIST        = f'{S3_IMAGE}mnist_png.tgz'
    PETS         = f'{S3_IMAGE}oxford-iiit-pet.tgz'

    # 自然语言处理数据集
    AG_NEWS                 = f'{S3_NLP}ag_news_csv.tgz'
    AMAZON_REVIEWS          = f'{S3_NLP}amazon_review_full_csv.tgz'
    AMAZON_REVIEWS_POLARITY = f'{S3_NLP}amazon_review_polarity_csv.tgz'
    DBPEDIA                 = f'{S3_NLP}dbpedia_csv.tgz'
    MT_ENG_FRA              = f'{S3_NLP}giga-fren.tgz'
    SOGOU_NEWS              = f'{S3_NLP}sogou_news_csv.tgz'
    WIKITEXT                = f'{S3_NLP}wikitext-103.tgz'
    WIKITEXT_TINY           = f'{S3_NLP}wikitext-2.tgz'
    YAHOO_ANSWERS           = f'{S3_NLP}yahoo_answers_csv.tgz'
    YELP_REVIEWS            = f'{S3_NLP}yelp_review_full_csv.tgz'
    YELP_REVIEWS_POLARITY   = f'{S3_NLP}yelp_review_polarity_csv.tgz'

    # 图像定位数据集
    BIWI_HEAD_POSE     = f"{S3_IMAGELOC}biwi_head_pose.tgz"
    CAMVID             = f'{S3_IMAGELOC}camvid.tgz'
    CAMVID_TINY        = f'{URL}camvid_tiny.tgz'
    LSUN_BEDROOMS      = f'{S3_IMAGE}bedroom.tgz'
    PASCAL_2007        = f'{S3_IMAGELOC}pascal_2007.tgz'
    PASCAL_2012        = f'{S3_IMAGELOC}pascal_2012.tgz'

    # 音频分类数据集
    MACAQUES           = f'{GOOGLE}ml-animal-sounds-datasets/macaques.zip'
    ZEBRA_FINCH        = f'{GOOGLE}ml-animal-sounds-datasets/zebra_finch.zip'

    # 医学影像数据集
    #皮肤病变        = f'{S3_IMAGELOC}skin_lesion.tgz'
    SIIM_SMALL         = f'{S3_IMAGELOC}siim_small.tgz'
    TCGA_SMALL         = f'{S3_IMAGELOC}tcga_small.tgz'

    #预训练模型
    OPENAI_TRANSFORMER = f'{S3_MODEL}transformer.tgz'
    WT103_FWD          = f'{S3_MODEL}wt103-fwd.tgz'
    WT103_BWD          = f'{S3_MODEL}wt103-bwd.tgz'

    def path(
        url:str='.', # 待下载文件
        c_key:str='archive' # 在`Config`中输入保存URL的位置
    ) -> Path:
        "Local path where to download based on `c_key`"
        fname = url.split('/')[-1]
        local_path = URLs.LOCAL_PATH/('models' if c_key=='model' else 'data')/fname
        if local_path.exists(): return local_path
        return fastai_path(c_key)/fname

默认的本地路径为 ~/.fastai/archive/,但可以通过传递不同的 c_key 来更新此路径。注意:c_key 应为 'archive', 'data', 'model', 或 'storage' 之一。

url = URLs.PETS
local_path = URLs.path(url)
test_eq(local_path.parent, fastai_path('archive'))
local_path
Path('/home/jhoward/.fastai/archive/oxford-iiit-pet.tgz')
local_path = URLs.path(url, c_key='model')
test_eq(local_path.parent, fastai_path('model'))
local_path
Path('/home/jhoward/.fastai/models/oxford-iiit-pet.tgz')

解压数据 -

def untar_data(
    url:str, # 待下载文件
    archive:Path=None, # Optional override for `Config`'s `archive` key
    data:Path=None, # Optional override for `Config`'s `data` key
    c_key:str='data', # 在`Config`中输入文件提取位置
    force_download:bool=False, # 设置为 `True` 将覆盖任何现有的数据副本
    base:str='~/.fastai' # 包含配置文件和相对路径基准的目录
) -> Path: # 提取文件的路径
    "Download `url` using `FastDownload.get`"
    d = FastDownload(fastai_cfg(), module=fastai.data, archive=archive, data=data, base=base)
    return d.get(url, force=force_download, extract_key=c_key)

untar_dataFastDownload.get 的一个简单封装。它下载并提取 url,默认情况下提取到 ~/.fastai 的子目录中(具体请参见 fastai_cfg),并返回提取数据的路径。将 force_download 标志设置为 ‘True’ 将覆盖任何已存在的数据副本。有关 c_key 参数的详细说明,请参见 URLs

untar_data(URLs.MNIST_SAMPLE)
Path('/home/jhoward/.fastai/data/mnist_sample')
#检查所有URL是否在download_checks.py文件中,并与已下载的存档匹配
# 从fastdownload导入read_checks
# fd = FastDownload(fastai_cfg(), 模块=fastai.data)
# _whitelist = "MDL LOCAL_PATH URL WT103_BWD WT103_FWD GOOGLE".split()
# 检查项 = 读取检查项(fd.模块)

# 对于 URLs 中的每个 d: 
#     if d.upper() == d and not d.startswith("S3") and not d in _whitelist: 
# url = getattr(URLs, d)
# 断言 url 在 checks 中,否则引发 f"""{d} is not in the check file for all URLs.
# To fix this, you need to run the following code in this notebook before making a PR (there is a commented cell for this below):
# url = URLs.{d}
# fd.get(url, force=True)
# fd.update(url)
# """
# f = fd.download(url)
#         assert fd.check(url, f), f"""The log we have for {d} in checks does not match the actual archive.
# To fix this, you need to run the following code in this notebook before making a PR (there is a commented cell for this below):
# url = URLs.{d}
# _add_check(url, URLs.path(url))
# """

导出 -

from nbdev import nbdev_export
nbdev_export()
Converted 00_torch_core.ipynb.
Converted 01_layers.ipynb.
Converted 01a_losses.ipynb.
Converted 02_data.load.ipynb.
Converted 03_data.core.ipynb.
Converted 04_data.external.ipynb.
Converted 05_data.transforms.ipynb.
Converted 06_data.block.ipynb.
Converted 07_vision.core.ipynb.
Converted 08_vision.data.ipynb.
Converted 09_vision.augment.ipynb.
Converted 09b_vision.utils.ipynb.
Converted 09c_vision.widgets.ipynb.
Converted 10_tutorial.pets.ipynb.
Converted 10b_tutorial.albumentations.ipynb.
Converted 11_vision.models.xresnet.ipynb.
Converted 12_optimizer.ipynb.
Converted 13_callback.core.ipynb.
Converted 13a_learner.ipynb.
Converted 13b_metrics.ipynb.
Converted 14_callback.schedule.ipynb.
Converted 14a_callback.data.ipynb.
Converted 15_callback.hook.ipynb.
Converted 15a_vision.models.unet.ipynb.
Converted 16_callback.progress.ipynb.
Converted 17_callback.tracker.ipynb.
Converted 18_callback.fp16.ipynb.
Converted 18a_callback.training.ipynb.
Converted 18b_callback.preds.ipynb.
Converted 19_callback.mixup.ipynb.
Converted 20_interpret.ipynb.
Converted 20a_distributed.ipynb.
Converted 21_vision.learner.ipynb.
Converted 22_tutorial.imagenette.ipynb.
Converted 23_tutorial.vision.ipynb.
Converted 24_tutorial.image_sequence.ipynb.
Converted 24_tutorial.siamese.ipynb.
Converted 24_vision.gan.ipynb.
Converted 30_text.core.ipynb.
Converted 31_text.data.ipynb.
Converted 32_text.models.awdlstm.ipynb.
Converted 33_text.models.core.ipynb.
Converted 34_callback.rnn.ipynb.
Converted 35_tutorial.wikitext.ipynb.
Converted 37_text.learner.ipynb.
Converted 38_tutorial.text.ipynb.
Converted 39_tutorial.transformers.ipynb.
Converted 40_tabular.core.ipynb.
Converted 41_tabular.data.ipynb.
Converted 42_tabular.model.ipynb.
Converted 43_tabular.learner.ipynb.
Converted 44_tutorial.tabular.ipynb.
Converted 45_collab.ipynb.
Converted 46_tutorial.collab.ipynb.
Converted 50_tutorial.datablock.ipynb.
Converted 60_medical.imaging.ipynb.
Converted 61_tutorial.medical_imaging.ipynb.
Converted 65_medical.text.ipynb.
Converted 70_callback.wandb.ipynb.
Converted 71_callback.tensorboard.ipynb.
Converted 72_callback.neptune.ipynb.
Converted 73_callback.captum.ipynb.
Converted 74_huggingface.ipynb.
Converted 97_test_utils.ipynb.
Converted 99_pytorch_doc.ipynb.
Converted dev-setup.ipynb.
Converted app_examples.ipynb.
Converted camvid.ipynb.
Converted migrating_catalyst.ipynb.
Converted migrating_ignite.ipynb.
Converted migrating_lightning.ipynb.
Converted migrating_pytorch.ipynb.
Converted migrating_pytorch_verbose.ipynb.
Converted ulmfit.ipynb.
Converted index.ipynb.
Converted quick_start.ipynb.
Converted tutorial.ipynb.