より高速なR-CNNコードfaster_rcnnを学ぶ(8)

より高速なR-CNN faster_rcnnソースコードファイルフォルダは3 faster_rcnn.py、含まれていresnet.pyvgg16.pyを

1.faster_rcnn.pyコメント

  1  クラス_fasterRCNN(nn.Module):
   2      "" " 高速RCNN " "" 
  3。     DEF  __init__(セルフ、クラス、class_agnostic): クラスに依存しない回帰に基づく方法は、わずか2バウンディングボックス、すなわち、前景と背景であるぴったりた
  4。          スーパー(_fasterRCNN、自己)。__init__ ()
   。5つの          self.classesクラス= #1 タイプ
  。6          self.n_classes = LEN(クラス)#1 カテゴリの数
  。7          self.class_agnostic = class_agnostic #の前景背景クラス
  8つの         損失二種類損失
  9          self.RCNN_loss_cls = 0
 10         self.RCNN_loss_bbox = 0
 11  
12          定義RPN定义RPN网络
13          self.RCNN_rpn = _RPN(self.dout_base_model)
 14          self.RCNN_proposal_target = _ProposalTargetLayer(self.n_classes) 候选区域对应GT 
15          self.RCNN_roi_pool = _RoIPooling(cfg.POOLING_SIZE 、cfg.POOLING_SIZE、1.0 / 16.0) プーリング
16          self.RCNN_roi_align = RoIAlignAvg(cfg.POOLING_SIZE、cfg.POOLING_SIZE、1.0 / 16.0 17  
18          self.grid_size = cfg.POOLING_SIZE * 2 なら cfg.CROP_RESIZE_WITH_MAX_POOL cfg.POOLING_SIZE
19          self.RCNN_roi_crop = _RoICrop()
 20は、 
21である     DEFフォワード(セルフ、im_data、im_info、gt_boxes、num_boxes):#1 画像アノテーション情報ブロック番号情報
22が          BATCH_SIZE = im_data.size(0)
 23である 
24          im_info = im_info.data
 25          gt_boxes = gt_boxes.data
 26は          num_boxes = num_boxes.data
 27  
28          #の特徴マップ得るために画像データ・ベース・モデルベースのフィード
29          図の基本的な機能を得るために、画像データのベースモデルに供給されます。
30          base_feat = self.RCNN_base(im_data)
 31であります 
32          #の機能地図TP RPN ROIを得るために、送り台
33は、         #1 背面図RPNに機能ROIS取得
34は          関心領域、rpn_loss_cls、rpn_loss_bbox = self.RCNN_rpn(base_feat、im_info、gt_boxes、num_boxes)
 35  
36          ITトレーニング・フレーズである場合、使用グランド用bboxes trubut精製
37          グランドトゥルースが回帰使用して訓練された場合に
38で         IF :self.trainingは
 39              roi_data = (関心領域は、gt_boxes、num_boxes)self.RCNN_proposal_target
 40個              のROI、rois_label、rois_target、rois_inside_ws、rois_outside_ws = roi_data
 41は 
42であります             rois_label =可変(rois_label.view(-1 ).LONG())
 43              rois_target =可変(rois_target.view(-1、rois_target.size(2 )))
 44              rois_inside_ws =可変(rois_inside_ws.view(-1、rois_inside_ws。サイズ(2 )))
 45              rois_outside_ws =可変(rois_outside_ws.view(-1、rois_outside_ws.size(2 )))
 46          47              rois_label = なし
 48              rois_target = なし
 49              rois_inside_ws = なし
 50              rois_outside_ws = なし
 51             rpn_loss_cls = 0
 52              rpn_loss_bbox = 0
 53  
54          のROI = 可変(関心領域)
 55の         #は予測関心領域に基づいてROIプーリングない
56          、进行のROIのプーリングプーリング下面方式
57  
58          なら cfg.POOLING_MODE == ' 収穫' 59              pdb.set_trace ()
60              pooled_feat_anchor = _crop_pool_layer(base_feat、rois.view(-1、5))
61              grid_xy = _affine_grid_gen(rois.view(-1、5)、base_feat.size()[2 :]、self.grid_size)
 62             grid_yx = torch.stack([grid_xy.data [:、:、:、1]、grid_xy.data [:、:、:、0]]、3 ).contiguous()
 63              pooled_feat = self.RCNN_roi_crop(base_feat、変数(grid_yx).detach())
 64              であればcfg.CROP_RESIZE_WITH_MAX_POOL:
 65                  pooled_feat = F.max_pool2d(pooled_feat、2、2 66          のelif cfg.POOLING_MODE == ' ALIGN ' 67              pooled_feat = self.RCNN_roi_align(base_feat、rois.view (-1、5 ))
 68          のelif cfg.POOLING_MODE == ' プール' 69             = self.RCNN_roi_poolのpooled_feat(base_feat、rois.view(-1,5 ))
 70  
71である         #のプールされたへの供給原料はトップモデル特長
72の         #の最後のフィードバックモデルにプールした後の特性を
73で          pooled_feat = self._head_to_tail(pooled_feat)
 74  
75          BBOXは、計算オフセット
76          計算はボックス境界オフセット
77を          bbox_pred = self.RCNN_bbox_pred(pooled_feat)
 78          IF self.training 及び ませんself.class_agnostic:
 79の             #は対応する列にROIを選択よらラベル
80              適切なカラムを選択するROIタグに従って
81              bbox_pred_view = bbox_pred.view(bbox_pred.size(0)、INT(bbox_pred.size(1)/ 4),. 4 82              bbox_pred_select = torch.gather(bbox_pred_view ,. 1、rois_label.view( rois_label.size(0),. 1 ,. 1).expand(rois_label.size(0),. 1 ,. 4 ))
 83              bbox_pred bbox_pred_select.squeezeは=(1 84  
85          計算オブジェクト分類確率
86          #のコンピューティングオブジェクト分類確率
87          cls_score = self.RCNN_cls_score(pooled_feat)
 88          cls_prob = F.softmax(cls_score ,. 1 89  
90          RCNN_loss_cls =0
 91          RCNN_loss_bbox = 0
 92  
93          場合self.training:
 94の             分類損失
95              分类损失
96              RCNN_loss_cls = F.cross_entropy(cls_score、rois_label)
 97  
98              バウンディングボックス回帰L1損失は
99              回归损失
100              RCNN_loss_bbox = _smooth_l1_lossを(bbox_pred、 rois_target、rois_inside_ws、rois_outside_ws)
 101  
102  
103          cls_prob = cls_prob.view(BATCH_SIZE、rois.size(1)、-1 104         = bbox_pred.view bbox_pred(BATCH_SIZE、rois.size(1)、-1 105個の 
106          リターンのROI、cls_prob、bbox_pred、rpn_loss_cls、rpn_loss_bbox、RCNN_loss_cls、RCNN_loss_bbox、rois_label
 107の     
108      #の初期重み
109      DEF _init_weights(自己):
 110          DEF normal_init(M、平均、STDDEV、切り捨て=偽): は、SD 
111              切り捨てられた正規乱数通常
112              "" " 
113              切り捨て正常および正常ランダム:. initalizer重量
 114              " "" 
115              #のXはパラメータである
1 16              IF 切り捨て:
 117                 m.weight.data.normal _()fmod_(2).mul_(STDDEV).add_(平均)。 ない完璧な近似値
118              119                  m.weight.data.normal_(平均、STDDEV)
 120                  m.bias。 data.zero_()
 121  
122          normal_init(self.RCNN_rpn.RPN_Conv、0、0.01 、cfg.TRAIN.TRUNCATED)
 123          normal_init(self.RCNN_rpn.RPN_cls_score、0、0.01 、cfg.TRAIN.TRUNCATED)
 124          normal_init(self.RCNN_rpn .RPN_bbox_pred、0、0.01 、cfg.TRAIN.TRUNCATED)
 125          normal_init(self.RCNN_cls_score、0、0.01 、cfg.TRAIN.TRUNCATED)
 126         normal_init(self.RCNN_bbox_pred、0、0.001 、cfg.TRAIN.TRUNCATED)
 127  
128      デフcreate_architecture(自己):
 129          self._init_modules()
 130          self._init_weights()

REF:https://blog.csdn.net/weixin_43872578/article/details/87930953

おすすめ

転載: www.cnblogs.com/wind-chaser/p/11360073.html