使用u版YOLOv5遇到的Bug

1.使用摄像头进行检测时,遇到以下问题。

在这里插入图片描述
错误原因
根据提示在代码中找出错误处,在detect.py中的118行
cv2.imshow(p,im0)
通过断点调试,其中的p的类型为PosixPath,比较v3中相同代码处此处的p类型为str
解决方案
在这行代码前添加:
p=str(p)#将其转换为str类型
最先找到原因也是在网上搜到相关博客链接
在这里插入图片描述

2.ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type

参考博客
下面内容均来自该博客,只是害怕原博主删掉博客,所以copy过来做个记录
(1)在~/.bashrc文件中增加一行命令,操作步骤为:

cd ~
sudo gedit .bashrc或者使用sudo vim .bashrc

部分处理方法是在.bashrc文件中把source /opt/ros/kinetic/setup.bash添加#符号注释掉,但这样势必会造成再次使用ROS时又需要把注释#去掉。
因此查找相关的材料可以在打开的.bashrc文件中的最后增加如下一行:

export PYTHONPATH="/home/userx/anaconda3/lib/python3.5/site-packages:$PYTHONPATH"

注意:上面的路径中的userx需要换成你自己的用户名
PYTHONPATH后的/home/userx/anaconda3路径内容需要根据自己的anaconda安装路径来来进行更改,大多数默认的安装目录都是以上这种情况,只需要更改/userx就行。但是最后得出的结果可能会和之前提到的那种方法产生一样,即运行ROS时需要注释掉这行代码,运行非ROS时需要加上这行代码。而接下来的第二种方法会在python文件中进行处理。
(2)因为是受ROS安装的影响,ROS安装之后会在python pyth中加入:

'/opt/ros/kinetic/lib/python2.7/dist-packages'

而为了解决此问题,可以在需要运行的python文件(即使用import cv2的python文件)中,添加以下代码:

import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')

通过这两行代码可以把ROS写入path中的路径给清除,进行可以import anaconda中的cv2包。

注:通过此方法再次import cv2时,问题得以解决,不再报错,但此方法并不一定可以保证在所有的情况下都适用,但还是值得一试滴。

3.一直不明白YOLO中的letterbox?

结合这篇文章中对letter box的理解
及这篇文章
letterbox就是在保持纵横比的前提下对图像做resize,先resize然后按需要在周围pad上0像素。

4.TypeError:can’t convert cuda:0 device type tensor to numpy.

错误如图所示
错误如图所示
由图中的错误提示,找到tensor.py第630行的代码return self.numpy()将其改为return self.cpu().numpy()
即把CUDA tensor格式的数据改成numpy时,需要先将其转换成cpu float-tensor随后再转到numpy格式。numpy格式不能读取CUDA tensor需要将它转换为CPU tensor。

5.YOLOv5训练在Pycharm调试时会自动退出

出现的错误如下所示

Exception ignored in: <function Image.__del__ at 0x7f394ee224d0>
Traceback (most recent call last):
  File "/home/ai2009/anaconda3/envs/yolov5/lib/python3.7/tkinter/__init__.py", line 3507, in __del__
    self.tk.call('image', 'delete', self.name)
RuntimeError: main thread is not in main loop
Tcl_AsyncDelete: async handler deleted by the wrong thread

Process finished with exit code 134 (interrupted by signal 6: SIGABRT)

通过百度,这可能与matplotlib、tkinter绘图相关,可能产生了多线程冲突等问题。解决方法,在YOLOv5的plot.py中,将

import matplotlib
import matplotlib.pyplot as plt
#改为
import matplotlib
matplotlib.use('Agg')#pycharm调试时添加这行代码就可以了,在终端训练时可将
#其注释掉,不会有错,最好将其注释掉,保持代码原样。
import matplotlib.pyplot as plt

另外,在解决这问题的过程中,也试着修改了batchsize, 但发现batchsize改小后,其调试时一直处于collecting data状态,无法继续调试。经过询问大佬,大佬说可以将numworker改为0(yolov5中默认为8,即参数workers)
在这里插入图片描述这与pytorch的dataloader相关,可自行查询相关资料。
这篇博客中给出了相关的参考文章,如图所示
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Yolov5模型的Flask部署可以通过以下步骤实现。首先,需要使用torch.hub.load函数加载自定义的Yolov5模型。在加载模型时,需要设置source为'local',并指定模型的路径。例如,如果模型yolov5s.pt,可以使用以下代码加载模型: ```python model = torch.hub.load("yolo", "custom", path="models/yolov5s.pt", source='local') ``` 接下来,可以使用Flask框架创建一个API接口,用于接收图片并进行目标检测。可以参考引用\[2\]中提供的Flask接口代码。在接口代码中,可以调用Yolov5模型的detect函数对上传的图片进行目标检测。 最后,可以使用curl命令对API接口进行测试。可以使用以下命令上传一张图片并获取检测结果: ```bash curl -X POST -F image=@images/1_Handshaking_Handshaking_1_134.jpg http://127.0.0.1:5000/v1 ``` 这样就可以通过Flask部署Yolov5模型,并使用API接口进行目标检测了。 #### 引用[.reference_title] - *1* *3* [基于flask和网页端部署yolo自训练模型](https://blog.csdn.net/weixin_44510615/article/details/126185437)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [yolov5的简单应用:训练模型对接到flask接口使用](https://blog.csdn.net/zyz528zyz/article/details/125891197)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值