国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

yolov5使用最新MPDIOU損失函數,有效和準確的邊界盒回歸的損失,優(yōu)于GIoU/EIoU/CIoU/EIoU(附代碼可用)

這篇具有很好參考價值的文章主要介紹了yolov5使用最新MPDIOU損失函數,有效和準確的邊界盒回歸的損失,優(yōu)于GIoU/EIoU/CIoU/EIoU(附代碼可用)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 論文

MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression
(一個有效和準確的邊界框損失回歸函數)
論文地址

1.1. 主要目的

當預測框與邊界框具有相同的縱橫比,但寬度和高度值完全不同時,大多數現有的邊界框回歸損失函數都無法優(yōu)化。
為了解決上述問題,MPDIoU充分挖掘水平矩形的幾何特征,提出了一種新的基于最小點距離的邊界框相似性比較指標MPDIoU,該指標包含了現有損失函數中考慮的所有相關因素,即重疊或不重疊區(qū)域、中心點距離、寬度和高度偏差,同時簡化了計算過程。
yolov5使用最新MPDIOU損失函數,有效和準確的邊界盒回歸的損失,優(yōu)于GIoU/EIoU/CIoU/EIoU(附代碼可用),yolo系列改進計劃,YOLO

論文中舉例了,綠色框為真實目標框,紅色框表示預測目標框,兩幅圖中預測目標框和真實目標框存在相同的長寬比,但是現象是不一致的,一個在真實框內部一個在真實框外部。

此時GIoU/EIoU/CIoU/EIoU計算結果確實一致,上述用于邊界框回歸的損失函數將失去有效性,這將限制收斂速度和精度,而MPDIOU能夠計算兩者的差異,
因此使用MPDIoU損失函數用于邊界框回歸,具有更高的邊界框回歸效率和精度。。

1.2. 設計思路

在分析了IOU系列損失函數的優(yōu)勢和劣勢之后,開始思考如何提高邊界框回歸的準確性和效率。
通常情況下,使用左上角和右下角點的坐標來定義一個唯一的矩形。受到邊界框幾何特性的啟發(fā),作者設計了一種新穎的基于交并比的度量標準,名為MPDIoU,直接最小化預測邊界框與實際標注邊界框之間的左上角和右下角點距離。
綜上所述,提出的MPDIoU簡化了兩個邊界框之間的相似性比較,可以適應重疊或非重疊的邊界框回歸。

在訓練階段,通過最小化以下損失函數,使得模型預測的每個邊界框Bprd = [xprd, yprd, wprd, hprd]T趨近于其對應的真實標注邊界框Bgt = [xgt, ygt, wgt, hgt]T:
yolov5使用最新MPDIOU損失函數,有效和準確的邊界盒回歸的損失,優(yōu)于GIoU/EIoU/CIoU/EIoU(附代碼可用),yolo系列改進計劃,YOLO
因此,現有邊界框回歸損失函數的所有因素都可以通過4個點的坐標來確定。轉換公式如下所示:
yolov5使用最新MPDIOU損失函數,有效和準確的邊界盒回歸的損失,優(yōu)于GIoU/EIoU/CIoU/EIoU(附代碼可用),yolo系列改進計劃,YOLO
在上述公式中, |C|表示覆蓋Bgt和Bprd的最小外接矩形的面積,yolov5使用最新MPDIOU損失函數,有效和準確的邊界盒回歸的損失,優(yōu)于GIoU/EIoU/CIoU/EIoU(附代碼可用),yolo系列改進計劃,YOLO
yolov5使用最新MPDIOU損失函數,有效和準確的邊界盒回歸的損失,優(yōu)于GIoU/EIoU/CIoU/EIoU(附代碼可用),yolo系列改進計劃,YOLO
分別表示真實標注邊界框和預測邊界框的中心點坐標。w_gt和h_gt表示真實標注邊界框的寬度和高度,w_prd和h_prd表示預測邊界框的寬度和高度。

從公式中可以發(fā)現所有現有損失函數中考慮的因素都可以通過左上角點和右下角點的坐標來確定,例如非重疊面積、中心點距離、寬度和高度的偏差,這意味著作者提出的L_MPDIoU不僅考慮全面,還簡化了計算過程。

MPDIoU的計算過程如下:
yolov5使用最新MPDIOU損失函數,有效和準確的邊界盒回歸的損失,優(yōu)于GIoU/EIoU/CIoU/EIoU(附代碼可用),yolo系列改進計劃,YOLOMPDIoU作為損失函數的計算過程如下:
yolov5使用最新MPDIOU損失函數,有效和準確的邊界盒回歸的損失,優(yōu)于GIoU/EIoU/CIoU/EIoU(附代碼可用),yolo系列改進計劃,YOLOyolov5使用最新MPDIOU損失函數,有效和準確的邊界盒回歸的損失,優(yōu)于GIoU/EIoU/CIoU/EIoU(附代碼可用),yolo系列改進計劃,YOLO
上圖表示MPDIOU損失函數的參數

2 代碼

在metrics.py中修改bbox_iou函數

def bbox_iou(box1, box2, image_size=[128, 1024], xywh=True, GIoU=False, DIoU=False, CIoU=False, EIoU=False,
             MPDIoU=False, eps=1e-7):
    # Returns Intersection over Union (IoU) of box1(1,4) to box2(n,4)

    # Get the coordinates of bounding boxes
    if xywh:  # transform from xywh to xyxy
        (x1, y1, w1, h1), (x2, y2, w2, h2) = box1.chunk(4, 1), box2.chunk(4, 1)
        w1_, h1_, w2_, h2_ = w1 / 2, h1 / 2, w2 / 2, h2 / 2
        b1_x1, b1_x2, b1_y1, b1_y2 = x1 - w1_, x1 + w1_, y1 - h1_, y1 + h1_
        b2_x1, b2_x2, b2_y1, b2_y2 = x2 - w2_, x2 + w2_, y2 - h2_, y2 + h2_
    else:  # x1, y1, x2, y2 = box1
        b1_x1, b1_y1, b1_x2, b1_y2 = box1.chunk(4, 1)
        b2_x1, b2_y1, b2_x2, b2_y2 = box2.chunk(4, 1)
        w1, h1 = b1_x2 - b1_x1, b1_y2 - b1_y1 + eps
        w2, h2 = b2_x2 - b2_x1, b2_y2 - b2_y1 + eps

    # Intersection area
    inter = (torch.min(b1_x2, b2_x2) - torch.max(b1_x1, b2_x1)).clamp(0) * \
            (torch.min(b1_y2, b2_y2) - torch.max(b1_y1, b2_y1)).clamp(0)

    # Union Area
    union = w1 * h1 + w2 * h2 - inter + eps

    # IoU
    iou = inter / union
    if GIoU or CIoU or DIoU or EIoU or MPDIoU:
        cw = torch.max(b1_x2, b2_x2) - torch.min(b1_x1, b2_x1)  # convex (smallest enclosing box) width
        ch = torch.max(b1_y2, b2_y2) - torch.min(b1_y1, b2_y1)  # convex height
        if CIoU or DIoU or EIoU or MPDIoU:  # Distance or Complete IoU https://arxiv.org/abs/1911.08287v1
            c2 = cw ** 2 + ch ** 2 + eps  # convex diagonal squared 中心點平方
            rho2 = ((b2_x1 + b2_x2 - b1_x1 - b1_x2) ** 2 + (
                    b2_y1 + b2_y2 - b1_y1 - b1_y2) ** 2) / 4  # center dist ** 2 中心點距離
            if CIoU:  # https://github.com/Zzh-tju/DIoU-SSD-pytorch/blob/master/utils/box/box_utils.py#L47
                v = (4 / math.pi ** 2) * torch.pow(torch.atan(w2 / h2) - torch.atan(w1 / h1), 2)
                with torch.no_grad():
                    alpha = v / (v - iou + (1 + eps))
                return iou - (rho2 / c2 + v * alpha)  # CIoU
            elif EIoU:
                rho_w2 = ((b2_x2 - b2_x1) - (b1_x2 - b1_x1)) ** 2
                rho_h2 = ((b2_y2 - b2_y1) - (b1_y2 - b1_y1)) ** 2
                cw2 = cw ** 2 + eps
                ch2 = ch ** 2 + eps
                return iou - (rho2 / c2 + rho_w2 / cw2 + rho_h2 / ch2)  # EIoU
            elif DIoU:
                return iou - rho2 / c2  # DIoU
            elif MPDIoU:
                # union = w1 * h1 + w2 * h2 - inter + eps
                mpd_d1 = (b1_x1 - b2_x1) ** 2 + (b1_y1 - b2_y1) ** 2
                mpd_d2 = (b1_x2 - b2_x2) ** 2 + (b1_y2 - b2_y2) ** 2
                mpd_d = image_size[0] ** 2 + image_size[1] ** 2
                return inter / union - mpd_d1 / mpd_d - mpd_d2 / mpd_d

        c_area = cw * ch + eps  # convex area
        return iou - (c_area - union) / c_area  # GIoU https://arxiv.org/pdf/1902.09630.pdf
    return iou  # IoU

在loss.py中修改class ComputeLoss類中的def call(self, p, targets):函數

# iou = bbox_iou(pbox, tbox[i], EIoU=True).squeeze() 將這行改成如下
iou = bbox_iou(pbox, tbox[i], self.hyp['image_size'], MPDIoU=True).squeeze()

在超參數配置文件hyp.scratch.yaml中添加

image_size: [ 128,2048 ]

這個是你訓練時圖片的尺寸,本文這里使用128*2048的圖片尺寸進行訓練。
若使用默認尺寸不開啟矩形框訓練,傳入640的,則超參數需要使用image_size: [ 640,640]

#這個是本文在訓練時的圖像尺寸
parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=[128, 2048],
                        help='train, val image size (pixels)')

3.總結

MPDIOU 能夠有效解決重疊和包含問題,并且能夠有效地處理預測框和目標框長寬比相同的情況,而且計算量小,模型訓練速度快。
在數據集上測試和驗證,發(fā)現能夠提升訓練精度,并且有效地區(qū)分兩個目標存在包含的關系的預測框回歸,推薦大家使用MPDIOU 進行訓練。

強烈建議大家閱讀一下原文,有效地加深和理解GIoU/EIoU/CIoU/EIoU文章來源地址http://www.zghlxwxcb.cn/news/detail-731959.html

到了這里,關于yolov5使用最新MPDIOU損失函數,有效和準確的邊界盒回歸的損失,優(yōu)于GIoU/EIoU/CIoU/EIoU(附代碼可用)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包