• কম্পিউটার ভিশন টিউটোরিয়ালের জন্য স্থানান্তর শিক্ষা 2

    স্থানীয় ট্রান্সফর্মার নেটওয়ার্ক টিউটোরিয়ালSPATIAL TRANSFORMER NETWORKS TUTORIAL
    ../_images/FSeq.png
    এই টিউটোরিয়ালে, আপনি শিখবেন কীভাবে স্থানিক ট্রান্সফরমার নেটওয়ার্ক নামে একটি ভিজ্যুয়াল মনোযোগ ব্যবস্থা ব্যবহার করে আপনার নেটওয়ার্ককে বাড়ানো যায়। আপনি ডিপমাইন্ড পেপারে স্থানিক ট্রান্সফরমার নেটওয়ার্কগুলি সম্পর্কে আরও পড়তে পারেন
    স্পেসিয়াল ট্রান্সফরমার নেটওয়ার্কগুলি কোনও স্থানিক রূপান্তরের দিকে স্বতন্ত্র মনোযোগের একটি সাধারণীকরণ। স্পেসিয়াল ট্রান্সফর্মার নেটওয়ার্কগুলি (সংক্ষেপে এসটিএন) মডেলটির জ্যামিতিক আগ্রাসন বাড়ানোর জন্য একটি নিউরাল নেটওয়ার্ককে কীভাবে ইনপুট চিত্রটিতে স্থানিক রূপান্তর করতে হয় তা শিখতে দেয়। উদাহরণস্বরূপ, এটি আগ্রহের একটি অঞ্চল ক্রপ করতে পারে, কোনও চিত্রের অভিযোজনকে স্কেল করে এবং সংশোধন করতে পারে। এটি একটি কার্যকর প্রক্রিয়া হতে পারে কারণ সিএনএনগুলি ঘূর্ণন এবং স্কেল এবং আরও সাধারণ সাধারণ অ্যাফাইন ট্রান্সফর্মেশনগুলিতে অদ্বিতীয় নয়।
    এসটিএন সম্পর্কে সেরা জিনিসগুলির মধ্যে একটি হ'ল খুব অল্প সংশোধন করে কেবল যে কোনও বিদ্যমান সিএনএন-এ এটি প্লাগ করার ক্ষমতা।
    # License: BSD
    # Author: Ghassen Hamrouni
    
    from __future__ import print_function
    import torch
    import torch.nn as nn
    import torch.nn.functional as F
    import torch.optim as optim
    import torchvision
    from torchvision import datasets, transforms
    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.ion()   # interactive mode
    

    ডেটা লোড হচ্ছে

    এই পোস্টে আমরা ক্লাসিক এমএনআইএসটি ডেটাসেট নিয়ে পরীক্ষা করি। একটি স্থানিক ট্রান্সফরমার নেটওয়ার্কের সাথে বাড়ানো একটি মানক কনভোলশনাল নেটওয়ার্ক ব্যবহার করা।
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    
    # Training dataset
    train_loader = torch.utils.data.DataLoader(
        datasets.MNIST(root='.', train=True, download=True,
                       transform=transforms.Compose([
                           transforms.ToTensor(),
                           transforms.Normalize((0.1307,), (0.3081,))
                       ])), batch_size=64, shuffle=True, num_workers=4)
    # Test dataset
    test_loader = torch.utils.data.DataLoader(
        datasets.MNIST(root='.', train=False, transform=transforms.Compose([
            transforms.ToTensor(),
            transforms.Normalize((0.1307,), (0.3081,))
        ])), batch_size=64, shuffle=True, num_workers=4)
    
    বাইরে:
    Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to ./MNIST/raw/train-images-idx3-ubyte.gz
    Extracting ./MNIST/raw/train-images-idx3-ubyte.gz to ./MNIST/raw
    Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz to ./MNIST/raw/train-labels-idx1-ubyte.gz
    Extracting ./MNIST/raw/train-labels-idx1-ubyte.gz to ./MNIST/raw
    Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz to ./MNIST/raw/t10k-images-idx3-ubyte.gz
    Extracting ./MNIST/raw/t10k-images-idx3-ubyte.gz to ./MNIST/raw
    Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz to ./MNIST/raw/t10k-labels-idx1-ubyte.gz
    Extracting ./MNIST/raw/t10k-labels-idx1-ubyte.gz to ./MNIST/raw
    Processing...
    Done!
    

    স্থানিক ট্রান্সফরমার নেটওয়ার্কগুলি চিত্রিত করা হচ্ছে

    স্থানিক ট্রান্সফর্মার নেটওয়ার্কগুলি তিনটি প্রধান উপাদান থেকে ফোটে:
    • স্থানীয়করণ নেটওয়ার্ক হ'ল একটি নিয়মিত সিএনএন যা রূপান্তরের পরামিতিগুলিকে সরিয়ে দেয়। রূপান্তরটি এই ডেটাসেট থেকে কখনই স্পষ্টভাবে শিখে নেওয়া যায় না, পরিবর্তে নেটওয়ার্ক স্বয়ংক্রিয়ভাবে স্থানিক রূপান্তরগুলি শিখবে যা বিশ্বব্যাপী নির্ভুলতা বাড়ায়।
    • গ্রিড জেনারেটর আউটপুট চিত্র থেকে প্রতিটি পিক্সেলের সাথে সম্পর্কিত ইনপুট চিত্রের স্থানাঙ্কের একটি গ্রিড উত্পন্ন করে।
    • স্যাম্পলারটি রূপান্তরটির পরামিতিগুলি ব্যবহার করে এবং এটি ইনপুট চিত্রটিতে প্রয়োগ করে।
    ../_images/stn-arch.png
    বিঃদ্রঃ
    আমাদের পাইটর্চের সর্বশেষতম সংস্করণ দরকার যাটিতে affine_grid এবং grid_sample মডিউল রয়েছে।
    class Net(nn.Module):
        def __init__(self):
            super(Net, self).__init__()
            self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
            self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
            self.conv2_drop = nn.Dropout2d()
            self.fc1 = nn.Linear(320, 50)
            self.fc2 = nn.Linear(50, 10)
    
            # Spatial transformer localization-network
            self.localization = nn.Sequential(
                nn.Conv2d(1, 8, kernel_size=7),
                nn.MaxPool2d(2, stride=2),
                nn.ReLU(True),
                nn.Conv2d(8, 10, kernel_size=5),
                nn.MaxPool2d(2, stride=2),
                nn.ReLU(True)
            )
    
            # Regressor for the 3 * 2 affine matrix
            self.fc_loc = nn.Sequential(
                nn.Linear(10 * 3 * 3, 32),
                nn.ReLU(True),
                nn.Linear(32, 3 * 2)
            )
    
            # Initialize the weights/bias with identity transformation
            self.fc_loc[2].weight.data.zero_()
            self.fc_loc[2].bias.data.copy_(torch.tensor([1, 0, 0, 0, 1, 0], dtype=torch.float))
    
        # Spatial transformer network forward function
        def stn(self, x):
            xs = self.localization(x)
            xs = xs.view(-1, 10 * 3 * 3)
            theta = self.fc_loc(xs)
            theta = theta.view(-1, 2, 3)
    
            grid = F.affine_grid(theta, x.size())
            x = F.grid_sample(x, grid)
    
            return x
    
        def forward(self, x):
            # transform the input
            x = self.stn(x)
    
            # Perform the usual forward pass
            x = F.relu(F.max_pool2d(self.conv1(x), 2))
            x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
            x = x.view(-1, 320)
            x = F.relu(self.fc1(x))
            x = F.dropout(x, training=self.training)
            x = self.fc2(x)
            return F.log_softmax(x, dim=1)
    
    
    model = Net().to(device)
    

    মডেল প্রশিক্ষণ

    এখন, মডেলটি প্রশিক্ষণের জন্য এসজিডি অ্যালগরিদম ব্যবহার করা যাক। নেটওয়ার্কটি তদারকি করা উপায়ে শ্রেণিবিন্যাসের কাজটি শিখছে। একই সময়ে মডেলটি একটি শেষ থেকে শেষ ফ্যাশনে স্বয়ংক্রিয়ভাবে এসটিএন শিখছে।
    optimizer = optim.SGD(model.parameters(), lr=0.01)
    
    
    def train(epoch):
        model.train()
        for batch_idx, (data, target) in enumerate(train_loader):
            data, target = data.to(device), target.to(device)
    
            optimizer.zero_grad()
            output = model(data)
            loss = F.nll_loss(output, target)
            loss.backward()
            optimizer.step()
            if batch_idx % 500 == 0:
                print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                    epoch, batch_idx * len(data), len(train_loader.dataset),
                    100. * batch_idx / len(train_loader), loss.item()))
    #
    # A simple test procedure to measure STN the performances on MNIST.
    #
    
    
    def test():
        with torch.no_grad():
            model.eval()
            test_loss = 0
            correct = 0
            for data, target in test_loader:
                data, target = data.to(device), target.to(device)
                output = model(data)
    
                # sum up batch loss
                test_loss += F.nll_loss(output, target, size_average=False).item()
                # get the index of the max log-probability
                pred = output.max(1, keepdim=True)[1]
                correct += pred.eq(target.view_as(pred)).sum().item()
    
            test_loss /= len(test_loader.dataset)
            print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'
                  .format(test_loss, correct, len(test_loader.dataset),
                          100. * correct / len(test_loader.dataset)))
    

    এসটিএন ফলাফল দেখার জন্য

    এখন, আমরা আমাদের শিখে নেওয়া চাক্ষুষ মনোযোগ ব্যবস্থাটির ফলাফলগুলি পরিদর্শন করব।
    প্রশিক্ষণের সময় রূপান্তরগুলি কল্পনা করতে আমরা একটি ছোট সহায়ক সাহায্যকারী ফাংশন সংজ্ঞায়িত করি।
    def convert_image_np(inp):
        """Convert a Tensor to numpy image."""
        inp = inp.numpy().transpose((1, 2, 0))
        mean = np.array([0.485, 0.456, 0.406])
        std = np.array([0.229, 0.224, 0.225])
        inp = std * inp + mean
        inp = np.clip(inp, 0, 1)
        return inp
    
    # We want to visualize the output of the spatial transformers layer
    # after the training, we visualize a batch of input images and
    # the corresponding transformed batch using STN.
    
    
    def visualize_stn():
        with torch.no_grad():
            # Get a batch of training data
            data = next(iter(test_loader))[0].to(device)
    
            input_tensor = data.cpu()
            transformed_input_tensor = model.stn(data).cpu()
    
            in_grid = convert_image_np(
                torchvision.utils.make_grid(input_tensor))
    
            out_grid = convert_image_np(
                torchvision.utils.make_grid(transformed_input_tensor))
    
            # Plot the results side-by-side
            f, axarr = plt.subplots(1, 2)
            axarr[0].imshow(in_grid)
            axarr[0].set_title('Dataset Images')
    
            axarr[1].imshow(out_grid)
            axarr[1].set_title('Transformed Images')
    
    for epoch in range(1, 20 + 1):
        train(epoch)
        test()
    
    # Visualize the STN transformation on some input batch
    visualize_stn()
    
    plt.ioff()
    plt.show()
    
    ../_images/sphx_glr_spatial_transformer_tutorial_001.png
    বাইরে:
    Train Epoch: 1 [0/60000 (0%)]   Loss: 2.319473
    Train Epoch: 1 [32000/60000 (53%)]      Loss: 0.717421
    
    Test set: Average loss: 0.2221, Accuracy: 9353/10000 (94%)
    
    Train Epoch: 2 [0/60000 (0%)]   Loss: 0.519983
    Train Epoch: 2 [32000/60000 (53%)]      Loss: 0.342855
    
    Test set: Average loss: 0.0885, Accuracy: 9735/10000 (97%)
    
    Train Epoch: 3 [0/60000 (0%)]   Loss: 0.282961
    Train Epoch: 3 [32000/60000 (53%)]      Loss: 0.348369
    
    Test set: Average loss: 0.0897, Accuracy: 9724/10000 (97%)
    
    Train Epoch: 4 [0/60000 (0%)]   Loss: 0.240569
    Train Epoch: 4 [32000/60000 (53%)]      Loss: 0.165905
    
    Test set: Average loss: 0.0590, Accuracy: 9821/10000 (98%)
    
    Train Epoch: 5 [0/60000 (0%)]   Loss: 0.132893
    Train Epoch: 5 [32000/60000 (53%)]      Loss: 0.090726
    
    Test set: Average loss: 0.0673, Accuracy: 9797/10000 (98%)
    
    Train Epoch: 6 [0/60000 (0%)]   Loss: 0.395699
    Train Epoch: 6 [32000/60000 (53%)]      Loss: 0.126218
    
    Test set: Average loss: 0.0867, Accuracy: 9725/10000 (97%)
    
    Train Epoch: 7 [0/60000 (0%)]   Loss: 0.299036
    Train Epoch: 7 [32000/60000 (53%)]      Loss: 0.291607
    
    Test set: Average loss: 0.0443, Accuracy: 9856/10000 (99%)
    
    Train Epoch: 8 [0/60000 (0%)]   Loss: 0.139137
    Train Epoch: 8 [32000/60000 (53%)]      Loss: 0.159663
    
    Test set: Average loss: 0.0407, Accuracy: 9866/10000 (99%)
    
    Train Epoch: 9 [0/60000 (0%)]   Loss: 0.170520
    Train Epoch: 9 [32000/60000 (53%)]      Loss: 0.152838
    
    Test set: Average loss: 0.0425, Accuracy: 9867/10000 (99%)
    
    Train Epoch: 10 [0/60000 (0%)]  Loss: 0.135774
    Train Epoch: 10 [32000/60000 (53%)]     Loss: 0.163002
    
    Test set: Average loss: 0.0513, Accuracy: 9856/10000 (99%)
    
    Train Epoch: 11 [0/60000 (0%)]  Loss: 0.083965
    Train Epoch: 11 [32000/60000 (53%)]     Loss: 0.056999
    
    Test set: Average loss: 0.0442, Accuracy: 9861/10000 (99%)
    
    Train Epoch: 12 [0/60000 (0%)]  Loss: 0.118292
    Train Epoch: 12 [32000/60000 (53%)]     Loss: 0.068524
    
    Test set: Average loss: 0.0459, Accuracy: 9873/10000 (99%)
    
    Train Epoch: 13 [0/60000 (0%)]  Loss: 0.269368
    Train Epoch: 13 [32000/60000 (53%)]     Loss: 0.092706
    
    Test set: Average loss: 0.0390, Accuracy: 9879/10000 (99%)
    
    Train Epoch: 14 [0/60000 (0%)]  Loss: 0.143967
    Train Epoch: 14 [32000/60000 (53%)]     Loss: 0.063184
    
    Test set: Average loss: 0.0373, Accuracy: 9887/10000 (99%)
    
    Train Epoch: 15 [0/60000 (0%)]  Loss: 0.040783
    Train Epoch: 15 [32000/60000 (53%)]     Loss: 0.123315
    
    Test set: Average loss: 0.0443, Accuracy: 9854/10000 (99%)
    
    Train Epoch: 16 [0/60000 (0%)]  Loss: 0.125811
    Train Epoch: 16 [32000/60000 (53%)]     Loss: 0.020368
    
    Test set: Average loss: 0.0341, Accuracy: 9900/10000 (99%)
    
    Train Epoch: 17 [0/60000 (0%)]  Loss: 0.101430
    Train Epoch: 17 [32000/60000 (53%)]     Loss: 0.614333
    
    Test set: Average loss: 0.0367, Accuracy: 9878/10000 (99%)
    
    Train Epoch: 18 [0/60000 (0%)]  Loss: 0.191310
    Train Epoch: 18 [32000/60000 (53%)]     Loss: 0.049821
    
    Test set: Average loss: 0.0301, Accuracy: 9907/10000 (99%)
    
    Train Epoch: 19 [0/60000 (0%)]  Loss: 0.114177
    Train Epoch: 19 [32000/60000 (53%)]     Loss: 0.069911
    
    Test set: Average loss: 0.0339, Accuracy: 9898/10000 (99%)
    
    Train Epoch: 20 [0/60000 (0%)]  Loss: 0.068934
    Train Epoch: 20 [32000/60000 (53%)]     Loss: 0.055552
    
    Test set: Average loss: 0.0385, Accuracy: 9886/10000 (99%)
    
    স্ক্রিপ্টের মোট চলমান সময়: (2 মিনিট 38.504 সেকেন্ড)

  • 0 comments:

    Post a Comment

    New Research

    Attention Mechanism Based Multi Feature Fusion Forest for Hyperspectral Image Classification.

    CBS-GAN: A Band Selection Based Generative Adversarial Net for Hyperspectral Sample Generation.

    Multi-feature Fusion based Deep Forest for Hyperspectral Image Classification.

    ADDRESS

    388 Lumo Rd, Hongshan, Wuhan, Hubei, China

    EMAIL

    contact-m.zamanb@yahoo.com
    mostofa.zaman@cug.edu.cn

    TELEPHONE

    #
    #

    MOBILE

    +8615527370302,
    +8807171546477