☰
基于YOLOv11的家具识别检测系统开发全流程
2026/10/22 6:03:19 网站建设 项目流程

最近刚把手头这套基于YOLOv11的家具识别检测系统收尾,从数据采集、模型训练到UI界面、登录注册模块全部跑通,最终打包成一套完整的Python项目源码加预训练模型。简单说,你给系统一张室内照片或者拉一路摄像头画面,它能把画面里的椅子、桌子、床、沙发、柜子这些家具逐一框出来,标注类别和置信度;如果你是仓库盘料或者做智能家居的,还能直接把这个检测结果接进自己的业务逻辑里。这篇记录适合正在做目标检测课程设计、毕业设计,或者想把手头识别项目快速落地成带界面的桌面应用的人,全文会按从零搭到成品交付的顺序讲清每一步的选型理由、参数逻辑和踩过的坑。

1. 项目需求拆解与整体设计思路

1.1 现成的目标检测框架很多,为什么一定要选YOLOv11

家具识别这个任务,第一眼看上去只是"目标检测大家族里的一个子类",但真要动手做,坑比预想的多。家具类别不算少,椅子、桌子、床、沙发、衣柜、书架、灯具、茶几,每类内部形态差异还特别大——同样是桌子,办公桌、餐桌、茶几在画面里完全不像;同样是椅子,餐椅和沙发的轮廓接近到经常误检。这种"类内差距大、类间边界模糊"的任务,对模型特征提取能力要求不低。

YOLOv11是Ultralytics在YOLOv8基础上推出的新一代版本,整体继续走anchor-free路线,backbone里用C3k2模块替换了之前的C2f结构,检测头部分加入了C2PSA注意力模块,让网络在提取多尺度特征时更有侧重。对家具这种目标尺度跨度大的场景,C2PSA带来的注意力机制收益比在通用COCO场景更直观。再加上Ultralytics生态本身做得很完整,训练、验证、导出、推理一条龙,源码结构清晰,对独立开发者来说选它比从零搭检测头要省太多时间。

另外还有一个很实际的考虑:YOLOv11在低算力设备上的表现依然能打。实际训练中用的nano版本模型参数只有2.6M左右,在普通消费级显卡上跑推理每帧能到几十毫秒以内,这对后面接UI实时预览非常关键。你总不希望界面上拖一张图进去要转半天转轮才出结果。

1.2 系统整体架构:模型只占一半,另一半是工程化

很多人做目标检测项目有个惯性误区,觉得训练出个best.pt就算完事。实际上从模型到"能交付的系统",中间隔着一层完整的工程壳子。这套家具识别项目从架构上分成四块:

  • 数据层:YOLO格式数据集的构建、标注、增强、划分。这是模型精度的上限来源。
  • 模型层:基于YOLOv11的检测模型训练、验证、导出,输出可部署权重。
  • 应用层:PySide6/PyQt5构建的桌面UI,包含图片检测、摄像头实时检测、结果可视化。
  • 用户层:登录注册界面,用SQLite存用户信息,密码做哈希处理,区分普通用户和管理员。

UI界面和登录模块不是锦上添花,而是实际需求驱动的。如果你只是自己跑脚本调参,命令行足够;但要把系统交给不会写代码的人用,比如仓库管理员、门店运营,就必须有一个能点鼠标的界面。登录注册则是为了隔离不同使用者的操作权限,管理员能看检测历史记录,普通用户只能检测不能删数据——这类需求在真实项目里几乎一定会被提出来。

技术选型上,界面框架我选了PySide6而不是PyQt5。PySide6是Qt官方支持的Python绑定,许可证是LGPL,商用更友好,API设计和PyQt5几乎一样,迁移成本低。检测部分用Ultralytics提供的Python接口做推理,图像处理用OpenCV/NumPy,数据存储用内置sqlite3——整套技术栈全部开源免费,部署时不需要额外的商业授权,这对项目交付来说很重要。

1.3 为什么先做数据集再做模型,顺序不能乱

整个项目推进的顺序是:数据构建→模型训练→模型评估→界面开发→联调优化。顺序反了会非常痛苦。

