DEV Community

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

Posted on

ElasticTransform in PyTorch (2)

Buy Me a Coffee

*Memos:

ElasticTransform() can do random morphological transformation for an image as shown below. *It's about alpha and fill argument:

from torchvision.datasets import OxfordIIITPet
from torchvision.transforms.v2 import ElasticTransform
from torchvision.transforms.functional import InterpolationMode

origin_data = OxfordIIITPet(
    root="data",
    transform=None
    # transform=ElasticTransform(alpha=0, sigma=0)
)

a0origin_data = OxfordIIITPet( # `a` is alpha.
    root="data",
    transform=ElasticTransform(alpha=0)
)

a50_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=50)
    # transform=ElasticTransform(alpha=[50, 50])
    # transform=ElasticTransform(alpha=-50)
    # transform=ElasticTransform(alpha=[-50, -50])
)

a100_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=100)
    # transform=ElasticTransform(alpha=-100)
)

a200_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=200)
    # transform=ElasticTransform(alpha=-200)
)

a500_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=500)
    # transform=ElasticTransform(alpha=-500)
)

a1000_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=1000)
    # transform=ElasticTransform(alpha=-1000)
)

a5000_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=5000)
    # transform=ElasticTransform(alpha=-5000)
)

a10000_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=10000)
    # transform=ElasticTransform(alpha=-10000)
)

a50000_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=50000)
    # transform=ElasticTransform(alpha=-50000)
)

a100000_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=100000)
    # transform=ElasticTransform(alpha=-100000)
)

a1000000_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=1000000)
    # transform=ElasticTransform(alpha=-1000000)
)

a10000000_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=10000000)
    # transform=ElasticTransform(alpha=-10000000)
)

a0_0origin_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[0, 0])
)

a50_0_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[50, 0])
    # transform=ElasticTransform(alpha=[-50, 0])
)

a100_0_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[100, 0])
    # transform=ElasticTransform(alpha=[-100, 0])
)

a200_0_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[200, 0])
    # transform=ElasticTransform(alpha=[-200, 0])
)

a500_0_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[500, 0])
    # transform=ElasticTransform(alpha=[-500, 0])
)

a1000_0_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[1000, 0])
    # transform=ElasticTransform(alpha=[-1000, 0])
)

a5000_0_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[5000, 0])
    # transform=ElasticTransform(alpha=[-5000, 0])
)

a10000_0_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[10000, 0])
    # transform=ElasticTransform(alpha=[-10000, 0])
)

a50000_0_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[50000, 0])
    # transform=ElasticTransform(alpha=[-50000, 0])
)

a100000_0_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[100000, 0])
    # transform=ElasticTransform(alpha=[-100000, 0])
)

a1000000_0_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[1000000, 0])
    # transform=ElasticTransform(alpha=[-1000000, 0])
)

a10000000_0_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[10000000, 0])
    # transform=ElasticTransform(alpha=[-10000000, 0])
)

a0_50_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[0, 50])
    # transform=ElasticTransform(alpha=[0, -50])
)

a0_100_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[0, 100])
    # transform=ElasticTransform(alpha=[0, -100])
)

a0_200_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[0, 200])
    # transform=ElasticTransform(alpha=[0, -200])
)

a0_500_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[0, 500])
    # transform=ElasticTransform(alpha=[0, -500])
)

a0_1000_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[0, 1000])
    # transform=ElasticTransform(alpha=[0, -1000])
)

a0_5000_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[0, 5000])
    # transform=ElasticTransform(alpha=[0, -5000])
)

a0_10000_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[0, 10000])
    # transform=ElasticTransform(alpha=[0, -10000])
)

a0_50000_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[0, 50000])
    # transform=ElasticTransform(alpha=[0, -50000])
)

a0_100000_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[0, 100000])
    # transform=ElasticTransform(alpha=[0, -100000])
)

a0_1000000_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[0, 1000000])
    # transform=ElasticTransform(alpha=[0, -1000000])
)

a0_10000000_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=[0, 10000000])
    # transform=ElasticTransform(alpha=[0, -10000000])
)

a5000fgray_data = OxfordIIITPet( # `f` is fill.
    root="data",
    transform=ElasticTransform(alpha=5000, fill=150)
    # transform=ElasticTransform(alpha=5000, fill=[150])
)

a10000fgray_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=10000, fill=150)
)

a5000fpurple_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=5000, fill=[160, 32, 240])
)

a10000fpurple_data = OxfordIIITPet(
    root="data",
    transform=ElasticTransform(alpha=10000, fill=[160, 32, 240])
)

