TorchGeo: مقدمه ای برای تشخیص اشیاء مثال

Summarize this content to 400 words in Persian Lang
TorchGeo یک کتابخانه دامنه PyTorch مشابه Torchvision است که برای داده های مکانی تخصصی است. مجموعههای داده، نمونهگرها، تبدیلها و مدلهای از پیش آموزشدیدهشده برای اطلاعات مکانی را ارائه میدهد. این آموزش یک مثال تشخیص شی در TorchGeo را معرفی می کند.
این مثال بر اساس نسخه نمایشی notebookCode است
ارائه شده توسط Caleb Robinson از Microsoft AI for Good، با توضیحات اضافه شده.انتخاب پردازنده گرافیکی
قبل از شروع آموزش، Runtime > Change runtime type را از منوی بالای نوت بوک انتخاب کنید، سپس از منوی Hardware Accelerator GPU را انتخاب کنید و ذخیره کنید. من مشترک Colab Pro هستم و از پردازنده گرافیکی A100 استفاده می کنم.نصب TorchGeo
TorchGeo تنها مجموعهای از وابستگیهای ضروری را بهطور پیشفرض با نصب pip torchgeo نصب میکند تا نصب نسبتاً سبک باشد. برای نصب کامل که شامل مجموعه ای اختیاری از وابستگی ها می شود، می توانید از pip install torchgeo استفاده کنید[datasets].
pip install torchgeo: Installs the “Required” set of dependencies.
pip install torchgeo[datasets]: Full installation that includes the “Optional” set of dependencies.
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
%pip install -q -U torchgeo[datasets]
نصب PyTorch Lightning
PyTorch Lightning یک رابط سطح بالا برای PyTorch ارائه می دهد که فرآیند آموزش مدل را ساده و ساده می کند.
!pip install -q -U pytorch-lightning
دانلود مجموعه داده VHR-10
مجموعه داده VHR-10، ارائه شده توسط دانشگاه پلی تکنیک نورث وسترن (NWPU) در چین، یک مجموعه داده تصویر سنجش از راه دور با وضوح بسیار بالا (VHR) است که شامل 10 کلاس است.
از مجموع 800 تصویر سنجش از راه دور نوری VHR، 715 مورد از این تصاویر رنگی با وضوح فضایی 0.5 تا 2 متر از Google Earth گرفته شده است. 85 تصویر مادون قرمز رنگی (CIR) که از مجموعه داده Vaihingen مشتق شدهاند، دارای وضوح فضایی 0.08 متر هستند.
Note: Pan-sharpening is a technique that combines the high-resolution detail of the panchromatic band with the lower resolution color information of other bands.
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
مجموعه داده به دو مجموعه تقسیم می شود:
Positive image set (650 images): Images containing at least one object.
Negative image set (150 images): Images without any objects.
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
مجموعه تصویر مثبت شامل اشیایی از ده کلاس زیر است:
Airplanes (757 instances)
Ships (302 instances)
Storage tanks (655 instances)
Baseball diamonds (390 instances)
Tennis courts (524 instances)
Basketball courts (159 instances)
Ground track fields (163 instances)
Harbors (224 instances)
Bridges (124 instances)
Vehicles (477 instances)
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
مجموعه داده شامل جعبههای مرزبندی تشخیص شی و ماسکهای تقسیمبندی نمونه است.
هنگام استفاده از این مجموعه داده برای تحقیق، لطفاً به مقالات زیر استناد کنید:
12[3]https://doi.org/10.3390/rs12060989)
کتابخانه های لازم را وارد کنید و مجموعه داده VHR-10 را دانلود کنید.
مشعل وارداتیاز torchgeo.datasets واردات VHR10از torchgeo.trainers ObjectDetectionTask را وارد می کند
مشعل وارداتیاز torch.utils.data import DataLoaderوارد کردن lightning.pytorch به عنوان pl
matplotlib.pyplot را به صورت plt وارد کنید
واردات سیستم عامل، gdown
os.makedirs('data/VHR10/', exist_ok=True)
url=”https://drive.google.com/uc?id=1–foZ3dV5OCsqXQXT84UeKtrAqc5CkAE”output_path=”data/VHR10/NWPU VHR-10 database.rar”gdown.download(url، output_path، quiet=False)
کد زیر مجموعه داده VHR10 را در مکان داده/VHR10/ با تقسیم «مثبت» دانلود میکند و با استفاده از یک تابع پیشپردازش مشخص، تبدیلها را اعمال میکند. نقش تابع پیش پردازش این است که هر تصویر را به یک نوع ممیز شناور تبدیل می کند و با تقسیم بر 255، مقادیر را بین 0 و 1 عادی می کند. این فرآیند به آماده سازی داده ها در فرمی مناسب برای آموزش مدل کمک می کند.
پیش پردازش def (نمونه):نمونه[“image”] = نمونه[“image”].float() / 255.0نمونه برگرداندن
ds = VHR10(root=”data/VHR10/”,تقسیم “مثبت”،تبدیل = پیش پردازش،دانلود=درستچک سام = درست است،)
کاوش مجموعه داده VHR-10
حال بیایید نگاهی به مجموعه تصویر مثبت بیندازیم. در مجموع 650 تصویر وجود دارد.
print(f” مجموعه داده VHR-10: {len(ds)}”)
به اولین مورد در مجموعه داده ds دسترسی پیدا کنید و ابعاد تصویر مربوط به کلید “تصویر” را بررسی کنید. ویژگی shape ابعاد تصویر را که در قالب (تعداد کانال، ارتفاع، عرض) نشان داده شده است، برمی گرداند.
ds[0][“image”].شکل
مشعل.اندازه([3, 808, 958])
بیایید تصویر مورد ششم را به صورت تصادفی باز کنیم. قبل از نمایش، ابعاد تصویر را از (تعداد کانال، ارتفاع، عرض) به (ارتفاع، عرض، تعداد کانال) تغییر دهید.
تصویر = ds[5][“image”].permute(1، 2، 0)plt.imshow (تصویر)plt.show()
مجموعه داده VHR10 در TorchGeo شامل یک روش نمودار است که حاشیه نویسی های موجود در annotations.json را به تصویر می کشد. این حاشیهنویسیها اطلاعاتی را برای تشخیص شی و تقسیمبندی نمونه، از جمله عناصر بصری مانند جعبههای مرزی و ماسکها ارائه میکنند. این امکان تجسم مستقیم تصاویر را با حاشیه نویسی حقیقت زمینی که روی آنها مشخص شده است را فراهم می کند.
ds.plot(ds[5])plt.savefig('ground_truth.png'، bbox_inches=”tight”)plt.show()
آموزش مدل
در زیر روند استفاده از DataLoader PyTorch برای تعریف تابع collate_fn و استفاده از آن برای بارگذاری داده ها نشان داده می شود:
The collate_fn function extracts the image, boxes, labels, and masks from each item in a given batch and constructs a new batch dictionary. This newly constructed batch is then directly used for model training or evaluation. The DataLoader prepares the data in batch units for the model using this function. The option shuffle=True randomly shuffles the order of the dataset to reduce dependency on the sequence of data during model training.
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
def collate_fn (دسته):دسته_جدید = {“تصویر”: [item[“image”] برای آیتم در دسته]، # تصاویر”جعبه”: [item[“boxes”] برای مورد در دسته]، # جعبه محدودکننده”برچسب ها”: [item[“labels”] برای مورد در دسته]، # برچسب”ماسک”: [item[“masks”] برای مورد در دسته]، # ماسک}بازگشت دسته_جدید # بازگرداندن دسته جدید
dl = DataLoader(ds، # مجموعه دادهbatch_size=32، # تعداد داده برای بارگیری در یک زمانnum_workers=2، # تعداد فرآیندهای مورد استفاده برای بارگذاری داده هاshuffle=True، # آیا باید مجموعه داده را قبل از بارگیری به هم بزنیم یا نهcollate_fn=collate_fn، تابع # collate_fn برای پردازش دسته ای)
این کد یک کلاس آموزشی برای وظایف تشخیص شی تعریف می کند و نمونه ای از آن را ایجاد می کند. نکته مهم این است که کلاس برای مدیریت ورودی های با اندازه متغیر طراحی شده است.
The VariableSizeInputObjectDetectionTask class inherits from a standard ObjectDetectionTask and defines the training_step method to process variable-sized input images within each batch. This allows the model to effectively learn from input images of various sizes. The created instance is prepared to perform object detection tasks using the Faster R-CNN model with specified settings.
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
کلاس VariableSizeInputObjectDetectionTask(ObjectDetectionTask):# مرحله آموزش را تعریف کنیدdef training_step(self, batch, batch_idx, dataloader_idx=0):x = دسته ای[“image”] #تصویراندازه_ دسته = len(x) # تنظیم اندازه دسته (تعداد تصاویر)y = [{“boxes”: batch[“boxes”][i]، “برچسب”: دسته ای[“labels”][i]}برای من در محدوده (بچه_اندازه)]# اطلاعات جعبه و برچسب را برای هر تصویر استخراج کنیدloss_dict = خود (x, y) # ضررtrain_loss: Tensor = sum(loss_dict.values()) # ضرر آموزش (مجموع مقادیر ضرر)self.log_dict(loss_dict) # مقادیر ضرر را ثبت کنیدبازگشت_بازگشت قطار # ضرر تمرین برگشت
task = VariableSizeInputObjectDetectionTask(model=”faster-rcnn”، # مدل سریعتر R-CNNbackbone=”resnet18″، # معماری شبکه عصبی ResNet18وزن=درست، # از وزنه های از پیش تمرین شده استفاده کنیدin_channels=3، # تعداد کانال در تصویر ورودی (تصاویر RGB)num_classes=11، # تعداد کلاس برای طبقه بندی (10 + پس زمینه)trainable_layers=3، # تعداد لایه های قابل آموزشlr=1e-3، # میزان یادگیریصبر=10، # تعداد تکرارهای صبر را برای توقف زودهنگام تنظیم کنیدfreeze_backbone=نادرست، # آیا باید با وزنههای شبکه ستون فقرات بدون فریز تمرین کنید)task.monitor = “loss_classifier” # معیار را برای نظارت تنظیم کنید (در اینجا، از دست دادن طبقه بندی کننده)
با استفاده از کتابخانه PyTorch Lightning پیکربندی را برای آموزش مدل آماده کنید. تنظیمات زیر آموزش مدل با GPU را مشخص میکند، لاگهای آموزشی و نقاط بازرسی را در فهرست «logs/» ذخیره میکند، و آموزش را طوری تنظیم میکند که حداقل 6 دوره و حداکثر 100 دوره اجرا شود.
مربی = pl.trainer(default_root_dir=”logs/”, # دایرکتوری پیش فرض را تنظیم کنیدaccelerator=”gpu”، # تنظیم نوع شتاب دهنده سخت افزاری برای آموزش (با استفاده از GPU)دستگاه ها=[0]، # لیست شناسه های دستگاه برای استفاده ([0] یعنی اولین پردازنده گرافیکی)min_epochs=6، # حداقل تعداد دوره های آموزشی را تنظیم کنیدmax_epochs=100، # حداکثر تعداد دوره های آموزشی را تنظیم کنیدlog_every_n_steps=20، # تعداد دفعات ورود پس از چند مرحله را تنظیم کنید)
%% زمان
trainer.fit(task, train_dataloaders=dl)
مثال استنتاج مدل
دسته بعدی را از بارگذار داده (dl) بازیابی کنید.
دسته = بعدی (iter(dl))
مدل را از کار (وظیفه) بدست آورید و آن را در حالت ارزیابی قرار دهید. این عمل لایه های خاصی مانند Dropout را که در حین آموزش استفاده می شود غیرفعال می کند. Dropout یک تکنیک منظم سازی بسیار موثر است که برای جلوگیری از برازش بیش از حد در شبکه های عصبی طراحی شده است.
استفاده از torch.no_grad () محاسبات گرادیان را غیرفعال می کند، مصرف حافظه را کاهش می دهد و سرعت محاسبات را افزایش می دهد. این زمانی استفاده می شود که مدل در طول مراحل ارزیابی یا استنتاج به روز نمی شود. اکنون دسته تصویر را از مدل عبور دهید تا نتایج پیش بینی را به دست آورید.
مدل = وظیفه.مدلmodel.eval()
با torch.no_grad():خارج = مدل ( دسته ای[“image”])
یک نمونه برای یک شاخص دسته ای خاص تعریف کنید.
def create_sample(batch, out, batch_idx):بازگشت {«تصویر»: دسته ای[“image”][batch_idx]، # تصویر«جعبه»: دسته[“boxes”][batch_idx]، # جعبه های محدود کننده واقعی«برچسب ها»: دسته ای[“labels”][batch_idx]، # برچسب واقعی« نقاب » : دسته[“masks”][batch_idx]# ماسک واقعی”prediction_labels”: خارج شد[batch_idx][“labels”]، # برچسب های پیش بینی شده توسط مدل”prediction_boxes”: خارج شد[batch_idx][“boxes”]، # جعبه های محدود پیش بینی شده توسط مدل”prediction_scores”: خارج شد[batch_idx][“scores”]، # امتیاز اعتماد برای هر پیش بینی}
batch_idx = 0نمونه = create_sample (batch, out, batch_idx)
حال، نمونه داده شده را تجسم کنید. روش نمودار تصویر موجود در نمونه را به همراه برچسبها و جعبههای مرزبندی واقعی و برچسبها و جعبههای مرزبندی پیشبینیشده تجسم میکند.
ds.plot (نمونه)plt.savefig('inference.png', bbox_inches=”tight”)plt.show()
batch_idx = 3نمونه = create_sample (batch, out, batch_idx)
ds.plot (نمونه)plt.show()
batch_idx = 5نمونه = create_sample (batch, out, batch_idx)
ds.plot (نمونه)plt.show()
TorchGeo یک کتابخانه دامنه PyTorch مشابه Torchvision است که برای داده های مکانی تخصصی است. مجموعههای داده، نمونهگرها، تبدیلها و مدلهای از پیش آموزشدیدهشده برای اطلاعات مکانی را ارائه میدهد. این آموزش یک مثال تشخیص شی در TorchGeo را معرفی می کند.
این مثال بر اساس نسخه نمایشی notebookCode است
ارائه شده توسط Caleb Robinson از Microsoft AI for Good، با توضیحات اضافه شده.
انتخاب پردازنده گرافیکی
قبل از شروع آموزش، Runtime > Change runtime type را از منوی بالای نوت بوک انتخاب کنید، سپس از منوی Hardware Accelerator GPU را انتخاب کنید و ذخیره کنید. من مشترک Colab Pro هستم و از پردازنده گرافیکی A100 استفاده می کنم.
نصب TorchGeo
TorchGeo تنها مجموعهای از وابستگیهای ضروری را بهطور پیشفرض با نصب pip torchgeo نصب میکند تا نصب نسبتاً سبک باشد. برای نصب کامل که شامل مجموعه ای اختیاری از وابستگی ها می شود، می توانید از pip install torchgeo استفاده کنید[datasets].
pip install torchgeo: Installs the "Required" set of dependencies.
pip install torchgeo[datasets]: Full installation that includes the "Optional" set of dependencies.
%pip install -q -U torchgeo[datasets]
نصب PyTorch Lightning
PyTorch Lightning یک رابط سطح بالا برای PyTorch ارائه می دهد که فرآیند آموزش مدل را ساده و ساده می کند.
!pip install -q -U pytorch-lightning
دانلود مجموعه داده VHR-10
مجموعه داده VHR-10، ارائه شده توسط دانشگاه پلی تکنیک نورث وسترن (NWPU) در چین، یک مجموعه داده تصویر سنجش از راه دور با وضوح بسیار بالا (VHR) است که شامل 10 کلاس است.
از مجموع 800 تصویر سنجش از راه دور نوری VHR، 715 مورد از این تصاویر رنگی با وضوح فضایی 0.5 تا 2 متر از Google Earth گرفته شده است. 85 تصویر مادون قرمز رنگی (CIR) که از مجموعه داده Vaihingen مشتق شدهاند، دارای وضوح فضایی 0.08 متر هستند.
Note: Pan-sharpening is a technique that combines the high-resolution detail of the panchromatic band with the lower resolution color information of other bands.
مجموعه داده به دو مجموعه تقسیم می شود:
Positive image set (650 images): Images containing at least one object.
Negative image set (150 images): Images without any objects.
مجموعه تصویر مثبت شامل اشیایی از ده کلاس زیر است:
Airplanes (757 instances)
Ships (302 instances)
Storage tanks (655 instances)
Baseball diamonds (390 instances)
Tennis courts (524 instances)
Basketball courts (159 instances)
Ground track fields (163 instances)
Harbors (224 instances)
Bridges (124 instances)
Vehicles (477 instances)
مجموعه داده شامل جعبههای مرزبندی تشخیص شی و ماسکهای تقسیمبندی نمونه است.
هنگام استفاده از این مجموعه داده برای تحقیق، لطفاً به مقالات زیر استناد کنید:
12[3]https://doi.org/10.3390/rs12060989)
کتابخانه های لازم را وارد کنید و مجموعه داده VHR-10 را دانلود کنید.
مشعل وارداتی
از torchgeo.datasets واردات VHR10
از torchgeo.trainers ObjectDetectionTask را وارد می کند
مشعل وارداتی
از torch.utils.data import DataLoader
وارد کردن lightning.pytorch به عنوان pl
matplotlib.pyplot را به صورت plt وارد کنید
واردات سیستم عامل، gdown
os.makedirs('data/VHR10/', exist_ok=True)
url=”https://drive.google.com/uc?id=1–foZ3dV5OCsqXQXT84UeKtrAqc5CkAE”
output_path=”data/VHR10/NWPU VHR-10 database.rar”
gdown.download(url، output_path، quiet=False)
کد زیر مجموعه داده VHR10 را در مکان داده/VHR10/ با تقسیم «مثبت» دانلود میکند و با استفاده از یک تابع پیشپردازش مشخص، تبدیلها را اعمال میکند. نقش تابع پیش پردازش این است که هر تصویر را به یک نوع ممیز شناور تبدیل می کند و با تقسیم بر 255، مقادیر را بین 0 و 1 عادی می کند. این فرآیند به آماده سازی داده ها در فرمی مناسب برای آموزش مدل کمک می کند.
پیش پردازش def (نمونه):
نمونه[“image”] = نمونه[“image”].float() / 255.0
نمونه برگرداندن
ds = VHR10(
root=”data/VHR10/”,
تقسیم “مثبت”،
تبدیل = پیش پردازش،
دانلود=درست
چک سام = درست است،
)
کاوش مجموعه داده VHR-10
حال بیایید نگاهی به مجموعه تصویر مثبت بیندازیم. در مجموع 650 تصویر وجود دارد.
print(f” مجموعه داده VHR-10: {len(ds)}”)
به اولین مورد در مجموعه داده ds دسترسی پیدا کنید و ابعاد تصویر مربوط به کلید “تصویر” را بررسی کنید. ویژگی shape ابعاد تصویر را که در قالب (تعداد کانال، ارتفاع، عرض) نشان داده شده است، برمی گرداند.
ds[0][“image”].شکل
مشعل.اندازه([3, 808, 958])
بیایید تصویر مورد ششم را به صورت تصادفی باز کنیم. قبل از نمایش، ابعاد تصویر را از (تعداد کانال، ارتفاع، عرض) به (ارتفاع، عرض، تعداد کانال) تغییر دهید.
تصویر = ds[5][“image”].permute(1، 2، 0)
plt.imshow (تصویر)
plt.show()
مجموعه داده VHR10 در TorchGeo شامل یک روش نمودار است که حاشیه نویسی های موجود در annotations.json را به تصویر می کشد. این حاشیهنویسیها اطلاعاتی را برای تشخیص شی و تقسیمبندی نمونه، از جمله عناصر بصری مانند جعبههای مرزی و ماسکها ارائه میکنند. این امکان تجسم مستقیم تصاویر را با حاشیه نویسی حقیقت زمینی که روی آنها مشخص شده است را فراهم می کند.
ds.plot(ds[5])
plt.savefig('ground_truth.png'، bbox_inches=”tight”)
plt.show()
آموزش مدل
در زیر روند استفاده از DataLoader PyTorch برای تعریف تابع collate_fn و استفاده از آن برای بارگذاری داده ها نشان داده می شود:
The collate_fn function extracts the image, boxes, labels, and masks from each item in a given batch and constructs a new batch dictionary. This newly constructed batch is then directly used for model training or evaluation. The DataLoader prepares the data in batch units for the model using this function. The option shuffle=True randomly shuffles the order of the dataset to reduce dependency on the sequence of data during model training.
def collate_fn (دسته):
دسته_جدید = {
“تصویر”: [item[“image”] برای آیتم در دسته]، # تصاویر
“جعبه”: [item[“boxes”] برای مورد در دسته]، # جعبه محدودکننده
“برچسب ها”: [item[“labels”] برای مورد در دسته]، # برچسب
“ماسک”: [item[“masks”] برای مورد در دسته]، # ماسک
}
بازگشت دسته_جدید # بازگرداندن دسته جدید
dl = DataLoader(
ds، # مجموعه داده
batch_size=32، # تعداد داده برای بارگیری در یک زمان
num_workers=2، # تعداد فرآیندهای مورد استفاده برای بارگذاری داده ها
shuffle=True، # آیا باید مجموعه داده را قبل از بارگیری به هم بزنیم یا نه
collate_fn=collate_fn، تابع # collate_fn برای پردازش دسته ای
)
این کد یک کلاس آموزشی برای وظایف تشخیص شی تعریف می کند و نمونه ای از آن را ایجاد می کند. نکته مهم این است که کلاس برای مدیریت ورودی های با اندازه متغیر طراحی شده است.
The VariableSizeInputObjectDetectionTask class inherits from a standard ObjectDetectionTask and defines the training_step method to process variable-sized input images within each batch. This allows the model to effectively learn from input images of various sizes. The created instance is prepared to perform object detection tasks using the Faster R-CNN model with specified settings.
کلاس VariableSizeInputObjectDetectionTask(ObjectDetectionTask):
# مرحله آموزش را تعریف کنید
def training_step(self, batch, batch_idx, dataloader_idx=0):
x = دسته ای[“image”] #تصویر
اندازه_ دسته = len(x) # تنظیم اندازه دسته (تعداد تصاویر)
y = [
{“boxes”: batch[“boxes”][i]، “برچسب”: دسته ای[“labels”][i]}
برای من در محدوده (بچه_اندازه)
]# اطلاعات جعبه و برچسب را برای هر تصویر استخراج کنید
loss_dict = خود (x, y) # ضرر
train_loss: Tensor = sum(loss_dict.values()) # ضرر آموزش (مجموع مقادیر ضرر)
self.log_dict(loss_dict) # مقادیر ضرر را ثبت کنید
بازگشت_بازگشت قطار # ضرر تمرین برگشت
task = VariableSizeInputObjectDetectionTask(
model=”faster-rcnn”، # مدل سریعتر R-CNN
backbone=”resnet18″، # معماری شبکه عصبی ResNet18
وزن=درست، # از وزنه های از پیش تمرین شده استفاده کنید
in_channels=3، # تعداد کانال در تصویر ورودی (تصاویر RGB)
num_classes=11، # تعداد کلاس برای طبقه بندی (10 + پس زمینه)
trainable_layers=3، # تعداد لایه های قابل آموزش
lr=1e-3، # میزان یادگیری
صبر=10، # تعداد تکرارهای صبر را برای توقف زودهنگام تنظیم کنید
freeze_backbone=نادرست، # آیا باید با وزنههای شبکه ستون فقرات بدون فریز تمرین کنید
)
task.monitor = “loss_classifier” # معیار را برای نظارت تنظیم کنید (در اینجا، از دست دادن طبقه بندی کننده)
با استفاده از کتابخانه PyTorch Lightning پیکربندی را برای آموزش مدل آماده کنید. تنظیمات زیر آموزش مدل با GPU را مشخص میکند، لاگهای آموزشی و نقاط بازرسی را در فهرست «logs/» ذخیره میکند، و آموزش را طوری تنظیم میکند که حداقل 6 دوره و حداکثر 100 دوره اجرا شود.
مربی = pl.trainer(
default_root_dir=”logs/”, # دایرکتوری پیش فرض را تنظیم کنید
accelerator=”gpu”، # تنظیم نوع شتاب دهنده سخت افزاری برای آموزش (با استفاده از GPU)
دستگاه ها=[0]، # لیست شناسه های دستگاه برای استفاده ([0] یعنی اولین پردازنده گرافیکی)
min_epochs=6، # حداقل تعداد دوره های آموزشی را تنظیم کنید
max_epochs=100، # حداکثر تعداد دوره های آموزشی را تنظیم کنید
log_every_n_steps=20، # تعداد دفعات ورود پس از چند مرحله را تنظیم کنید
)
%% زمان
trainer.fit(task, train_dataloaders=dl)
مثال استنتاج مدل
دسته بعدی را از بارگذار داده (dl) بازیابی کنید.
دسته = بعدی (iter(dl))
مدل را از کار (وظیفه) بدست آورید و آن را در حالت ارزیابی قرار دهید. این عمل لایه های خاصی مانند Dropout را که در حین آموزش استفاده می شود غیرفعال می کند. Dropout یک تکنیک منظم سازی بسیار موثر است که برای جلوگیری از برازش بیش از حد در شبکه های عصبی طراحی شده است.
استفاده از torch.no_grad () محاسبات گرادیان را غیرفعال می کند، مصرف حافظه را کاهش می دهد و سرعت محاسبات را افزایش می دهد. این زمانی استفاده می شود که مدل در طول مراحل ارزیابی یا استنتاج به روز نمی شود. اکنون دسته تصویر را از مدل عبور دهید تا نتایج پیش بینی را به دست آورید.
مدل = وظیفه.مدل
model.eval()
با torch.no_grad():
خارج = مدل ( دسته ای[“image”])
یک نمونه برای یک شاخص دسته ای خاص تعریف کنید.
def create_sample(batch, out, batch_idx):
بازگشت {
«تصویر»: دسته ای[“image”][batch_idx]، # تصویر
«جعبه»: دسته[“boxes”][batch_idx]، # جعبه های محدود کننده واقعی
«برچسب ها»: دسته ای[“labels”][batch_idx]، # برچسب واقعی
« نقاب » : دسته[“masks”][batch_idx]# ماسک واقعی
“prediction_labels”: خارج شد[batch_idx][“labels”]، # برچسب های پیش بینی شده توسط مدل
“prediction_boxes”: خارج شد[batch_idx][“boxes”]، # جعبه های محدود پیش بینی شده توسط مدل
“prediction_scores”: خارج شد[batch_idx][“scores”]، # امتیاز اعتماد برای هر پیش بینی
}
batch_idx = 0
نمونه = create_sample (batch, out, batch_idx)
حال، نمونه داده شده را تجسم کنید. روش نمودار تصویر موجود در نمونه را به همراه برچسبها و جعبههای مرزبندی واقعی و برچسبها و جعبههای مرزبندی پیشبینیشده تجسم میکند.
ds.plot (نمونه)
plt.savefig('inference.png', bbox_inches=”tight”)
plt.show()
batch_idx = 3
نمونه = create_sample (batch, out, batch_idx)
ds.plot (نمونه)
plt.show()
batch_idx = 5
نمونه = create_sample (batch, out, batch_idx)
ds.plot (نمونه)
plt.show()