首页 > 其他分享 >YOLO系列代码调试笔记

YOLO系列代码调试笔记

时间:2023-08-04 11:45:16浏览次数:39  
标签:__ loss torch tensor YOLO 笔记 item cv 调试

环境:Windows10、Python 3.8.5、torch 1.13.0+cu116、torchvision 0.14.0+cu116

工程:https://github.com/abeardear/pytorch-YOLO-v1

bug1:

    # resnet = models.resnet50(pretrained=True)
    resnet = models.resnet50(weights=ResNet50_Weights.DEFAULT)

因为版本原因,加载预训练模型时采用参数“pretrained=True”会报错,可以改为“weights=ResNet50_Weights.DEFAULT”或者类似的其他参数。

bug2:进程池错误

追溯报错信息,看到问题出在 for i, (images, target) in enumerate(train_loader): 这一行,其实只需要把整个迭代循环过程放在主函数下即可:

RuntimeError: 
        An attempt has been made to start a new process before the
        current process has finished its .

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.

修改:

"""
num_iter = 0
# vis = Visualizer()
best_test_loss = np.inf

for epoch in range(num_epochs):
"""
# 修改后
if __name__ == '__main__':
    num_iter = 0
    # vis = Visualizer()
    best_test_loss = np.inf

    for epoch in range(num_epochs):

 bug3: opencv报错:包含信息“ (-215:Assertion failed) dims <= 2 && step[0] > 0 in function 'cv::Mat::locateROI' ”

维度错误,如果 tensor/ array的shape为 [0 ,3, 1080, 1920]诸如此类,需要 通过 torch.squeeze(tensor, dim=0) 去掉多余的维度,最后通过 torch.unsqueeze(tensor, dim=0) 变换回去。

bug4:opencv报错:

  File "D:/PythonCVWorkspace/pytorch-YOLO-v1/yolodataset.py", line 138, in BGR2HSV
    return cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
