一、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 编译环境:
- ONNX 导出 → 2. 校准(PTQ)→ 3. 编译为 BIN → 4. 验证
💡提示:Docker 镜像可从 地瓜开发者社区 获取。
四、环境准备
4.1 克隆仓库 & 切换到 rdk_x5 分支
gitclone https://github.com/D-Robotics/rdk_model_zoo.gitcdrdk_model_zoogitcheckout rdk_x54.2 安装依赖
cdsamples/vision/fcos python3-mpipinstall--usernumpy opencv-python4.3 下载模型文件
cdmodel/bashdownload_model.sh五、快速运行
进入 runtime 目录,一键运行:
cdsamples/vision/fcos/runtime/pythonchmod+x run.sh ./run.shrun.sh会完成以下操作:
- 检查模型文件是否存在,不存在则自动下载
- 使用默认参数执行
main.py - 输入测试图片,输出检测结果
六、手动运行与参数说明
6.1 使用默认参数
python3 main.py6.2 自定义参数运行
python3 main.py\--model-path../../model/fcos_efficientnetb0_512x512.bin\--test-img../../test_data/demo_rdkx5_fcos_detect.jpg\--score-threshold0.5\--nms-threshold0.46.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:运行时提示找不到模型文件?
cdmodel/&&bashdownload_model.shQ2:BPU 推理失败?
- 确认 RDK OS 版本 ≥ 3.5.0
- 确认使用
hbm_runtime接口(非旧版bpu_infer_lib)
Q3:如何切换不同尺寸的模型?
修改--model-path参数指向对应的.bin文件即可。
十二、总结
本文详细介绍了在 RDK X5 上部署 FCOS 目标检测模型的完整流程:
- ✅ FCOS 算法原理(anchor-free + center-ness)
- ✅ 模型转换(OpenExplorer Docker → ONNX → PTQ → BIN)
- ✅ 环境配置 + 模型下载
- ✅ 一键运行 + 自定义参数
- ✅ 性能数据(最高 323 FPS)
- ✅ 应用场景(监控/工业/自动驾驶/机器人)
FCOS 是 RDK X5 Model Zoo 中检测类模型的重要选项,其 anchor-free 设计和小目标检测能力使其在工业检测和实时监控场景中具有独特优势。