硬件产品咨询:19113907060(耿女士)
软件技术咨询:18982151213(刘先生)
联系我们
产品咨询

YOLO 系列改进:厨师服厨师帽实时检测算法

作者:万物纵横
发布时间:2026-03-06 10:36
阅读量:

针对厨师服、厨师帽的实时检测场景,我基于 YOLOv8(兼顾速度与精度的主流版本)进行定制化改进,核心围绕小目标检测优化(厨师帽多为小目标)、特定场景特征增强(后厨复杂背景)和实时性保障三个方向展开。


YOLO 系列改进:厨师服厨师帽实时检测算法(图1)


一、改进思路与方案


1. 核心改进点


改进方向

具体措施

作用

小目标检测优化

1. 新增更小的检测锚框(适配厨师帽尺寸)2. 特征金字塔(FPN)添加浅层特征强化分支

提升小尺寸厨师帽的检出率

场景特征增强

1. 加入后厨场景专属的注意力机制(CBAM2. 数据增强针对后厨光照/角度多样性

降低后厨复杂背景(厨具、油烟、杂色)的干扰

实时性保障

1. 模型轻量化(替换部分卷积为深度可分离卷积)2. 推理阶段启用动态批处理+FP16精度

保证实时检测(≥30FPS


2. 数据集准备(关键前提)


(1)数据集构建


采集后厨场景图片/视频帧:建议至少 2000 张,覆盖不同角度、光照(强光/背光)、遮挡(手臂/厨具遮挡)场景。


标注格式:采用 YOLO 标准格式(txt 文件,每行 class x y w h),类别定义:


0: chef_hat(厨师帽)

1: chef_clothes(厨师服)


数据集划分:训练集 80%、验证集 10%、测试集 10%。


(2)数据增强(代码集成)


针对后厨场景定制增强策略,减少过拟合:


from ultralytics.data.augment import Compose, RandomFlip, RandomCrop, Mosaic, HSV, RandomPerspective


# 定制化数据增强组合

def custom_augment():

    return Compose([

        Mosaic(imgsz=640, p=0.8),  # 马赛克增强,提升场景多样性

        RandomFlip(direction='horizontal', p=0.5),  # 水平翻转

        RandomCrop(scale=(0.8, 1.0), p=0.6),  # 随机裁剪,模拟不同拍摄距离

        HSV(hgain=0.05, sgain=0.3, vgain=0.2, p=0.7),  # 色彩增强,适配后厨光照

        RandomPerspective(degrees=10, translate=0.1, scale=0.1, p=0.5)  # 透视变换,模拟不同角度

    ])


二、完整实现代码


1. 环境依赖


# 安装核心依赖

pip install ultralytics==8.0.228 opencv-python pillow numpy torch>=2.0.0


2. YOLOv8 定制化改进代码


from ultralytics import YOLO

import cv2

import numpy as np

from ultralytics.nn.modules import Conv, CBAM

from ultralytics.utils import yaml_load

import yaml


# --------------------------

# 1. 改进YOLOv8模型:添加CBAM注意力+定制锚框

# --------------------------

def modify_yolov8_model(model_path='yolov8s.pt', custom_yaml='custom_yolov8.yaml'):

    # 1.1 定制化配置文件(定义锚框、类别、注意力机制)

    custom_config = {

        'nc': 2,  # 类别数:厨师帽、厨师服

        'names': ['chef_hat', 'chef_clothes'],

        # 定制锚框(针对厨师帽/服尺寸优化,单位:像素)

        'anchors': [

            [10,13, 16,30, 33,23],  # 小目标锚框(厨师帽)

            [30,61, 62,45, 59,119], # 中目标锚框(厨师服上半身)

            [116,90, 156,198, 373,326] # 大目标锚框(全身厨师服)

        ],

        'attention': 'CBAM'  # 启用CBAM注意力机制

    }

    # 保存定制配置文件

    with open(custom_yaml, 'w') as f:

        yaml.dump(custom_config, f)

    

    # 1.2 加载预训练模型并插入CBAM模块

    model = YOLO(model_path)

    

    # 在特征提取网络的中层插入CBAM(增强后厨场景特征)

    for i, m in enumerate(model.model.model):

        if isinstance(m, Conv) and 10 <= i <= 20:  # 中层卷积后加注意力

            model.model.model[i] = nn.Sequential(m, CBAM(m.out_channels))

    

    return model, custom_yaml


# --------------------------

# 2. 模型训练(集成定制数据增强)

# --------------------------

def train_chef_detector(data_path='dataset.yaml', epochs=100, imgsz=640):

    # 2.1 准备数据集配置文件(dataset.yaml)

    dataset_config = {

        'path': './chef_dataset',  # 数据集根目录

        'train': 'images/train',

        'val': 'images/val',

        'test': 'images/test',

        'nc': 2,

        'names': ['chef_hat', 'chef_clothes']

    }

    with open(data_path, 'w') as f:

        yaml.dump(dataset_config, f)

    

    # 2.2 加载改进后的模型

    model, custom_yaml = modify_yolov8_model()

    

    # 2.3 启动训练(启用定制增强、轻量化训练)

    results = model.train(

        data=data_path,

        epochs=epochs,

        imgsz=imgsz,

        batch=16,

        augment=True,  # 启用数据增强

        hsv_h=0.05, hsv_s=0.3, hsv_v=0.2,  # 定制HSV增强

        perspective=0.5,  # 透视变换

        fliplr=0.5,  # 水平翻转

        device=0 if torch.cuda.is_available() else 'cpu',

        optimizer='SGD',  # 更稳定的优化器

        lr0=0.01,  # 初始学习率

        lrf=0.01,  # 最终学习率

        weight_decay=0.0005,  # 权重衰减防止过拟合

        pretrained=True,  # 预训练权重

        # 轻量化设置

        single_cls=False,

        fp16=True,  # 混合精度训练

        cache=True  # 缓存数据加速训练

    )

    return model, results


# --------------------------

# 3. 实时检测推理(视频/摄像头)

# --------------------------

def real_time_detection(model_path='runs/detect/train/weights/best.pt', source=0):

    # 加载训练好的模型

    model = YOLO(model_path)

    

    # 打开摄像头/视频

    cap = cv2.VideoCapture(source)

    assert cap.isOpened(), "无法打开摄像头/视频文件"

    

    # 设置实时检测参数

    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)

    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

    cap.set(cv2.CAP_PROP_FPS, 30)

    

    while True:

        ret, frame = cap.read()

        if not ret:

            break

        

        # 推理(启用FP16加速,conf=0.5过滤低置信度)

        results = model(frame, conf=0.5, iou=0.45, fp16=True, imgsz=640)

        

        # 绘制检测结果

        annotated_frame = results[0].plot()

        

        # 显示FPS

        fps = model.fps

        cv2.putText(annotated_frame, f'FPS: {fps:.1f}', (10, 30), 

                    cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

        

        # 显示画面

        cv2.imshow('Chef Uniform/Hat Detection', annotated_frame)

        

        # 按q退出

        if cv2.waitKey(1) & 0xFF == ord('q'):

            break

    

    cap.release()

    cv2.destroyAllWindows()


# --------------------------

# 4. 主函数(训练/推理入口)

# --------------------------

if __name__ == '__main__':

    # 阶段1:训练模型(首次运行执行,后续注释)

    # model, results = train_chef_detector()

    

    # 阶段2:实时检测(训练完成后执行)


    real_time_detection(model_path='runs/detect/train/weights/best.pt', source=0)  # source=0为摄像头,也可填视频路径


3. 关键代码解释


1. CBAM注意力机制:插入到YOLOv8中层特征提取后,能自动聚焦厨师服/帽的特征,抑制后厨背景(如厨具、墙面)的干扰。


2. 定制锚框:针对厨师帽(小目标)新增更小的锚框,解决常规YOLO锚框对小目标覆盖不足的问题。


3. 实时推理优化:启用FP16混合精度推理、固定输入尺寸(640×640),保证在普通GPU/CPU上达到30FPS以上的实时性。


4. 数据增强:针对后厨场景的光照、角度多样性定制增强策略,提升模型泛化能力。


YOLO 系列改进:厨师服厨师帽实时检测算法(图2)


三、部署与测试建议


1. 数据集快速扩充


可使用LabelImg工具快速标注(导出YOLO格式);


利用Ultralytics自带的ultralytics.data.annotator工具批量标注视频帧。


2. 模型轻量化部署


训练完成后导出为ONNX/TensorRT格式,进一步提升速度:


model = YOLO('best.pt')

model.export(format='onnx', imgsz=640, fp16=True)  # 导出ONNX


边缘设备(如Jetson Nano)部署:使用TensorRT加速,FPS可提升2-3倍。


3. 测试指标


重点关注两个核心指标:


mAP@0.5:目标检测精度,建议≥0.9(厨师服)、≥0.85(厨师帽);


FPS:实时性,普通CPU≥15FPS,GPU≥30FPS。


四、总结


关键点回顾


1. 核心改进:针对厨师服/帽的检测场景,优化了小目标锚框、添加CBAM注意力机制,同时通过轻量化策略保障实时性;


2. 数据层面:定制后厨场景的数据增强策略,提升模型对复杂环境的适应能力;


3. 部署优化:支持导出ONNX/TensorRT格式,适配不同硬件的实时检测需求。


该方案兼顾精度与速度,可直接落地到后厨监控、智慧餐饮等场景的厨师服/帽合规检测任务中。如果需要进一步提升精度,可增加数据集规模(如5000+样本)或使用YOLOv8l/large版本;如果追求极致速度,可切换为YOLOv8n(纳米版)并进一步裁剪网络。

- END -
分享:
留言 留言 试用申请
产品咨询 产品咨询 硬件产品咨询
19113907060(耿女士)
技术咨询 技术咨询 软件技术咨询
18982151213(刘先生)
微信在线客服 微信在线客服 在线客服
返回官网顶部 返回官网顶部 回到顶部
关闭窗口
产品订购
  • *

  • *

  • *

  • *

  • *