cascade-rcnn

GitHub
1.1k 290 较难 2 次阅读 1周前图像
AI 解读 由 AI 自动生成,仅供参考

cascade-rcnn 是一个基于 Caffe 深度学习框架的开源项目,实现了 Faster R-CNN、R-FCN、FPN 及核心的 Cascade R-CNN 等多种目标检测算法。它致力于提升物体检测的质量,重点解决传统方法中容易出现的误检问题,尤其是在处理紧密相邻物体时难以区分的情况。

项目的核心技术在于级联机制。它通过串联多个检测器,利用逐步增大的 IoU 阈值进行端到端训练,让后续阶段更严格地筛选前一级的输出,从而有效剔除靠近真实目标的假阳性结果。这种策略简单高效,无需复杂技巧就能在 MS-COCO 等数据集上获得顶尖性能,且适用于多种骨干网络如 ResNet。

这非常适合计算机视觉领域的研究人员和开发者,特别是需要在 Caffe 环境下复现模型或追求高精度检测方案的团队。无论是基础实验还是进阶优化,cascade-rcnn 都能提供可靠的基准和强大的扩展能力,帮助你在目标检测任务中取得更好成果。

使用场景

某精密电子制造企业的研发团队正在部署自动化视觉检测系统,用于监控高速流水线上的微小元器件缺陷。

没有 cascade-rcnn 时

  • 原有单阶段检测模型对相似背景的干扰非常敏感,经常把表面划痕误报为破损。
  • 当零件堆叠或距离过近时,边界框重叠严重,导致单个目标被漏检或框选不准。
  • 为了减少漏检不得不降低置信度阈值,结果引入大量无效报警,人工筛选耗时费力。
  • 模型在复杂工业光照下稳定性不足,夜间或强光环境检测效果明显下降。

使用 cascade-rcnn 后

  • cascade-rcnn 利用多阶段级联策略,逐层优化定位精度,有效解决了密集物体遮挡问题。
  • 通过递增的 IoU 阈值训练,自动过滤掉低质量的候选框,大幅减少了误报数量。
  • 集成 FPN 特征金字塔与 ResNet 骨干,在不同尺度下均能保持高精度的缺陷定位能力。
  • 基于成熟 Caffe 框架实现,直接复用预训练权重即可达到业界领先的检测指标。

cascade-rcnn 凭借高精度特性,帮助产线实现了从被动人工复检到主动精准拦截的转变。

运行环境要求

操作系统
  • Linux
  • macOS
GPU

需要 NVIDIA GPU,测试通过 CUDA 8.0 与 cuDNN 6.0.20

内存

未说明

依赖
notes代码基于 Caffe 框架(C++),非 Python 项目;运行检测/评估 Demo 必须安装 MATLAB 包装器;训练前需下载并配置 MS-COCO 或 PASCAL VOC 数据集;部分复杂模型(如 Res101-FPN)训练可能显存溢出,建议从最新状态恢复训练。
python未说明
Caffe
cuDNN
MATLAB
Git
COCO API
cascade-rcnn hero image

快速开始

Cascade R-CNN:深入高质量目标检测

作者:Zhaowei Cai 和 Nuno Vasconcelos

此仓库由加州大学圣地亚哥分校的 Zhaowei Cai 编写。

简介

本仓库实现了多种流行的目标检测算法,包括 Faster R-CNN、R-FCN、FPN 以及我们最近提出的 Cascade R-CNN,在 MS-COCO 和 PASCAL VOC 数据集上运行。骨干网络有多种选择,包括 AlexNet、VGG-Net 和 ResNet。它使用 C++ 编写,并由 Caffe 深度学习工具箱驱动。