我见过有人先花两周把界面写得漂漂亮亮,回头训练模型发现数据集类别不平衡严重、检测效果一塌糊涂,又回头重新标数据,界面代码白白等了两周。正确的做法是先把模型跑通到"可接受的水平",再开始写UI,因为界面里的阈值滑块、类别显示、置信度过滤都依赖模型实际输出的分布范围——比如模型在置信度0.35和0.6之间的表现差异,直接决定你在界面上把默认阈值设成多少。

2. 数据集构建与预处理:整个系统的精度地基

2.1 数据来源与采集策略

家具识别没有现成的、开箱即用且覆盖面足够广的公开数据集,所以数据这块建议"公开数据集+自采自标"两条腿走路。公开部分可以收集室内场景分类数据里带家具标注的图像,以及通用的目标检测数据集里含有家具标签的子集。自采部分更关键,用手机在不同光照、不同角度下拍摄真实家居环境,客厅、卧室、书房、餐厅各拍一批。

需要注意一个容易被忽略的问题:网图数据偏向"干净背景",家具通常是完整出现在画面中央的,但真实使用场景里家具经常互相遮挡、边缘出框、光照不均匀。如果训练集全是干净图,模型在实测时遇到沙发被茶几挡住一半的情况大概率会漏检。所以自采数据时要有意识地拍"脏乱差"的场景:杂物堆叠的角落、逆光环境、夜晚开灯场景、俯拍视角,这些才是实际部署时真正会遇到的画面。

标注工具可以用LabelImg,也可以用半自动标注工具X-AnyLabeling,后者的优点是先用预训练模型做一次预标注,人工只需要修正边界框,5000张图的标注工作量能压缩到一半左右。我实测下来用YOLOv8预训练模型做初版预标注,再人工纠偏,平均每张图的标注时间从2分钟降到40秒,效率提升明显。

2.2 标注规范与类别设计

类别设计直接决定模型的上限。家具类别我建议先做减法再做加法,第一版别贪多,把最核心的六类做好:椅子、桌子、床、沙发、衣柜、书架,后续再根据需求扩展灯光、茶几、电视柜。类别之间定义一定要互斥清晰,比如"桌子"和"茶几"如果同时存在,标注时就必须定死一个标准——高度低于40cm且面积小的算茶几,其余算桌子。标准含糊,模型训练时标签本身就带噪声,loss再低也是假的。

标注规范里有几个硬性原则:

  • 边界框紧贴物体可见边缘,不要包背景背景,宁可框小一点,不要框成"物体+周围一大圈空气"。
  • 严重遮挡的家具,只标注可见部分,不要脑补完整的物体轮廓。
  • 同一张图里同类别多个目标,全部标注,不能漏。
  • 类别标签写英文小写字母,避免中文路径和中文标签带来的编码问题。

YOLO标签格式是每行class_id x_center y_center width height,四个坐标值都是归一化到0~1之间的小数。LabelImg导出后是txt文件,要和对应的jpg文件放在同名不同后缀的位置。一开始容易搞错的就是归一化方向——x_center是目标框中心点相对图片宽度的比例,y_center是相对高度的比例,宽高同理。搞反了训练时模型直接不收敛,报的错还不明显,排查起来浪费时间。

2.3 数据增强与划分策略

数据划分建议按"场景"划分而不是按"图片"随机划分。什么意思呢?如果你把同一个客厅拍的10张连续帧随机分到训练集和验证集,验证集里和训练集里出现了几乎相同的内容,验证指标虚高,但模型一旦换到新场景马上现原形。正确做法是按拍摄场景分组,比如客厅A的全部照片进训练集,客厅B的全部照片进验证集,这样验证集的"场景新鲜度"才真实。

Ultralytics训练时自带Mosaic、随机仿射、HSV色彩抖动等增强策略。家具检测里Mosaic增益非常明显,因为家具经常部分出框,Mosaic把多张图的局部拼在一起,等于强制模型学会在截断目标的情况下判断物体类别。不过训练最后10个epoch建议启用close_mosaic参数关闭马赛克增强,让模型在最后阶段回归到真实分布上精调,这个参数在YOLOv8之后都有内置,直接用就行。

另外建议额外做一项类别频次检查。用一个脚本统计数据集的类别分布,如果"床"有3000个实例而"书架"只有200个实例,训练时模型会严重偏向高频类别。解决办法一是补采书架数据,二是对样本量少的类别做过采样复制,或者提升其在loss计算中的权重。家具数据集最容易出现的失衡就是床、沙发这类大件家具数量多,灯具、小摆件数量少,所以第一版我把类别收敛到了六类,优先保证每类实例数都超过500。

