自己调用yolov5模型进行前向推理时的报错

当我在自己的工程中调用yolov5的目标检测模型进行推理,代码大致如图:
在这里插入图片描述
在这里插入图片描述
当运行到如图箭头所指的位置的时候报如下错误:

Traceback (most recent call last):
File “/home/yons/train/code/mmpose/inference.py”, line 81, in
pred = yolo_model(img)[0] # 进行预测
File “/home/yons/miniconda3/envs/openmmlab/lib/python3.8/site-packages/torch/nn/modules/module.py”, line 1518, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
File “/home/yons/miniconda3/envs/openmmlab/lib/python3.8/site-packages/torch/nn/modules/module.py”, line 1527, in _call_impl
return forward_call(*args, **kwargs)
File “/home/yons/train/code/yolov5/models/yolo.py”, line 267, in forward
return self._forward_once(x, profile, visualize) # single-scale inference, train
File “/home/yons/train/code/yolov5/models/yolo.py”, line 167, in _forward_once
x = m(x) # run
File “/home/yons/miniconda3/envs/openmmlab/lib/python3.8/site-packages/torch/nn/modules/module.py”, line 1518, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
File “/home/yons/miniconda3/envs/openmmlab/lib/python3.8/site-packages/torch/nn/modules/module.py”, line 1527, in _call_impl
return forward_call(*args, **kwargs)
File “/home/yons/train/code/yolov5/models/common.py”, line 435, in forward
return torch.cat(x, self.d)
RuntimeError: Sizes of tensors must match except in dimension 1. Expected size 36 but got size 35 for tensor number 1 in the list.

首先打印出输入进模型的img及其shape:
在这里插入图片描述
发现shape都是一样的(对输入进行了处理截取固定区域),所以输入格式应该是没有问题。
然后debug到报错的concat处,发现俩shape都一致且看不出和35或36有啥关系:
在这里插入图片描述
找了一上午的问题,最终发现输入应该要resize成模型所需要的大小才行:
在这里插入图片描述
用习惯了官方写好的推理代码,其实有很多细节还是要注意的。

