Module vipy.data.imagenet
Expand source code Browse git
import os
import vipy
from vipy.util import readcsv, remkdir, filepath, islist, filetail, filebase, filefull
from vipy.image import ImageDetection, ImageCategory
import xml.etree.ElementTree as ET
IMAGENET_21K_RESIZED_URL = 'https://image-net.org/data/imagenet21k_resized.tar.gz'
URLS_2012 = ['https://image-net.org/data/ILSVRC/2012/ILSVRC2012_bbox_val_v3.tgz'
'https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train.tar',
'https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar',
'https://image-net.org/data/ILSVRC/2012/ILSVRC2012_bbox_train_v2.tar.gz',
'https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train_t3.tar',
'https://image-net.org/data/ILSVRC/2012/ILSVRC2012_bbox_train_dogs.tar.gz',
'https://image-net.org/data/ILSVRC/2012/ILSVRC2012_devkit_t12.tar.gz',
'https://image-net.org/data/ILSVRC/2012/ILSVRC2012_bbox_val_v3.tgz']
URL_SYNSET = 'https://raw.githubusercontent.com/torch/tutorials/master/7_imagenet_classification/synset_words.txt'
IMAGENET21K_URL = 'https://image-net.org/data/winter21_wholetar.gz'
IMAGENET21K_WORDNET_ID = 'https://storage.googleapis.com/bit_models/imagenet21k_wordnet_ids.txt'
IMAGENET21K_WORDNET_LEMMAS = 'https://storage.googleapis.com/bit_models/imagenet21k_wordnet_lemmas.txt'
class Imagenet2012():
"""By downloading, you agree to the ImageNet terms: https://image-net.org/download-images.php#term"""
def __init__(self, datadir):
self._datadir = remkdir(datadir)
for url in URLS_2012:
if not os.path.exists(os.path.join(datadir, vipy.util.filebase(url))):
vipy.downloader.download(url, os.path.join(self._datadir, filetail(url)))
vipy.downloader.unpack(os.path.join(self._datadir, filetail(url)), remkdir(os.path.join(self._datadir, filebase(url))))
for f in vipy.util.findtar(os.path.join(self._datadir, 'ILSVRC2012_img_train')):
if not os.path.exists(filefull(f)):
vipy.downloader.unpack(f, filefull(f))
for f in vipy.util.findtar(os.path.join(self._datadir, 'ILSVRC2012_img_train_v3')):
if not os.path.exists(filefull(f)):
vipy.downloader.unpack(f, filefull(f))
if not os.path.exists(os.path.join(self._datadir, 'synset_words.txt')):
vipy.downloader.download(URL_SYNSET, os.path.join(self._datadir, 'synset_words.txt'))
self._synset_to_categorylist = {x.split(' ',1)[0]:[y.lstrip().rstrip() for y in x.split(' ', 1)[1].split(',')] for x in vipy.util.readtxt(os.path.join(self._datadir, 'synset_words.txt'))}
def synset_to_category(self, s=None):
return self._synset_to_categorylist if s is None else self._synset_to_categorylist[s]
def classification_trainset(self):
"""ImageNet Classification, trainset"""
imgfiles = vipy.util.findimages(os.path.join(self._datadir, 'ILSVRC2012_img_train'))
imlist = [vipy.image.ImageCategory(filename=f, category=filetail(filepath(f))) for f in imgfiles]
return vipy.dataset.Dataset(imlist, 'imagenet2012_classification_train')
def classification_valset(self):
imlist = []
imgfiles = vipy.util.findimages(os.path.join(self._datadir, 'ILSVRC2012_img_val'))
# ground truth is imagenet synset index 1-1000, which is maped in the metadata
gt = vipy.util.readtxt(os.path.join(self._datadir, 'ILSVRC2012_devkit_t12', 'ILSVRC2012_devkit_t12', 'data', 'ILSVRC2012_validation_ground_truth.txt'))
for (f,y) in zip(sorted(imgfiles), gt):
imlist.append(vipy.image.ImageCategory(filename=f, category=y))
return vipy.dataset.Dataset(imlist, 'imagenet2012_classification_val')
def localization_trainset(self):
"""ImageNet localization, imageset = {train, val}"""
imlist = []
classification = self.classification_trainset()
for im in classification:
objects = []
xmlfile = '%s.xml' % filefull(im.filename().replace('ILSVRC2012_img_train', 'ILSVRC2012_bbox_train_v2'))
if os.path.exists(xmlfile):
d = ET.parse(xmlfile).getroot()
(name, xmin, ymin, xmax, ymax) = (d[5][0].text, d[5][4][0].text, d[5][4][1].text, d[5][4][2].text, d[5][4][3].text)
objects = [vipy.object.Detection(category=name, xmin=int(xmin), ymin=int(ymin), xmax=int(xmax), ymax=int(ymax))]
imlist.append(vipy.image.Scene(filename=im.filename(), category=im.category(), objects=objects))
return vipy.dataset.Dataset(imlist, 'imagenet2012_localization_train')
class Imagenet21K_Resized(vipy.dataset.Dataset):
"""https://image-net.org/download-images.php, imagenet-21K 2021 release (resized)"""
def __init__(self, datadir, aslemma=True):
self._datadir = vipy.util.remkdir(datadir)
if not os.path.exists(os.path.join(datadir, 'imagenet21k_resized.tar.gz')):
print('[vipy.data.imagenet]: downloading Imagenet-21K resized to "%s"' % self._outdir)
vipy.downloader.download_and_unpack(IMAGENET_21K_RESIZED_URL, self._outdir, sha1=None)
if not os.path.exists(os.path.join(self._datadir, 'wordnet_id.txt')):
vipy.downloader.download(IMAGENET21K_WORDNET_ID, os.path.join(self._datadir, 'wordnet_id.txt'))
if not os.path.exists(os.path.join(self._datadir, 'wordnet_lemmas.txt')):
vipy.downloader.download(IMAGENET21K_WORDNET_LEMMAS, os.path.join(self._datadir, 'wordnet_lemmas.txt'))
# https://github.com/google-research/big_transfer/issues/7
self._synset_to_categorylist = {x:[y.rstrip().lstrip() for y in lemma.split(',')] for (x,lemma) in zip(vipy.util.readtxt(os.path.join(self._datadir, 'wordnet_id.txt')), vipy.util.readtxt(os.path.join(self._datadir, 'wordnet_lemmas.txt')))}
f_category = lambda c: self._synset_to_categorylist[c][0] if aslemma else c
imlist = [vipy.image.ImageCategory(filename=f,
attributes={'wordnet_id':vipy.util.filebase(vipy.util.filepath(f))},
category=f_category(vipy.util.filebase(vipy.util.filepath(f)))) for f in vipy.util.findimages(os.path.join(datadir, 'imagenet21k_resized'))]
super().__init__(imlist, id='imagenet21k')
def synset_to_category(self, s=None):
return self._synset_to_categorylist if s is None else self._synset_to_categorylist[s]
class Imagenet21K(vipy.dataset.Dataset):
"""https://image-net.org/download-images.php, imagenet-21K 2021 winter release"""
def __init__(self, datadir, aslemma=True):
self._datadir = vipy.util.remkdir(datadir)
if not os.path.exists(os.path.join(datadir, 'winter21_whole.tar.gz')):
print('[vipy.data.imagenet]: downloading Imagenet-21K to "%s"' % self._outdir)
vipy.downloader.download_and_unpack(IMAGENET21K_URL, self._outdir, sha1=None)
for f in vipy.util.findtar(os.path.join(datadir, 'winter21_whole')):
if not os.path.exists(filefull(f)):
vipy.downloader.unpack(f, filefull(f))
os.remove(f) # cleanup
if not os.path.exists(os.path.join(self._datadir, 'wordnet_id.txt')):
vipy.downloader.download(IMAGENET21K_WORDNET_ID, os.path.join(self._datadir, 'wordnet_id.txt'))
if not os.path.exists(os.path.join(self._datadir, 'wordnet_lemmas.txt')):
vipy.downloader.download(IMAGENET21K_WORDNET_LEMMAS, os.path.join(self._datadir, 'wordnet_lemmas.txt'))
# https://github.com/google-research/big_transfer/issues/7
self._synset_to_categorylist = {x:[y.rstrip().lstrip() for y in lemma.split(',')] for (x,lemma) in zip(vipy.util.readtxt(os.path.join(self._datadir, 'wordnet_id.txt')), vipy.util.readtxt(os.path.join(self._datadir, 'wordnet_lemmas.txt')))}
f_category = lambda c: self._synset_to_categorylist[c][0] if aslemma else c
imlist = [vipy.image.ImageCategory(filename=f,
attributes={'wordnet_id':vipy.util.filebase(vipy.util.filepath(f))},
category=f_category(vipy.util.filebase(vipy.util.filepath(f)))) for f in vipy.util.findimages(os.path.join(datadir, 'winter21_whole'))]
super().__init__(imlist, id='imagenet21k')
def synset_to_category(self, s=None):
return self._synset_to_categorylist if s is None else self._synset_to_categorylist[s]
Classes
class Imagenet2012 (datadir)
-
By downloading, you agree to the ImageNet terms: https://image-net.org/download-images.php#term
Expand source code Browse git
class Imagenet2012(): """By downloading, you agree to the ImageNet terms: https://image-net.org/download-images.php#term""" def __init__(self, datadir): self._datadir = remkdir(datadir) for url in URLS_2012: if not os.path.exists(os.path.join(datadir, vipy.util.filebase(url))): vipy.downloader.download(url, os.path.join(self._datadir, filetail(url))) vipy.downloader.unpack(os.path.join(self._datadir, filetail(url)), remkdir(os.path.join(self._datadir, filebase(url)))) for f in vipy.util.findtar(os.path.join(self._datadir, 'ILSVRC2012_img_train')): if not os.path.exists(filefull(f)): vipy.downloader.unpack(f, filefull(f)) for f in vipy.util.findtar(os.path.join(self._datadir, 'ILSVRC2012_img_train_v3')): if not os.path.exists(filefull(f)): vipy.downloader.unpack(f, filefull(f)) if not os.path.exists(os.path.join(self._datadir, 'synset_words.txt')): vipy.downloader.download(URL_SYNSET, os.path.join(self._datadir, 'synset_words.txt')) self._synset_to_categorylist = {x.split(' ',1)[0]:[y.lstrip().rstrip() for y in x.split(' ', 1)[1].split(',')] for x in vipy.util.readtxt(os.path.join(self._datadir, 'synset_words.txt'))} def synset_to_category(self, s=None): return self._synset_to_categorylist if s is None else self._synset_to_categorylist[s] def classification_trainset(self): """ImageNet Classification, trainset""" imgfiles = vipy.util.findimages(os.path.join(self._datadir, 'ILSVRC2012_img_train')) imlist = [vipy.image.ImageCategory(filename=f, category=filetail(filepath(f))) for f in imgfiles] return vipy.dataset.Dataset(imlist, 'imagenet2012_classification_train') def classification_valset(self): imlist = [] imgfiles = vipy.util.findimages(os.path.join(self._datadir, 'ILSVRC2012_img_val')) # ground truth is imagenet synset index 1-1000, which is maped in the metadata gt = vipy.util.readtxt(os.path.join(self._datadir, 'ILSVRC2012_devkit_t12', 'ILSVRC2012_devkit_t12', 'data', 'ILSVRC2012_validation_ground_truth.txt')) for (f,y) in zip(sorted(imgfiles), gt): imlist.append(vipy.image.ImageCategory(filename=f, category=y)) return vipy.dataset.Dataset(imlist, 'imagenet2012_classification_val') def localization_trainset(self): """ImageNet localization, imageset = {train, val}""" imlist = [] classification = self.classification_trainset() for im in classification: objects = [] xmlfile = '%s.xml' % filefull(im.filename().replace('ILSVRC2012_img_train', 'ILSVRC2012_bbox_train_v2')) if os.path.exists(xmlfile): d = ET.parse(xmlfile).getroot() (name, xmin, ymin, xmax, ymax) = (d[5][0].text, d[5][4][0].text, d[5][4][1].text, d[5][4][2].text, d[5][4][3].text) objects = [vipy.object.Detection(category=name, xmin=int(xmin), ymin=int(ymin), xmax=int(xmax), ymax=int(ymax))] imlist.append(vipy.image.Scene(filename=im.filename(), category=im.category(), objects=objects)) return vipy.dataset.Dataset(imlist, 'imagenet2012_localization_train')
Methods
def classification_trainset(self)
-
ImageNet Classification, trainset
Expand source code Browse git
def classification_trainset(self): """ImageNet Classification, trainset""" imgfiles = vipy.util.findimages(os.path.join(self._datadir, 'ILSVRC2012_img_train')) imlist = [vipy.image.ImageCategory(filename=f, category=filetail(filepath(f))) for f in imgfiles] return vipy.dataset.Dataset(imlist, 'imagenet2012_classification_train')
def classification_valset(self)
-
Expand source code Browse git
def classification_valset(self): imlist = [] imgfiles = vipy.util.findimages(os.path.join(self._datadir, 'ILSVRC2012_img_val')) # ground truth is imagenet synset index 1-1000, which is maped in the metadata gt = vipy.util.readtxt(os.path.join(self._datadir, 'ILSVRC2012_devkit_t12', 'ILSVRC2012_devkit_t12', 'data', 'ILSVRC2012_validation_ground_truth.txt')) for (f,y) in zip(sorted(imgfiles), gt): imlist.append(vipy.image.ImageCategory(filename=f, category=y)) return vipy.dataset.Dataset(imlist, 'imagenet2012_classification_val')
def localization_trainset(self)
-
ImageNet localization, imageset = {train, val}
Expand source code Browse git
def localization_trainset(self): """ImageNet localization, imageset = {train, val}""" imlist = [] classification = self.classification_trainset() for im in classification: objects = [] xmlfile = '%s.xml' % filefull(im.filename().replace('ILSVRC2012_img_train', 'ILSVRC2012_bbox_train_v2')) if os.path.exists(xmlfile): d = ET.parse(xmlfile).getroot() (name, xmin, ymin, xmax, ymax) = (d[5][0].text, d[5][4][0].text, d[5][4][1].text, d[5][4][2].text, d[5][4][3].text) objects = [vipy.object.Detection(category=name, xmin=int(xmin), ymin=int(ymin), xmax=int(xmax), ymax=int(ymax))] imlist.append(vipy.image.Scene(filename=im.filename(), category=im.category(), objects=objects)) return vipy.dataset.Dataset(imlist, 'imagenet2012_localization_train')
def synset_to_category(self, s=None)
-
Expand source code Browse git
def synset_to_category(self, s=None): return self._synset_to_categorylist if s is None else self._synset_to_categorylist[s]
class Imagenet21K (datadir, aslemma=True)
-
https://image-net.org/download-images.php, imagenet-21K 2021 winter release
Expand source code Browse git
class Imagenet21K(vipy.dataset.Dataset): """https://image-net.org/download-images.php, imagenet-21K 2021 winter release""" def __init__(self, datadir, aslemma=True): self._datadir = vipy.util.remkdir(datadir) if not os.path.exists(os.path.join(datadir, 'winter21_whole.tar.gz')): print('[vipy.data.imagenet]: downloading Imagenet-21K to "%s"' % self._outdir) vipy.downloader.download_and_unpack(IMAGENET21K_URL, self._outdir, sha1=None) for f in vipy.util.findtar(os.path.join(datadir, 'winter21_whole')): if not os.path.exists(filefull(f)): vipy.downloader.unpack(f, filefull(f)) os.remove(f) # cleanup if not os.path.exists(os.path.join(self._datadir, 'wordnet_id.txt')): vipy.downloader.download(IMAGENET21K_WORDNET_ID, os.path.join(self._datadir, 'wordnet_id.txt')) if not os.path.exists(os.path.join(self._datadir, 'wordnet_lemmas.txt')): vipy.downloader.download(IMAGENET21K_WORDNET_LEMMAS, os.path.join(self._datadir, 'wordnet_lemmas.txt')) # https://github.com/google-research/big_transfer/issues/7 self._synset_to_categorylist = {x:[y.rstrip().lstrip() for y in lemma.split(',')] for (x,lemma) in zip(vipy.util.readtxt(os.path.join(self._datadir, 'wordnet_id.txt')), vipy.util.readtxt(os.path.join(self._datadir, 'wordnet_lemmas.txt')))} f_category = lambda c: self._synset_to_categorylist[c][0] if aslemma else c imlist = [vipy.image.ImageCategory(filename=f, attributes={'wordnet_id':vipy.util.filebase(vipy.util.filepath(f))}, category=f_category(vipy.util.filebase(vipy.util.filepath(f)))) for f in vipy.util.findimages(os.path.join(datadir, 'winter21_whole'))] super().__init__(imlist, id='imagenet21k') def synset_to_category(self, s=None): return self._synset_to_categorylist if s is None else self._synset_to_categorylist[s]
Ancestors
Methods
def synset_to_category(self, s=None)
-
Expand source code Browse git
def synset_to_category(self, s=None): return self._synset_to_categorylist if s is None else self._synset_to_categorylist[s]
Inherited members
Dataset
:archive
categories
chunk
class_to_index
classes
classlist
clone
count
countby
density
duration_in_seconds
filter
flatten
id
index_to_class
inverse_frequency_weight
istype
jsondir
label_to_index
list
load
map
merge
minibatch
multilabel_inverse_frequency_weight
num_categories
num_classes
num_labels
percentage
replace
save
set
shuffle
shuffler
sort
split
split_by_videoid
synonym
take
take_per_category
takefilter
takelist
takeone
to_torch
to_torch_tensordir
tohtml
tojsondir
tolist
video_duration_in_seconds
video_montage
zip
class Imagenet21K_Resized (datadir, aslemma=True)
-
https://image-net.org/download-images.php, imagenet-21K 2021 release (resized)
Expand source code Browse git
class Imagenet21K_Resized(vipy.dataset.Dataset): """https://image-net.org/download-images.php, imagenet-21K 2021 release (resized)""" def __init__(self, datadir, aslemma=True): self._datadir = vipy.util.remkdir(datadir) if not os.path.exists(os.path.join(datadir, 'imagenet21k_resized.tar.gz')): print('[vipy.data.imagenet]: downloading Imagenet-21K resized to "%s"' % self._outdir) vipy.downloader.download_and_unpack(IMAGENET_21K_RESIZED_URL, self._outdir, sha1=None) if not os.path.exists(os.path.join(self._datadir, 'wordnet_id.txt')): vipy.downloader.download(IMAGENET21K_WORDNET_ID, os.path.join(self._datadir, 'wordnet_id.txt')) if not os.path.exists(os.path.join(self._datadir, 'wordnet_lemmas.txt')): vipy.downloader.download(IMAGENET21K_WORDNET_LEMMAS, os.path.join(self._datadir, 'wordnet_lemmas.txt')) # https://github.com/google-research/big_transfer/issues/7 self._synset_to_categorylist = {x:[y.rstrip().lstrip() for y in lemma.split(',')] for (x,lemma) in zip(vipy.util.readtxt(os.path.join(self._datadir, 'wordnet_id.txt')), vipy.util.readtxt(os.path.join(self._datadir, 'wordnet_lemmas.txt')))} f_category = lambda c: self._synset_to_categorylist[c][0] if aslemma else c imlist = [vipy.image.ImageCategory(filename=f, attributes={'wordnet_id':vipy.util.filebase(vipy.util.filepath(f))}, category=f_category(vipy.util.filebase(vipy.util.filepath(f)))) for f in vipy.util.findimages(os.path.join(datadir, 'imagenet21k_resized'))] super().__init__(imlist, id='imagenet21k') def synset_to_category(self, s=None): return self._synset_to_categorylist if s is None else self._synset_to_categorylist[s]
Ancestors
Methods
def synset_to_category(self, s=None)
-
Expand source code Browse git
def synset_to_category(self, s=None): return self._synset_to_categorylist if s is None else self._synset_to_categorylist[s]
Inherited members
Dataset
:archive
categories
chunk
class_to_index
classes
classlist
clone
count
countby
density
duration_in_seconds
filter
flatten
id
index_to_class
inverse_frequency_weight
istype
jsondir
label_to_index
list
load
map
merge
minibatch
multilabel_inverse_frequency_weight
num_categories
num_classes
num_labels
percentage
replace
save
set
shuffle
shuffler
sort
split
split_by_videoid
synonym
take
take_per_category
takefilter
takelist
takeone
to_torch
to_torch_tensordir
tohtml
tojsondir
tolist
video_duration_in_seconds
video_montage
zip