%reload_ext autoreload %autoreload 2 %matplotlib inline from fastai import * from fastai.vision import * tfms = get_transforms() bs = 64 def show_image_batch_supercharged(dl:DataLoader, classes:Collection[str], rows:int=None, figsize:Tuple[int,int]=(12,15), denorm:Callable=None)->None: b_idx = next(iter(dl.batch_sampler)) if rows is None: rows = int(math.sqrt(len(b_idx))) fig, axs = plt.subplots(rows,rows,figsize=figsize) for i, ax in zip(b_idx[:rows*rows], axs.flatten()): x,y = dl.dataset[i] x.show(ax=ax, y=y, classes=classes) plt.tight_layout() def show_batch_supercharged(data:DataBunch, rows:int=3, figsize:Tuple[int,int]=(9,10), is_train:bool=True)->None: show_image_batch_supercharged(data.train_dl if is_train else data.valid_dl, data.classes, denorm=getattr(data,'denorm',None), figsize=figsize, rows=rows) path = untar_data(URLs.PETS) data = (ImageFileList.from_folder(path/'images') .label_from_re(r'^(.*)_\d+.jpg$') .random_split_by_pct(0.2) .datasets(ImageClassificationDataset) .transform(tfms, size=224) .databunch(bs=bs, path=path)) data = (ImageFileList.from_folder(path/'images') .label_from_re(r'^(.*)_\d+.jpg$') .random_split_by_pct(0.2)) data.show_batch(rows=3, figsize=(7,7)) show_batch_supercharged(data, rows=3, figsize=(7,7)) path = untar_data(URLs.PLANET_SAMPLE) data = (InputList.from_folder(path) .label_from_csv('labels.csv', sep=' ', suffix='.jpg', folder='train') .random_split_by_pct(0.2) .datasets(ImageMultiDataset) .transform(tfms, size=128) .databunch(bs=bs, path=path)) data.show_batch(rows=3, figsize=(10,10)) show_batch_supercharged(data, rows=3, figsize=(10,10)) path = untar_data(URLs.CAMVID) path_lbl = path/'labels' path_img = path/'images' get_y_fn = lambda x: path_lbl/f'{x.stem}_P{x.suffix}' codes = np.loadtxt(path/'codes.txt', dtype=str); codes data = (ImageFileList.from_folder(path_img) .label_from_func(get_y_fn) .random_split_by_pct() .datasets(SegmentationDataset, classes=codes) .transform(get_transforms(), size=128, tfm_y=True) .databunch(bs=64)) data.show_batch(rows=2, figsize=(7,7)) show_batch_supercharged(data, rows=2, figsize=(7,7)) path = untar_data(URLs.COCO_TINY) images, lbl_bbox = get_annotations(path/'train.json') img2bbox = {img:bb for img, bb in zip(images, lbl_bbox)} get_y_func = lambda o:img2bbox[o.name] data = (ImageFileList.from_folder(path) .label_from_func(get_y_func) .random_split_by_pct() .datasets(ObjectDetectDataset) .transform(tfms, size=128, tfm_y=True) .databunch(bs=16, collate_fn=bb_pad_collate)) data.show_batch(rows=3)