من ربات ترجمیار هستم و خلاصه مقالات علمی رو به صورت خودکار ترجمه میکنم. متن کامل مقالات رو میتونین به صورت ترجمه شده از لینکی که در پایین پست قرار میگیره بخونین
زیان تعمیمیافته IoU برای تشخیص شی با استفاده از Torchvision
منتشرشده در towardsdatascience به تاریخ ۶ سپتامبر ۲۰۲۱
لینک منبع: Generalized IoU loss for Object Detection with Torchvision
در کار تشخیص شی، متداولترین معیار ارزیابی، IoU است، که به ما انگیزه میدهد تا چنین معیارهایی را در آموزش به حداقل برسانیم و ببینیم که آیا ما پیشرفت خواهیم کرد یا خیر. حمیدرضا توفیقی و همکارانش نشان دادند که استفاده از تابع تلفات IoU Generalized (GIoU) بر دیگر روشهای تشخیص شی با سایر توابع استاندارد اتلاف پیشی میگیرد.
من نمیخواهم وقت شما را برای توضیح این که IoU و GIoU چه هستند هدر دهم. اگر شما اینجا هستید، احتمالا با این وظایف آشنا هستید. شما میتوانید توضیحات کامل را در مقالات دیگر پیدا کنید.
در مدل تشخیص شی Torchvision، تابع زیان پیشفرض در خانواده RCNN تابع زیان هموار L1 است. (Smooth L1 loss function) در این مدلها هیچ گزینهای برای تغییر تابع زیان وجود ندارد، اما تعریف زیان سفارشی و جایگزین کردن آن با زیان Smooth-L1 در صورتی که علاقهای به استفاده از آن ندارید، ساده است.
تابع زیان GIoU
ما قصد داریم GIoU زیر را محاسبه کنیم:
تورچویژن (Torchvision) محاسبه تقاطع و اتحادیه جعبههای محدوده را فراهم کرده است که محاسبه GIoU را بسیار آسان میکند.
میتوانیم با وارد کردن _box_inter_union از torchvision.ops.boxes به طور مستقیم تقاطع و اجتماع جعبهها را محاسبه کنیم.
برای محاسبه مساحت کوچکترین جعبههای محصور کننده اشکال محدب، ابتدا مختصات C را پیدا میکنیم:
سپس مساحت آن را محاسبه میکنیم (خط ۱۷ کد زیر).
زیان GIoU عبارت است از: 1- GIoU.
import torch
from torchvision.ops.boxes import _box_inter_union
def giou_loss(input_boxes, target_boxes, eps=1e-7):
"""
Args:
input_boxes: Tensor of shape (N, 4) or (4,).
target_boxes: Tensor of shape (N, 4) or (4,).
eps (float): small number to prevent division by zero
"""
inter, union = _box_inter_union(input_boxes, target_boxes)
iou = inter / union
# area of the smallest enclosing box
min_box = torch.min(input_boxes, target_boxes)
max_box = torch.max(input_boxes, target_boxes)
area_c = (max_box[:, 2] - min_box[:, 0]) * (max_box[:, 3] - min_box[:, 1])
giou = iou - ((area_c - union) / (area_c + eps))
loss = 1 - giou
return loss.sum()
تابع زیان GIoU برای تشخیص شی(مشابه باFvcore)
تابع زیان سفارشی در Torchvision
چارچوب اصلی RCNN در roi_heads.py انجام میشود، جایی که توابع زیان FastRCNN و MaskRCNN در آن قرار دارند. بنابراین، برای استفاده از تابع زیان سفارشی خود، باید آن را از roi_heads وارد کنید و آن را با تابع زیان سفارشی خود جایگزین کنید، همانطور که در خط ۲۲ از کد زیر انجام دادم:
from torchvision.models.detection.roi_heads import fastrcnn_loss
import torch.nn.functional as F
from torchvision.ops.boxes import _box_inter_union
def custom_fastrcnn_loss(class_logits, box_regression, labels, regression_targets):
# type: (Tensor, Tensor, List[Tensor], List[Tensor]) -> Tuple[Tensor, Tensor]
"""
Your Custom loss function here
Args:
class_logits (Tensor)
box_regression (Tensor)
labels (list[BoxList])
regression_targets (Tensor)
Returns:
classification_loss (Tensor)
box_loss (Tensor)
"""
return classification_loss, box_loss
torchvision.models.detection.roi_heads.fastrcnn_loss = custom_fastrcnn_loss
تابع زیان سفارشی برایFastRCNN
خلاصه
در این مقاله کوتاه، تمام چیزی که نیاز دارید استفاده از تابع زیان GIoU برای تشخیص شی با Torchvision است.
این متن با استفاده از ربات ترجمه مقاله علم داده ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه میتواند دارای برخی اشکالات ترجمه باشد.
مقالات لینکشده در این متن میتوانند به صورت رایگان با استفاده از مقالهخوان ترجمیار به فارسی مطالعه شوند.
مطلبی دیگر از این انتشارات
نشخوار فکری ما باعث افسردگی بیشتر میشود
مطلبی دیگر از این انتشارات
گوگل در حال ساخت یک سیستمعامل جدید برای «دستگاه AR نوآورانه» بعدی خود است
مطلبی دیگر از این انتشارات
دیوید گوتا امینم را در یکی از آهنگهایش دیپفیک کرد