<think>好的,用户现在遇到了ModuleNotFoundError: No module named 'yolov5'的问题。我之已经介绍过如何调用训练好的YOLOv5模型,可能用户按照步骤操作遇到了这个问题。我需要分析可能的原因,并给出解决方案。 首先,用户可能没有正确安装或导入YOLOv5的代码库。YOLOv5并不是一个可以通过pip直接安装的包,而是需要从GitHub仓库克隆到本地。用户在另一个项目中使用,如果直接复制模型文件,但没有正确设置YOLOv5的路径,就会导致找不到模块的错误。 接下来,用户可能尝试了直接导入yolov5模块,但系统路径中没有包含YOLOv5的目录。这候需要将YOLOv5的路径添加到sys.path中,或者使用相对路径导入。 另外,用户可能使用了PyTorch Hub的方法,但可能没有正确指定路径或环境问题导致加载失败。需要检查路径是否正确,或者是否有网络问题导致无法动态加载代码库。 还要考虑环境依赖的问题,用户是否安装了所有必要的依赖库,比如torch、matplotlib等,这些在YOLOv5的requirements.txt中都有列出,可能需要用户安装。 可能的解决方案包括:克隆YOLOv5仓库到项目目录,添加路径到系统路径,使用PyTorch Hub动态加载,或者通过pip安装yolov5的包(如果有的话)。另外,检查代码中的导入语句是否正确,是否有拼写错误。 需要分步骤详细说明每个解决方法,并给出具体的代码示例,比如如何克隆仓库,如何添加路径,如何使用PyTorch Hub等。同提醒用户注意路径的正确性,以及依赖库的安装。 还要考虑用户可能的环境差异,比如是否使用虚拟环境,路径是否绝对或相对,是否有权限问题等。需要给出常见问题的解决建议,比如路径问题、版本兼容性等。 最后,总结问题原因,强调正确导入YOLOv5模块的方法,并推荐使用PyTorch Hub的方法以避免路径问题,同确保依赖项正确安装。</think>--- 遇到 `ModuleNotFoundError: No module named 'yolov5'` 错误,通常是因为新项目中未正确引入 YOLOv5 的代码库或路径配置问题。以下是详细解决方案: --- ### **1. 问题原因** - YOLOv5 不是一个通过 `pip` 直接安装的 Python 包,而是一个需要从 GitHub 克隆的代码仓库。 - 在新项目中,若未正确设置 YOLOv5 的代码路径或未安装相关依赖,会导致无法找到 `yolov5` 模块。 --- ### **2. 解决方案** #### **(1) 方法一:克隆 YOLOv5 仓库到项目目录** 在新项目的根目录下克隆官方仓库,确保代码路径正确: ```bash # 进入项目目录 cd your_project # 克隆 YOLOv5 官方仓库(确保有 git) git clone https://github.com/ultralytics/yolov5.git # 将克隆的代码目录重命名为 yolov5(可选,保持路径一致) mv yolov5 yolov5 ``` **代码中手动添加路径:** ```python import sys import os # 添加 yolov5 目录到 Python 路径(假设 yolov5 文件夹在项目根目录) sys.path.append(os.path.abspath("yolov5")) # 确保路径正确 # 现在可以导入 YOLOv5 模块 from yolov5.utils.general import non_max_suppression ``` --- #### **(2) 方法二:使用 PyTorch Hub 动态加载(推荐)** 无需克隆仓库,直接通过 PyTorch Hub 加载 YOLOv5 接口: ```python import torch # 自动从 GitHub 下载 YOLOv5 代码并加载模型 model = torch.hub.load( repo_or_dir='ultralytics/yolov5', # 官方仓库地址 model='custom', # 使用自定义模型 path='path/to/your/best.pt', # 模型文件路径 source='github', # 从 GitHub 加载代码 force_reload=True # 强制更新代码(可选) ) # 直接推理 results = model("test.jpg") results.show() ``` --- #### **(3) 方法三:将 YOLOv5 安装为本地包(可选)** 在 YOLOv5 仓库目录中执行安装命令,使其成为本地可导入的包: ```bash # 进入克隆的 yolov5 目录 cd yolov5 # 以可编辑模式安装(开发模式) pip install -e . ``` 安装后,可直接在新项目中导入: ```python from yolov5.utils.general import non_max_suppression ``` --- ### **3. 验证依赖项** 确保安装了 YOLOv5 所需的依赖库: ```bash # 进入 YOLOv5 代码目录 cd yolov5 # 安装依赖(需提克隆仓库) pip install -r requirements.txt ``` 关键依赖包括: - `torch` >= 1.7.0 - `opencv-python` - `numpy` - `matplotlib` -- ### **4. 项目结构示例** ``` your_project/ ├── yolov5/ # 克隆的 YOLOv5 代码目录 │ ├── models/ │ ├── utils/ │ └── ... ├── models/ │ └── best.pt # 你的训练模型 └── inference.py # 调用模型的脚本 ``` --- ### **5. 常见错误排查** #### **(1) 路径错误** - **现象**:`sys.path.append()` 添加的路径与实际路径不一致。 - **解决**:使用绝对路径或检查文件结构: ```python import os print(os.path.abspath("yolov5")) # 确认路径是否正确 ``` #### **(2) PyTorch Hub 下载失败** - **现象**:因网络问题无法从 GitHub 加载代码。 - **解决**: - 配置代理(如有需要)。 - 手动克隆仓库后指定本地路径: ```python model = torch.hub.load( repo_or_dir='path/to/local/yolov5', # 本地路径 model='custom', path='best.pt', source='local' # 从本地加载 ) ``` #### **(3) 版本冲突** - **现象**:训练和推理环境的 PyTorchYOLOv5 代码版本不一致。 - **解决**: ```bash # 查看 YOLOv5 官方要求的版本 cat yolov5/requirements.txt # 更新 PyTorch pip install torch==1.10.0+cu113 -f https://download.pytorch.org/whl/torch_stable.html ``` --- ### **6. 总结** - **优先推荐 PyTorch Hub**:无需管理代码路径,适合快速部署。 - **强制路径添加**:若需自定义修改 YOLOv5 代码(如修改后处理逻辑),可克隆仓库并手动引入。 - **依赖一致性**:确保训练和推理环境的库版本一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值