MogFace-large实战教程:Gradio界面添加检测耗时/显存占用实时显示

张开发
2026/4/13 11:56:21 15 分钟阅读

分享文章

MogFace-large实战教程:Gradio界面添加检测耗时/显存占用实时显示
MogFace-large实战教程Gradio界面添加检测耗时/显存占用实时显示你是不是也遇到过这种情况用一个人脸检测模型图片上传后等了好一会儿才出结果心里直犯嘀咕是模型太慢还是我图片太大了显存会不会爆掉今天我们就来解决这个“黑盒”问题。我将手把手教你如何为基于Gradio的MogFace-large人脸检测Web界面添加上检测耗时和显存占用的实时显示功能。让你对模型的运行状态了如指掌调试和优化都更有方向。1. 教程目标与准备工作1.1 你能学到什么通过这篇教程你将掌握核心技能在Gradio的gr.Interface或gr.Blocks中如何捕获并显示函数执行的时间耗时和GPU内存使用情况显存占用。实战操作修改现有的MogFace-large Gradio WebUI代码无缝集成性能监控面板。原理理解了解time模块计时和torch.cuda模块监控显存的基本方法。1.2 你需要准备什么基础环境一个已经部署好MogFace-large镜像并可以正常通过Gradio界面进行人脸检测的环境。如果你还没部署可以参考相关文档先完成基础部署。代码路径我们需要修改的WebUI主文件通常位于/usr/local/bin/webui.py根据你的输入提示。一点点Python基础知道如何导入模块、调用函数、使用f-string格式化字符串就足够了。2. 理解现有代码结构在动手修改之前我们先花两分钟看看原来的代码大概是怎么工作的。这能帮助我们找到最佳的“手术”位置。通常一个典型的Gradio人脸检测应用的核心结构如下# webui.py 简化示例结构 import gradio as gr from modelscope.pipelines import pipeline import cv2 import numpy as np # 1. 加载模型通常只执行一次 print(正在加载MogFace-large模型请稍候...) face_detection pipeline(face-detection, damo/cv_resnet101_face-detection_cvpr22papermogface) # 2. 定义核心检测函数 def detect_faces(image): 输入一张图片numpy数组 输出带检测框的图片numpy数组 # 这里调用上面加载好的 pipeline 进行推理 result face_detection(image) # 将检测框画到原图上 output_image draw_boxes_on_image(image, result) return output_image # 3. 创建Gradio界面 demo gr.Interface( fndetect_faces, # 关联核心函数 inputsgr.Image(label上传图片), outputsgr.Image(label检测结果), titleMogFace-large 人脸检测, examples[[example1.jpg], [example2.jpg]] ) # 4. 启动应用 demo.launch(server_name0.0.0.0, server_port7860)我们的目标就是在第2步的detect_faces函数里动刀让它不仅能返回处理后的图片还能告诉我们它花了多长时间、用了多少显存。3. 分步实战添加性能监控现在我们开始正式“手术”。请打开你的webui.py文件。3.1 第一步导入必要的工具包在文件顶部的导入区域添加两个Python标准库模块import time # 用于计算耗时 import torch # 用于监控GPU显存3.2 第二步改造核心检测函数找到def detect_faces(image):这个函数。我们要对它进行重构使其返回更多信息。修改前def detect_faces(image): result face_detection(image) output_image draw_boxes_on_image(image, result) return output_image修改后def detect_faces(image): 增强版人脸检测函数返回结果图片和性能信息。 # 记录开始时间 start_time time.time() # 记录开始前的GPU显存占用 (如果可用) if torch.cuda.is_available(): torch.cuda.synchronize() # 确保CUDA操作完成计时更准 start_mem torch.cuda.memory_allocated() / 1024**2 # 转换为MB # 核心检测步骤 result face_detection(image) output_image draw_boxes_on_image(image, result) # 记录结束时间并计算耗时 end_time time.time() inference_time (end_time - start_time) * 1000 # 转换为毫秒 # 准备性能信息文本 perf_info f检测耗时: {inference_time:.2f} ms # 计算并添加显存占用信息 (如果可用) if torch.cuda.is_available(): torch.cuda.synchronize() end_mem torch.cuda.memory_allocated() / 1024**2 mem_used end_mem - start_mem perf_info f\n显存占用: {mem_used:.2f} MB else: perf_info f\n显存占用: (CPU模式) # 返回结果图片和性能信息 return output_image, perf_info关键点解释time.time(): 获取当前时间戳相减得到以秒为单位的耗时我们乘以1000变成更直观的毫秒(ms)。torch.cuda.memory_allocated(): 返回当前GPU上由PyTorch张量占用的内存总量单位是字节。我们除以1024**2得到兆字节(MB)。torch.cuda.synchronize(): 这是一个好习惯它确保所有的CUDA操作比如模型推理都完成了这样计时和显存统计才会准确。f”{inference_time:.2f} ms”: 这是f-string格式化:.2f表示将浮点数格式化为保留两位小数。3.3 第三步升级Gradio界面以显示多输出现在我们的函数返回两个值了图片和文本Gradio界面也需要相应调整增加一个文本框来显示性能信息。找到创建gr.Interface或gr.Blocks的部分。对于gr.Interface修改如下demo gr.Interface( fndetect_faces, inputsgr.Image(label上传图片), outputs[ gr.Image(label检测结果), # 第一个输出图片 gr.Textbox(label性能指标, lines2) # 第二个输出文本框显示2行 ], titleMogFace-large 人脸检测 (性能监控版), examples[[example1.jpg], [example2.jpg]] )如果你用的是更灵活的gr.Blocks修改可能类似这样with gr.Blocks(titleMogFace-large 人脸检测 (性能监控版)) as demo: gr.Markdown(## MogFace-large 人脸检测 with 性能监控) with gr.Row(): with gr.Column(): input_image gr.Image(label上传图片) submit_btn gr.Button(开始检测) with gr.Column(): output_image gr.Image(label检测结果) perf_output gr.Textbox(label性能指标, lines2, interactiveFalse) # 绑定事件 submit_btn.click(fndetect_faces, inputsinput_image, outputs[output_image, perf_output]) # 示例部分如果有 gr.Examples(examples[[example1.jpg], [example2.jpg]], inputsinput_image)主要改动就是将outputs参数从一个单独的组件改为一个包含gr.Image和gr.Textbox的列表。3.4 第四步保存并重启应用保存文件确保你已经保存了对webui.py的修改。重启Gradio服务如果你是在终端通过python webui.py运行的先按CtrlC停止它然后重新运行命令。访问界面在浏览器中打开你的Gradio应用地址通常是http://你的服务器IP:7860。4. 效果验证与使用现在你的界面应该焕然一新了上传一张带人脸的图片或者点击示例图片。点击“开始检测”或“Submit”按钮。稍等片刻你不仅会看到画好框的检测结果图还会在下方看到一个清晰的文本框里面写着类似这样的信息检测耗时: 156.34 ms 显存占用: 124.58 MB恭喜你现在你就能实时看到每张图片的检测速度和资源消耗了。这个功能非常实用性能评估对比不同大小、不同复杂度图片的推理时间。资源监控了解模型运行需要多少显存避免在处理大批量图片时显存溢出(OOM)。优化依据如果你发现某类图片特别慢就可以有针对性地去分析原因。5. 总结通过这个简单的改造我们为MogFace-large的Gradio WebUI装上了“仪表盘”。整个过程的核心就是三步工具准备导入time和torch。函数改造在检测函数首尾插入计时和显存记录代码并让它返回额外信息。界面升级将Gradio的输出从单个图像改为[图像, 文本框]列表。这个方法具有通用性你可以轻松地迁移到其他任何基于Gradio的模型演示项目中无论是图像分类、目标检测还是文本生成都可以用类似的思路来增加性能监控功能让你的AI应用更加透明和强大。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章