(yolov5face) book@wyc_emb:~/rk3566/ai_tools/FaceRecognition-master$ python3 detect.py Namespace(weights='weights/last.pt', source='C:/Users/lieweiai/Desktop/26321934-1-192.mp4', output='../inference/output', img_size=640, conf_thres=0.3, iou_thres=0.5, fourcc='mp4v', device='', view_img=False, save_txt=False, classes=None, agnostic_nms=False, augment=False) Using CPU Traceback (most recent call last): File "/home/book/rk3566/ai_tools/FaceRecognition-master/detect.py", line 163, in <module> print(detect()) File "/home/book/rk3566/ai_tools/FaceRecognition-master/detect.py", line 25, in detect model = torch.load(weights, map_location=device)['model'].float() # load to FP32 File "/home/book/anaconda3/envs/yolov5face/lib/python3.9/site-packages/torch/serialization.py", line 1494, in load raise pickle.UnpicklingError(_get_wo_message(str(e))) from None _pickle.UnpicklingError: Weights only load failed. This file can still be loaded, to do so you have two options, do those steps only if you trust the source of the checkpoint. (1) In PyTorch 2.6, we changed the default value of the `weights_only` argument in `torch.load` from `False` to `True`. Re-running `torch.load` with `weights_only` set to `False` will likely succeed, but it can result in arbitrary code execution. Do it only if you got the file from a trusted source. (2) Alternatively, to load with `weights_only=True` please check the recommended steps in the following error message. WeightsUnpickler error: Unsupported global: GLOBAL numpy.core.multiarray._reconstruct was not an allowed global by default. Please use `torch.serialization.add_safe_globals([_reconstruct])` or the `torch.serialization.safe_globals([_reconstruct])` context manager to allowlist this global if you trust this class/function. Check the documentation of torch.load to learn more about types accepted by default with weights_only https://pytorch.org/docs/stable/generated/torch.load.html. 运行报错