Cascade R-CNN 是流行的两阶段 R-CNN 目标检测框架的多阶段扩展。其目标是获得高质量的目标检测,能有效拒绝邻近的误报(False Positives)。它由一系列检测器组成,这些检测器以端到端方式训练,具有递增的 IoU(交并比)阈值,以便依次更严格地过滤邻近的误报。前一阶段检测器的输出被转发到后一阶段检测器,检测结果将逐阶段改进。这一思想可应用于任何基于两阶段 R-CNN 框架的检测器,包括 Faster R-CNN、R-FCN、FPN、Mask R-CNN 等,且无论基线强度如何,都能获得可靠的提升。一个基于 ResNet-101 骨干网络的 FPN 检测器的基础版 Cascade R-CNN,没有任何训练或推理方面的额外技巧,在具有挑战性的 MS-COCO 数据集上取得了最先进(State-of-the-art)的结果。

更新

Detectron 中的 Cascade R-CNN 重新实现已发布。参见 Detectron-Cascade-RCNN。所有测试模型均表现出一致的提升,与基线强度无关。

同时也推荐使用第三方实现,基于 PyTorch 的 mmdetection 和基于 TensorFlow 的 tensorpack

引用

如果您使用了我们的代码/模型/数据,请引用我们的论文:

@inproceedings{cai18cascadercnn,
  author = {Zhaowei Cai and Nuno Vasconcelos},
  Title = {Cascade R-CNN: Delving into High Quality Object Detection},
  booktitle = {CVPR},
  Year  = {2018}
}

或其扩展:

@article{cai2019cascadercnn,
  author = {Zhaowei Cai and Nuno Vasconcelos},
  title = {Cascade R-CNN: High Quality Object Detection and Instance Segmentation},
  journal = {arXiv preprint arXiv:1906.09756},
  year = {2019}
}

基准测试

我们在以下表格中对多个检测器模型在 MS-COCO 和 PASCAL VOC 数据集上进行了基准测试。

  1. MS-COCO (训练/测试:train2017/val2017,短边尺寸:FPN 为 800,其他为 600)
模型 #GPU 批大小 学习率 迭代次数 训练时间 测试时间 AP AP50 AP75
VGG-RPN-baseline 2 4 3e-3 100k 12.5 小时 0.075 秒 23.6 43.9 23.0
VGG-RPN-Cascade 2 4 3e-3 100k 15.5 小时 0.115 秒 27.0 44.2 27.7
Res50-RFCN-baseline 4 1 3e-3 280k 19 小时 0.07 秒 27.0 48.7 26.9
Res50-RFCN-Cascade 4 1 3e-3 280k 22.5 小时 0.075 秒 31.1 49.8 32.8
Res101-RFCN-baseline 4 1 3e-3 280k 29 小时 0.075 秒 30.3 52.2 30.8
Res101-RFCN-Cascade 4 1 3e-3 280k 30.5 小时 0.085 秒 33.3 52.0 35.2
Res50-FPN-baseline 8 1 5e-3 280k 32 小时 0.095 秒 36.5 58.6 39.2
Res50-FPN-Cascade 8 1 5e-3 280k 36 小时 0.115 秒 40.3 59.4 43.7
Res101-FPN-baseline 8 1 5e-3 280k 37 小时 0.115 秒 38.5 60.6 41.7
Res101-FPN-Cascade 8 1 5e-3 280k 46 小时 0.14 秒 42.7 61.6 46.6
  1. PASCAL VOC 2007 (训练/测试:2007+2012trainval/2007test,短边尺寸:600)
模型 #GPU 批大小 学习率 迭代次数 训练时间 AP AP50 AP75
Alex-RPN-baseline 2 4 1e-3 45k 2.5 小时 29.4 63.2 23.7
Alex-RPN-Cascade 2 4 1e-3 45k 3 小时 38.9 66.5 40.5
VGG-RPN-baseline 2 4 1e-3 45k 6 小时 42.9 76.4 44.1
VGG-RPN-Cascade 2 4 1e-3 45k 7.5 小时 51.2 79.1 56.3
Res50-RFCN-baseline 2 2 2e-3 90k 8 小时 44.8 77.5 46.8
Res50-RFCN-Cascade 2 2 2e-3 90k 9 小时 51.8 78.5 57.1
Res101-RFCN-baseline 2 2 2e-3 90k 10.5 小时 49.4 79.8 53.2
Res101-RFCN-Cascade 2 2 2e-3 90k 12 小时 54.2 79.6 59.2

