DamoFD效果可视化教程:Jupyter Notebook实时绘图演示
你是不是也遇到过这样的情况:模型跑通了,结果也输出了,但光看坐标数字总觉得少了点什么?想直观看到人脸框在哪、关键点怎么分布、检测效果到底好不好,却要反复保存图片再打开查看?这次我们不走寻常路——直接在Jupyter Notebook里把DamoFD的人脸检测和五点关键点结果实时画出来、动态看得见。
这篇教程专为想“一眼看清效果”的开发者准备。不需要额外装库,不用改环境配置,镜像里已经配好一切。你只需要打开Notebook,改一行路径,点一下运行,人脸框、眼睛、鼻尖、嘴角就会立刻在页面上清晰标出,连坐标变化都能实时追踪。整个过程就像调试一个会画画的助手,所见即所得。
更重要的是,这不是静态截图,而是真正可交互的可视化流程:你可以随时换图、调阈值、观察不同光照或角度下关键点的稳定性,甚至为后续做姿态估计、表情分析打下直观基础。下面我们就从零开始,手把手带你把DamoFD的效果“画活”。
1. 模型与镜像快速认知:轻量但靠谱的0.5G人脸检测器
DamoFD不是那种动辄几GB的大模型,它只有0.5G,却在ICLR 2023上被达摩院作为高效人脸检测方案重点推出。它不只检测人脸,还同步输出五个关键点:左右眼中心、鼻尖、左右嘴角。这五个点看似简单,却是后续几乎所有面部应用的起点——美颜对齐、虚拟换装、视线追踪、微表情识别,都靠它们锚定位置。
这个镜像不是裸跑代码的环境,而是一个开箱即用的推理工作站。它预装了完整依赖链:PyTorch 1.11适配CUDA 11.3,ModelScope 1.6.1负责模型加载,所有路径、权限、环境变量都已调好。你不需要查文档配CUDA版本,也不用担心torchvision和torch版本打架。/root/DamoFD就是你的主战场,所有代码、模型、示例图都在那里静静等着你唤醒。
更关键的是,它专为“可视化友好”设计。不像有些环境只输出坐标列表,这里默认就带绘图逻辑——只要数据出来,画布立刻跟上。这种“结果即画面”的思路,让调试效率提升不止一倍。
2. 工作空间准备:把代码搬进安全区
镜像启动后,代码默认在/root/DamoFD。但系统盘是只读快照,直接改代码可能失败,或者重启就丢失。所以第一步,是把代码复制到可写的用户空间:
cp -r /root/DamoFD /root/workspace/ cd /root/workspace/DamoFD接着激活专属环境,确保所有包版本严丝合缝:
conda activate damofd现在你站在了安全、稳定、可修改的起点上。接下来,就是选择你最顺手的方式去“看见”结果。
3. Jupyter Notebook方式:所见即所得的实时绘图体验
相比命令行脚本,Jupyter Notebook在这里的优势太明显了:结果不用保存再打开,直接渲染在单元格下方;代码分块执行,哪步卡住了立刻定位;还能边跑边加注释、边调参边看效果变化。尤其对可视化任务,它是天然搭档。
3.1 正确选择内核:别让Python 3“冒名顶替”
进入/root/workspace/DamoFD/,双击打开DamoFD-0.5G.ipynb。这时注意右上角——它很可能显示的是Python 3,这是系统默认内核,不是我们训练好的damofd环境。
点击那个下拉箭头,找到并选择damofd。选对了,右上角会变成damofd,而且单元格运行时左侧行号旁会出现小星号*,表示正在执行中。如果选错了,大概率会报ModuleNotFoundError: No module named 'torch'或modelscope not found——因为默认内核根本没装这些包。
小贴士:如果你没看到
damofd选项,说明环境没激活成功。请回到终端,确认是否执行了conda activate damofd,然后刷新Jupyter页面重试。
3.2 修改图片路径:一行代码,决定你看到谁的脸
在Notebook第一个代码块里,找到这行:
img_path = 'https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/mog_face_detection.jpg'这就是你的“画布输入源”。你可以替换成:
- 本地路径:比如你上传了一张自己的照片到
/root/workspace/face.jpg,就改成:img_path = '/root/workspace/face.jpg' - 网络图片:任何公开可访问的jpg/png链接,比如:
img_path = 'https://example.com/person.png'
注意:路径必须是绝对路径(以/开头),不能是相对路径如./face.jpg;URL必须以http://或https://开头;图片格式仅支持.jpg,.png,.jpeg,.bmp。
3.3 全部运行,见证实时绘图全过程
点击顶部菜单栏的Cell → Run All,或者直接点工具栏那个醒目的 ▶ “全部运行”按钮。
你会看到每个单元格依次执行:
- 第一个单元格:加载模型、读取图片、转成tensor;
- 第二个单元格:前向推理,得到人脸框坐标
(x1, y1, x2, y2)和五个关键点(x, y); - 第三个单元格:用
matplotlib创建画布,先画原图,再用plt.Rectangle画人脸框,用plt.scatter标出五个关键点,并加上文字标签; - 最后一个单元格:调用
plt.show(),结果立刻出现在下方。
你看到的不是一张静态图,而是一套完整的可视化流水线:从原始像素,到检测结果,再到人类可读的图形标注,全程在一个Notebook里闭环完成。
4. 效果深度解析:不只是画框,更要读懂关键点
当图像渲染出来,别急着关掉。多花30秒观察,你会发现很多隐藏信息:
4.1 关键点布局告诉你“这张脸正不正”
五个点构成一个标准的“人脸拓扑”:
- 左右眼中心点基本水平对齐,间距约等于鼻宽;
- 鼻尖在两眼连线中点正下方;
- 嘴角连线平行于两眼连线,且略低于鼻尖。
如果某张图里,左眼点明显高于右眼,或者嘴角连线严重倾斜,那很可能这张脸是侧脸或低头仰拍——DamoFD依然能准确定位,但你要知道它的局限:它输出的是2D平面坐标,不包含深度或姿态角。这对后续做3D重建是个提醒。
4.2 检测框与关键点的“松紧度”反映置信度
注意看人脸框和关键点的关系:
- 如果框很“紧”,几乎贴着脸部轮廓,且五个点都落在框内,说明检测质量高;
- 如果框偏大,关键点靠近边缘,甚至有点飘出框外,可能是低分辨率或模糊图像,此时可以尝试降低检测阈值。
4.3 动态调整阈值:让“看不见”的脸浮现出来
在Notebook代码里搜索这行:
if score < 0.5: continuescore是模型给出的检测置信度,0.5是默认门槛。把它改成0.3:
if score < 0.3: continue再运行一次,你会发现:
- 原来漏掉的侧脸、背影、小尺寸人脸出现了;
- 但同时,也可能冒出几个误检的“伪人脸”(比如窗帘褶皱、墙上的挂画)。
这就是精度与召回的平衡。没有万能阈值,你的业务场景说了算:安防监控要高召回,宁可多标几个再人工复核;证件照审核要高精度,宁可漏掉一个也不能错标。
5. 进阶技巧:让可视化不止于“画出来”
Jupyter的强大,在于它允许你把可视化变成一个探索工具,而不仅是结果展示。
5.1 同时对比多张图:一眼看出模型鲁棒性
在Notebook末尾新建一个代码块,写一段小循环:
import matplotlib.pyplot as plt import numpy as np test_images = [ '/root/workspace/img1.jpg', '/root/workspace/img2.jpg', '/root/workspace/img3.jpg' ] fig, axes = plt.subplots(1, 3, figsize=(15, 5)) for i, path in enumerate(test_images): # 这里插入DamoFD推理逻辑(复用前面的函数) # ... 省略具体推理代码 ... axes[i].imshow(result_img) # result_img是画好框和点的图 axes[i].set_title(f'Image {i+1}') axes[i].axis('off') plt.tight_layout() plt.show()三张图并排,光照、角度、遮挡各不相同,效果差异一目了然。这种横向对比,比单张图更有说服力。
5.2 实时坐标打印:把“画”和“数”打通
在绘图代码后面加一行:
print(f"检测到 {len(boxes)} 张人脸") for i, (box, landmarks) in enumerate(zip(boxes, landmarks_list)): print(f"人脸 {i+1}: 框 [{box[0]:.0f}, {box[1]:.0f}, {box[2]:.0f}, {box[3]:.0f}], " f"左眼 ({landmarks[0][0]:.0f}, {landmarks[0][1]:.0f})")这样,你既看到了图,又拿到了精确坐标。调试时再也不用放大图片去数像素,数值和图形完全对应。
5.3 保存高清可视化图:用于报告或分享
默认显示是屏幕适配的,但导出需要更高清。在绘图代码后加:
plt.savefig('/root/workspace/result_highres.png', dpi=300, bbox_inches='tight') print("高清图已保存至 /root/workspace/result_highres.png")300dpi的PNG,发给产品、设计或客户看,清晰度完全够用。
6. 常见问题与避坑指南
Q:运行报错
No module named 'cv2'?
A:别慌,这个镜像没预装OpenCV,但DamoFD用的是PIL和matplotlib绘图,完全不依赖cv2。只要没报torch或modelscope错,就忽略它。Q:图片显示空白或全黑?
A:检查图片路径是否正确,用ls -l /your/path.jpg确认文件存在;再检查图片是否损坏,试着用display /your/path.jpg命令在终端里看能否正常打开。Q:关键点位置明显偏移?
A:大概率是图片尺寸过大,模型内部做了resize但坐标没反算回来。建议预处理图片到1024×768以内,或检查代码里是否有scale_factor未应用。Q:想用自己训练的模型替换?
A:可以。把新模型放到/root/workspace/DamoFD/models/下,修改代码中model_id参数为你模型的本地路径,比如model_id='/root/workspace/DamoFD/models/my_model'。Q:能检测视频帧吗?
A:当前Notebook是单图设计,但逻辑完全可迁移。只需用cv2.VideoCapture读帧,每帧调用一次推理和绘图函数即可。需要的话,下一篇我们专门讲视频流实时可视化。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。