import matplotlib.pyplot as plt

def show_images1(data, main_title=None):
    plt.figure(figsize=[10, 5])
    plt.suptitle(t=main_title, y=0.8, fontsize=14)
    for i, (im, _) in zip(range(1, 6), data):
        plt.subplot(1, 5, i)
        plt.imshow(X=im)
        plt.xticks(ticks=[])
        plt.yticks(ticks=[])
    plt.tight_layout()
    plt.show()

show_images1(data=origin_data, main_title="origin_data")
print()
show_images1(data=a0origin_data, main_title="a0origin_data")
show_images1(data=a50_data, main_title="a50_data")
show_images1(data=a100_data, main_title="a100_data")
show_images1(data=a200_data, main_title="a200_data")
show_images1(data=a500_data, main_title="a500_data")
show_images1(data=a1000_data, main_title="a1000_data")
show_images1(data=a5000_data, main_title="a5000_data")
show_images1(data=a10000_data, main_title="a10000_data")
show_images1(data=a50000_data, main_title="a50000_data")
show_images1(data=a100000_data, main_title="a100000_data")
show_images1(data=a1000000_data, main_title="a1000000_data")
show_images1(data=a10000000_data, main_title="a10000000_data")
print()
show_images1(data=a0_0origin_data, main_title="a0_0origin_data")
show_images1(data=a50_0_data, main_title="a50_0_data")
show_images1(data=a100_0_data, main_title="a100_0_data")
show_images1(data=a200_0_data, main_title="a200_0_data")
show_images1(data=a500_0_data, main_title="a500_0_data")
show_images1(data=a1000_0_data, main_title="a1000_0_data")
show_images1(data=a5000_0_data, main_title="a5000_0_data")
show_images1(data=a10000_0_data, main_title="a10000_0_data")
show_images1(data=a50000_0_data, main_title="a50000_0_data")
show_images1(data=a100000_0_data, main_title="a100000_0_data")
show_images1(data=a1000000_0_data, main_title="a1000000_0_data")
show_images1(data=a10000000_0_data, main_title="a10000000_0_data")
print()
show_images1(data=a0_0origin_data, main_title="a0_0origin_data")
show_images1(data=a0_50_data, main_title="a0_50_data")
show_images1(data=a0_100_data, main_title="a0_100_data")
show_images1(data=a0_200_data, main_title="a0_200_data")
show_images1(data=a0_500_data, main_title="a0_500_data")
show_images1(data=a0_1000_data, main_title="a0_1000_data")
show_images1(data=a0_5000_data, main_title="a0_5000_data")
show_images1(data=a0_10000_data, main_title="a0_10000_data")
show_images1(data=a0_50000_data, main_title="a0_50000_data")
show_images1(data=a0_100000_data, main_title="a0_100000_data")
show_images1(data=a0_1000000_data, main_title="a0_1000000_data")
show_images1(data=a0_10000000_data, main_title="a0_10000000_data")
print()
show_images1(data=a5000fgray_data, main_title="a5000fgray_data")
show_images1(data=a10000fgray_data, main_title="a10000fgray_data")
print()
show_images1(data=a5000fpurple_data, main_title="a5000fpurple_data")
show_images1(data=a10000fpurple_data, main_title="a10000fpurple_data")

# ↓ ↓ ↓ ↓ ↓ ↓ The code below is identical to the code above. ↓ ↓ ↓ ↓ ↓ ↓
def show_images2(data, main_title=None, a=50, s=5, 
                 ip=InterpolationMode.BILINEAR, f=0):
    plt.figure(figsize=[10, 5])
    plt.suptitle(t=main_title, y=0.8, fontsize=14)
    if main_title != "origin_data":
        for i, (im, _) in zip(range(1, 6), data):
            plt.subplot(1, 5, i)
            et = ElasticTransform(alpha=a, sigma=s,
                                  interpolation=ip, fill=f)
            plt.imshow(X=et(im))
            plt.xticks(ticks=[])
            plt.yticks(ticks=[])
    else:
        for i, (im, _) in zip(range(1, 6), data):
            plt.subplot(1, 5, i)
            plt.imshow(X=im)
            plt.xticks(ticks=[])
            plt.yticks(ticks=[])
    plt.tight_layout()
    plt.show()