3. YOLOv11模型训练全流程:参数不是玄学

3.1 环境配置与依赖安装

训练环境我用的是Windows 11 + NVIDIA显卡 + CUDA 11.8/12.1的组合。装Ultralytics依赖最稳妥的方式是建一个虚拟环境,然后安装GPU版PyTorch再装ultralytics包。顺序不能反,先装PyTorch让它正确识别CUDA,再装ultralytics,否则某些依赖版本会冲突。

conda create -n yolo11 python=3.10 conda activate yolo11 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 pip install ultralytics

装完之后用一行代码验证环境是否正常:

import torch print(torch.__version__, torch.cuda.is_available())

如果torch.cuda.is_available()输出False,优先检查CUDA版本和显卡驱动版本是否匹配。这个坑我踩过不止一次,很多时候是驱动太老、CUDA Toolkit装的版本太高或者太低,PyTorch的预编译轮子并不认。还有一种情况是笔记本混合显卡环境下Pytorch默认用核显运行,需要在系统设置里把Python进程指定为高性能GPU。

数据组织方面,Ultralytics约定用一个YAML文件描述数据集路径和类别,里面路径支持绝对路径也支持相对于项目根目录的路径:

# furniture.yaml path: D:/projects/yolo11-furniture/datasets/furniture train: images/train val: images/val nc: 6 names: ["chair", "table", "bed", "sofa", "cabinet", "bookshelf"]

这里nc和names的顺序、个数必须与标注文件里的class_id完全一致,名字顺序变了模型训练出来的类别就全乱了。别问我怎么知道的,曾经把"chair"和"table"顺序在YAML里调换了,训练完推理出来的框全对不上,排查了两天。

3.2 训练参数选择逻辑与调优经验

训练脚本用Ultralytics的标准接口就够了,不需要自己写训练循环。

from ultralytics import YOLO model = YOLO("yolo11n.pt") results = model.train( data="furniture.yaml", epochs=120, imgsz=640, batch=16, lr0=0.01, weight_decay=0.0005, patience=20, device=0, workers=8, cache=True, close_mosaic=10, project="runs/furniture", name="yolo11n_exp" )

几个关键参数为什么这么选,我拆开讲:

  • imgsz=640是精度和速度的平衡点。YOLOv11在640分辨率下表现最稳,提升到960会让大件家具的检测精度小幅上涨,但推理时间几乎翻倍。对家具识别来说,640足够了。
  • batch=16要看显卡显存。12G显存跑yolo11n能到32,跑yolo11s建议16,显存不够就调workers数量或者开启AMP混合精度。新手最容易犯的错是一上来把batch调到64,结果爆显存报错,回头还找不到原因。
  • lr0=0.01是Ultralytics默认值,配合内置的余弦退火调度器效果稳定。如果训练初期loss不降,可以尝试降到0.005;如果loss下降很快但后期震荡明显,优先调低weight_decay或者提前结束训练。
  • patience=20意思是连续20个epoch验证集指标没提升就自动早停。这个参数能帮你省时间,尤其是在epochs设到120的情况下,通常训练到80多个epoch就已经收敛了,后面的全是重复劳动。
  • cache=True会先把数据集加载进内存,训练速度提升明显,前提是内存足够。16G内存带几千张图没问题,如果内存吃紧就设成cache=ram的替代方案disk。

训练过程中要重点关注两个东西:results.png里的loss曲线和confusion_matrix.png。loss曲线里train/box_loss和val/box_loss如果越分越开,说明过拟合,此时回退epoch数或者增强数据扩充;如果两者都居高不下,先回去检查标签文件是不是有坐标超出0~1范围的异常值。混淆矩阵则能直观告诉你哪两个类别互相误检最严重——如果"椅子"和"沙发"频繁互相误判,说明标注时两个类别的边界框定义没有拉开,回去重新审查标注比跑更多epoch更有效。

3.3 训练过程监控与结果分析

第一版我用yolo11n训练了120个epoch,在自采的4500张图上mAP50到了0.912,mAP50-95到了0.746。这个成绩在六类家具的尺度下属于"能上线但还有明显上限"的水平。精度损失主要来自两类场景:三座沙发的侧视图和正视图像素特征差异太大,模型在部分侧视图上会把沙发误检为长条桌;深色皮质椅子和暗光环境下整体漏检率比较高。