注意。在上述表格中,所有模型均已运行至少两次,结果相近。训练相对稳定。RPN 指的是 Faster R-CNN。PASCAL VOC 的标注已转换为 COCO 格式,并使用 COCO API 进行评估。结果与官方 VOC 评估不同。如果您想在出版物中比较 VOC 结果,请使用官方 VOC 代码进行评估。

要求

  1. 需要 NVIDIA GPU 和 cuDNN 以获得高速运行。目前,已测试过 CUDA 8.0 配合 cuDNN 6.0.20。其他版本应该也能工作。

  2. 运行检测/评估演示需要 Caffe MATLAB 包装器。

安装

  1. 克隆 Cascade-RCNN 仓库,我们将您克隆到的目录称为 CASCADE_ROOT

    git clone https://github.com/zhaoweicai/cascade-rcnn.git
    
  2. 构建 Cascade-RCNN

    cd $CASCADE_ROOT/
    # 遵循此处 Caffe 安装说明:
    #   http://caffe.berkeleyvision.org/installation.html
    
    # 如果您熟悉 Caffe 并已安装所有依赖项
    # 且您的 Makefile.config 已就位,则只需执行:
    make all -j 16
    
    # 如果您想运行 Cascade-RCNN 检测/评估演示,也需构建 MATLAB 包装器
    make matcaffe
    

数据集

如果您已经有 COCO/VOC 副本但组织方式不像下面那样,您可以简单地创建符号链接(Symlinks)以拥有相同的目录结构。

MS-COCO

在所有 MS-COCO 实验中,我们使用 train2017 进行训练,使用 val2017(又名 minival)进行验证。请遵循 MS-COCO 网站 下载图像/标注,并设置 COCO API。

假设您的本地 COCO 数据集副本位于 /your/path/to/coco,请确保它具有以下目录结构:

coco
|_ images
  |_ train2017
  |  |_ <im-1-name>.jpg
  |  |_ ...
  |  |_ <im-N-name>.jpg
  |_ val2017
  |_ ...
|_ annotations
   |_ instances_train2017.json
   |_ instances_val2017.json
   |_ ...
|_ MatlabAPI

PASCAL VOC

在所有 PASCAL VOC 实验中,我们使用 VOC2007+VOC2012 的 trainval(训练验证集)进行训练,并使用 VOC2007 的 test(测试集)进行验证。请遵循 PASCAL VOC 官网 下载图像和标注文件,并设置 VOCdevkit。

假设您本地的 VOCdevkit 副本位于 /your/path/to/VOCdevkit,请确保它具有以下目录结构:

VOCdevkit
|_ VOC2007
  |_ JPEGImages
  |  |_ <000001>.jpg
  |  |_ ...
  |  |_ <009963>.jpg
  |_ Annotations
  |  |_ <000001>.xml
  |  |_ ...
  |  |_ <009963>.xml
  |_ ...
|_ VOC2012
  |_ JPEGImages
  |  |_ <2007_000027>.jpg
  |  |_ ...
  |  |_ <2012_004331>.jpg
  |_ Annotations
  |  |_ <2007_000027>.xml
  |  |_ ...
  |  |_ <2012_004331>.xml
  |_ ...
|_ VOCcode

训练 Cascade-RCNN

  1. 获取训练数据

    cd $CASCADE_ROOT/data/
    sh get_coco_data.sh
    

    这将下载实验所需的窗口文件。您也可以使用 $CASCADE_ROOT/data/coco/ 下提供的 MATLAB 脚本 coco_window_file.m 来生成您自己的窗口文件。

  2. 下载在 ImageNet 上预训练的模型。对于 AlexNet 和 VGG-Net,全连接层 (FC layers) 被剪枝,且每个全连接层保留 2048 个单元。此外,这两个全连接层被复制三次用于 Cascade R-CNN 训练。对于 ResNet,BatchNorm(批归一化)层被合并到 Scale(缩放)层中,并在训练期间冻结,这是常见的做法。

    cd $CASCADE_ROOT/models/
    sh fetch_vggnet.sh
    
  3. 提供了多个 shell 脚本来训练不同基线检测器的 Cascade-RCNN,如我们在论文中所描述的那样。在每个模型文件夹下,您需要将 train.prototxttest.prototxt 中数据层的 root_folder 更改为您的 COCO 路径。之后,您就可以开始训练自己的 Cascade-RCNN 模型了。以 vgg-12s-600-rpn-cascade 为例。

    cd $CASCADE_ROOT/examples/coco/vgg-12s-600-rpn-cascade/
    sh train_detection.sh
    

    训练过程中会生成日志文件。总训练时间取决于模型的复杂度和数据集的大小。如果您想快速检查训练是否正常工作,可以尝试在 VOC 数据集上使用轻量级 AlexNet 模型。

注意。偶尔,Res101-FPN(特征金字塔网络)-Cascade 的训练可能会超出内存限制。只需从最新的 solverstate(求解器状态)恢复训练即可。

预训练模型

我们仅提供针对 COCO 数据集的 Res50-FPN-baseline、Res50-FPN-Cascade 和 Res101-FPN-Cascade 模型,以及针对 VOC 数据集的 Res101-RFCN-Cascade 模型。

下载预训练模型

cd $CASCADE_ROOT/examples/coco/
sh fetch_cascadercnn_models.sh

预训练模型产生的结果与我们的论文中描述的完全一致。

测试/评估演示

一旦您拥有预训练或自行训练的模型,您可以使用 MATLAB 脚本 run_cascadercnn_coco.m 来获取检测和评估结果。在演示脚本中设置正确的数据集路径并选择您感兴趣的模型进行测试。默认设置是针对预训练模型的。最终的检测结果将保存在 $CASCADE_ROOT/examples/coco/detections/ 下,评估结果将保存在模型文件夹下。

您也可以在每个模型文件夹下运行 shell 脚本 test_coco_detection.sh 进行评估,但这与官方评估不完全相同。为了发表用途,请使用 MATLAB 脚本。

免责声明

  1. 当我们重新实现 FPN(特征金字塔网络)框架和 roi_align(ROI 对齐)层时,我们仅参考了它们发表的论文。因此,我们的实现细节可能与官方的 Detectron 有所不同。

如果您在使用我们的代码或模型时遇到任何问题,请告诉我。

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架

PaddleOCR

PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。

74.9k|★★★☆☆|今天
语言模型图像开发框架

tesseract

Tesseract 是一款历史悠久且备受推崇的开源光学字符识别(OCR)引擎,最初由惠普实验室开发,后由 Google 维护,目前由全球社区共同贡献。它的核心功能是将图片中的文字转化为可编辑、可搜索的文本数据,有效解决了从扫描件、照片或 PDF 文档中提取文字信息的难题,是数字化归档和信息自动化的重要基础工具。 在技术层面,Tesseract 展现了强大的适应能力。从版本 4 开始,它引入了基于长短期记忆网络(LSTM)的神经网络 OCR 引擎,显著提升了行识别的准确率;同时,为了兼顾旧有需求,它依然支持传统的字符模式识别引擎。Tesseract 原生支持 UTF-8 编码,开箱即用即可识别超过 100 种语言,并兼容 PNG、JPEG、TIFF 等多种常见图像格式。输出方面,它灵活支持纯文本、hOCR、PDF、TSV 等多种格式,方便后续数据处理。 Tesseract 主要面向开发者、研究人员以及需要构建文档处理流程的企业用户。由于它本身是一个命令行工具和库(libtesseract),不包含图形用户界面(GUI),因此最适合具备一定编程能力的技术人员集成到自动化脚本或应用程序中

73.3k|★★☆☆☆|3天前
开发框架图像