一、FCOS 算法概览

FCOS(Fully Convolutional One-Stage Object Detection) 是经典的 anchor-free 单阶段检测算法,由 Tian 等人在 2019 年提出。与 YOLO/SSD 等 anchor-based 方法不同,FCOS 直接在特征图的每个像素位置预测:

  • 类别分数(classification score)
  • 边界框回归(bounding box regression)
  • Center-ness(中心度,用于抑制低质量检测框)

这种设计避免了 anchor 的超参数调优(如数量、尺寸、宽高比),在保持精度的同时大幅简化了检测流程。

论文Fully Convolutional One-Stage Object Detection
官方实现tianzhi0549/FCOS


二、目录结构

Model Zoo 中 FCOS sample 的完整目录:

samples/vision/fcos/
├── README.md / README_cn.md     # 总体说明
├── conversion/                   # 模型转换
│   └── README_cn.md
├── evaluator/                    # 精度评测
│   └── README_cn.md
├── model/                        # 模型文件
│   └── download_model.sh         # 模型下载脚本
├── runtime/python/               # Python 推理入口
│   ├── main.py                   # 主程序
│   ├── run.sh                    # 一键运行脚本
│   └── README_cn.md
└── test_data/                    # 测试数据
    └── demo_rdkx5_fcos_detect.jpg

三、模型转换概览

完整转换说明见 conversion/README_cn.md

FCOS 模型在 RDK X5 上的部署分为两个阶段:

3.1 图像 Backbone(BPU)

FCOS 使用 EfficientNet 系列作为 backbone,在 BPU 上通过 hbm_runtime 接口执行推理。输入输出规格:

输入 数据类型 形状 布局
image FP32 1 × 3 × H × W NCHW
输出 数据类型 说明
检测结果 FP32 类别分数 + 框坐标 + center-ness

3.2 转换流程

Model Zoo 已提供可直接使用的 .bin 模型文件。如需自定义转换参数,使用 OpenExplorer Docker 编译环境:

  1. ONNX 导出 → 2. 校准(PTQ)→ 3. 编译为 BIN → 4. 验证

💡 提示:Docker 镜像可从 地瓜开发者社区 获取。


四、环境准备

4.1 克隆仓库 & 切换到 rdk_x5 分支

git clone https://github.com/D-Robotics/rdk_model_zoo.git
cd rdk_model_zoo
git checkout rdk_x5

4.2 安装依赖

cd samples/vision/fcos
python3 -m pip install --user numpy opencv-python

4.3 下载模型文件

cd model/
bash download_model.sh

五、快速运行

进入 runtime 目录,一键运行:

cd samples/vision/fcos/runtime/python
chmod +x run.sh
./run.sh

run.sh 会完成以下操作:

  1. 检查模型文件是否存在,不存在则自动下载
  2. 使用默认参数执行 main.py
  3. 输入测试图片,输出检测结果

六、手动运行与参数说明

6.1 使用默认参数

python3 main.py

6.2 自定义参数运行

python3 main.py \
    --model-path ../../model/fcos_efficientnetb0_512x512.bin \
    --test-img ../../test_data/demo_rdkx5_fcos_detect.jpg \
    --score-threshold 0.5 \
    --nms-threshold 0.4

6.3 参数说明

参数 说明 默认值
--model-path BPU 模型 .bin 路径 模型目录下的默认文件
--test-img 测试输入图片路径 测试数据目录
--score-threshold 置信度阈值 0.5
--nms-threshold NMS 阈值 0.4

七、推理结果解读

运行成功后,输出结果示例:

Input: demo_rdkx5_fcos_detect.jpg (512x512)
Model: fcos_efficientnetb0
Detected objects: 5
  - person: 0.92 (x1=120, y1=45, x2=380, y2=500)
  - car: 0.88 (x1=50, y1=200, x2=200, y2=350)
  ...
Inference time: 3.1 ms (BPU) + 9 ms (post-process)

八、性能数据

下表展示 FCOS 系列模型在 RDK X5 上的实测性能(BPU 推理):

模型 尺寸 类别数 BPU 吞吐量 Python 后处理
fcos_efficientnetb0 512×512 80 323.0 FPS 9 ms
fcos_efficientnetb2 768×768 80 70.9 FPS 16 ms
fcos_efficientnetb3 896×896 80 38.7 FPS 20 ms

测试平台:RDK X5,CPU 8×A55@1.8G,BPU 1×Bayes-e@1G (10TOPS INT8)

解读

  • fcos_efficientnetb0 以 512×512 分辨率实现 323 FPS 的惊人吞吐,适合实时视频流检测
  • 随着模型增大和分辨率提高,精度提升但吞吐下降
  • 后处理(Python)耗时 9-20ms,对于 30 FPS 应用场景是可接受的

九、FCOS vs YOLO:Anchor-Free 的优势

对比维度 FCOS YOLO 系列
Anchor 设计 ❌ 无需 anchor ✅ 需要预设 anchor
超参数调优 多(anchor 数量/尺寸/比例)
小目标检测 天然优势(逐像素预测) 依赖 anchor 密度
模型复杂度 较低 中等
RDK X5 BPU 吞吐 323 FPS (b0) 100-200 FPS (nano)

十、应用场景

在 RDK X5 上部署 FCOS 后,可实现以下边缘侧目标检测应用:

场景 说明
实时视频监控 323 FPS 满足 30 路并发检测
工业缺陷检测 小目标检测能力强,适合 PCB/布匹检测
自动驾驶感知 80 类 COCO 目标,覆盖行人/车辆/交通标志
机器人视觉 低延迟 + 高吞吐,适合 SLAM 前端目标检测

十一、常见问题

Q1:运行时提示找不到模型文件?

cd model/ && bash download_model.sh

Q2:BPU 推理失败?

  • 确认 RDK OS 版本 ≥ 3.5.0
  • 确认使用 hbm_runtime 接口(非旧版 bpu_infer_lib

Q3:如何切换不同尺寸的模型?

修改 --model-path 参数指向对应的 .bin 文件即可。


十二、总结

本文详细介绍了在 RDK X5 上部署 FCOS 目标检测模型的完整流程:

  1. ✅ FCOS 算法原理(anchor-free + center-ness)
  2. ✅ 模型转换(OpenExplorer Docker → ONNX → PTQ → BIN)
  3. ✅ 环境配置 + 模型下载
  4. ✅ 一键运行 + 自定义参数
  5. ✅ 性能数据(最高 323 FPS)
  6. ✅ 应用场景(监控/工业/自动驾驶/机器人)

FCOS 是 RDK X5 Model Zoo 中检测类模型的重要选项,其 anchor-free 设计和小目标检测能力使其在工业检测和实时监控场景中具有独特优势。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