CircularNet 边缘设备预测管线实战:Triton 推理服务、本地图像批处理与掩码结果输出
2026/9/7 4:04:41 网站建设 项目流程

CircularNet 边缘设备预测管线实战:Triton 推理服务、本地图像批处理与掩码结果输出

【免费下载链接】modelsModels and examples built with TensorFlow项目地址: https://gitcode.com/GitHub_Trending/mode/models

在传送带垃圾分拣场景(CircularNet,即 waste_identification_ml 项目)中,预测管线(prediction pipeline)是连接“模型”与“业务数据”的核心环节。本文以仓库文档 prediction-pipeline-in-edge.md 为主线,讲解如何在边缘设备(edge device)上启动 Triton 推理服务、配置并运行针对本地图像的预测管线脚本run_edge_images.sh,并结合仓库中的 inference_pipeline.py 与 run_images.sh 等源码,深入解释每个参数的实际作用。读完后你可以独立完成:加载模型 → 确认服务端模型名 → 配置输入/输出目录与推理参数 → 批量处理图像 → 获得带掩码标注的结果与日志,并为后续导出 BigQuery、搭建可视化看板做好准备。

一、边缘预测管线在整体流程中的位置

CircularNet 提供用于处理、分析视频或图像文件并进行物体识别的预测管线。根据 管线概览文档,管线按以下固定顺序执行一系列动作,以保证结果可靠且一致:

  1. 按创建时间或其他时间相关元数据,将视频或图像按时间顺序组织;
  2. 逐个导入文件;若文件是视频,管线会将其拆分为单帧,并对每一帧运行实例分割模型,完成像素级(pixel-level)的实例分割;
  3. 执行颜色检测算法,识别并分类帧或图像中检测到的物体的颜色;
  4. 从检测到的物体中提取并记录特征,便于后续分析与机器学习应用;
  5. 输出每一帧或每张图像的预测结果,图像上叠加掩码(masks)并标注检测到的物体。

对单个视频的所有帧处理完成后,管线还会执行物体跟踪(object tracking)算法,识别并消除同一物体在连续帧中的重复出现,从而提升检测与统计的准确性。

边缘(edge)与云(cloud)两条路径的差异在于数据与结果的存放位置:

  • 边缘管线:输入图像放在边缘设备的本地文件夹,结果同样保存在本地输出文件夹,便于高效的数据管理;文档中将其与云版 prediction-pipeline-in-cloud.md 对应——云版会同时把原始图像和结果写入 Cloud Storage 并追加到 BigQuery 表。
  • 结果流转:边缘管线处理完每个本地文件后,会创建一个包含全部结果的输出目录,供进一步使用与分析。之后你可以按需手动把结果导出到 BigQuery 表,并连接可视化看板以图表和报告形式展示(参见 数据查看文档)。

二、前置条件:相机与边缘设备

在运行预测管线之前,仓库文档体系要求先完成两项准备:

  • 相机选型与安装:从 choose-camera 文档选择相机后,对传送带上经过的物体开始录像,采集分析数据,并在本地暂存相机采集的文件;
  • 服务器部署:按照 start-server 文档 在边缘设备上把 Triton 推理服务启动起来,把视频或图像文件拷贝到边缘设备的某个文件夹中,供管线逐张处理。

三、启动 Triton 推理服务并确认已加载模型

3.1 启动服务端

按 start-server.md 的步骤,在服务目录(文档中给出的示例路径为models/official/projects/waste_identification_ml/Deploy/detr_cloud_deployment/server/)下执行triton_inference_server.sh脚本,创建 Triton 推理服务器并加载最新的 CircularNet 模型:

bash triton_inference_server.sh

服务以screen会话的方式在后台持续运行。可以用以下命令确认服务状态:

screen -ls # 列出 screen 会话,外部查看时显示 (Detached) screen -r server # 进入服务所在会话,模型成功部署后状态显示为 READY

