استفاده از شبکه های عصبی عمیق آموزش دیده برای شناسایی تصویر حیوانات

شناسایی تصویر

درود همراهان گرامی

بعد از مدت ها برگشتم و امروز دوست دارم با استفاده از یک شبکه عصبی ترین شده(Trained) تصاویری که از حیوانات مختلف داریم را شناسایی کنیم. برای اینکار از زبان برنامه نویسی پایتون و کتابخانه پایتورچ در jupyter notebook استفاده خواهیم کرد.

برای شروع ما models را از torchvision فراخوانی می کنیم تا ببینیم چه شبکه های ترین شده ای در دسترس ما قرار دارد:

from torchvision import models
dir(models)

با اجرای کدهای بالا لیستی از شبکه ها به شما نمایش داده خواهد شد. ما میخواهیم از شبکه resnet101 استفاده نماییم برای اینکار کد زیر را در سلولی جدید وارد و آن را اجرا نمایید:

resnet = models.resnet101(pretrained=True)

و با اجرای کد زیر می توانید لایه های مختلف شبکه وارد شده را ببینید:

resnet

در ادامه برای اینکه تصویر ورودی ما به شکل ورودی خواسته شده شبکه resnet برای دسته بندی آن تبدیل شود از transforms به صورت زیر استفاده می نماییم:

from torchvision import transforms
preprocess = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(
    mean = [0.485, 0.456, 0.406],
    std = [0.229, 0.224, 0.225])
])

و در ادامه تصویر انتخابی خود را به این صورت آدرس دهی و نمایش می دهیم:

from PIL import Image
img = Image.open("../pytorch-pdf/DS/11.jpg")
img

و با استفاده از preprocess ساخته شده در کدهای قبل، تصویر را به تنسور تبدیل می نماییم:

img_t = preprocess(img)
img_t

در ادامه برای استفاده از شبکه کتابخانه پایتورچ را ایمپورت کرده و تصویر را به صورت زیر به شبکه داده و خروجی را دریافت می نماییم:

import torch
batch_t = torch.unsqueeze(img_t, 0)
resnet.eval()
out = resnet(batch_t)
out

اکنون برای اینکه بتوانیم دسته بندی که شبکه به تصویرمان داده است را پیدا کنیم از فایل متنی دسته بندی ها که در گیت هاب بنده و در این آدرس قابل دسترسی هست، آدرس فایل متنی را خوانده و به این صورت عمل می نماییم:

with open('../pytorch-pdf/DS/imagenet_classes.txt') as f:
    labels = [line.strip() for line in f.readlines()]
_, index = torch.max(out, 1)
percentage = torch.nn.functional.softmax(out, dim=1)[0] * 100
labels[index[0]], percentage[index[0]].item()

به همین راحتی دسته بندی مورد نظر را با درصد احتمال آن برای شما نمایش داده خواهد شد.

شما می توانید در گیت هاب من به کدها و خروجی های گرفته شده دسترسی داشته باشید:

taghanaki/resnet101-pretrained: A pretrained network that recognizes the subject of an image (github.com)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *