<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python極簡實現(xiàn)IoU

          共 1481字,需瀏覽 3分鐘

           ·

          2021-01-15 21:07

          如果你不知道自己要駛向哪個港口,那么無論是東南風還是西北風,對你都無所謂的。--《極簡主義》范式二:弄明白要做什么,那就成功一半了

          0.引子

          IOU中文名叫交并比,見名知意就是交集與并集的比值。是在目標檢測中常用的算法


          IoU原理


          如上圖所示,就是計算上面陰影部分與下面陰影部分的比值。


          我們來拆分一下任務,分子部分就是Box1與Box2交集的面積,先設為A1。分母部分是Box1與Box2并集集的面積,設為A2,其實也是Box1面積S1加上Box2面積S2再減去一個A1(為什么要減去A1呢,因為Box1與Box2重合了A1部分,需要減去一個,沒想通的童鞋去面壁0.1秒鐘去:)


          IoU = A1 / A2

          A2 = S1 + S2 -A1

          IoU = A1 / (S1 + S2 -A1)


          S1是Box1的面積,S2是Box2的面積。其實問題就轉化為了對Box與A1求解。

          下面我們繼續(xù)拆解任務


          0.0:坐標軸的定義


          OpenCV坐標器


          首先先看下在OpenCV中,坐標軸的定義。原點位于圖片左上角,向右為X軸正方向,向下為Y軸正方向(這一點不同于數(shù)學中定義)。


          0.1:Box表示與計算


          Box有常用的兩種表達方式:

          1:Boxa = (xmin,ymin,xmax,ymax)(coco與voc格式);2:Boxb = (xcenter,ycenter,w,h)(yolo格式)。

          其實就是根據(jù)一個事物的不同表達方式,本質(zhì)上是一樣的。

          下面給出對應轉換關系:

          xmin,ymin,xmax,ymax = round(xcenter-(w/2.0)) ,round(ycenter-(h/2.0)),round(xcenter+(w/2.0)),round(ycenter+(h/2.0))
          xcenter
          ,ycenter,w,h = round((xmin+xmax)/2.0),round((ymin+ymax)/2.0),round(xmax-xmin),round(ymax-ymin)
          Boxa
          = (round(Boxb[0]-(Boxb[2]/2.0)) ,round(Boxb[1]-(Boxb[3]/2.0),round(Boxb[0]+(Boxb[2]/2.0),round(Boxb[1]+(Boxb[3]/2.0))

          Box的面積計算為 w*h

          S_Boxa = (xmax-xmin)*(ymax-ymin) = (Boxa[2]-Boxa[0])*(Boxa[3]-Boxa[1])

          S_Boxb = w*h = Boxb[2]*Boxb[3]


          0.2:A1的表示與計算



          box相交的一些情況


          計算相交的面積和上個問題類似,只需計算出相交框的w與h如果沒有相交,就是0。由上圖可以發(fā)現(xiàn)以下規(guī)律:如果相交時

          xmin =max(xmin1, xmin2)#相交框xmin是兩個框的左上角x坐標的最大值:
          ymin
          =max(ymin1, ymin2)#相交框ymin是兩個框的左上角y坐標的最大值:
          xmax
          =min(xmax1, xmax2)#相交框xmax是兩個框的右下角x坐標的最大值:
          ymax
          =min(ymax1, ymax2)#相交框ymax是兩個框的右下角y坐標的最大值:

          最后處理一下不想交的情況即可,可以發(fā)現(xiàn)當不想交時,就會至少出現(xiàn)一下情況的一種:

          xmax<=xmin or ymax

          所以處理方法很簡單:出現(xiàn)任一情況,w or h就會有一個等于0,使得計算出的面積也為0

          w =max(0, xmax - xmin) ? ?

          h =max(0, ymax - ymin)

          所以整體代碼就揮之欲出了,是不是也挺簡單的:)

          1.代碼

          def cal_iou(box1, box2):
          """
          :param box1: = [xmin1, ymin1, xmax1, ymax1]
          :param box2: = [xmin2, ymin2, xmax2, ymax2]
          :return:
          """

          xmin1
          , ymin1, xmax1, ymax1 = box1
          xmin2
          , ymin2, xmax2, ymax2 = box2
          # 計算每個矩形的面積
          s1
          = (xmax1 - xmin1) * (ymax1 - ymin1) # b1的面積
          s2
          = (xmax2 - xmin2) * (ymax2 - ymin2) # b2的面積

          # 計算相交矩形
          xmin
          = max(xmin1, xmin2)
          ymin
          = max(ymin1, ymin2)
          xmax
          = min(xmax1, xmax2)
          ymax
          = min(ymax1, ymax2)

          w
          = max(0, xmax - xmin)
          h
          = max(0, ymax - ymin)
          a1
          = w * h # C∩G的面積
          a2
          = s1 + s2 - a1
          iou
          = a1 / a2 #iou = a1/ (s1 + s2 - a1)
          return iou

          -1.參考

          -1.0:https://blog.csdn.net/guyuealian/article/details/86488008#commentBox

          -1.1:https://blog.csdn.net/weixin_40922744/article/details/102988751


          同時推薦大家關注筆者公眾號“極簡AI”(ID:BriefAI),一起探討學習深度學習理論與應用開發(fā)技術。
          筆者會經(jīng)常分享深度學習干貨內(nèi)容,大家在學習或者應用深度學習時,遇到什么問題也可以與我在上面交流知無不答。
          出自CSDN博客專家&知乎深度學習專欄作家@小宋是呢
          瀏覽 37
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲综合在线豆花 | 三级网站视频在线观看 | 在线免费看片黄 | 日韩人妻一区二区三区蜜桃视频 | 东京热xxxx |