如需在不中断服务的情况下离开会话,按Ctrl + a再按d将会话分离(detach)。

3.2 查看已加载的模型名

预测管线通过--model参数按名字调用服务端模型,因此需要先确认加载了哪些模型。进入包含triton_server.sh脚本的server文件夹,执行:

cat triton_server.sh

输出的开头几行会以方括号列出已加载的模型名。运行预测管线时,你可以调用其中任意一个模型。注意该命令必须在server文件夹内执行。

从源码结构看,仓库中的服务端脚本 triton_inference_server.sh 与各run_images.sh客户端脚本共同构成“server 加载模型 + client 按名调用”的协作模式;模型名必须与脚本中方括号内的条目完全一致(例如文档示例中的Jan2025_ver2_merged_1024_1024)。

四、客户端目录与参数配置

4.1 进入客户端目录

server文件夹退回prediction_pipeline目录并进入client文件夹:

cd .. cd client/

该目录存放pipeline_images.pyPython 文件,其中包含针对输入图像的完整预测管线逻辑;run_edge_images.sh脚本会自动调用这个 Python 文件。

4.2 参数逐项说明

如需为管线提供特定路径和取值,用 Vim 编辑脚本:

vim run_edge_images.sh

脚本中需要替换的参数如下(原文档完整参数集):

--input_directory=<path-to-input-folder> --output_directory=<path-to-output-folder> --height=<height> --width=<width> --model=<circularnet-model> --score=<score> --search_range=<search-range> --memory=<memory>

各参数含义、示例值与作用(结合仓库源码佐证):

参数示例值含义源码层面的作用
--input_directory/home/images/input_files/边缘设备上的输入图像本地文件夹路径在 inference_pipeline.py 中以abslflag 定义,管线会读取该目录下的文件清单并按拍摄时间组织处理顺序
--output_directory/home/images/output_files/边缘设备上的输出结果本地文件夹路径结果(叠加掩码的图像等)写入该目录;云版实现中还会用它上传预测产物(见 inference_pipeline.py 的upload_image_results_to_storage_bucket调用)
--height512模型预测所期望的图像或视频帧高度(像素)--width一起决定输入图像 resize 到 Mask R-CNN 模型(文档描述;项目 README 说明最新模型基于 RF-DETR 视觉Transformer,见 README.md)的输入尺寸
--width1024模型预测所期望的宽度(像素)同上。仓库内云版脚本 run_images.sh 的注释明确写道:height/width是“输入图像为 Mask R-CNN 模型调整的高/宽”
--modelJan2025_ver2_merged_1024_1024要调用的 Triton 服务端 CircularNet 模型名对应 inference_pipeline.py 中TritonObjectDetector(model_name=...)的构造参数,按名连接服务端推理
--score0.70模型预测的置信度阈值对应 flagthreshold(“用于过滤预测结果的阈值”),在 inference_pipeline.py 中作为confidence_threshold传入model_manager.predict
--search_range100物体跟踪时允许跟踪的像素范围(连续帧间物体可移动的最大像素数)云版脚本中细分为--search_range_x/--search_range_y两个方向参数,定义为“物体在丢失帧之间沿 X/Y 方向允许的最大像素移动量”;源码中构造ObjectTracker(search_range=(search_range_y, search_range_x), ...),即一个二维搜索半径(见 inference_pipeline.py 与 L113-L118)。边缘文档中的单参数--search_range是同一概念的简化写法
--memory20物体允许丢失(未被检测到)多少帧仍继续跟踪flag 帮助文本为“每个物体需要被跟踪的帧数上限”;传入ObjectTracker(memory=...),决定跨帧跟踪的记忆窗口

修改完成后,按Esc,输入:wq,再按Enter保存并退出 Vim。

