Detectron2 深度学习目标检测框架详解从安装到训练、评估与推理1. Detectron2概述1.1Detectron2简介1.2与其他目标检测框架对比1.3与MMDetection对比2. Detectron2环境要求与安装2.1 环境要求2.2 创建虚拟环境2.3 安装PyTorch2.4 安装Detectron23. Detectron2数据集准备3.1 注册数据集4. Detectron2模型训练4.1 加载模型配置4.2 创建训练器5. Detectron2模型评估6. Detectron2模型推理6.1 加载模型6.2 图片推理6.3 可视化检测结果7. Detectron2完整工作流程总结1. Detectron2概述1.1Detectron2简介Detectron2 是由 Facebook AI ResearchFAIR现 Meta AI团队开发的一个基于 PyTorch 的开源计算机视觉框架主要用于目标检测Object Detection、实例分割Instance Segmentation、语义分割Semantic Segmentation、全景分割Panoptic Segmentation、关键点检测Keypoint Detection等任务。Github官方地址为https://github.com/facebookresearch/detectron2Detectron2 是 Detectron 的第二代版本相比早期版本进行了全面重构采用更加模块化的设计方式具有更好的扩展能力、更高的训练效率以及更加完善的工程接口。目前Detectron2 已经成为计算机视觉研究领域常用的实验框架之一被大量目标检测和实例分割论文用于模型验证和算法研究。目前 Detectron2 官方支持的经典模型包括Faster R-CNNMask R-CNNRetinaNetCascade R-CNNDensePosePointRendViTDet1.2与其他目标检测框架对比框架开发者主要特点YOLO系列Ultralytics等单阶段检测器速度快部署方便适用于工业实时检测MMDetectionOpenMMLab模型丰富支持大量检测算法适用于科研实验Detectron2Meta AI模块化程度高适合目标检测与分割算法研究torchvision detectionPyTorch官方结构简单适合学习和快速验证相比 YOLO 系列模型Detectron2 更强调模型结构的灵活性。例如研究人员可以方便地替换Backbone主干网络Feature Pyramid NetworkFPNDetection Head检测头Loss Function损失函数Data Augmentation数据增强策略因此Detectron2 非常适合进行目标检测算法创新。1.3与MMDetection对比Detectron2 更像一个“经典检测算法研究平台”MMDetection 更像一个“目标检测算法实验操作系统”。Detectron2MMDetection开发团队Meta AIOpenMMLab主要语言Python PyTorchPython PyTorch设计目标研究经典检测算法、分割算法覆盖尽可能多的检测算法模型数量较少非常丰富论文复现能力★★★★★★★★★★算法创新实验★★★★★★★★★工业应用研究★★★★★★★★★中文资料较少非常丰富MMDetection支持的目标检测模型范围更广基本覆盖当前目标检测主流方向修改模型结构也更为方便Detectron2更适用于实例分割任务。2. Detectron2环境要求与安装2.1 环境要求根据官网介绍要求安装环境如下软件推荐版本Python3.7PyTorch1.8gcc g5.4Detectron2 官方仅支持Linux系统和Mac系统并不支持windows系统。2.2 创建虚拟环境推荐使用 Conda 创建独立环境conda create-ndetectron2python3.10conda activate detectron22.3 安装PyTorchpytorch的安装可参照官方指导https://pytorch.org/get-started/locally/验证 PyTorchimporttorchprint(torch.__version__)print(torch.cuda.is_available())如果输出2.1.0 True说明 PyTorch 安装成功。2.4 安装Detectron2安装 Detectron2python-mpipinstallgithttps://github.com/facebookresearch/detectron2.git# (add --user if you dont have permission)# Or, to install it from a local clone:gitclone https://github.com/facebookresearch/detectron2.git python-mpipinstall-edetectron2# On macOS, you may need to prepend the above commands with a few environment variables:CCclangCXXclangARCHFLAGS-arch x86_64python-mpipinstall...验证安装importdetectron2print(detectron2.__version__)3. Detectron2数据集准备Detectron2 默认采用 COCO 数据格式因此自定义数据集通常需要转换为 COCO 格式。数据集结构dataset/ ├── images/ │ ├── 001.jpg │ ├── 002.jpg └── annotations/ └── instances_train.jsonCOCO 标注文件主要包含图片信息类别信息bounding boxsegmentation信息示例{images:[{id:1,file_name:001.jpg,width:640,height:480}],annotations:[{image_id:1,category_id:1,bbox:[100,120,50,80],iscrowd:0}]}3.1 注册数据集Detectron2 使用 DatasetCatalog 管理数据集。fromdetectron2.data.datasetsimportregister_coco_instances register_coco_instances(my_dataset_train,{},datasets/train.json,datasets/images)register_coco_instances(my_dataset_val,{},datasets/val.json,datasets/images)查看数据集fromdetectron2.dataimportMetadataCatalog metadataMetadataCatalog.get(my_dataset_train)print(metadata)4. Detectron2模型训练Detectron2 使用配置文件管理模型训练。4.1 加载模型配置以 Faster R-CNN 为例fromdetectron2.configimportget_cfg cfgget_cfg()cfg.merge_from_file(configs/COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml)cfg.DATASETS.TRAIN(my_dataset_train,)cfg.DATASETS.TEST(my_dataset_val,)cfg.DATALOADER.NUM_WORKERS4# 加载预训练权重cfg.MODEL.WEIGHTS(model_final.pth)# 类别数量cfg.MODEL.ROI_HEADS.NUM_CLASSES3# Batch sizecfg.SOLVER.IMS_PER_BATCH4# 学习率cfg.SOLVER.BASE_LR0.001# 最大训练迭代次数cfg.SOLVER.MAX_ITER10000cfg.OUTPUT_DIR./output4.2 创建训练器fromdetectron2.engineimportDefaultTrainer trainerDefaultTrainer(cfg)trainer.resume_or_load(resumeFalse)trainer.train()训练完成后output/ ├── model_final.pth ├── metrics.json └── events.out.tfevents其中model_final.pth模型权重metrics.json训练指标events文件TensorBoard日志5. Detectron2模型评估Detectron2 使用 COCO 标准指标评价模型性能APAP50AP75AR示例代码fromdetectron2.evaluationimportCOCOEvaluatorfromdetectron2.evaluationimportinference_on_datasetfromdetectron2.dataimportbuild_detection_test_loader evaluatorCOCOEvaluator(my_dataset_val,cfg,False,output_dir./eval)val_loaderbuild_detection_test_loader(cfg,my_dataset_val)resultsinference_on_dataset(trainer.model,val_loader,evaluator)print(results)输出{ bbox: { AP:45.6, AP50:72.1, AP75:48.3 } }6. Detectron2模型推理训练完成后可以利用训练好的模型进行目标检测。6.1 加载模型fromdetectron2.engineimportDefaultPredictor cfg.MODEL.WEIGHTS(./output/model_final.pth)predictorDefaultPredictor(cfg)6.2 图片推理importcv2 imagecv2.imread(test.jpg)outputspredictor(image)instancesoutputs[instances]print(instances.pred_classes)print(instances.pred_boxes)输出类别: tensor([0,2]) 边界框: Boxes( [[120,80,200,160], [300,200,400,350]] )6.3 可视化检测结果fromdetectron2.utils.visualizerimportVisualizerfromdetectron2.dataimportMetadataCatalog metadataMetadataCatalog.get(my_dataset_train)visualizerVisualizer(image[:,:,::-1],metadatametadata)resultvisualizer.draw_instance_predictions(outputs[instances].to(cpu))cv2.imwrite(result.jpg,result.get_image()[:,:,::-1])7. Detectron2完整工作流程总结Detectron2完整使用流程如下数据集准备 ↓ 转换为COCO格式 ↓ 注册Dataset ↓ 加载模型配置 ↓ 训练模型 ↓ 模型评估 ↓ 模型推理 ↓ 部署应用Detectron2最大的优势在于其高度模块化设计使研究人员能够快速修改网络结构并验证新的算法思想。相比 YOLO 系列模型Detectron2 更适合作为科研实验平台相比 MMDetectionDetectron2 的代码结构更加简洁更容易理解经典目标检测算法的实现过程。对于工业缺陷检测、医学图像分析、遥感目标检测等任务Detectron2 是一个非常值得学习和使用的深度学习框架。