DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

OxfordIIITPet in PyTorch

Buy Me a Coffee

*Memos:

OxfordIIITPet() can use Oxford-IIIT Pet dataset as shown below:

*Memos:

  • The 1st argument is root(Required-Type:str or pathlib.Path). *An absolute or relative path is possible.
  • The 2nd argument is split(Optional-Default:"trainval"-Type:str). *"trainval"(3,680 images) or "test"(3,669 images) can be set to it.
  • The 3rd argument is target_types(Optional-Default:"attr"-Type:str or list of str): *Memos:
    • "category", "binary-category" and/or "segmentation" can be set to it: *Memos:
    • "category" is for the label from 37 categories(classes).
    • "binary-category" is for the label of cat(0) or dog(1).
    • "segmentation" is for a segmentation trimap image.
    • An empty tuple or list can also be set to it.
    • The multiple same values can be set to it.
    • If the order of values is different, the order of their elements is also different.
  • The 4th argument is transforms(Optional-Default:None-Type:callable).
  • The 5th argument is transform(Optional-Default:None-Type:callable).
  • The 6th argument is target_transform(Optional-Default:None-Type:callable).
  • The 7th argument is download(Optional-Default:False-Type:bool): *Memos:
    • If it's True, the dataset is downloaded from the internet and extracted(unzipped) to root.
    • If it's True and the dataset is already downloaded, it's extracted.
    • If it's True and the dataset is already downloaded and extracted, nothing happens.
    • It should be False if the dataset is already downloaded and extracted because it's faster.
    • You can manually download and extract the dataset(images.tar.gz and annotations.tar.gz) from here to data/oxford-iiit-pet/.
  • About the label from the categories(classes) for the train image indices, Abyssinian(0) is 0~49, American Bulldog(1) is 50~99, American Pit Bull Terrier(2) is 100~149, Basset Hound(3) is 150~199, Beagle(4) is 200~249, Bengal(5) is 250~299, Birman(6) is 300~349, Bombay(7) is 350~398, Boxer(8) is 399~448, British Shorthair(9) is 449~498, etc.
  • About the label from the categories(classes) for the test image indices, Abyssinian(0) is 0~97, American Bulldog(1) is 98~197, American Pit Bull Terrier(2) is 198~297, Basset Hound(3) is 298~397, Beagle(4) is 398~497, Bengal(5) is 498~597, Birman(6) is 598~697, Bombay(7) is 698~785, Boxer(8) is 786~884, British Shorthair(9) is 885~984, etc.
