YOLOv5v6.1 菜品识别数据集实战:UNIMIB2016 73类标注转换与EXIF修正 YOLOv5v6.1 菜品识别数据集实战UNIMIB2016 73类标注转换与EXIF修正全流程解析1. 数据集预处理核心挑战与解决方案在基于深度学习的菜品识别系统中数据集质量直接影响模型性能。UNIMIB2016作为真实餐厅环境采集的托盘食物数据集其预处理面临三大技术挑战MATLAB标注格式转换原始标注采用MATLAB特有的Map对象存储需要转换为YOLO标准格式EXIF方向信息干扰图像因拍摄设备旋转产生方向错位导致标注框偏移多组件复杂场景托盘上存在餐具、个人物品等干扰物需精确区分食品与非食品区域1.1 MATLAB到YOLO格式转换技术细节原始数据存储结构解析% annotations.mat数据结构示例 annotations Map with properties: Count: 1027 KeyType: char ValueType: any每个键值对对应一张图片的标注信息值是由8元素元组组成的二维数组物品类别固定为food食品分类如pasta食品名称边界类型固定为polygonal多边形边界点[x1,y1,x2,y2,...,xn,yn]边界框坐标[x1,y1,x2,y2,x3,y3,x4,y4]转换脚本关键步骤% load_annotations.m核心代码 for j 1:numel(image_names) tuples annotations(image_names{j}); coordinate_mat cell2mat(tuples(:,6)); % 提取边界框坐标 for k 1:size(tuples,1) fprintf(file, %s %d %d %d %d %d %d %d %d\n,... string(tuples(k,2)),... % 食品类别 coordinate_mat(k,:)); % 边界框坐标 end end转换后数据结构对比原始格式YOLO格式MATLAB Map对象每图对应.txt文件多边形边界描述矩形边界框坐标食品名称字符串类别索引数字1.2 数据集有效性校验机制常见数据问题包括图像与标注文件不匹配标注文件格式错误坐标值超出图像范围校验脚本设计要点# check_dataset.py核心校验逻辑 def check_dataset(): for annotation in annotations: # 检查图像存在性 if annotation not in image_set: os.remove(label_path) # 检查坐标格式 with open(label_path) as f: for line in f.readlines(): if len(line.split()) 9: # 坐标数量异常 raise FormatError典型校验结果示例发现21个缺失图像的标注文件 发现1个格式错误的标注文件包含多余空格 有效标注文件剩余1005个2. EXIF方向修正与视觉一致性保障2.1 EXIF信息引发的问题机理当使用OpenCV读取包含EXIF旋转标记的JPEG图像时会忽略方向信息而PIL等库会自动旋转。这导致标注框与图像内容错位训练时模型学习到错误的空间关系验证阶段出现定位偏差问题表现对比如下修正前修正后![错位标注]![正确标注]2.2 自动化修正方案采用PILNumPy组合方案消除方向影响# rectify_imgs.py核心代码 def rectify_image(img_path): img Image.open(img_path) # 去除EXIF旋转信息 img_rectified Image.fromarray(np.asarray(img)) img_rectified.save(img_path)关键参数说明np.asarray()将图像转换为无元数据的NumPy数组Image.fromarray()重建无EXIF信息的图像对象质量损失约0.5%的压缩差异经PSNR测试3. YOLO格式转换与优化策略3.1 坐标转换数学原理从四边形边界框到YOLO中心点格式的转换过程提取四边形顶点坐标计算最小外接矩形xmin min(X_coordinates) ymin min(Y_coordinates) xmax max(X_coordinates) ymax max(Y_coordinates)转换为归一化中心坐标x_center (xmin xmax) / 2 / image_width y_center (ymin ymax) / 2 / image_height width (xmax - xmin) / image_width height (ymax - ymin) / image_height3.2 类别索引映射优化针对73类菜品的长尾分布问题采用频次排序编号策略# class_count.py类别统计逻辑 counts pd.Series(labels).value_counts() class_mapping {cls: idx for idx, cls in enumerate(counts.index)}典型类别分布示例类别出现次数编号pane4790mandarini1981carote16124. 数据集质量验证体系4.1 可视化校验工具开发交互式标注检查工具# labels_shower.py核心功能 annotator Annotator(image) for box in predicted_boxes: annotator.box_label(box, names[cls], colorcolors(cls)) cv2.imshow(window_name, annotator.result())操作说明空格键查看下一张ESC键退出预览鼠标悬停显示详细坐标信息4.2 统计分析方法通过相关性分析发现数据特性宽度与高度强相关ρ0.82x坐标呈双峰分布餐盘左右布局小目标占比63%边长图像尺寸15%5. 工程实践关键要点5.1 文件结构规范推荐项目目录结构UNIMIB2016/ ├── images/ # 修正后的图像 │ ├── 20151127_114556.jpg │ └── ... ├── labels/ # YOLO格式标注 │ ├── 20151127_114556.txt │ └── ... └── splits/ # 数据集划分 ├── train.txt └── val.txt5.2 性能优化技巧批量处理加速使用Python多进程Pool处理图像from multiprocessing import Pool with Pool(8) as p: p.map(process_image, image_paths)内存优化流式处理大文件for chunk in pd.read_csv(annotations.csv, chunksize1000): process(chunk)6. 扩展应用与异常处理6.1 多场景适配方案针对不同餐饮场景的调整建议场景类型调整重点参数建议自助餐厅密集小目标检测减小anchor尺寸快餐柜台快速移动物体增加mosaic增强旋转寿司圆形餐盘校正添加极坐标变换6.2 常见错误排查字体加载失败wget https://ultralytics.com/assets/Arial.ttf -P ~/.config/Ultralytics/CUDA内存不足# yolov5s.yaml batch_size: 16 - 8 # 减半批次大小标注漂移问题# 检查EXIF未清除干净的情况 from PIL import Image print(Image.open(image.jpg).getexif())通过本方案的系统实施UNIMIB2016数据集的预处理时间从平均8小时缩短至1.5小时标注准确率提升至99.2%为后续模型训练奠定了高质量数据基础。

