CircularNet 工作原理:基于掩码检测与实例分割的 MRF 废弃物分析系统
【免费下载链接】modelsModels and examples built with TensorFlow项目地址: https://gitcode.com/GitHub_Trending/mode/models
本文基于 TensorFlow Models 仓库中official/projects/waste_identification_ml项目的官方文档,完整解析 CircularNet 废弃物分析系统的架构组成(机器视觉相机、计算单元、ML 模型、报表看板)、模型训练与自动标注流程,以及"拍照—推理—入库—可视化"的端到端数据链路,并结合仓库中的自动标注管线(auto_labeler_pipeline)、推理标签代码(model_inference/labels.py)与重训练配置(model_retraining/config/config_v1.yaml)说明其底层实现。读完后,你将能够理解 CircularNet 四大组件的协作方式,并知道如何利用自动标注、模型微调与部署管线适配自己的废弃物流。
一、系统总体架构:四大关键组件
CircularNet 是一个将计算机视觉与机器学习相结合、用于优化回收流程的废弃物分析系统。根据官方文档 how-cn-works.md,实现 CircularNet 需要四个关键组件:
机器视觉相机(Machine vision camera)专用相机负责捕捉传送带上物料的高分辨率图像,即使在废弃物高速移动的条件下也能保证图像质量。虽然 CircularNet 也能处理来自手机或 GoPro 等相机的图像,但对于运动物体,官方推荐使用配备**全局快门(global shutter)**的机器视觉相机,以获得最佳效果。
计算单元(Computational unit)图像分析组件承载经过训练的 ML 模型,完成物料识别与分类。根据部署场景不同,计算单元可以是以下三者之一:
- 边缘设备(Edge device):在现场进行实时处理;
- 云端方案(Cloud-based solution):可弹性扩展的远程处理;
- 自建服务器(Your own server):对基础设施拥有完全控制权。
机器学习模型(ML models)这些预训练模型是 CircularNet 的"心脏",它们使用基于掩码(mask-based)的图像分析算法来识别并分类废弃物流中的物料及其形态。从项目 README README.md 可以看到,CircularNet 当前构建于RF-DETR——一种同时具备目标检测与实例分割能力的视觉 Transformer 模型之上。其输出分为两个维度:
- Material Type(物料类型):识别对象的材料类型(金属、纸张等);对塑料还会进一步识别树脂类型(HDPE、PET、LDPE 等);
- Material Form(物料形态):按形态因子(杯、瓶、袋等)对对象分类;
- 推理标签示例:
Plastics-PET_Bottle。
推理阶段,标签体系由 CSV 文件加载并组合而成:labels.py 中的
load_labels()会读取类型与形态两个标签列表,在各自头部插入无检测类Na,再做笛卡尔积生成类型_形态形式的联合标签(如Plastics-PET_Bottle),最后通过categories_dictionary()映射为id -> {id, name, supercategory}的字典,供模型输出解码使用。报表看板(Reporting dashboard)原始图像与分析结果被汇总到一个可视化看板中,提供物料、分类及各类洞察的明细拆解,帮助你做出数据驱动决策,改进分拣与回收流程。分析结果会系统性写入BigQuery数据表,再由Looker看板进行可视化呈现,支持自定义报表。
官方提示:分析结果可以流式输出到任意云平台或自建服务器上的看板;仓库文档针对在Google Cloud上部署看板提供了专门说明。
二、模型训练:基于掩码的识别与分类
2.1 预训练基础
CircularNet 的机器学习模型采用视觉掩码算法,用于识别并分类废弃物流中各种各样的物料。这些模型已使用来自多个**物料回收设施(Material Recovery Facilities, MRF)**的图像进行了预训练,覆盖多种废弃物成分组合,因此开箱即可使用。
2.2 三种数据增强来源
预训练模型虽然可以直接使用,但你可以通过继续训练来进一步提升性能,以便针对特定物料类型优化,或适配所在地区/部署区域独特的废弃物流特征。继续训练需要采集并标注额外图像,主要来源有三类:
- MRF 图像:直接在 MRF 传送带上拍摄并打标签的图像;
- Google 内部标注:由 Google 专门团队人工标注的图像;
- 自动标注(Automatic annotation):处理脚本自动标注已分类物料图像,聚焦 PET、铝罐、纸箱等常见类型。
下图展示了模型对传送带上经过的铝罐图像执行掩码检测(mask detection)的效果:
图 1:模型对传送带上经过的铝罐图像应用掩码检测(原文档 Figure 1)
2.3 自动标注流程的三步任务
文档描述了自动标注流程涉及的三项任务:
- 生成掩码:为图像中的对象生成掩码,根据图像复杂度选择边界框(bounding box)或更精确的掩码检测;
- 过滤与清洗:对生成的掩码进行过滤和清理,去除重复或错误;
- 生成最终训练集:将标注结果加入,形成最终训练数据集。
数据准备完成后,ML 模型用其进行训练,学习如何在新的真实场景中识别物料。
2.4 仓库源码印证:SAM3 自动标注管线
上述自动标注流程在仓库中有完整落地,位于 auto_labeler_pipeline/ 目录,由 main.sh 串起 4 个阶段(脚本中set -e保证任一阶段出错即中止):
| 阶段 | 脚本 | 作用 |
|---|---|---|
| 1/4 | filter_sparse_images.py | 将检测对象数少于min_detections的图像移出至<root_dir>_empty目录,避免后续阶段在近乎空帧上浪费 GPU 时间 |
| 2/4 | split_train_val.py | 按keep_every_nth抽稀(如每 6 帧保留 1 帧),并按train_ratio切分 train/val |
| 3/4 | segmentation.py | 对每张图像运行 SAM3,裁剪出每个检测对象,直接写入分类器可用的<root_dir>_classifier/{train,val}/<class>/目录结构 |
| 4/4 | augment_train_split.py | 仅对 train 集应用配置的增强(翻转、旋转、模糊、噪声、色度抖动) |
管线行为由 config.yaml 集中控制,且"在启动时即校验,出错不会在漫长的 GPU 运行中途失败"。关键参数包括:
root_dir:父目录,每个子文件夹被视为一个类别(one subfolder per dataset);sam3_checkpoint_path:SAM3 模型检查点绝对路径;prompt_to_detect:本次运行要标注的对象类别(必须与prompts:下的某个键一致),该配置同时选定检测阈值与增强集合;prompts.<类>.detection:每类对象的confidence_threshold、score_threshold、containment_threshold(去重包含阈值,示例值为 0.98)、max_short_side(1024)、crop_size(256×256);prompts.<类>.augmentations:可用增强名(vflip/hflip/rot45/rot65/rot90/blur/noise03/noise06/cjitter)在代码中固定,配置文件只做勾选;keep_every_nth(示例为 6)、train_ratio(示例为 0.10,即 10% 训练、90% 验证,注释说明这是刻意保留的)、min_detections(示例为 2)、crop_variants(raw/black_background/imagenet_mean_background三选一或多选,多选时每变体一个子目录)、max_cpu_workers与queue_maxsize(裁剪保存的 CPU 线程池与背压队列大小)。
从 segmentation.py 的模块注释看,GPU 推理在主线程顺序执行,CPU 侧裁剪保存通过ThreadPoolExecutor加手动 future 背压完成——这与"过滤清洗—生成掩码—组织训练集"三步文档描述相印证。此外,仓库还保留了 Auto_Annotation_FastSAM.ipynb、Auto_Annotation_SAM.ipynb、SAM3.ipynb 等交互式标注 notebook,以及 auto_labeler_pipeline_rfdetr/ 目录下的 RF-DETR 变体管线,可作为同一思路的不同实现参考。
三、将模型应用到你的数据
相机采集到你的废弃物流图像或视频后,即可投入 CircularNet 模型工作。完整链路如下:
- 上传与推理:将采集到的文件上传到部署了 CircularNet 的服务器,系统对每一帧图像或视频帧执行分析。模型利用所学到的知识识别并分类废弃物流中存在的各类物料及其形态;可根据需求与部署约束选择实时或批处理方式。
- 结果入库:分析结果(包括每个检测对象的物料类型、形态等明细)被系统性组织并存储到BigQuery数据表。
- 看板可视化:这些结构化数据驱动Looker看板,你可以通过综合报表与洞察性可视化访问数据,创建自定义报表,使分拣与回收运营更高效。
仓库中对应的实现代码包括:
推理侧:model_inference/ 目录提供 TensorFlow(Inference_Tensorflow.ipynb)与 PyTorch(Inference_PyTorch_experimental.ipynb)两套推理 notebook,配套
preprocessing.py/postprocessing.py(含对应测试)与color_and_property_extractor.py(颜色与属性提取),以及 cn_model_run.ipynb 用于运行模型。微调/重训练侧:fine_tuning/ 目录提供 RF-DETR(Finetune_RF-DETR.ipynb)、TF-Mask-RCNN、PyTorch 图像分类器与 DINOv3 分类器等多条微调路线;model_retraining/ 目录下的 CircularNET_Vertex_AI_ReTraining_v1.ipynb 给出在 Vertex AI 上重训练的完整示例。
重训练配置示例:config_v1.yaml 是一份 Mask RCNN 风格的训练配置,可从中看出重训练的关键控制点:
- 任务级:
freeze_backbone: true(冻结骨干、只训练上层)、init_checkpoint_modules: all、include_mask: true(启用掩码头)、num_classes: 19、输入尺寸[512, 1024, 3]、全局批大小global_batch_size: 16(file_type: tfrecord)、训练步数train_steps: 160000; - 损失与采样:RPN 与 FRCNN 各损失权重(
rpn_box_weight、frcnn_class_weight、mask_weight等)、ROI 采样阈值(foreground_iou_threshold: 0.5、background_iou_low_threshold: 0.0、num_sampled_rois: 512); - 优化器:SGD(
momentum: 0.9)配合分段常数学习率(在 step 15000/20000 处从 0.2 衰减到 0.02、0.002)与 500 步线性 warmup(warmup_learning_rate: 0.0067); - 运行时:
num_gpus: 4、distribution_strategy: multi_worker_mirrored、enable_xla: true。
从该配置结构看,重训练是在既有实例分割架构上冻结骨干、以 tfrecord 标注数据继续训练的典型流程,与文档中"继续训练以提升特定物料或地区适应性"的说法一致。
- 任务级:
四、后续步骤
官方文档给出的进阶路径(均已转换为仓库内相对路径):
- 了解 CircularNet 提供的部署方案
- 为你的需求搭建硬件方案
- 了解如何在 Google Cloud 或边缘设备上部署 CircularNet
- 了解如何准备数据并使用模型分析图像
- 了解可视化看板以获取分析与报表
五、小结
CircularNet 的"相机—计算单元—掩码分割模型—BigQuery/Looker 看板"四层架构,把 MRF 传送带上的图像转化为可量化、可报表的物料构成数据;其预训练模型基于多 MRF 图像,并支持通过 MRF 实拍、人工标注与 SAM3 驱动的自动标注管线(过滤—切分—分割—增强四阶段)持续扩充训练数据。结合仓库中model_inference、data_generation与model_retraining三个目录的源码,可以完整复现从"采集一张传送带照片"到"在看板中查看分类统计"的整条技术链路。
【免费下载链接】modelsModels and examples built with TensorFlow项目地址: https://gitcode.com/GitHub_Trending/mode/models
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考