后来做了两件事把mAP50-95拉到了0.79左右。第一件是给暗光样本做了专门的色彩归一化增强,把训练集里亮度值低于阈值的图片进行自适应直方图均衡化,相当于变相扩充了低光样本的数量。第二件是调整了类别名称,把"cabinet"和"bookshelf"两个容易混淆的类别在标注时加了高度比例约束——严格规定高度大于宽度的才算书架,否则算柜子。模型判断不了模糊的概念,它只能从边界框形状和纹理特征里学规律,标注标准清晰了,它学起来才清晰。

训练完成后,用验证集跑一次预测并生成PR曲线。PR曲线越接近右上角越好,面积就是AP值。我在优化过程中重点关注了每个类别的独立AP值,而不是只看mAP平均分。因为平均分有掩盖效应,"沙发"AP掉到0.75,"灯具"AP高达0.95,平均下来还是好看,但实际使用中沙发恰恰是最常出现的家具。逐类分析才能发现真实短板在哪里。

3.4 模型导出与推理测试

训练结束后,runs/furniture/yolo11n_exp/weights/目录下会生成best.pt和last.pt。一定要用best.pt做后续部署,last.pt是最后一个epoch的权重,通常不如val指标最优的best。导出格式根据部署环境不同选:

from ultralytics import YOLO model = YOLO("runs/furniture/yolo11n_exp/weights/best.pt") model.export(format="onnx", imgsz=640, opset=12, simplify=True)

onnx格式的兼容性最好,可以转到OpenVINO、TensorRT等推理后端继续优化。如果目标设备是NVIDIA的显卡,建议用TensorRT的engine格式做FP16量化,推理速度能比原始PyTorch快2到3倍。GPU性能紧张或者CPU部署的场景,OpenVINO是更省心的选择,Intel核显或者酷睿CPU上跑yolo11n能到实时帧率。

推理脚本最简版只需要几行:

from ultralytics import YOLO import cv2 model = YOLO("best.pt") img = cv2.imread("test.jpg") results = model.predict(source=img, conf=0.45, iou=0.5, device=0)

results对象里可以取边界框的xyxy坐标、类别id、置信度。界面上展示时把它们转换成绘图指令就行。注意推理默认返回的results[0].boxes里坐标是像素坐标,不要转成归一化坐标再画框,否则框的位置会偏到离谱。

4. UI界面与登录注册模块开发:让模型从"能用"到"好用"

4.1 界面框架选型:PySide6的优势与工程结构

UI部分我用PySide6搭建,原因是目标检测系统需要一个能承载图片预览、摄像头画面、参数滑块、结果表格的桌面窗口,QWidgets这套组件库天然就是为此设计的。相比Web前端,桌面界面的部署和交付更直接——打包成一个exe或者直接跑Python脚本,不依赖服务器和浏览器环境。

工程结构建议按功能模块拆分,别在一个文件里堆几千行代码。我用的结构是:

project/ ├── main.py # 程序入口 ├── models/ │ └── detector.py # 模型加载与推理封装 ├── ui/ │ ├── login_window.py # 登录窗口 │ ├── register_window.py # 注册窗口 │ ├── main_window.py # 主界面 │ └── styles.qss # 全局样式表 ├── database/ │ └── user_db.py # SQLite用户操作 └── config.py # 全局配置

detector.py负责把Ultralytics模型包装成一个带线程处理的类,界面只管调用方法、接收结果,不直接接触模型推理细节。这样做的最大好处是后续换模型、换推理后端时,界面代码一行都不用动,只改detector.py内部实现。

4.2 登录注册模块的设计与安全注意点

登录注册模块看起来简单,但有一个经常被低估的点:密码存储。很多人图省事用明文或者MD5直接存,这在真实交付时是不负责任的。我用的是Python内置的hashlib加盐哈希,每个用户生成独立的随机盐值,然后对salt + password做迭代哈希,即便数据库文件泄露,暴力破解成本也会高很多。具体逻辑:

import hashlib import os def hash_password(password: str, salt: str = None): if salt is None: salt = os.urandom(16).hex() digest = hashlib.pbkdf2_hmac( "sha256", password.encode("utf-8"), salt.encode("utf-8"), iterations=100_000 ).hex() return f"{salt}${digest}" def verify_password(password: str, stored: str): salt, _ = stored.split("$") return hash_password(password, salt) == stored