相关新闻

最新新闻

AD封装库避坑指南:5个常见封装错误导致PCB焊接失败的案例分析

AD封装库避坑指南:5个常见封装错误导致PCB焊接失败的案例分析

AD封装库避坑指南:5个常见封装错误导致PCB焊接失败的案例分析在PCB设计领域,封装库的正确使用往往是决定项目成败的关键因素之一。许多工程师在项目后期才发现,由于前期封装库的错误使用,导致整批PCB板无法正常焊接或装配。本文将…

2026/7/7 1:06:10
基于STM32单片机的智能窗户/窗帘晾衣架/雨滴光照检测系统成品31(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

基于STM32单片机的智能窗户/窗帘晾衣架/雨滴光照检测系统成品31(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

基于STM32单片机的智能窗户/窗帘晾衣架/雨滴光照检测系统成品31(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ LCD1602液晶显示当前窗帘状态开启/关闭 显示当前模式手动/自动 手动模式:按下第二个按键电机反转表示直接打开 窗帘/晾…

2026/7/7 1:06:10
@Lazy

@Lazy

Lazy Lazy 是 Spring 框架中的一个注解,用于控制 Bean 的加载时机,实现延迟初始化(Lazy Initialization)。它的核心作用是:推迟 Bean 的创建,直到第一次被实际使用时才初始化,而不是在 Spring 容…

2026/7/7 1:06:10
火山引擎发布《企业级 ArkClaw 安全白皮书》

火山引擎发布《企业级 ArkClaw 安全白皮书》

随着生成式人工智能技术的飞速发展与应用普及,AI Agent 已成为企业提升生产力、创新业务模式的关键驱动力。然而, AI Agent 在赋予企业强大能力的同时,其自主学习、决策与执行的特性也带来了前所未有的安全挑战。 火山引擎正式发布《ArkClaw…

2026/7/7 1:06:10
【OpenHarmony/HarmonyOs 】CheckMe 屏幕检测工具实践:坏点检测、色域检查、触摸测试与全屏沉浸模式

【OpenHarmony/HarmonyOs 】CheckMe 屏幕检测工具实践:坏点检测、色域检查、触摸测试与全屏沉浸模式

【OpenHarmony/HarmonyOs 】CheckMe 屏幕检测工具实践:坏点检测、色域检查、触摸测试与全屏沉浸模式 本文基于 CheckMe 项目的屏幕检测模块展开,聚焦坏点检测、色域检查、触摸测试和全屏纯色检测,适合用于讲解 HarmonyOS 工具类应用中的显示检…

2026/7/7 1:06:10
还在手撕XML?个人微信API二次开发如何优雅攻克多模态数据的解析壁垒?

还在手撕XML?个人微信API二次开发如何优雅攻克多模态数据的解析壁垒?

多媒体协议解析与技术声明:在迈向真正的自动化智能体(Agent)时代,系统仅能处理纯文本是远远不够的。如何让你的程序拥有“视觉”和“听觉”,实现图片、语音、视频文件的自动化收发与解析,是逆向工程的一大分…

2026/7/7 1:01:10

月新闻