from torchvision.datasets import OxfordIIITPet trainval_cate_data = OxfordIIITPet( root="data" ) trainval_cate_data = OxfordIIITPet( root="data", split="trainval", target_types="category", transforms=None, transform=None, target_transform=None, download=False ) trainval_bincate_data = OxfordIIITPet( root="data", split="trainval", target_types="binary-category" ) test_seg_data = OxfordIIITPet( root="data", split="test", target_types="segmentation" ) test_empty_data = OxfordIIITPet( root="data", split="test", target_types=[] ) test_all_data = OxfordIIITPet( root="data", split="test", target_types=["category", "binary-category", "segmentation"] ) len(trainval_cate_data), len(trainval_bincate_data) # (3680, 3680)  len(test_seg_data), len(test_empty_data), len(test_all_data) # (3669, 3669, 3669)  trainval_cate_data # Dataset OxfordIIITPet # Number of datapoints: 3680 # Root location: data  trainval_cate_data.root # 'data'  trainval_cate_data._split # 'trainval'  trainval_cate_data._target_types # ['category']  print(trainval_cate_data.transform) # None  print(trainval_cate_data.target_transform) # None  trainval_cate_data._download # <bound method OxfordIIITPet._download of Dataset OxfordIIITPet # Number of datapoints: 3680 # Root location: data>  len(trainval_cate_data.classes), trainval_cate_data.classes # (37, # ['Abyssinian', 'American Bulldog', 'American Pit Bull Terrier', # 'Basset Hound', 'Beagle', 'Bengal', 'Birman', 'Bombay', 'Boxer', # 'British Shorthair', ..., 'Wheaten Terrier', 'Yorkshire Terrier'])  trainval_cate_data[0] # (<PIL.Image.Image image mode=RGB size=394x500>, 0)  trainval_cate_data[1] # (<PIL.Image.Image image mode=RGB size=450x313>, 0)  trainval_cate_data[2] # (<PIL.Image.Image image mode=RGB size=500x465>, 0)  trainval_bincate_data[0] # (<PIL.Image.Image image mode=RGB size=394x500>, 0)  trainval_bincate_data[1] # (<PIL.Image.Image image mode=RGB size=450x313>, 0)  trainval_bincate_data[2] # (<PIL.Image.Image image mode=RGB size=500x465>, 0)  test_seg_data[0] # (<PIL.Image.Image image mode=RGB size=300x225>, # <PIL.PngImagePlugin.PngImageFile image mode=L size=300x225>)  test_seg_data[1] # (<PIL.Image.Image image mode=RGB size=300x225>, # <PIL.PngImagePlugin.PngImageFile image mode=L size=300x225>)  test_seg_data[2] # (<PIL.Image.Image image mode=RGB size=229x300>, # <PIL.PngImagePlugin.PngImageFile image mode=L size=229x300>)  test_empty_data[0] # (<PIL.Image.Image image mode=RGB size=300x225>, None)  test_empty_data[1] # (<PIL.Image.Image image mode=RGB size=300x225>, None)  test_empty_data[2] # (<PIL.Image.Image image mode=RGB size=229x300>, None)  test_all_data[0] # (<PIL.Image.Image image mode=RGB size=300x225>, # (0, 0, <PIL.PngImagePlugin.PngImageFile image mode=L size=300x225>))  test_all_data[1] # (<PIL.Image.Image image mode=RGB size=300x225>, # (0, 0, <PIL.PngImagePlugin.PngImageFile image mode=L size=300x225>))  test_all_data[2] # (<PIL.Image.Image image mode=RGB size=229x300>, # (0, 0, <PIL.PngImagePlugin.PngImageFile image mode=L size=229x300>))  import matplotlib.pyplot as plt def show_images(data, ims, main_title=None): if len(data._target_types) == 0: plt.figure(figsize=(12, 6)) plt.suptitle(t=main_title, y=1.0, fontsize=14) for i, j in enumerate(iterable=ims, start=1): plt.subplot(2, 5, i) im, _ = data[j] plt.imshow(X=im) elif len(data._target_types) == 1: if data._target_types[0] == "category": plt.figure(figsize=(12, 6)) plt.suptitle(t=main_title, y=1.0, fontsize=14) for i, j in enumerate(iterable=ims, start=1): plt.subplot(2, 5, i) im, cate = data[j] plt.imshow(X=im) plt.title(label=cate) elif data._target_types[0] == "binary-category": plt.figure(figsize=(12, 6)) plt.suptitle(t=main_title, y=1.0, fontsize=14) for i, j in enumerate(iterable=ims, start=1): plt.subplot(2, 5, i) im, bincate = data[j] plt.imshow(X=im) plt.title(label=bincate) elif data._target_types[0] == "segmentation": plt.figure(figsize=(12, 12)) plt.suptitle(t=main_title, y=1.0, fontsize=14) for i, j in enumerate(iterable=ims, start=1): im, seg = data[j] if 1 <= i and i <= 5: plt.subplot(4, 5, i) plt.imshow(X=im) plt.subplot(4, 5, i+5) plt.imshow(X=seg) if 6 <= i and i <= 10: plt.subplot(4, 5, i+5) plt.imshow(X=im) plt.subplot(4, 5, i+10) plt.imshow(X=seg) elif len(data._target_types) == 3: plt.figure(figsize=(12, 12)) plt.suptitle(t=main_title, y=1.0, fontsize=14) for i, j in enumerate(iterable=ims, start=1): im, (cate, bincate, seg) = data[j] if 1 <= i and i <= 5: plt.subplot(4, 5, i) plt.imshow(X=im) plt.title(label=f"{cate}, {bincate}") plt.subplot(4, 5, i+5) plt.imshow(X=seg) if 6 <= i and i <= 10: plt.subplot(4, 5, i+5) plt.imshow(X=im) plt.title(label=f"{cate}, {bincate}") plt.subplot(4, 5, i+10) plt.imshow(X=seg) plt.tight_layout(h_pad=3.0) plt.show() train_ims = (0, 1, 2, 50, 100, 150, 200, 250, 300, 350) test_ims = (0, 1, 2, 98, 198, 298, 398, 498, 598, 698) show_images(data=trainval_cate_data, ims=train_ims, main_title="trainval_cate_data") show_images(data=trainval_bincate_data, ims=train_ims, main_title="trainval_bincate_data") show_images(data=test_seg_data, ims=test_ims, main_title="test_seg_data") show_images(data=test_empty_data, ims=test_ims, main_title="test_empty_data") show_images(data=test_all_data, ims=test_ims, main_title="test_all_data") 
Enter fullscreen mode Exit fullscreen mode

Image description

Image description

Image description

Image description

Image description

Top comments (0)