YOLOv5 detect.py 运行问题解决总结

参考资料
  1. B站小土堆YOLOv5
    https://www.bilibili.com/video/BV1tf4y1t7ru/?
  2. YOLOv5开源项目(我下载的是master,因为v5运行出问题)
    https://github.com/ultralytics/yolov5
  3. ipykernel_launcher.py: error
    https://blog.csdn.net/weixin_41693877/article/details/109549914
  4. NotImplementedError: cannot instantiate ‘PosixPath’ on your system
    https://zhuanlan.zhihu.com/p/578487709
环境

pytorch (CPU) + jupyter notebook

问题

1. 报错:NameError: name ‘file’ is not defined

原始代码:

FILE = Path(__file__).resolve() 
ROOT = FILE.parents[0] # YOLOv5 root directory

修改代码:

ROOT = Path().resolve() # YOLOv5 root directory

原因分析:在jupyter notebook,__file__变量一般未被定义,所以使用它会报错。修改代码使用Path().resolve()获取当前工作目录的绝对路径,适用于jupyter notebook环境。

2. 报错:ipykernel_launcher.py: error
原始代码:

def parse_opt:
# ...
opt = parser.parse_args() 
opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1 # expand 
print_args(vars(opt)) 
return opt

修改代码:

#opt = parser.parse_args()
opt = parser.parse_known_args()[0]
opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1  # expand
print_args(vars(opt))
return opt

原因分析:使用argparse解析命令行参数,parser.parse_args()会尝试解析jupyter的一些特殊参数,导致与kernel通信的参数无法正确解析。用parser.parse_known_args()[0]替代parser.parse_args(),解析命令行参数时,只选择已知参数(保存在[0]列表),避免与kernel通信时受未知参数干扰。

3. 报错:NotImplementedError: cannot instantiate ‘PosixPath’ on your system
添加代码:

import pathlib
temp = pathlib.PosixPath
pathlib.PosixPath = pathlib.WindowsPath

原因分析:在代码中使用了pathlib模块,而在windows上posixpath与windowspath有一些不同之处,导致某些情况下无法正确实例化。将posixpath替换成windowspath,改变pathlib模块的默认行为,使用windows系统的路径处理方式,保证跨平台兼容性,解决报错。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值