用户表结构我设计成id, username, password_hash, role, created_at。role字段区分admin和user两个等级,管理员登录后主界面多一个"查看全部检测记录"的按钮,普通用户只能看自己的检测历史。登录窗口和注册窗口之间用dialog.rejected/dialog.accepted信号衔接,登录成功才实例化主窗口,这样未认证用户到不了检测界面。

输入校验也不能省。用户名正则限制为字母开头、后面可跟数字和下划线,长度6~20位;密码要求至少8位且包含字母和数字。界面层做一次校验,数据库层做一次校验,双保险。另外SQLite操作要用参数化查询,防止SQL注入。听起来老生常谈,但实际项目里这两行防护确实能挡住最常见的攻击方式。

4.3 主界面功能逻辑与多线程处理

主界面的核心功能包括:图片上传检测、摄像头实时检测、检测结果标注预览、检测记录表格。图片检测的逻辑相对直接,读取文件→调用模型预测→在QPixmap上叠加画框和标签→更新QLabel。摄像头检测需要一个常驻循环,逐帧获取摄像头画面送入模型推理,再把结果绘回到界面。

UI开发最容易踩的坑是:把推理放在主线程。模型推理是耗时操作,一张图可能几百毫秒,直接在主线程里跑会让界面卡死——拖拽窗口无响应、按钮点击无反馈,观感极差。解决方式是用QThread把推理循环放到后台线程,通过信号把结果传回主线程更新界面:

class DetectThread(QThread): frame_ready = pyqtSignal(object, object) # 原始帧, 检测结果 def __init__(self, detector): super().__init__() self.detector = detector def run(self): cap = cv2.VideoCapture(0) while not self.isInterruptionRequested(): ret, frame = cap.read() if not ret: continue results = self.detector.predict_frame(frame) self.frame_ready.emit(frame, results) cap.release()

界面上还要提供一个置信度阈值滑块,范围0.15到0.9,默认0.45。这个滑块的默认值不是随便定的,而是我跑验证集时统计出的"误检率可接受的最小置信度阈值"。低于这个值,界面上会频繁出现置信度0.3的错误框;高于这个值,部分遮挡目标会漏检。给出滑块让使用者自己调,比写死一个值更贴合实际场景。

5. 模型部署与推理性能优化:从单张图片到流畅预览

5.1 推理延时的实测数据与取舍

在普通消费级笔记本上,用PyTorch原始模型跑yolo11n,单张1080P图片的推理耗时实测在180~220毫秒之间。这个数据直接拿去用会非常卡——摄像头画面每秒钟最多处理5帧。同样的模型导出成ONNX后在同一个设备上用ONNX Runtime跑,耗时降到120~150毫秒;再进一步用OpenVINO做CPU推理,能压到80~100毫秒;NVIDIA显卡上用TensorRT FP16量化,可以干到20~40毫秒,基本实现实时预览。

速度优化的顺序建议是先跑通功能,再考虑性能。第一步保证模型推理正确,第二步导出成ONNX做到跨平台,第三步看目标设备是CPU还是GPU再选择后端。千万不要一上来就上TensorRT,调试环境复杂,部署时依赖一堆动态库,对刚接触的目标检测系统来说性价比不高。

5.2 实际部署中的性能优化技巧

除了换推理后端,还有几个能立刻见效的优化手段,我实际用下来都很稳:

  • 输入尺寸动态适配:Ultralytics默认按640×640推理,但摄像头画面是1920×1080,送入模型前会先做letterbox填充,推理完再映射回原图坐标。这个letterbox操作如果每次都在Python里手工做,耗时约5~10毫秒。用Ultralytics内置的.predict()接口时它已经处理好了,自己写推理流程时需要特别注意坐标映射。

  • 批量推理:检测历史记录里如果有多张图片,可以打包成一个batch一起推理,吞吐量比逐张推理高30%以上。但在摄像头实时预览场景下不要用batch,会引入额外延迟。

  • 图像缓存:界面里的历史记录如果重复查看同一张图,不需要重新跑模型。把检测结果按图片路径缓存到内存里,命中缓存就直接调出结果,这在实际使用中节省的时间非常可观。

  • 降低输入尺寸:如果只关注大件家具、对密集小目标感知需求低,可以把imgsz从640降到416。mAP大概掉2~3个点,但推理速度能提升将近一倍。具体要不要降,取决于业务对召回率和速度的权重分配。