时间: 2025-07-08 13:21:10 浏览: 4
<think>好的,我现在需要帮用户解决他们在运行YOLOv5Face的detect.py时遇到的错误。用户提供的错误信息显示在加载模型权重时出现了_pickle.UnpicklingError,提到了关于weights_only参数的问题,以及需要信任来源的建议。 首先,我需要回忆一下PyTorch中torch.load函数的行为变化。根据错误信息,PyTorch 2.6之后默认将weights_only设为True,这意味着在加载模型时,只允许加载包含张量和简单类型的文件,而不允许执行任意代码。如果用户的模型文件是在旧版本的PyTorch中保存的,或者使用了自定义的类或函数,可能会导致这个问题。 接下来,用户使用的是YOLOv5Face的detect.py脚本,错误发生在加载权重文件的这一步。用户可能尝试加载的权重文件是使用旧版PyTorch保存的,或者权重文件本身包含了不被允许的全局变量,如numpy的_reconstruct函数。这种情况下,当使用weights_only=True时,加载会失败,因为PyTorch的安全机制阻止了潜在的不安全代码执行。 我需要考虑可能的解决方案。根据错误提示,有两种方法:一是将weights_only设为False,但需要用户信任权重文件的来源;二是修改加载方式,使用更安全的上下文管理器来允许特定的全局变量。不过,第二种方法可能比较复杂,尤其是对于普通用户来说,可能不太容易操作。 另外,用户可能使用的PyTorch版本较新(>=2.6),而原来的代码可能没有考虑到这个变化。因此,修改detect.py中的模型加载代码,显式设置weights_only=False可能是一个直接的解决办法。但需要提醒用户,这样做存在安全风险,必须确保权重文件来自可信来源。 此外,用户可能没有正确安装YOLOv5Face的依赖库,或者使用的权重文件格式不正确。例如,YOLOv5Face可能需要特定的权重格式,如.pt文件,而用户提供的文件可能不兼容。需要检查用户使用的权重路径是否正确,文件是否存在,以及是否适用于当前版本的代码。 另一个可能性是用户的环境配置问题,例如CUDA版本与PyTorch不兼容,或者缺少必要的依赖库。不过,根据错误信息显示用户正在使用CPU(Using CPU),可能未正确配置GPU环境,但这可能与当前错误无关,但可能需要后续检查。 综合以上分析,首先建议用户修改模型加载的代码,添加weights_only=False参数。同时,提醒用户注意安全风险,并检查权重文件的来源。如果用户使用的是YOLOv5Face的官方权重,可以认为是可信的,因此修改参数是可行的。此外,建议用户降级PyTorch版本到2.6以下,但这可能不是最佳选择,因为升级库版本可能带来其他好处。 另外,用户可能需要检查他们的detect.py脚本是否与YOLOv5Face的最新版本兼容,或者是否有社区提供的修复方案。例如,YOLOv5Face的GitHub仓库中可能已经有相关的issue讨论这个问题,用户可以参考解决方案。 最后,如果用户仍然无法解决问题,可能需要更详细的调试,例如打印出权重文件的路径是否正确,文件是否损坏,或者尝试加载其他权重文件来排除问题。</think>你在运行YOLov5Face时遇到的错误是由于PyTorch版本兼容性问题导致的模型加载失败。以下是逐步解决方案: --- ### **错误原因分析** - **核心问题**:PyTorch 2.6+ 默认启用`weights_only=True`的安全检查,但你的权重文件包含非安全对象(如`numpy`的`_reconstruct`方法) - **直接触发点**:代码中使用`torch.load()`加载模型时未显式设置`weights_only=False` --- ### **解决方案一:修改加载方式(推荐)** 修改`detect.py`中模型加载代码,**显式允许加载非安全对象**: 1. 定位到`detect.py`中的模型加载代码(约第25行): ```python model = torch.load(weights, map_location=device)['model'].float() ``` 2. 修改为以下两种形式之一: **方式1**(直接关闭安全限制,需信任权重来源): ```python model = torch.load(weights, map_location=device, weights_only=False)['model'].float() ``` **方式2**(精确添加允许的全局变量): ```python from torch.serialization import add_safe_globals add_safe_globals([np.core.multiarray._reconstruct]) # 需先导入numpy as np with torch.serialization.safe_globals_context(): model = torch.load(weights, map_location=device)['model'].float() ``` --- ### **解决方案二:降级PyTorch版本** 若不想修改代码,可回退到PyTorch < 2.6版本: ```bash pip install torch==2.0.1 torchvision==0.15.2 --extra-index-url https://download.pytorch.org/whl/cpu ``` --- ### **解决方案三:使用YOLOv5Face官方推荐方法** YOLOv5Face项目可能已有适配更新,尝试以下步骤: 1. 更新仓库代码: ```bash git pull origin master ``` 2. 使用官方模型加载接口(如果存在): ```python from models.experimental import attempt_load model = attempt_load(weights, map_location=device) # 更安全的加载方式 ``` --- ### **附加检查项** | 检查点 | 操作指南 | |----------------------|-----------------------------------| | **权重文件完整性** | 检查`weights/last.pt`是否完整下载 | | **路径有效性** | 确认路径`C:/Users/.../26321934-1-192.mp4`在Linux下存在(注意Windows路径在Linux中需改为`/mnt/c/Users/...`) | | **CUDA可用性** | 若需GPU加速,安装CUDA版PyTorch | --- ### **完整修复示例** 以**解决方案一(方式1)**为例: ```python # detect.py修改后的关键代码段 def detect(): # ... device = select_device(opt.device) # 修改此行加载代码 model = torch.load(opt.weights, map_location=device, weights_only=False)['model'].float().fuse().eval() # ... ``` --- ### **关键注意事项** 1. **安全警告**:`weights_only=False`会允许任意代码执行,**务必确保权重文件来源可信** 2. **环境一致性**:建议使用项目要求的Python和PyTorch版本(查看项目`requirements.txt`) 3. **视频路径问题**:Linux系统无法直接访问Windows路径`C:/Users/...`,需挂载磁盘或移动文件到Linux目录 通过上述任一方案应能解决你的加载错误。建议优先尝试**解决方案一(方式1)**,这是对现有代码最小的改动。
阅读全文

相关推荐