show_images2(data=origin_data, main_title="origin_data")
print()
show_images2(data=origin_data, main_title="a0origin_data", a=0)
show_images2(data=origin_data, main_title="a50_data", a=50)
show_images2(data=origin_data, main_title="a100_data", a=100)
show_images2(data=origin_data, main_title="a200_data", a=200)
show_images2(data=origin_data, main_title="a500_data", a=500)
show_images2(data=origin_data, main_title="a1000_data", a=1000)
show_images2(data=origin_data, main_title="a5000_data", a=5000)
show_images2(data=origin_data, main_title="a10000_data", a=10000)
show_images2(data=origin_data, main_title="a50000_data", a=50000)
show_images2(data=origin_data, main_title="a100000_data", a=100000)
show_images2(data=origin_data, main_title="a1000000_data", a=1000000)
show_images2(data=origin_data, main_title="a10000000_data", a=10000000)
print()
show_images2(data=origin_data, main_title="a0_0origin_data", a=[0, 0])
show_images2(data=origin_data, main_title="a50_0_data", a=[50, 0])
show_images2(data=origin_data, main_title="a100_0_data", a=[100, 0])
show_images2(data=origin_data, main_title="a200_0_data", a=[200, 0])
show_images2(data=origin_data, main_title="a500_0_data", a=[500, 0])
show_images2(data=origin_data, main_title="a1000_0_data", a=[1000, 0])
show_images2(data=origin_data, main_title="a5000_0_data", a=[5000, 0])
show_images2(data=origin_data, main_title="a10000_0_data", a=[10000, 0])
show_images2(data=origin_data, main_title="a50000_0_data", a=[50000, 0])
show_images2(data=origin_data, main_title="a100000_0_data", a=[100000, 0])
show_images2(data=origin_data, main_title="a1000000_0_data", a=[1000000, 0])
show_images2(data=origin_data, main_title="a10000000_0_data", a=[10000000, 0])
print()
show_images2(data=origin_data, main_title="a0_0origin_data", a=[0, 0])
show_images2(data=origin_data, main_title="a0_50_data", a=[0, 50])
show_images2(data=origin_data, main_title="a0_100_data", a=[0, 100])
show_images2(data=origin_data, main_title="a0_200_data", a=[0, 200])
show_images2(data=origin_data, main_title="a0_500_data", a=[0, 500])
show_images2(data=origin_data, main_title="a0_1000_data", a=[0, 1000])
show_images2(data=origin_data, main_title="a0_5000_data", a=[0, 5000])
show_images2(data=origin_data, main_title="a0_10000_data", a=[0, 10000])
show_images2(data=origin_data, main_title="a0_50000_data", a=[0, 50000])
show_images2(data=origin_data, main_title="a0_100000_data", a=[0, 100000])
show_images2(data=origin_data, main_title="a0_1000000_data", a=[0, 1000000])
show_images2(data=origin_data, main_title="a0_10000000_data", a=[0, 10000000])
print()
show_images2(data=origin_data, main_title="a5000fgray_data", a=5000, f=150)
show_images2(data=origin_data, main_title="a10000fgray_data", a=10000, f=150)
print()
show_images2(data=origin_data, main_title="a5000fpurple_data", a=5000,
             f=[160, 32, 240])
show_images2(data=origin_data, main_title="a10000fpurple_data", a=10000,
             f=[160, 32, 240])
Enter fullscreen mode Exit fullscreen mode

Image description


Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description


Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description


Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description


Image description

Image description


Image description

Image description

Hot sauce if you're wrong - web dev trivia for staff engineers

Hot sauce if you're wrong · web dev trivia for staff engineers (Chris vs Jeremy, Leet Heat S1.E4)

  • Shipping Fast: Test your knowledge of deployment strategies and techniques
  • Authentication: Prove you know your OAuth from your JWT
  • CSS: Demonstrate your styling expertise under pressure
  • Acronyms: Decode the alphabet soup of web development
  • Accessibility: Show your commitment to building for everyone

Contestants must answer rapid-fire questions across the full stack of modern web development. Get it right, earn points. Get it wrong? The spice level goes up!

Watch Video 🌶️🔥

Top comments (0)

Permit.io Launch week

Permit CLI Launch Week- Fully CLI-Based Access Control Is Here!

Join us for 5 days of live sessions, feature drops, and daily raffles. Discover how Permit.io’s new CLI simplifies fine-grained auth for developers.

Sign up

👋 Kindness is contagious

Engage with a wealth of insights in this thoughtful article, valued within the supportive DEV Community. Coders of every background are welcome to join in and add to our collective wisdom.

A sincere "thank you" often brightens someone’s day. Share your gratitude in the comments below!

On DEV, the act of sharing knowledge eases our journey and fortifies our community ties. Found value in this? A quick thank you to the author can make a significant impact.

Okay