6. 常见问题与排查技巧实录

6.1 环境与安装阶段的问题

环境配置阶段遇到频率最高的三个问题:CUDA不可用、依赖版本冲突、中文路径报错。CUDA问题先在Python环境里跑torch.cuda.is_available()定位,False就重装PyTorch的CUDA对应版本。依赖冲突建议直接新建虚拟环境重来,不要试图在已有环境里手动降级,容易搞出更多兼容问题。中文路径问题要重点提醒:项目目录、数据集路径、图片文件名全部用英文,中文路径在Ultralytics某些版本下会触发编码错误,而且报错信息很隐晦,光看堆栈根本想不到是路径问题。

6.2 训练与推理阶段的问题

训练阶段最常见的异常是loss变成NaN。原因通常有两个:学习率过高导致梯度爆炸,或者标签文件里出现了非法值(比如坐标超过图片尺寸、类别id超出nc范围)。排查方法也简单,先降到lr0=0.005重试,如果还有NaN,写个脚本扫描所有标签txt文件,检查坐标范围是否在0~1之间。

推理阶段有点莫名其妙但很常见的问题:同一个模型,在不同机器上检测结果不一样。根源在于Ultralytics默认开启了augment=True的TTA测试时增强,在不同CPU指令集或不同版本的依赖库下,TTA的随机性会导致结果细微波动。解决方式是推理时显式设置augment=False,保证结果可复现。

UI阶段的坑集中在PySide6与NumPy数组的格式转换上。QPixmap不能直接显示OpenCV的BGR格式ndarray,必须先把BGR转RGB,再转成QImage,最后转QPixmap。漏了任何一步,图像颜色都会偏色或者界面直接报错。这个转换代码建议封装成工具函数,全局只用这一处。

6.3 部署交付阶段的问题记录

最后打包交付时遇到的最大坑是PyInstaller打包后的程序体积过大以及缺动态库。Ultralytics加上PySide6打包出来轻轻松松超过200MB,如果还把模型文件塞进去,体积再涨。处理方式是打包时用--exclude-module排除用不到的依赖,模型文件放外部目录而不是打进exe里。缺动态库的报错通常是DLL load failed,解决方式是用PyInstaller的--add-binary参数把CUDA运行时库和ONNX Runtime的dll一起带上。

下面把常见问题整理成一张速查表,方便后面排查对照:

问题现象可能原因解决方案
torch.cuda.is_available()为False驱动/CUDA版本不匹配重装匹配显卡驱动的CUDA版本,再装对应PyTorch轮子
训练loss为NaN学习率过高或标签坐标非法降lr至0.005,扫描标签坐标范围
检测结果各机器不一致TTA增强随机性推理时设置augment=False
摄像头画面卡顿推理在主线程阻塞UI改用QThread后台推理,信号传回结果
PyInstaller打包后缺DLL动态库未打入--add-binary显式包含依赖库
中文路径报错编码问题路径全用英文,数据集目录同理
类别全部识别成同一类标签与YAML类别顺序错位核对names顺序与标注class_id

7. 经验总结与扩展方向

整个项目从数据准备到交付大概耗时三周,其中模型调优占了一半时间,UI和登录模块加起来反而比预想中快很多。回头看,最难的不是写代码,而是把"模型精度"和"用户体验"这两件事对齐。模型在验证集上0.91的mAP看起来不错,但用户不是按mAP用系统的,他们看的是"我随便拍一张图,框得准不准、识别对不对"。所以后面花了大量时间在边缘场景的拟合上,包括暗光、遮挡、类别混淆,这些才是实际使用中最影响感知的细节。

最后再分享一个小技巧:训练家具模型时,宁可把类别数少定义两个,也别把相似类别定义得含糊不清。沙发和长条桌如果只靠"有没有靠背"来区分,模型自己会出现漂移。这个项目的下一版我打算把检测和分割结合到一起,用YOLOv11的实例分割能力输出家具轮廓,这样在智能家居场景里能直接拿到家具的占用面积,而不仅仅是一个边界框,对空间规划类应用会有更直接的帮助。

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

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

立即咨询