# U501347 「Stoi2025」爱的飞行日记 ## 题目背景 ![](bilibili:BV1fx411N7bU?page=125) ## 题目描述 $t$ 组询问,每次询问给定正整数 $n,m$,计算 $$\prod_{a_1=1}^{m}\prod_{a_2=1}^{m}\cdots\prod_{a_n=1}^{m}\operatorname{lcm}(f_{a_1},f_{a_2},\dots,f_{a_n})\bmod{37426667}$$ 的值。其中 $f_i$ 是斐波那契数,满足 $f_1=f_2=1$,且 $f_i=f_{i-1}+f_{i-2},\forall n\ge3$。 ## 输入格式 第一行输入一个正整数 $t$ 表示询问组数。 接下来 $t$ 行,每行两个正整数 $n,m$ 表示一次询问。 ## 输出格式 每次询问输出一行一个整数表示答案。 ## 输入输出样例 #1 ### 输入 #1 2 1 3 2 3 ### 输出 #1 2 32 ## 说明/提示 #### 样例解释 对于第一组询问,有答案为 $f_1f_2f_3=1\times1\times2=2$。 对于第二组询问,当 $a_1,a_2\in\{1,2\}$ 时 $\operatorname{lcm}(f_{a_1},f_{a_2})=1$,否则 $\operatorname{lcm}(f_{a_1},f_{a_2})=2$。故答案为 $2^5=32$。 #### 数据范围与限制 **本题采用捆绑测试,各 Subtask 的限制与分值如下。** | Subtask No. | $t\le$ | $n\le$ | $m\le$ | 分值 | | :-: | :-: | :-: | :-: | :-: | | $1$ | $1$ | $2$ | $2 \times 10^3$ | $13$ | | $2$ | $5$ | $2 \times 10^5$ | $2 \times 10^5$ | $24$ | | $3$ | $5$ | $2 \times 10^7$ | $2 \times 10^7$ | $36$ | | $4$ | $300$ | $2 \times 10^{17}$ | $2 \times 10^7$ | $27$ | 对于所有数据,满足 $1 \le t \le 300, 1 \le n \le 2 \times 10^{17}, 1 \le m \le 2 \times 10^7$。 #include<bits/stdc++.h> #define md 37426667 #define int unsigned long long using namespace std; inline int in() { int k=0,f=1; char c=getchar(); while(c<'0'||c>'9') { if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9') k=k*10+c-'0',c=getchar(); return k*f; } inline int out(int a) { if(a<0) putchar('-'),a=-a; if(a<10) putchar(a+'0'); else out(a/10),putchar(a%10+'0'); return 0; } inline int gcd(int a,int b) { while(b){ int t=b; b=a%b; a=t; } return a; } int lcm(int a,int b) { return (a/gcd(a,b))*b%md; } int fib[20000005]; main() { int t=in(); fib[1]=fib[2]=1; for(int i=3; i<=20000000;i++) fib[i]=(fib[i-1]+fib[i-2])%md; while(t--) { int n=in(),m=in(); int ans=1; if(n==1) for(int i=1; i<=m; i++) ans=(ans*fib[i])%md; else if(n==2) { for(int xx=1; xx<=m; xx++) { for(int yy=1; yy<=m; yy++) { ans=(ans*lcm(fib[xx],fib[yy]))%md; } } } out(ans%md); } }

最新推荐

recommend-type

JAVA面试重点话术(张大大吐血整理).doc

3. Java集合框架: - Collection接口:包含List和Set两个子接口。List接口下的ArrayList、LinkedList和Vector提供了不同特性的列表操作。ArrayList提供快速随机访问,适合读取操作,插入和删除较慢;LinkedList适合...
recommend-type

基于业务的服务管理IBM基础架构管理方案建议书模板.doc

基于业务的服务管理IBM基础架构管理方案建议书模板.doc
recommend-type

印度阿三 独臂挡火车 打扰了 - 1.1(Av18721400,P1)

分类
recommend-type

PLC专业课程设计装配流水线的模拟控制.docx

PLC专业课程设计装配流水线的模拟控制.docx
recommend-type

吉林大学Windows程序设计课件自学指南

