学习日记(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),提升效率。

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

相关推荐
统计学小王子43 分钟前
《数学少年-从正负号到几何原本》(第一章:“刻度之上,零为分界“)--1.2 电梯与账单里的相反数字
学习·初中数学·初中数学科普·数学科普
流云鹤1 小时前
03Java学习day(3)
java·学习
我命由我123452 小时前
棘轮效应极简理解
经验分享·学习·职场和发展·产品运营·求职招聘·职场发展·学习方法
tt5555555555552 小时前
电工证学习笔记(二)
笔记·学习·电力
wc882 小时前
微软EDGE浏览器功能学习
前端·学习·edge
hPw0eKIqD2 小时前
一步一步学习使用FireMonkey动画() 使用动画组件为窗体添加动态效果
学习
red_redemption3 小时前
自由学习记录(210)
学习
MartinYeung53 小时前
[论文学习]PACT:溯源感知能力合约——面向智能体安全的参数级溯源
人工智能·学习·安全
小O的算法实验室5 小时前
AAAI-26,全局相关性学习:通过谱图神经网络增强进化算法
神经网络·学习·算法
宁风NF5 小时前
JavaScript:网络请求与前端通信
开发语言·前端·javascript·网络·学习·ecmascript