拓冰建站拓冰建站
首页 / 资讯中心 / 正文

TensorFlow Models CircularNet 云预测流水线实战:GCS 上传、Triton Mask R-CNN 推理与 BigQuery 结果入库

TensorFlow Models CircularNet 云预测流水线实战GCS 上传、Triton Mask R-CNN 推理与 BigQuery 结果入库【免费下载链接】modelsModels and examples built with TensorFlow项目地址: https://gitcode.com/GitHub_Trending/mode/models在 TensorFlow Models 仓库的 CircularNet 垃圾分类识别方案中云预测流水线文档 描述了将传送带上拍摄的图像/视频从本地盘经 Cloud Storage 输入桶送入 GPU 虚拟机通过 Triton 推理服务器调用 Mask R-CNN 模型逐帧预测并把分析明细写入 BigQuery、把带掩码的可视化结果导出到输出桶的完整闭环。读完本篇你可以掌握输入/输出桶的规划、VM 服务账号的 IAM 授权方式、run_images.sh全部 15 个参数的含义与取值以及流水线脚本在仓库源码中的真实调用链inference_pipeline.py、big_query_ops.py、triton_inference_server.sh。流水线定位图像分析 BigQuery 数据入库CircularNet 的预测流水线详见 learn-about-pipeline.md本身按固定顺序完成按创建时间排序文件 → 逐帧拆分视频并运行 Mask R-CNN 实例分割 → 颜色检测与特征提取 → 输出叠加掩码的可视化结果 → 跨帧目标跟踪去重。而本篇对应的在 Google Cloud 上运行这一形态额外承担了一项职责在应用预测模型分析图像之外流水线脚本会把所有图像分析明细摄取进 BigQuery 存储。整体数据流如下在 Google Cloud 账号中搭建好服务器后录制传送带上物体经过的视频以采集数据将视频/图像文件转移到 Cloud Storage输入桶由预测流水线处理其中的图像每个文件/视频的预测结果被存储并追加到 BigQuery 表中系统化处理输入桶中的每个文件后流水线将结果导出到输出桶供后续使用与分析最后可连接可视化仪表盘读取 BigQuery 表以图表和报告展示结果。在 Cloud Storage 桶中存储视频为有效管理和处理由机器视觉相机参见 相机选型文档拍摄的传送带物体视频/图像需要准备三类存储设备本地磁盘存储临时缓存相机拍摄的本地文件Cloud Storage 输入桶存放录制好的视频或图像可借助存储传输代理storage transfer agent实现自动上传Cloud Storage 输出桶存放预测结果。这样的组合保证了视频/图像及预测结果的管理与处理流程有序、自动化且高效。创建输入桶与输出桶先在 Google Cloud 账号中创建用作输入仓库的 Cloud Storage 桶用于存放机器视觉相机拍摄的全部视频或图像集中管理录制文件以便后续处理。上传到输入桶之前先将文件暂存到本地磁盘的预定位置。本地临时存储既提供了备份也便于高效管理上传。为简化上传过程可安排一个定时存储作业storage job按预期频率运行自动把本地盘中的视频/图像转移到输入桶部署存储传输代理可进一步保证传输的可靠性与效率。否则在运行预测流水线之前可手动把本地缓存的文件上传到输入桶。除输入桶外再创建一个 Cloud Storage输出桶存放预测流水线产生的结果。输出桶作为组织良好的仓库保存预测与分析结果让模型输出易于访问、便于管理。授予必要的权限部署 CircularNet 时创建的 NVIDIA T4 GPU 虚拟机VM实例带有一个服务账号service account。为了让该 VM 实例能运行预测流水线并把结果上传到 BigQuery这个服务账号必须能访问 Cloud Storage 桶和 BigQuery 表。具体地VM 的服务账号需要以**主体principal**身份拥有以下两个角色Storage Admin用于访问 Cloud Storage 输入桶和输出桶。将该 VM 服务账号作为主体添加到两个桶的桶级访问控制策略bucket-level policy中BigQuery Admin用于访问 BigQuery 表。通过 Google Cloud 控制台管理该 VM 服务账号的角色即可。运行预测流水线以下按文档给出的完整步骤在 Google Cloud 上运行预测流水线并处理输入文件打开 Google Cloud 控制台。创建上节所述的 Cloud Storage 输入桶和输出桶。把机器视觉相机拍摄的图像或视频上传到输入桶。给 VM 服务账号授予所需权限。在控制台的导航菜单中选择Compute EngineVM instances。在VM instances页面找到部署 CircularNet 时创建的 NVIDIA T4 GPU 实例。若实例已停止点击该行More actionsStart / Resume重新启动。注意使用完毕后应停止实例避免不必要的费用。点击该行SSH打开SSH-in-Browser工具。在 SSH 窗口中启动服务器即运行triton_inference_server.sh让 Triton 推理服务器在server这个 screen 会话中驻留。显示已加载到 Triton 推理服务器的模型名称cat triton_inference_server.sh输出开头几行以方括号列出已加载的模型名运行预测流水线时可调用其中任意一个模型。重要请在包含triton_inference_server.sh脚本的server文件夹中执行该命令。退出server文件夹进入prediction_pipeline目录下的client文件夹cd .. cd client/该文件夹包含pipeline_images.py与pipeline_videos.py两个 Python 文件分别保存输入图像和视频的完整预测流水线run_gcp_images.sh与run_gcp_videos.sh脚本用于自动运行这两个 Python 文件。若需要按自身情况修改路径和取值编辑脚本中对应的参数值。以修改图像流水线脚本为例vim run_images.shVim 编辑器中会显示如下参数--input_directorypath-to-input-bucket --output_directorypath-to-output-bucket --heightheight --widthwidth --modelcircularnet-model --scorescore --search_range_xsearch-range --search_range_ysearch-range --memorymemory --project_idproject-id --bq_dataset_idbigquery-dataset-id --bq_table_idbigquery-table-id --overwriteoverwrite_table --tracking_visualizationvisualize-tracking-results --cropped_objectscrop-objects-per-category各占位符含义如下参数含义示例path-to-input-bucket前面创建的输入桶路径gs://my-input-bucket/path-to-output-bucket前面创建的输出桶路径gs://my-output-bucket/frames-per-second将视频拆帧的帧率仅视频脚本15height模型预测所期望的图像/帧高度像素512width模型预测所期望的图像/帧宽度像素1024circularnet-modelTriton 服务器上要调用的 CircularNet 模型名Jan2025_ver2_merged_1024_1024score模型预测的置信度阈值0.70search-range相邻帧间目标跟踪允许搜索的最大像素距离100memory目标允许丢失并被继续跟踪的最大帧数20project-idGoogle Cloud 项目 IDmy-projectbigquery-dataset-id存放预测结果的 BigQuery 数据集 IDcircularnet_datasetbigquery-table-id存放预测结果的 BigQuery 表 ID若表已存在流水线会向该表追加结果circularnet_tableoverwrite_table设为 True 时覆盖已存在的 BigQuery 表True/Falsevisualize-tracking-results设为 True 时可视化跟踪算法的跟踪结果True/Falsecrop-objects-per-category设为 True 时按预测与跟踪结果逐类别裁剪目标True/False注意如果输入文件是图像而非视频请把命令中的run_gcp_videos.sh换成run_gcp_images.sh并去掉--fpsframes-per-second参数。保存并退出 Vim按Esc输入:wq再按Enter。进入客户端的screen会话screen -R inference运行预测流水线bash run_images.sh注意如果输入文件数量很多可在screen会话中于后台运行流水线避免终端关闭导致任务中断。先执行screen -R client启动新会话 shell再在新 shell 中运行bash run_images.sh。脚本还会在client文件夹内创建logs文件夹保存模型记录以及带故障排查结果的日志。运行完成后图像结果叠加掩码的可视化会出现在输出桶中可直接查看并用于进一步分析打开生成的 BigQuery 表可看到模型分析结果并可在控制台中预览表数据每次修改输入桶中的文件后重复本节的步骤即可生成新结果。重要如果对同一个视频/图像文件重跑预测流水线必须先删除上一次运行产生的输出桶结果避免冲突。建议同时为两个桶配置对象生命周期管理以控制存储成本。仓库源码佐证脚本参数、处理链路与入库逻辑文档中的每个参数与步骤都能在仓库中找到对应实现。当前仓库中该流水线位于 Triton_TF_Cloud_Deployment 目录包含server与client两部分与文档描述的目录结构一致。启动脚本模型仓库与 Triton 容器triton_inference_server.sh 正是第 10 步cat查看的对象。其开头以 bash 关联数组声明模型名到下载地址的映射数组键[Jan2025_ver2_merged_1024_1024]就是文档中提到的模型名示例。脚本随后清理旧model_repository下载并解压模型 zip为每个模型生成config.pbtxtplatform: tensorflow_savedmodel、max_batch_size: 0并把 SavedModel 移动到model_repository/model_name/1/model.savedmodel/必要时安装screen以screen -dmS server启动 Docker 化的 Triton镜像nvcr.io/nvidia/tritonserver:24.03-py3挂载模型仓库并开启--gpus all暴露 8000/8001/8002 端口。因此cat triton_inference_server.sh能看到方括号中的模型名是因为脚本头部就是模型名 → URL的声明start-server.md 还说明了如何用screen -ls、screen -r server确认模型进入READY状态。客户端脚本参数与文档一一对应run_images.sh 脚本首先激活名为myenv的虚拟环境并做校验然后调用inference_pipeline.py其头部注释对每个参数给出了权威说明例如--height/--width输入图像为 Mask R-CNN 模型重缩放的高/宽--score推理时检测的置信度阈值--search_range_x/--search_range_y目标在丢失帧之间于 X/Y 方向允许移动的最大像素数--memory目标允许丢失仍继续被跟踪的帧数--project_id/--bq_dataset_id/--bq_table_idBigQuery 操作所需项目、数据集与表 ID--overwrite/--tracking_visualization/--cropped_objects三个布尔开关与文档表格一致。脚本中给出的真实取值示例为--height1024 --width1024 --modelJan2025_ver2_merged_1024_1024 --score0.70 --search_range_x150 --search_range_y20 --memory10 --overwriteTrue可供新环境初始化参数时参考见 run_images.sh 第 52–67 行。流水线主逻辑从 gsutil 拷贝到 BigQuery 摄取inference_pipeline.py 用absl.flags定义了与脚本完全一致的参数集第 40–106 行其main的处理链印证了文档描述的数据流校验桶路径input_directory与output_directory均必须非空且以gs://开头否则抛出ValueError第 119–125 行拉取输入执行gsutil -m cp -r input_directory .把输入桶内容多线程拷贝到本地并在本地创建输入目录名_prediction结果目录同时创建logs目录这正是文档中client 文件夹内的 logs 文件夹的来源逐帧推理与阈值过滤调用triton_server_inference.infer(model_name, inputs)取结果仅保留detection_scores PREDICTION_THRESHOLD的检测再按 IoU 阈值 0.08 过滤重叠掩码可视化与特征提取用mask_bbox_saver.save_bbox_masks_labels保存叠加 bbox 与掩码的结果图并按 mask 裁剪目标做聚类颜色检测color_and_property_extractor.find_dominant_color跟踪与后处理object_tracking.apply_tracking以search_range_x/search_range_y/memory为参数跨帧去重object_tracking_postprocessing.process_tracking_result得到聚合特征agg_features并按类别统计数量写出count.csv可选产物--tracking_visualizationTrue时生成输入目录名_tracking可视化文件夹--cropped_objectsTrue时生成裁剪对象文件夹二者都通过gsutil -m cp -r上传到输出桶后删除本地副本写入 BigQuery 并回传输出桶先big_query_ops.create_table(project_id, dataset_id, table_id, overwrite...)再big_query_ops.ingest_data(...)最后把输入目录与预测文件夹gsutil拷回输出桶第 398–441 行。BigQuery 操作表 Schema 与追加语义big_query_ops.py 定义了入库表的固定 Schema第 31–43 行字段类型模式particleINTEGERREQUIREDsource_nameSTRINGREQUIREDimage_nameSTRINGREQUIREDdetection_scoresFLOATREQUIREDcreation_timeSTRINGREQUIREDbbox_0~bbox_3INTEGERREQUIREDdetection_classesINTEGERREQUIREDdetection_classes_namesSTRINGREQUIREDcreate_table的行为解释了文档中关于--bq_table_id与--overwrite的两条说明数据集不存在时自动创建表已存在时若overwriteTrue则删除旧表后按 Schema 重建否则打印already exists. Skipping creation.直接复用——即表已存在时追加结果ingest_data通过pandas_gbq.to_gbq(..., if_existsappend)将聚合特征追加进{project}.{dataset}.{table}这正是文档所说结果被存储并追加到 BigQuery 表的实现。creation_time字段值来自 ffmpeg_ops.py 中的元数据读取图像优先取 EXIF 的DateTimeOriginaltag 36867缺失时回退到文件修改时间视频拆帧由split_video_to_frames的 ffmpegfps滤镜完成对应文档中的--fps参数。小结CircularNet 的云预测流水线把相机采集 → 本地缓存 → GCS 输入桶 → T4 GPU 虚拟机上的 Triton 推理 → 掩码可视化与特征提取 → BigQuery 表 输出桶串成一条可重复执行的自动化链路。关键控制点集中在三处两个桶的规划与生命周期管理、VM 服务账号的 Storage Admin / BigQuery Admin 授权、以及run_images.sh中 15 个参数尤其是--score置信度阈值、--search_range_x/--search_range_y/--memory跟踪窗口与--bq_table_id/--overwrite入库策略。跑通本节后下一步即可把可视化仪表盘接入 BigQuery 表将预测结果呈现为图表与报告见 view-data。【免费下载链接】modelsModels and examples built with TensorFlow项目地址: https://gitcode.com/GitHub_Trending/mode/models创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门