cv2.error: OpenCV(4.2.0) c:\projects\opencv-python\opencv\modules\imgproc\src\color.simd_helpers.hpp:92: error: (-2:Unspecified error) in 
function '__cdecl cv::impl::`anonymous-namespace'::CvtHelper<struct cv::impl::`anonymous namespace'::Set<3,4,-1>,struct cv::impl::A0x3b52564f
::Set<3,-1,-1>,struct cv::impl::A0x3b52564f::Set<0,5,-1>,2>::CvtHelper(const class cv::_InputArray &,const class cv::_OutputArray &,int)' > Invalid number of channels in input image: > 'VScn::contains(scn)' > where > 'scn' is 1

bug5: 显存爆了

    return torch.batch_norm(
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 4.00 GiB total capacity; 2.48 GiB already allocated; 0 bytes free; 2.55 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

纯属显卡太弱,我的显卡 GeForce GTX 只有 4GB 显存,降低 batch_size 到4即可。

bug6:数值类型错误

    total_loss += loss.data[0]
IndexError: invalid index of a 0-dim tensor. Use `tensor.item()` in Python or `tensor.item<T>()` in C++ to convert a 0-dim tensor to a number

    total_loss += loss.data.item
TypeError: unsupported operand type(s) for +=: 'float' and 'builtin_function_or_method'

修改方法:

loss.data 是一个Tensor 类型的标量, tensor(61.8650, device='cuda:0') <class 'torch.Tensor'>

loss.data.item 是一个方法名,正确的是 loss.data.item() 获取其中数值。

total_loss += loss.data.item()

warning 7:UserWarning: indexing with dtype torch.uint8 is now deprecated, please use a dtype torch.bool instead.

添加屏蔽代码

import warnings
warnings.filterwarnings("ignore", category=UserWarning) 

 

至此,除了关于数据增强方面的两个opencv的错误(随机亮度变换、随机色彩空间变换),以及后来显存又爆了之外。通过自己做的150张图片的小数据集测试跑通了源码。

标签:__,loss,torch,tensor,YOLO,笔记,item,cv,调试
From: https://www.cnblogs.com/zhaoke271828/p/17605303.html

相关文章

  • ADB 利用wifi无线调试配置方法
    ADB利用wifi无线调试配置方法目录ADB利用wifi无线调试配置方法1、原理2、无线设备连接2-1、TCP端口启用2-2、启用热点2-3、连接adb设备2-4、检查设备连接当设备需要调试,但因为设备模式或USB口无法使用或者是其他的种种原因而无法使用USB直连进行调试的时候。这时可以使用另一......
  • Java 诊断工具 Arthas 教程学习笔记
    Java诊断工具Arthas教程学习笔记 Java诊断利器Arthas,是阿里的一款开源工具。Github-alibaba/arthas 上可以看到它的介绍。了解它,主要是最近对分析Java错误堆栈比较感兴趣,机缘巧合看到了它。本文记录的内容,就是基于它官网的文档摘抄的,涉及的截图可能由于篇幅有限,不是......
  • [岗位能力--判断推理1--贾鹏]军队文职2023-01-03之前笔记
    day1 ......
  • 系统架构设计师笔记第43期:云原生架构案例分析
    云原生架构是一种软件架构和开发方法论,旨在利用云计算、容器化和微服务等技术,构建高度可伸缩、弹性和可靠的应用程序。它的设计理念是将应用程序与底层的基础设施解耦,以实现更高的灵活性、可维护性和可扩展性。云原生架构的核心特点包括:微服务架构:将应用程序拆分为一组小型、自治的......
  • Java学习笔记(二)
    第二章Java的基础语法2.1Java的注释1、注释是干什么的?给程序员(人)看的,辅助程序员理解代码的解释性的文字。2、注释的形式有3种(1)、单行注释//注释内容(2)、多行注释/* 注释内容1 注释内容2 注释内容3*/(3)、文档注释/** 文档注释内容*/文档注释可以被javadoc.exe工具读取,生......
  • python教程 入门学习笔记 第6天 数据类型转换 字符串转换成数值 数值之间互转 其它类
    4、数据类型转换1)字符串转换成数值:int()-----------将值转换成整数float()-----------将值转换成小数str()-----------将值转换成字符串bool()-----------将值转换成布尔值例如:int()将值转换成整数s1="188"#字符串ns1=int(s1)#转换成整型数值print(ns1+8)#打印数......
  • 二分图(菜鸟笔记)
    1.二分图的有关性质  首先二分图必定不具有奇数环。而不具有奇数环的图必定可以被染成相邻两个点都不是同个颜色的图(只用黑白两色)。  首先证明不具有奇数环的图是图在染色不存在矛盾的充分必要条件。  证明充分性,用反证法。图中无奇数环,但是染色存在矛盾,则有白黑白......
  • 算法工程师学习运筹学 笔记一 P,NP,NPC问题
    算法的时间复杂度我之前理解的时间复杂度,是指的解决一个问题所需要的时间。但其实并不准确,时间复杂度应该是 当问题规模扩大后,程序需要的时间长度增长得有多快。时间复杂度有两种类型:一种是O(1),O(log(n)),O(n^a)等,我们把它叫做多项式级的复杂度,因为它的规模n出现在底数的位置;......
  • k8s 学习笔记之 Pod——Pod 的调度
    Pod的调度在默认情况下,一个Pod在哪个Node节点上运行,是由Scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的。但是在实际使用中,这并不满足的需求,因为很多情况下,我们想控制某些Pod到达某些节点上,那么应该怎么做呢?这就要求了解kubernetes对Pod的调度规则......
  • 基于YOLO-V3训练自己的数据与任务
    目录1.用labelme为数据打标签2.写好模型所需的配置文件(1)设置自己的分类数(2)自动生成配置文件yolov3-custom.cfg3.标签格式转换4.写好数据和标签的路径(json2yolo.py中)5.完成其他配置操作(1)数据放到相应位置,注意名字和label的得一致(2)更改类别名字(3)设置train.txt和val.txt(4)......