参数取值可以结合仓库中的真实配置参考:Triton_TF_Cloud_Deployment/client/run_images.sh 中给出的示例组合为--height=1024 --width=1024 --model=Jan2025_ver2_merged_1024_1024 --score=0.70 --search_range_x=150 --search_range_y=20 --memory=10,且脚本头部还额外包含--project_id--bq_dataset_id--bq_table_id--overwrite--tracking_visualization--cropped_objects等云环境专属参数——边缘版脚本按文档描述只需上面 8 个核心参数即可运行,BigQuery 相关字段在边缘场景下留待结果手动导出时使用。

从源码结构看,跟踪器还内置了自适应搜索参数_ADAPTIVE_STOP = 5_ADAPTIVE_STEP = 0.95(inference_pipeline.py),即跟踪算法在搜索窗口的收敛行为是自适应的,search_rangememory决定了搜索空间的大小与时间跨度:前者越大,物体在帧间快速移动时越不容易丢跟踪;后者越大,物体被遮挡/漏检后能被“找回”的时间越长,但同时也可能把重复物体误认为同一物体。

五、运行预测管线与输出产物

client文件夹中执行:

bash run_edge_images.sh

运行后管线会:

  1. 系统化地处理本地目录中的每个文件,逐个调用 Triton 服务上的指定模型做推理;
  2. 在输出目录中创建结果:每张输入图像对应一张叠加了掩码与检测标注(类别、置信度)的结果图像,如文首配图所示;
  3. client文件夹内创建logs文件夹,保存排查问题的日志与模型运行记录。

对应源码可以印证这一产物结构:inference_pipeline.py 中utils.setup_logger_and_directories负责初始化日志器与目录;主循环对每帧执行推理(model_manager.predict)→ 绘制并保存检测图(utils.draw_detections_and_save_image)→ 颜色特征提取(utils.extract_color_names)→ 跟踪特征入库(tracking_manager.extract_features_for_tracking);全部文件处理完后再执行tracking_manager.run_tracking()process_tracking_results完成跨帧去重统计,并把各类别计数写入count.csv(L201-L209)。

六、重跑注意事项与结果后续流转

重要提示(原文档强调):如果要在同一批文件上重新运行预测管线,必须先从输出文件夹中删除上一次运行时生成的结果,以避免冲突问题。

管线跑完后的数据管理选项:

  • 在边缘设备的输出文件夹中直接查看叠加了掩码的图像结果;
  • 手动把结果导出到 BigQuery 表,供查询与统计分析;
  • 将可视化看板连接 BigQuery,以图表与报告形式展示数据,详见 view-data 文档 与 dashboard 配置。

七、总结

本文以 prediction-pipeline-in-edge.md 为核心,完整覆盖了边缘设备预测管线的操作闭环:

  1. 启动 Triton 推理服务并用cat triton_server.sh确认已加载模型名;
  2. 进入client目录,用vim run_edge_images.sh配置input_directoryoutput_directoryheightwidthmodelscoresearch_rangememory共 8 个参数;
  3. bash run_edge_images.sh执行管线,在输出目录得到带掩码标注的结果图像,在logs目录得到运行日志;
  4. 重跑前先清理旧结果;结果可手动导出 BigQuery 并接入看板做可视化分析。

结合仓库源码可见,这些参数最终映射到 inference_pipeline.py 的abslflags、TritonObjectDetectorObjectTrackerBigQueryManager等组件上,参数语义(置信度阈值、搜索范围、跟踪记忆帧数)与文档描述一一对应,可以直接按本文配置在自己的边缘设备上复现。

延伸阅读

  • 预测管线原理:learn-about-pipeline.md
  • 云端版管线:prediction-pipeline-in-cloud.md
  • 启动服务端:start-server.md
  • 客户端操作:start-client.md
  • 项目总览:README.md
  • 云部署客户端脚本:run_images.sh

【免费下载链接】modelsModels and examples built with TensorFlow项目地址: https://gitcode.com/GitHub_Trending/mode/models

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询