学习日记(2026年3月24日)

今日学习内容

今天主要围绕 YOLOv11 的模型训练与视频预测展开,遇到并解决了多个实际问题。上午调试视频预测代码时,因帧分辨率过大(1422×2160)导致内存分配错误(_ArrayMemoryError),通过自动缩放帧后再还原的方式解决。下午训练自定义模型时,遇到了特征图尺寸不匹配的错误,通过修正 YAML 文件中卷积步长和索引,并恢复被污染的 block.py 文件,最终模型成功构建。此外,还处理了数据集路径配置错误的问题。

遇到的主要问题及解决方案

  1. 视频预测内存不足

· 现象:使用 model.predict(source=video) 时出现 Unable to allocate 8.79 MiB 错误,视频帧过大导致 OpenCV 无法分配内存。

· 解决:采用逐帧读取视频,在送入模型前先缩小帧尺寸(等比例缩放到 640 边长),预测后再将标注帧放大回原始尺寸保存。这样既避免内存溢出,又保证了输出视频的分辨率不变。

  1. 自定义模型(含 P2 检测层和 SimAM 注意力)特征图尺寸不匹配

· 现象:训练时报 RuntimeError: Sizes of tensors must match except in dimension 1. Expected size 8 but got size 16,提示在 head 的 Concat 层中拼接的两个特征图高宽不一致。

· 原因分析:

· YAML 中 head 第11层使用了步长为2的卷积,导致尺寸缩小一半,后续与 P4 层(40×40)拼接时尺寸不一致(20×40)。

· 同时发现测试代码错误地放在了 block.py 文件末尾,导致导入时 YOLO 未定义。

· 解决:

· 将 head 第11层的卷积步长从 2 改为 1,保持尺寸为 20×20,与上采样后的 P4 层(40×40)不直接拼接,而是先上采样再拼接。

· 清理 block.py 文件,移除末尾的测试代码,确保自定义模块 C3k2_SimAM 正确注册。

· 修正 YAML 中 backbone 索引(如第28行融合 C2PSA 层应使用索引10)。

  1. 数据集路径错误

· 现象:训练时提示 Dataset 'coal.yaml' images not found, missing path '...\coaloal\images\val',路径中出现了拼写错误 coaloal。

· 解决:检查 coal.yaml 文件,将 path 修正为正确的数据集根目录(如 E:\...\datasets\coal),并确保 train 和 val 相对路径正确。

学到的知识点

  1. YOLOv8 视频处理的内存管理:当输入帧过大时,可在读取后立即缩放,避免模型内部因内存分配失败而崩溃。

  2. 模型自定义的调试方法:使用 model.model(dummy) 测试前向传播,打印中间层尺寸定位错误;用独立的测试脚本验证模型结构,避免污染源码文件。

  3. YAML 结构对特征图尺寸的影响:FPN 中的卷积步长和上采样操作必须精确匹配,否则拼接时会出现尺寸不一致。

  4. 数据集配置的路径约定:path 指定数据集根目录,train 和 val 为相对路径,确保实际目录存在且命名正确。

收获与反思

今天在调试中更加深刻体会到"细节决定成败":一个卷积步长、一个索引数字、一个路径拼写错误,都可能导致整个程序失败。通过逐步定位和修正,不仅解决了问题,也加深了对 YOLOv8 内部结构的理解。未来在自定义模型时,应先测试前向传播,确保结构正确再投入训练,避免后期反复调试。

下一步计划

· 开始训练自定义模型,观察 SimAM 注意力对检测精度的提升效果。

· 尝试用 GPU 加速训练(当前为 CPU),提升效率。

· 继续完善视频预测脚本,增加进度条和日志记录。

相关推荐
夜瞬1 分钟前
NLP学习笔记05:命名实体识别(NER)入门——从规则方法到 BERT
笔记·学习·自然语言处理
遗憾随她而去.16 分钟前
react学习(一)
javascript·学习·react.js
Darkershadow24 分钟前
蓝牙学习之通过OP CODE解析输入输出数据
学习·蓝牙·ble·mesh
m0_7167652340 分钟前
数据结构--栈的插入、删除、查找详解
开发语言·数据结构·c++·经验分享·学习·青少年编程·visual studio
江苏世纪龙科技42 分钟前
【世纪龙科技】给智能网联汽车教学装上一个“数字副驾”
学习
invicinble44 分钟前
对于学习视频的技巧
学习
承渊政道1 小时前
【递归、搜索与回溯算法】(二叉树深搜模型拆解与经典题型全面突破)
数据结构·c++·学习·算法·leetcode·macos·bfs
鱼鳞_1 小时前
Java学习笔记_Day32(IO流字符集字符流)
java·笔记·学习
Hical_W1 小时前
深入学习CPP26_静态反射
c++·学习
夜瞬9 小时前
NLP学习笔记01:文本预处理详解——从清洗、分词到词性标注
笔记·学习·自然语言处理