精华内容
下载资源
问答
  • Facebook detectron2训练faster rcnn detectron2是Facebook开源的一套框架,适用于很多的deep learning task,例如instance segmentation等,本文主要就如何利用detectron2训练faster rcnn,并得到模型,主要描述...

    Facebook detectron2训练faster rcnn

    detectron2是Facebook开源的一套框架,适用于很多的deep learning task,例如instance segmentation等,本文主要就如何利用detectron2训练faster rcnn,并得到模型,主要描述大体的思路

    0. 前期

    前期请看官方的教程,大致了解怎么回事
    github
    colab

    1. 安装detectron2

    其进行目标检测方法不像github上一些项目,是把hub给clone下来修改,而是一个框架,我们需要安装这个框架。
    如何安装,请见这里
    建议直接pip安装,而不是编译安装:
    在这里插入图片描述
    安装后,还需要opencv等,这里不描述了。

    2. 数据集的准备

    我们需要准备一个数据集,这个数据集存放在本机的一个位置,然后我们需要用一个列表装下每张图片的信息,每张图片需要用dict方式存储,举例如下:

    {
        'file_name': '/exdata3/RuoyuChen/detectron2/VOC2007/JPEGImages/Black_Footed_Albatross_0009_34.jpg', 
        'image_id': 0, 
        'height': 336, 
        'width': 500, 
        'annotations': [
            {
    	        'bbox': [139, 30, 292, 294], 
    	        'bbox_mode': <BoxMode.XYXY_ABS: 0>, 
    	        'category_id': 0, 
    	        'iscrowd': 0
            }
        ]
    }
    

    这个只是一张图片的字典可视化,具体解释如下:

    file_name:图片路径
    image_id:图片编号,从0开始依次加1,没有顺序要求
    height:图片的高度
    width:图片的宽度
    annotation:放box信息,1个{}代表一个框
    bbox:[xmin,ymin,xmax,ymax]
    bbox_mode:固定就好,详细见官方给的例子,在colab上
    category_id:类别数字,从0开始
    iscrowd:目标检测默认是0就行

    然后假如1个图片的json字典像上面所示,我们假设在python中变量叫record,那么总的字典datasets_dict,我们只要每次求得record后,执行datasets_dict.append(record)即可得到一个完整的字典格式。

    3. 注册数据集

    这里每次训练前都需要执行类似的操作:

    DatasetCatalog.register("CUB_train", lambda d=d: train_dataset_dicts)
    MetadataCatalog.get("CUB_train").set(thing_classes=classes)
    

    train_dataset_dicts即对应训练的字典。

    4. 训练

    模仿官方的配置即可

    cfg = get_cfg()
        cfg.merge_from_file(model_zoo.get_config_file("COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml"))
        cfg.DATASETS.TRAIN = ("CUB_train",)
        cfg.DATASETS.TEST = ()
        cfg.DATALOADER.NUM_WORKERS = 2
        cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml")  # Let training initialize from model zoo
        cfg.SOLVER.IMS_PER_BATCH = 2
        cfg.SOLVER.BASE_LR = 0.00025  # pick a good LR
        cfg.SOLVER.MAX_ITER = 3000    # 300 iterations seems good enough for this toy dataset; you will need to train longer for a practical dataset
        cfg.SOLVER.STEPS = []        # do not decay learning rate
        cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 128   # faster, and good enough for this toy dataset (default: 512)
        cfg.MODEL.ROI_HEADS.NUM_CLASSES = 200  # only has one class (ballon). (see https://detectron2.readthedocs.io/tutorials/datasets.html#update-the-config-for-new-datasets)
    

    模型的yaml文件类型可在官方仓库看:https://github.com/facebookresearch/detectron2/tree/master/configs

    5. 完整的伪代码,供参考

    import os
    import cv2
    import numpy as np
    
    from detectron2.structures import BoxMode
    from detectron2 import model_zoo
    from detectron2.engine import DefaultPredictor
    from detectron2.config import get_cfg
    from detectron2.utils.visualizer import Visualizer
    from detectron2.data import MetadataCatalog, DatasetCatalog
    
    from detectron2.engine import DefaultTrainer
    
    from tqdm import tqdm
    
    image_dir = "/exdata3/detectron2/VOC2007/JPEGImages"
    image_list_dir = "/exdata3/CUB_200_2011/images.txt"
    box_dir = "/exdata3/CUB_200_2011/bounding_boxes.txt"
    if_training_dir = "/exdata3/CUB_200_2011/train_test_split.txt"
    
    def get_json():
        boxes = np.loadtxt(box_dir)
        img_path = np.loadtxt(image_list_dir,dtype=bytes).astype(str)
        if_training = np.loadtxt(if_training_dir)
        # datasets
        train_dataset_dicts = []
        test_dataset_dicts = []
        train_id = 0
        test_id = 0
        for i in tqdm(range(boxes.shape[0])):
            record = {}
            image_name = os.path.join(image_dir,img_path[i][1].split('/')[-1])
            # print(image_name)
            class_name = img_path[i][1].split('/')[0]
            class_id = int(class_name.split('.')[0])-1
            xmin = int(boxes[i][1])
            xmax = int(boxes[i][1]+boxes[i][3])
            ymin = int(boxes[i][2])
            ymax = int(boxes[i][2]+boxes[i][4])
            image = cv2.imread(image_name)
            height,width,_ = image.shape
            
            record['file_name'] = image_name
            if(if_training[i][1]==1):
                record['image_id'] = train_id
                train_id += 1
            else:
                record['image_id'] = test_id
                test_id += 1
            record['height']= height
            record['width']= width
            objs = []
            obj = {
                "bbox": [xmin,ymin,xmax,ymax],
                "bbox_mode": BoxMode.XYXY_ABS,
                #"segmentation": [poly], To draw a line, along to ballon
                #you will need this for mask RCNN
                "category_id": class_id,
                "iscrowd": 0
            }
            objs.append(obj)
            record["annotations"] = objs
            if(if_training[i][1]==1):
                train_dataset_dicts.append(record)
            else:
                test_dataset_dicts.append(record)
        return train_dataset_dicts,test_dataset_dicts
    
    def get_classes_name():
        classes_name_dir = "/exdata3/RuoyuChen/CUB_200_2011/classes.txt"
        classes_path = np.loadtxt(classes_name_dir,dtype=bytes).astype(str)
        classes = []
        for i in tqdm(range(classes_path.shape[0])):
            classes.append(classes_path[i][1])
        return classes
    
    def register():
        train_dataset_dicts,test_dataset_dicts = get_json()
        classes = get_classes_name()
        for d in ["train", "test"]:
            # train
            if d == "train":
                DatasetCatalog.register("CUB_" + d, lambda d=d: train_dataset_dicts)
                MetadataCatalog.get("CUB_" + d).set(thing_classes=classes)
            else:
                DatasetCatalog.register("CUB_" + d, lambda d=d: test_dataset_dicts)
                MetadataCatalog.get("CUB_" + d).set(thing_classes=classes)
    
    def main():
        register()
        cfg = get_cfg()
        cfg.merge_from_file(model_zoo.get_config_file("COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml"))
        cfg.DATASETS.TRAIN = ("CUB_train",)
        cfg.DATASETS.TEST = ()
        cfg.DATALOADER.NUM_WORKERS = 2
        cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml")  # Let training initialize from model zoo
        cfg.SOLVER.IMS_PER_BATCH = 2
        cfg.SOLVER.BASE_LR = 0.00025  # pick a good LR
        cfg.SOLVER.MAX_ITER = 3000    # 300 iterations seems good enough for this toy dataset; you will need to train longer for a practical dataset
        cfg.SOLVER.STEPS = []        # do not decay learning rate
        cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 128   # faster, and good enough for this toy dataset (default: 512)
        cfg.MODEL.ROI_HEADS.NUM_CLASSES = 200  # only has one class (ballon). (see https://detectron2.readthedocs.io/tutorials/datasets.html#update-the-config-for-new-datasets)
        # NOTE: this config means the number of classes, but a few popular unofficial tutorials incorrect uses num_classes+1 here.
    
        os.makedirs(cfg.OUTPUT_DIR, exist_ok=True)
        trainer = DefaultTrainer(cfg) 
        trainer.resume_or_load(resume=False)
        trainer.train()
    
    if __name__ == '__main__':
        os.environ["CUDA_VISIBLE_DEVICES"] = "2"
        main()
    

    在这里插入图片描述

    展开全文
  • Detectron2训练自己的实例分割数据集

    千次阅读 2020-05-21 16:03:52
    本文介绍 Detectron2训练自己的实例分割数据集 Detectron2训练自己的实例分割数据集 This article was original written by Jin Tian, welcome re-post, first come with ...

    本文介绍 Detectron2训练自己的实例分割数据集

    Detectron2训练自己的实例分割数据集

    This article was original written by XRBLS, welcome re-post, first come with https://jinfagang.github.io . but please keep this copyright info, thanks, any question could be asked via wechat: jintianiloveu

    本文介绍如何构造自己的类coco数据集,并用detectron2来训练并预测。实际上detectron2出来已经有几天了。但这个框架个人感觉离真正工业使用还有点距离,首先第一点是不好部署,其次是相关的其他模型导出支持比较差,比如不支持onnx,同时即便是导出的onnx模型也很难用上一些加速框架进行加速,比如不支持TensorRT。但如果你不是追求速度,用python做推理也是可以的,并且最关键的是,你可以用你的数据集训练你的模型,或者是在这个框架上增加一些自己的修改,看看效果是不是更好之类。

    首先看看这个如何来训练自己的数据集。我们今天要用的数据是这个:

    wget https://github.com/Tony607/detectron2_instance_segmentation_demo/releases/download/V0.1/data.zip
    

    这篇文章很大借鉴于原作者的一些尝试,感兴趣的朋友可以给他github一个star。这个data是一个非常非常适合来测试分割的一个微型数据集,小到什么程度?只有那么25张图片。。

    类别大概是:

    cats: [{'supercategory': 'date', 'id': 1, 'name': 'date'}, {'supercategory': 'fig', 'id': 2, 'name': 'fig'}, {'supercategory': 'hazelnut', 'id': 3, 'name': 'hazelnut'}]
    

    (这里date的意思是枣椰子,fig的意思是无花果,hazelnut是榛子。)

    如果你下载好了数据,那么基本上我们可以开始了。大家可以看到这个数据集还有一个trainval.json,完全是按照coco的标注方式来标注的。coco的json格式也是目前比较通用的是instance segmentation 或者是Panoptic segmentation标注格式。

    Setup Detectron2

    关于如何安装detectron2这里不展开叙述,大家可以按照github给予的步骤来。这里给大家几点提醒:

    • 要python3.6;
    • 要pytorch1.3.

    其他的没有了。

    训练

    首先看一下这个非常小非常迷你的数据集,在100次训练之后的效果:

    可以看出来,这个效果还是非常不错的啊。训练的脚本也非常简单:

    
    import random
    from detectron2.utils.visualizer import Visualizer
    from detectron2.data.catalog import MetadataCatalog, DatasetCatalog
    import fruitsnuts_data
    import cv2
    from detectron2.engine import DefaultTrainer
    from detectron2.config import get_cfg
    import os
    from detectron2.engine.defaults import DefaultPredictor
    from detectron2.utils.visualizer import ColorMode
    
    
    fruits_nuts_metadata = MetadataCatalog.get("fruits_nuts")
    
    
    if __name__ == "__main__":
        cfg = get_cfg()
        cfg.merge_from_file(
            "../../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"
        )
        cfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, "model_final.pth")
        print('loading from: {}'.format(cfg.MODEL.WEIGHTS))
        cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5   # set the testing threshold for this model
        cfg.MODEL.ROI_HEADS.NUM_CLASSES = 3
        cfg.DATASETS.TEST = ("fruits_nuts", )
        predictor = DefaultPredictor(cfg)
    
        data_f = './data/images/2.jpg'
        im = cv2.imread(data_f)
        outputs = predictor(im)
        v = Visualizer(im[:, :, ::-1],
                       metadata=fruits_nuts_metadata,
                       scale=0.8,
                       instance_mode=ColorMode.IMAGE_BW   # remove the colors of unsegmented pixels
                       )
        v = v.draw_instance_predictions(outputs["instances"].to("cpu"))
        img = v.get_image()[:, :, ::-1]
        cv2.imshow('rr', img)
        cv2.waitKey(0)
    
    

    大家可能觉得这个instance segmention训练的太容易,那么来挑战难度大一点的?

    确实,这个坚果数据集实在是太简单了,简单到我们甚至打印不出任何训练过程,一眨眼模型就训练好了。那就来个难度大一点的吧,我们将用Detectron2训练Cityscapes的实例分割!

    Detectron2 训练Cityscapes实例分割

    尽管在Detectron2里面有Cityscapes的数据dataloader,但我们并不打算用它,相反,我们觉得使用统一化的coco数据集格式能够更好的让数据fit。当我们决定做这件事情的时候犯难了。如何从Cityscapes转到coco?

    好在有这个需求的人不少,这值得我们开发一个工具来转它。我们维护的现成的工具脚本可以在这里找到:

    https://github.com/jinfagang/cityscapestococo

    实际上我们将数据转到coco之后,发现效果我们想象的还好,因为这些标注都非常精准,并且包含了我们感兴趣的常用类别,比如car,truck,rider,cyclist,motor-cycle等。这些步骤与我们上面训练坚果数据集的步骤差不多,大家仿造步骤来,首先可视化数据确保我们的数据是准确无误的。那么接下里的事情就很简单了。

    看起来似乎还不错,这些类别众多而精准,接下来开始train。

    这个instance segmention模型训练完成之后是一种什么样的效果呢?模型还在训练,我们等下一期技术文章发布之后,给大家分享一下结果,同时,告诉大家一个好消息:

    1. 类似于MaskRCNN这样的模型速度是很难在实际场景中用起来的,原因也很简单,我们都需要realtime的东西,这速度差强人意,但是否有人尝试更轻便的backbone呢?不得而知,不过好消息是实际上通过一些加速框架,是可以把MaskRCNN加速到realtime的。而这些,我们等到detectron2go发布之后,或许会看得到一些好消息。

    本文首发于MANA AI社区,如果你对AI感兴趣,欢迎加入我们的社区一起交流:http://t.manaai.cn

    展开全文
  • Detectron2 is Facebook AI Research's next generation library that provides state-of-the-art detection and segmentation algorithms. It is the successor of Detectron and maskrcnn-benchmark. It supports ...
  • 【扫盲】Detectron2训练Mask-RCNN

    千次阅读 2020-06-18 08:08:25
    【扫盲】Detectron2训练Mask-RCNN 欢迎关注公众号:小鸡炖技术 ,后台回复:“detectron2_maskrcnn”获取本教程素材~~~

    【扫盲】Detectron2训练Mask-RCNN

     

    欢迎关注公众号:小鸡炖技术 ,后台回复:“detectron2_maskrcnn”获取本教程素材~~~

     

    展开全文
  • @ detectron2训练自己的数据库 注册自己的数据集 detectron2官网地址 https://github.com/facebookresearch/detectron2。安装及环境配置参考官方文档或者其他博客,此处不在赘述,主要描述训练自己数据集的过程。...

    @ detectron2训练自己的数据库

    注册自己的数据集

    detectron2官网地址 https://github.com/facebookresearch/detectron2。安装及环境配置参考官方文档或者其他博客,此处不在赘述,主要描述训练自己数据集的过程。本文使用的数据集为visdrone2018,在训练数据集之前需要将数据集转换为coco格式的json数据集。

    方法1

    from detectron2.data.datasets import register_coco_instances
    
    register_coco_instances('self_coco_train', {}, 
                            'instances_train2017.json', #json文件路径
                           'train2017'#图片路径)
    register_coco_instances('self_coco_val', {}, 
                            'instances_val2017.json', #json文件路径
                           'val2017'#图片路径)
    

    方法2

    from detectron2.data import DatasetCatalog, MetadataCatalog
    from detectron2.data.datasets.coco import load_coco_json
    
    DatasetCatalog.register("self_coco_train", lambda: load_coco_json(TRAIN_JSON, TRAIN_PATH, "self_coco_train"))
    MetadataCatalog.get("self_coco_train").set(thing_classes=["pos", "neg"],
                                                        json_file=TRAIN_JSON,
                                                        image_root=TRAIN_PATH)
    DatasetCatalog.register("self_coco_val", lambda: load_coco_json(VAL_JSON, VAL_PATH, "self_coco_val"))
    MetadataCatalog.get("self_coco_val").set(thing_classes=["pos", "neg"],
                                                    json_file=VAL_JSON,
                                                    image_root=VAL_PATH)
    

    获取数据的元数据

    coco_val_metadata = MetadataCatalog.get("self_coco_val")
    dataset_dicts = DatasetCatalog.get("self_coco_val")
    coco_val_metadata
    

    数据可视化,确定数据载入无问题

    import random
    
    for d in random.sample(dataset_dicts, 3):
        img = cv2.imread(d["file_name"])
        visualizer = Visualizer(img[:, :, ::-1], metadata=coco_val_metadata, scale=0.5)
        vis = visualizer.draw_dataset_dict(d)
        cv2.imshow(vis.get_image()[:, :, ::-1])
        cv2.waitKey(0)
    

    完整代码

    根据官方的tools/train_net.py 修改

    #-*- coding:utf-8 -*-
    import os
    import cv2
    import logging
    from collections import OrderedDict
    
    import detectron2.utils.comm as comm
    from detectron2.utils.visualizer import Visualizer
    from detectron2.checkpoint import DetectionCheckpointer
    from detectron2.config import get_cfg
    from detectron2.data import DatasetCatalog, MetadataCatalog
    from detectron2.data.datasets.coco import load_coco_json
    from detectron2.engine import DefaultTrainer, default_argument_parser, default_setup, launch
    from detectron2.evaluation import COCOEvaluator, verify_results
    from detectron2.modeling import GeneralizedRCNNWithTTA
    
    detectron2_repo_path = "/home/ghj/detectron2/"
    TRAIN_JSON = 'train.json'
    TRAIN_PATH = './images_train'
    
    VAL_JSON = 'val.json'
    VAL_PATH = './images_val'
    
    # 数据集类别元数据
    DATASET_CATEGORIES = [
        {"name": "pedestrian", "id": 1, "isthing": 1, "color": [220, 20, 60]},
        {"name": "people", "id": 2, "isthing": 1, "color": [219, 142, 185]},
        {"name": "bicycle", "id": 3, "isthing": 1, "color": [220, 120, 60]},
        {"name": "car", "id": 4, "isthing": 1, "color": [219, 42, 185]},
        {"name": "van", "id": 5, "isthing": 1, "color": [20, 20, 60]},
        {"name": "truck", "id": 6, "isthing": 1, "color": [19, 142, 185]},
        {"name": "tricycle", "id": 7, "isthing": 1, "color": [220, 20, 160]},
        {"name": "awning-tricycle", "id": 8, "isthing": 1, "color": [119, 142, 185]},
        {"name": "bus", "id": 9, "isthing": 1, "color": [220, 220, 60]},
        {"name": "motor", "id": 10, "isthing": 1, "color": [21, 142, 85]},
    ]
    # 数据集的子集
    PREDEFINED_SPLITS_DATASET = {
        "train_2019": (TRAIN_PATH, TRAIN_JSON),
        "val_2019": (VAL_PATH, VAL_JSON),
    }
    
    
    def register_dataset():
        """
        purpose: register all splits of dataset with PREDEFINED_SPLITS_DATASET
        """
        for key, (image_root, json_file) in PREDEFINED_SPLITS_DATASET.items():
            register_dataset_instances(name=key,
                                        metadate=get_dataset_instances_meta(), 
                                       json_file=json_file, 
                                       image_root=image_root)
    def get_dataset_instances_meta():
        """
        purpose: get metadata of dataset from DATASET_CATEGORIES
        return: dict[metadata]
        """
        thing_ids = [k["id"] for k in DATASET_CATEGORIES if k["isthing"] == 1]
        thing_colors = [k["color"] for k in DATASET_CATEGORIES if k["isthing"] == 1]
        # assert len(thing_ids) == 2, len(thing_ids)
        thing_dataset_id_to_contiguous_id = {k: i for i, k in enumerate(thing_ids)}
        thing_classes = [k["name"] for k in DATASET_CATEGORIES if k["isthing"] == 1]
        ret = {
            "thing_dataset_id_to_contiguous_id": thing_dataset_id_to_contiguous_id,
            "thing_classes": thing_classes,
            "thing_colors": thing_colors,
        }
        return ret
    
    
    def register_dataset_instances(name, metadate, json_file, image_root):
        """
        purpose: register dataset to DatasetCatalog,
                 register metadata to MetadataCatalog and set attribute
        """
        DatasetCatalog.register(name, lambda: load_coco_json(json_file, image_root, name))
        MetadataCatalog.get(name).set(json_file=json_file, 
                                      image_root=image_root, 
                                      evaluator_type="coco", 
                                      **metadate)
        checkout_dataset_annotation(name)
        
    # 查看数据集标注
    def checkout_dataset_annotation(name="train_2019"):
        dataset_dicts = load_coco_json(TRAIN_JSON, TRAIN_PATH, name)
        import random
        for d in random.sample(dataset_dicts,3):
            img = cv2.imread(d["file_name"])
            visualizer = Visualizer(img[:, :, ::-1], metadata=MetadataCatalog.get(name), scale=1.5)
            vis = visualizer.draw_dataset_dict(d)
            cv2.imshow('show', vis.get_image()[:, :, ::-1])
            cv2.waitKey(0)
    
    
    class Trainer(DefaultTrainer):
        @classmethod
        def build_evaluator(cls, cfg, dataset_name, output_folder=None):
            if output_folder is None:
                output_folder = os.path.join(cfg.OUTPUT_DIR, "inference")
            return COCOEvaluator(dataset_name, cfg, distributed=False, output_dir=output_folder)
    
        @classmethod
        def test_with_TTA(cls, cfg, model):
            logger = logging.getLogger("detectron2.trainer")
            # In the end of training, run an evaluation with TTA
            # Only support some R-CNN models.
            logger.info("Running inference with test-time augmentation ...")
            model = GeneralizedRCNNWithTTA(cfg, model)
            evaluators = [
                cls.build_evaluator(
                    cfg, name, output_folder=os.path.join(cfg.OUTPUT_DIR, "inference_TTA")
                )
                for name in cfg.DATASETS.TEST
            ]
            res = cls.test(cfg, model, evaluators)
            res = OrderedDict({k + "_TTA": v for k, v in res.items()})
            return res
    
    
    def setup(args):
        """
        Create configs and perform basic setups.
        """
        cfg = get_cfg() # 拷贝default config副本
        args.config_file = os.path.join(detectron2_repo_path,"configs/COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml")  #此处只需要配置yaml文件即可,预训练权重文件会根据配置文件自动加载,不需要额外的配置,额外配置也可,使用下面配置,注释不影响使用
        #from detectron2 import model_zoo
        #cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml")  # Let training initialize from model zoo
        cfg.merge_from_file(args.config_file)   # 从config file 覆盖配置
        cfg.merge_from_list(args.opts)          # 从CLI参数 覆盖配置
    
        # 更改配置参数
        cfg.DATASETS.TRAIN = ("train_2019",)
        cfg.DATALOADER.NUM_WORKERS = 0  # 单线程
        cfg.INPUT.MAX_SIZE_TRAIN = 400
        cfg.INPUT.MAX_SIZE_TEST = 400
        cfg.INPUT.MIN_SIZE_TRAIN = (160,)
        cfg.INPUT.MIN_SIZE_TEST = 160
        cfg.MODEL.ROI_HEADS.NUM_CLASSES = 10 # 类别数
        cfg.SOLVER.IMS_PER_BATCH = 2  # batch_size=2; iters_in_one_epoch = dataset_imgs/batch_size  
        ITERS_IN_ONE_EPOCH = 1000
        cfg.SOLVER.MAX_ITER = (ITERS_IN_ONE_EPOCH * 20) # 迭代次数
        cfg.SOLVER.BASE_LR = 0.00025 #学习率
        cfg.SOLVER.MOMENTUM = 0.9
        cfg.SOLVER.WEIGHT_DECAY = 0.0001
        cfg.SOLVER.WEIGHT_DECAY_NORM = 0.0
        cfg.SOLVER.GAMMA = 0.1
        cfg.SOLVER.STEPS = (30000,)
        cfg.SOLVER.WARMUP_FACTOR = 1.0 / 1000
        cfg.SOLVER.WARMUP_ITERS = 1000
        cfg.SOLVER.WARMUP_METHOD = "linear"
        cfg.SOLVER.CHECKPOINT_PERIOD = ITERS_IN_ONE_EPOCH #保存训练model间隔
    
        cfg.freeze()
        default_setup(cfg, args)
        return cfg
    
    
    def main(args):
        cfg = setup(args)
        print(cfg)
        # 注册数据集
        register_dataset()
        if args.eval_only:
            model = Trainer.build_model(cfg)
            DetectionCheckpointer(model, save_dir=cfg.OUTPUT_DIR).resume_or_load(
                cfg.MODEL.WEIGHTS, resume=args.resume
            )
            res = Trainer.test(cfg, model)
            if comm.is_main_process():
                verify_results(cfg, res)
            return res
            
        trainer = Trainer(cfg)
        trainer.resume_or_load(resume=args.resume)
        return trainer.train()
    if __name__ == "__main__":
        args = default_argument_parser().parse_args()
        print("Command Line Args:", args)
        launch(
            main,
            args.num_gpus,
            num_machines=args.num_machines,
            machine_rank=args.machine_rank,
            dist_url=args.dist_url,
            args=(args,),
        )
    
    展开全文
  • 使用配置参数,直接集成进detectron2/detectron2/configs/使用Detectron2/AdelaiDet训练自己的数据集。 AdelaiDet可以算是Detectron2的一个扩展包,基本和Detectron2类似。 buildin.py buildin
  • If you use Detectron2 in your research or wish to refer to the baseline results published in the Model Zoo, please use the following BibTeX entry. @misc{wu2019detectron2, author = {Yuxin Wu and ...
  • Detectron2训练自定义实例细分模型 1.安装 请参阅官方。 2.收集数据 收集图像数据很简单。 您可以使用某种相机自己拍照,也可以从互联网下载图像。 要构建健壮的模型,您需要具有不同背景,不同照明条件以及背景中...
  • detectron2训练自己的数据实现目标检测和关键点检测 ——ubuntu18.04编译测试detectron21. 配置1.1 环境要求2. 环境安装2.1 torch 和 torchvision2.2 cocoapi (pycocotools)2.3 下载安装detectron23. 测试detectron2...
  • 【扫盲】Detectron2训练各种网络(ubuntu) 欢迎关注公众号:小鸡炖技术,后台回复“detectron2_train(ubuntu)”获取视频素材
  • 【扫盲】Detectron2训练Faster-RCNN&amp;RetinaNet 欢迎关注公众号:小鸡炖技术 ,后台回复:“detectron2_all”获取本教程素材~~~
  • detectron2训练自己的数据集及demo测试

    千次阅读 2021-01-10 22:14:33
    今天就写写detectron2训练自己的数据。 1.环境准备 python=3.7.0 cuda=10.2.89 cudnn=7.6.5 torch=1.6.0 torchvision=0.7.0 2.数据准备(数据转换)     1.按照yolov3的文件目录(相关脚本下载...
  • Detectron2训练自己的数据集(较详细)

    千次阅读 多人点赞 2020-06-15 17:01:42
    上篇文章讲了如何在Centos7上配置Detectron2的环境查看,这里讲下如何训练自己的数据集,主要是针对目标检测。 在GETTING_STARTED.md官方文档里写了,官方提供了一个教程去将如何训练自己的数据集,但是网址进入,...
  • Detectron2训练自己数据

    2021-01-02 01:50:35
    顺利安装了pytorch1.7,也能够运行detectron2的inference 的demo了。 现在要训练自己的数据。 参考资料 https://zhuanlan.zhihu.com/p/88139849 有源码 https://www.pythonf.cn/read/116630 待验证
  • 文章目录一、安装 Detectron2二、软连接 coco 数据集三、训练四、数据集相关参数五、输出结果路径六、COCO 数据集简介七、模型相关参数 一、安装 Detectron2 初次接触 Detectron2 的话,可能安装会遇到些坑,大家...
  • detectron2训练报错

    千次阅读 2019-10-24 22:13:57
    训练时报错报错 -- Process 2 terminated with the following error: Traceback (most recent call last): File "/home/hxw/anaconda3/envs/xinwen/lib/python3.6/site-packages/torch/multiprocessing/spawn.py", ...
  • detectron2训练自己的数据集

    千次阅读 热门讨论 2019-11-07 14:49:17
    先讲怎么做,再讲源码层面的东西 ...coco数据集样式:[假设都在detectron2的工程目录下] datasets coco annotations instances_train2017.json instances_val2017.json tr...
  • detectron2训练自己的数据实现目标检测和关键点检测——修改配置文件和代码开始训练1. 配置2. 修改配置文件2.1 修改yaml文件2.2 注释mask的代码 1. 配置 基本配置 版本号 CPU Intel® Core™ i5-8400 CPU @ ...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 343
精华内容 137
关键字:

detectron2训练