yuuho.wiki

カオスの欠片を集めて知恵の泉を作る

ユーザ用ツール

サイト用ツール


tips:python:detectron2:start

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
tips:python:detectron2:start [2022/01/13 05:34] – [モデルデータベース Registry] yuuhotips:python:detectron2:start [2022/02/01 01:37] (現在) – [自作データセット定義方法] yuuho
行 75: 行 75:
 TrainerBase   : self.start_iter = 0 TrainerBase   : self.start_iter = 0
 DefaultTrainer: DefaultTrainer:
 +...
 +DefaultTrainer: model = self.build_model(cfg)
 +...
 +DefaultTrainer: model = create_ddp_model(model, broadcast_buffer=False)
 </code> </code>
  
行 106: 行 110:
 | ''test''                ^ class |  | | ''test''                ^ class |  |
 | ''auto_scale_workers''  ^ static |  | | ''auto_scale_workers''  ^ static |  |
 +
 +
 +=== Trainer の重要メンバ ===
 +
 +''DefaultTrainer'' のメンバ。
 +
 +  * ''_trainer'' は SimpleTrainerクラス。
 +
 +TrainerBase を継承して DefaultTrainer が作成されている。
 +同じように SimpleTrainer も TrainerBase を継承して作成されている。
 +なので DefaultTrainer と SimpleTrainer は親子関係はないが、DefaultTrainer の ''_trainer'' というメンバは
 +SimpleTrainer なことがある。
 +
 +  * SimpleTrainer のメンバが直接触るべきモデル
 +    * ''model'' : ''GeneralizedRCNN'' とか
 +    * ''model.backbone'' :
  
 ==== モデルデータベース Registry ==== ==== モデルデータベース Registry ====
行 124: 行 144:
 コードから登録されているアーキテクチャを追跡することは面倒だが、 ''@META_ARCH_REGISTRY'' デコレータが付いているものを確認すると以下のようになっている。 コードから登録されているアーキテクチャを追跡することは面倒だが、 ''@META_ARCH_REGISTRY'' デコレータが付いているものを確認すると以下のようになっている。
 <code> <code>
-./detectron2/modeling/meta_arch/retinanet.py     RetinaNet +detectron2/modeling/meta_arch/retinanet.py     RetinaNet 
-./detectron2/modeling/meta_arch/panoptic_fpn.py  PanopticFPN +detectron2/modeling/meta_arch/panoptic_fpn.py  PanopticFPN 
-./detectron2/modeling/meta_arch/semantic_seg.py  SemanticSegmentor +detectron2/modeling/meta_arch/semantic_seg.py  SemanticSegmentor 
-./detectron2/modeling/meta_arch/rcnn.py          GeneralizedRCNN +detectron2/modeling/meta_arch/rcnn.py          GeneralizedRCNN 
-                                                 ProposalNetwork+                                               ProposalNetwork 
 +</code> 
 +''BACKBONE_REGISTRY'' 
 +<code> 
 +detectron2/modeling/backbone/resnet.py   build_resnet_backbone 
 +detectron2/modeling/backbone/fpn.py      build_resnet_fpn_backbone 
 +                                         build_retinanet_resnet_fpn_backbone
 </code> </code>
  
行 158: 行 184:
 # detectron2/detectron2/config/config.py # detectron2/detectron2/config/config.py
 #   detectron2.config function configurable #   detectron2.config function configurable
 +from_config_func = type(self).from_config
  
 +explicit_args = _get_args_from_config(from_config_func, *args, **kwargs)
 +
 +# detectron2/detectron2/config/config.py
 +#   function _get_args_from_config
 +ret = from_config_func(*args, **kwargs)
 +
 +# detectron2/detectron2/modeling/meta_arch/rcnn.py
 +#    class GeneralizedRCNN method from_config
 +backbone = build_backbone(cfg)
 +
 +# detectron2/detectron2/modeling/backbone/build.py
 +#   function build_backbone
 +backbone_name = cfg.MODEL.BACKBONE.NAME
 +backbone = BACKBONE_REGISTRY.get(backbone_name)(cfg, input_shape)
  
  
 </code> </code>
 +
 +
 +==== R-CNN ====
 +
 +''detectron2/modeling/meta_arch/rcnn.py'' の ''forward'' を見る。
 +
 +だいたいこんな感じ
 +<code python>
 +GeneralizedRCNN
 +    images <- self.preprocess_image( batched_inputs )
 +    features <- self.backbone( images.tensor )
 +    proposals, proposal_losses <- self.proposal_generator( images, features,            gt_instances )
 +    _,         detector_losses <- self.roi_heads(          images, features, proposals, gt_instances )
 +</code>
 +
 +===== データセット =====
 +
 +==== 自作データセット定義方法 ====
 +
 +=== 完全自作の形式 ===
 +<code python>
 +from detectron2.data import DatasetCatalog
 +
 +DatasetCatalog.register('MyDataset', my_function )
 +</code>
 +
 +=== 特定の形式で登録する ===
 +''detectron2.data.datasets'' にある関数
 +  * ''register_coco_instances''
 +  * ''register_coco_panoptic''
 +  * ''register_coco_panoptic_separated''
 +  * ''register_lvis_instances''
 +  * ''register_pascal_voc''
 +
 +=== 取り出し ===
 +''detectron2.data.common.AspectRatioGroupedDataset'' の ''%%_%%_iter%%_%%_'' を見るべし
 +<code python>
 +
 +</code>
 +
 +=== カスタムなデータローダーの定義 ===
 +
 +デフォルトでは ''detectron2/data/dataset_mapper.py'' の ''DatasetMapper'' が使われるため画像はファイルから読み込むしかできない。
 +データセットに合った特定の読み込み方を指定するには custom dataloader を作成する必要がある。
 +  * [[https://github.com/facebookresearch/detectron2/blob/cbbc1ce26473cb2a5cc8f58e8ada9ae14cb41052/docs/tutorials/datasets.md|custom dataset]]
 +  * [[https://github.com/facebookresearch/detectron2/blob/cbbc1ce26473cb2a5cc8f58e8ada9ae14cb41052/docs/tutorials/data_loading.md|custom data loader]]
 +
 +これらを見る限り、 ''DefaultTrainer'' の ''build_train_loader'' などのメソッドをオーバーライドするのが正攻法。
 +
tips/python/detectron2/start.1642052099.txt.gz · 最終更新: 2022/01/13 05:34 by yuuho