### Windows程序设计基础 Windows程序设计是计算机科学中的一个重要领域,它涉及到在Windows操作系统上创建应用程序的知识和技能。它不仅包括编写代码的技巧,还包括了理解操作系统运行程序的方式、事件驱动编程概念以及图形用户界面(GUI)的设计。 ### 吉林大学计算机专业课件概述 吉林大学提供的计算机专业课件,标题为“Windows程序设计”,是一个专为初学者设计的自学材料。通过这份课件,初学者将能够掌握Windows环境下编程的基本概念和实践技能,这对于未来深入学习更高级的编程知识及从事软件开发工作都是非常有帮助的。 ### 关键知识点解析 #### 第一讲:WINDOWS程序设计 本讲主要是对Windows程序设计做一个基本的介绍,涵盖了Windows应用程序的运行环境和特性。课程会介绍Windows操作系统对程序设计的支持,包括API(应用程序编程接口)的使用,以及如何创建一个基本的Windows应用程序。此外,还会涉及程序设计的基本原则,如消息驱动和事件驱动编程。 #### 第二讲:输出文本与绘图 在本讲中,将介绍Windows程序中如何进行文本输出和基本图形绘制。这部分知识会涉及GDI(图形设备接口)的使用,包括字体管理、颜色设置和各种绘图函数。对于初学者来说,理解这些基本的图形绘制方法对于创建美观的应用程序界面至关重要。 #### 第三讲:键盘 键盘输入是用户与应用程序交互的重要方式之一。本讲将解释Windows程序如何接收和处理键盘事件,包括键盘按键的响应机制、快捷键的设置和文本输入处理等。掌握这部分知识对于实现用户友好界面和交互逻辑至关重要。 #### 第四讲:鼠标 鼠标操作同样是Windows应用程序中不可或缺的一部分。此讲将讲解如何处理鼠标事件,例如鼠标点击、双击、移动和滚轮事件等。还会包括如何在程序中实现拖放功能、鼠标光标的自定义显示以及鼠标的高级使用技巧。 #### 第五讲:定时器消息 定时器是Windows程序中非常重要的组件,用于实现时间控制相关的功能。本讲将介绍如何在Windows程序中使用定时器消息,包括创建、管理定时器,以及定时器消息的处理和应用场景。通过这部分内容,学习者可以掌握如何在程序中实现定时执行任务等。 #### 第六讲:子窗口控制 子窗口是构成复杂Windows应用程序界面的基本元素。在本讲中,将介绍如何创建和控制子窗口,包括子窗口的创建、移动、大小调整和窗口消息处理。这将帮助初学者理解主窗口与子窗口之间的关系,以及如何通过子窗口来构建丰富的用户界面。 #### 第七讲:资源 资源是应用程序中使用的非代码数据,如图标、菜单、对话框模板等。在本讲中,将介绍如何在Windows程序中使用和管理这些资源。通过学习资源文件的创建和编辑,学习者可以为程序添加视觉元素,使得应用程序更加丰富多彩。 #### 第八讲:对话框 对话框是Windows应用程序中常见的用户交互方式。本讲将介绍对话框的概念、类型和使用方法,包括标准对话框和自定义对话框的创建和事件处理。掌握对话框的设计和使用可以让程序具有更好的用户体验。 ### 总结 以上就是根据吉林大学计算机专业课件“Windows程序设计”中提供的各讲内容提炼出的关键知识点。该课件内容详实,覆盖了从基础到高级的各项内容,非常适合初学者按部就班地学习Windows程序设计。学习者通过逐步掌握这些知识点,将能够独立设计和开发出具有完整功能的Windows应用程序。
recommend-type

STM32F10x ADC_DAC转换实战:精确数据采集与输出处理

# 摘要 STM32F10x系列微控制器广泛应用于嵌入式系统中,其中的ADC和DAC转换功能对于精确模拟信号的处理至关重要。本文首先介绍了STM32F10x的ADCDAC转换基础知识,详细解释了ADC转换的理论、硬件配置、提升精度的策略,以及DAC转换技术的基础和硬件架构。随后,文章深入探讨了ADCDAC在实际应用中的规划、数据采集、输出处理以及优化
recommend-type

麒麟系统编译动态库

<think>首先,用户的问题是:“我想在麒麟系统上编译动态库的方法或教程请问如何在麒麟操作系统上编译动态链接库”。所以,我需要提供在麒麟操作系统上编译动态链接库的步骤。参考系统指令:-所有行内数学表达式使用$...$格式。-独立公式使用$$...$$并单独成段。-LaTeX语法正确。-使用中文回答。-生成相关问题。-在回答中引用的段落末尾添加引用标识。用户可见层:-回答结构清晰,帮助用户逐步解决问题。-保证回答真实可靠。从引用中提取相关信息:-引用[1]:麒麟系统版本是kylin4.0.2,gcc版本是5.4.0,jdk版本是1.8.0_265。-引用[2]:在Linux下编译动态链接库,使
recommend-type

Struts框架中ActionForm与实体对象的结合使用

