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

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

相关推荐
千寻xun7 小时前
一、理论篇-NVME协议学习笔记
笔记·学习·fpga开发·nvme ssd·nvme协议
researcher-Jiang7 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
MartinYeung512 小时前
[论文学习]大语言模型安全综述:攻击、防御、对齐、度量与护栏的深度解析
学习·安全·语言模型
AOwhisky13 小时前
Python 学习笔记(第三期)——流程控制:条件判断与循环结构
运维·笔记·python·学习·云原生·流程控制·循环
心中有国也有家13 小时前
AtomGit Flutter 鸿蒙客户端:白噪音场景的视觉设计
学习·flutter·华为·harmonyos
心中有国也有家13 小时前
AtomGit Flutter 鸿蒙客户端:呼吸练习的完整生命周期
学习·flutter·华为·harmonyos
Zeeland13 小时前
构建护城河:自学习 Agent
学习
尼米棕熊13 小时前
大模型学习8上-推理部署框架llama.cpp与Ollama使用指北
学习·llama
brave_zhao14 小时前
nginx的进程架构
java·学习·nginx
枫零NET14 小时前
跟着OpenCode学习Pi Coding Agent-05-Agent的类型系统
人工智能·学习