Faster-RCNN pytorch代碼學習


代碼來自https://github.com/ruotianluo/pytorch-faster-rcnn

除了nms, roi_pooling, roi_align三部分用cuda完成,其他部分都是基於pytorch完成的。

首先看一下整個文件結構(二級):

├── data

│   ├── demo
│   ├── imgs
│   └── scripts
├── experiments
│   ├── cfgs
│   ├── logs
│   └── scripts
├── lib
│   ├── datasets
│   ├── layer_utils
│   ├── make.sh
│   ├── model
│   ├── nets
│   ├── nms
│   ├── roi_data_layer
│   └── utils
└── tools
  ├── convert_from_tensorflow_mobile.py
  ├── convert_from_tensorflow.py
  ├── convert_from_tensorflow_vgg.py
  ├── demo_all_bboxes.py
  ├── demo.ipynb
  ├── demo.py
  ├── _init_paths.py
  ├── reval.py
  ├── test_net.py
  └── trainval_net.py

主要函數都在/lib文件夾下,train和test的腳本用bash完成,在/experiments文件夾下,數據集默認存儲在/data下。

下面看一下/lib文件夾的結構:

lib/
├── datasets 主要包括imdb類以及對VOC,COCO兩種數據集的包裝解析,可以在此基礎上自定義數據集
├── layer_utils 主要包括對proposal和anchor的操作,以及roi的兩個cuda實現
├── make.sh 
├── model 主要負責
├── nets
├── nms
├── roi_data_layer
└── utils

重點解析/lib/net/networks.py定義的Network類:

class Network(nn.Module):

#首先來看Network類的函數:

 

1. train_step(self, blobs, train_op) 以及 train_step_with_summary(self, blobs, train_op)

這是兩個直接被/lib/model/train_val.py中SolverWrapper類 調用的函數,在每個iter中調用一次。

train_op 傳入的是 optimizer,在SolverWrapper類的construct_graph()中,定義為SGD,momentum由/lib/model/config.py定義,

事實上,幾乎所有的hyperparameter都在該文件中定義。

主要來看blobs這個參數:

向前追溯,blobs=self.data_layer.forward()

我們來看看data_layer是什么:

 

self.data_layer = RoIDataLayer(self.roidb, self.imdb.num_classes)

from roi_data_layer.layer import RoIDataLayer

 

再來到/lib/roi_data_layer/layer.py:

這里定義了一個類RoIDataLayer,該類的主要功能類似一個dataloader,需要注意有幾個參數,_cur表示當前的roidb序號(有一點困惑,難道不應該是imdb?),

真正返回的值實際上是調用了另一個函數get_minibatch(minibatch_db,self._num_classes)

好吧,get_minibatch.py 還是在/lib/roi_data_layer/minibatch.py 里面:

這個函數的功能更像是對roidb的內容進行了包裝:

 

 

 

 

 

### layer_utils

def proposal_layer(rpn_cls_prob, rpn_bbox_pred, im_info, cfg_key, _feat_stride, anchors, num_anchors):

 

input:

1. rpn_cls_prob

rpn_cls_prob = rpn_cls_prob_reshape.view_as(rpn_cls_score).permute(0, 2, 3, 1) # batch * h * w     * (num_anchors * 2)                                                              

 

rpn_bbox_pred


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM