日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Simple-Faster-RCNN源码学习笔记

發布時間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Simple-Faster-RCNN源码学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Simple-Faster-RCNN 源碼學習

項目github地址: https://github.com/chenyuntc/simple-faster-rcnn-pytorch

源碼


源文件: model/utils/bbox_tools.py

方法: loc2bbox(src_bbox, loc)

參數含義:

  • src_bbox描述的是bbox的坐標.
  • loc表示的偏移(offsets)和縮放尺度(scales).
  • 給出邊界框的偏移及縮放尺寸,該函數將表示轉換為2D的圖像坐標.
    即通過對原邊界框src_bbox附加上loc對應的變換,從而得到新的邊界框.

    先將坐標表示法src_bbox轉換成中心表示法px,py,pw,php_x,p_y,p_w,p_hpx?,py?,pw?,ph?
    再結合loc數組中的偏移和縮放dx,dy,dw,dhd_x,d_y,d_w,d_hdx?,dy?,dw?,dh?
    根據如下公式,做轉換并得到gx,gy,gh,gwg_x,g_y,g_h,g_wgx?,gy?,gh?,gw?:
    gy=dyph+pyg_y = d_yp_h+p_ygy?=dy?ph?+py?
    gx=dxpw+pxg_x = d_xp_w+p_xgx?=dx?pw?+px?
    gh=dhexp(ph)g_h = d_hexp({p_h})gh?=dh?exp(ph?)
    gw=dwexp(pw)g_w = d_wexp({p_w})gw?=dw?exp(pw?)
    得到中心表示法gx,gy,gh,gwg_x,g_y,g_h,g_wgx?,gy?,gh?,gw?,以后,再經過一步轉換得到坐標表示法dst_bbox.
    dstx1=gx?0.5gwdst_{x1} = g_x-0.5g_wdstx1?=gx??0.5gw?
    dstx2=gx+0.5gwdst_{x2} = g_x+0.5g_wdstx2?=gx?+0.5gw?
    dsty1=gy?0.5ghdst_{y1} = g_y-0.5g_hdsty1?=gy??0.5gh?
    dsty2=gy+0.5ghdst_{y2} = g_y+0.5g_hdsty2?=gy?+0.5gh?

    方法: bbox2loc(src_bbox, dst_bbox)

    參數含義:

  • src_bbox描述的是第一個bbox的坐標.
  • dst_bbox描述的是第二個bbox的坐標.
  • 返回值: 返回從src_bbox變換到dst_bbox所需要的偏移和縮放信息.

    方法: bbox_iou(bbox_a, bbox_b)

    計算二者的IoU的值,即Area(A∩B)Area(A∪B)\frac{Area(A∩B)}{Area(A∪B)}Area(AB)Area(AB)?.
    如果參數aaa的維度是(N,4)(N,4)(N,4),參數bbb的維度是(K,4)(K,4)(K,4),那么返回值的維度就是(N,K)(N,K)(N,K)

    方法: generate_anchor_base(base_size=16, ratios=[0.5, 1, 2],anchor_scales=[8, 16, 32])

    生成多種(樣例是3種)不同面積(面積即為base_size*anchor_scales)的Anchor, 每一種Anchor又會生成多種(樣例中是3種)具有不同長寬比的Anchor.(樣例中總Anchors數目是9種)

    最后將生成的Anchor全部都統一到圖像坐標表示法返回.


    源文件: model/region_proposal_network.py

    方法: _enumerate_shifted_anchor(anchor_base, feat_stride, height, width)

    用于生成所有的Anchors,傳入anchor_base,對于特征圖的每一個像素點位置,都生成A個Anchors,總共就是K?AK*AK?A個Anchors,其中K是像素點的數量.

    返回值的形狀是(K?A,4)(K*A,4)(K?A,4)

    方法:RegionProposalNetwork.forward(self, x, img_size, scale=1.)

    經過1層3?33*33?3的卷積層,做一下語義變換,從而得到hhh作為特征響應圖.

    再后面特征響應圖hhh經過2個分支,分別產生Anchor的前景得分以及中心表示法坐標.

    其中rpn_fg_scores即Anchor的前景得分,rpn_scores是同時包含前景背景的得分,rpn_locs表示的是Anchor的中心表示法的坐標.

    上述代碼的意思是:對于Batch中的每一個樣本,把用RPN預測的Anchor坐標,前景得分,圖像大小,以及所有Anchor坐標,圖片大小等信息傳入proposal_layer中去,可以得到一些Anchor.
    最后,該方法返回:rpn_locs,rpn_scores,rois,roi_indices,anchor等信息.
    值得注意的是,訓練時僅返回2000個roi,測試時僅返回300個.


    源文件: creator_tool.py

    類: ProposalCreator

    該類是可調用的,它接收RPN預測的一些Anchor的坐標,前景分數,以及特征圖所生成的所有Anchor等信息,并且用于生成RoIs.

    為了生成Proposal,先將anchor的中心表示法轉換為圖像坐標表示法.
    為了防止生成的Proposal越界,我們需做一個clip操作,使得最小值為0,最大值為對應維度的最大值.

    隨后將寬度和高度小于閾值的proposal丟掉.

    對所有proposal,按照其前景分進行排序,并且一開始只取前n_pre_nms個.
    隨后再進行non_maximum_supression非最大值抑制,就是說交叉度大的幾個Anchors只保留前景分最大的,返回的時候,只返回n_post_nms個框,訓練時這個值為2000,測試時這個值為300…

    類: ProposalTargetCreator


    對于給定的RoIs,對于每一個RoI,將其與所有的GT(Ground Truth)進行比對,求其IoUIoUIoU,隨后選擇最大的IoUIoUIoU的索引作為gt_assigment,這個值設置為max_iou.并且計算出前景框的索引pos_index,從中隨機選取大概64個正樣本.

    同理,從中選取相等數量的作為負樣本.

    將正負樣本疊加在一起,返回與之對應的樣本roi,gt框,gt框索引.


    總結

    以上是生活随笔為你收集整理的Simple-Faster-RCNN源码学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。