在深入讨论知识点之前,首先要明确一点,struts框架是Java的一个开源Web应用程序框架,用于简化基于MVC(Model-View-Controller)设计模式的Web应用程序的开发。而ActionForm则是Struts框架中的一个组件,它充当MVC设计模式中的Model(模型)和View(视图)之间的桥梁,主要用于封装用户输入的数据,并将这些数据传递给业务逻辑层进行处理。 知识点一:Struts框架基础 Struts框架使用一个中央控制器(ActionServlet)来接收所有的用户请求,并根据配置的映射规则(struts-config.xml)将请求转发给相应的Action类进行处理。Action类作为控制器(Controller),负责处理请求并调用业务逻辑。Action类处理完业务逻辑后,会根据处理结果将控制权转交给不同的JSP页面。 知识点二:ActionForm的使用 ActionForm通常用于封装来自用户界面的数据,这些数据被存储在表单中,并通过HTTP请求提交。在Struts中,每个表单对应一个ActionForm子类的实例。当ActionServlet接收到一个请求时,它会负责创建或查找相应的ActionForm对象,然后使用请求中的数据填充ActionForm对象。 知识点三:在ActionForm中使用实体对象 在实际应用中,表单数据通常映射到后端业务对象的属性。因此,为了更有效地处理复杂的数据,我们可以在ActionForm中嵌入Java实体对象。实体对象可以是一个普通的Java Bean,它封装了业务数据的属性和操作这些属性的getter和setter方法。将实体对象引入ActionForm中,可以使得业务逻辑更加清晰,数据处理更加方便。 知识点四:Struts表单验证 Struts提供了一种机制来验证ActionForm中的数据。开发者可以在ActionForm中实现validate()方法,用于对数据进行校验。校验失败时,Struts框架可以将错误信息存储在ActionMessages或ActionErrors对象中,并重新显示表单页面,同时提供错误提示。 知识点五:整合ActionForm与业务逻辑 ActionForm通常被设计为轻量级的,主要负责数据的接收与传递。真正的业务逻辑处理应该在Action类中完成。当ActionForm对象被创建并填充数据之后,Action对象可以调用ActionForm对象来获取所需的数据,然后进行业务逻辑处理。处理完成后的结果将用于选择下一个视图。 知识点六:Struts配置文件 Struts的配置文件struts-config.xml定义了ActionForm、Action、JSP页面和全局转发等组件之间的映射关系。开发者需要在struts-config.xml中配置相应的ActionForm类、Action类以及它们之间的映射关系。配置文件还包含了数据源、消息资源和插件的配置。 知识点七:Struts与MVC设计模式 Struts遵循MVC设计模式,其中ActionServlet充当控制器的角色,负责接收和分派请求。ActionForm承担部分Model和View的职责,存储视图数据并传递给Action。Action类作为控制器,负责处理业务逻辑并返回处理结果,最终Action类会指定要返回的视图(JSP页面)。 知识点八:Struts框架的更新与维护 Struts框架自推出以来,经历了多次更新。Struts 2是该框架的一个重大更新,它引入了拦截器(Interceptor)的概念,提供了更为灵活的处理机制。开发者在使用Struts时,应该关注框架的版本更新,了解新版本中提供的新特性与改进,并根据项目需求决定是否迁移到新版本。 知识点九:Java Web开发社区和资源 开发者在学习和使用Struts框架时,可以利用社区资源获得帮助。通过社区论坛、问答网站(例如Stack Overflow)、在线教程、博客以及官方文档等多种途径,开发者可以获取最新的信息、学习案例、解决遇到的问题,以及了解最佳实践。 知识点十:邮件和QQ交流方式 在本次提供的描述中,作者提供了自己的QQ号码和电子邮件地址,表明作者愿意通过这两种方式进行交流和获取反馈。QQ和电子邮件是中文开发者常用的交流方式,有助于获得及时的技术支持和代码评审,也方便了社区中的中文用户进行交流。 结合上述知识点,我们可以了解到Struts框架在使用ActionForm中集成实体对象时的一些关键操作和设计原则。开发者通过合理地设计ActionForm和Action类,以及妥善地利用Struts提供的配置和验证机制,可以开发出结构清晰、易于维护的Web应用程序。同时,通过社区资源和交流工具,可以有效地提高开发效率,不断完善自己的技术栈。
recommend-type

STM32F10x定时器应用精讲:掌握基本使用与高级特性

# 摘要 本文针对STM32F10x系列微控制器的定时器模块进行全面的探讨和分析。首先,概述了STM32F10x定时器的基础知识,接着详细阐述了其工作原理、硬件配置和软件配置。随后,文章深入讲解了定时器的高级特性,包括输入捕获、PWM输出和输出比较功能,以及这些功能的具体应用和配置方法。在应用实践章节中,讨论了定时器在时间测量、频率测量和信号生成中的实际应用及解决方案。最后,探索了定时器在综合应用
recommend-type

stm32f407 __HAL_TIM_DISABLE(__HANDLE__)函数

<think>我们正在讨论STM32F407的HAL库中__HAL_TIM_DISABLE函数的用法。根据引用[3],我们看到了一个类似的宏定义__HAL_TIM_ENABLE,它用于启用定时器。我们可以推测__HAL_TIM_DISABLE应该是用于禁用定时器的宏。引用[3]中给出了__HAL_TIM_ENABLE的定义:#define__HAL_TIM_ENABLE(__HANDLE__)((__HANDLE__)->Instance->CR1|=(TIM_CR1_CEN))因此,我们推断__HAL_TIM_DISABLE的定义应该是类似的,但它是清除TIM_CR1_CEN位(控制使能位)