1、引言
时间飞快,技术猛进,YOLOv5从2020年诞生之后,到2022年已经发展到了6.1的版本。YOLOv6和YOLOv7都已经开源,不知道小伙伴们是否有尝试?
2、问题描述及解决方法
我最近在使用YOLOv5-6.1版本时,遇到了两个BUG,BUG报告的位置都是位于虚拟环境中的依赖包里。以下是相关描述及问题结局方法。
AQ、在使用pip安装依赖包或使用detect.py时,出现了以下报错:
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x98 in position 1027: illegal multibyte sequence
AA、解决方法:
经过反复的debug,发现问题出现在configparser.py的第696行,没有定义encoding,所以,在696行处的open函数中加入参数“encoding=‘UTF-8’”即可。加完之后,第696行处的代码是:
with open(filename, encoding='UTF-8') as fp:
BQ、 运行detect.py时,出现错误:
Upsample‘ object has no attribute ‘recompute_scale_factor‘
BA、解决方法:
按照报错提示,从末端向前寻找bug,问题出现在usampling.py的第152-153行。修改后的代码为:
def forward(self, input: Tensor) -> Tensor:return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners)
CQ、运行detect.py时没有报错,正常产生图片,但是图片中并未有目标检测框。
CA、解决办法
我在帮粉丝进行YOLOv5环境搭建时遇到了这个问题,当时的GPU为N卡1660TI,这个显卡性能还行,但是初次接触时未能找到一个合适的CUDA和Pytorch搭配的版本。最后得出了CUDA使用10.2版本最为稳妥(解决方法一:更换CUDA和Pytorch的版本)。 这位粉丝当时的操作系统是WIndows 11,所以可能和系统也有一定的关系(解决方法二:没什么要求的话还是继续使用Wiodows 10 系统)当时正逢YOLOv5版本更新迭代,所以可能和YOLOv5版本也有一定的关系。(解决方法三:更换YOLOv5源码版本,或者修改部分代码)接下来,我将叙述如何修改detect.py的代码:首先用编辑器打开YOLOv5项目中的detect.py文件,如果版本是YOLOv5-master,请定位到96行,如下图所示:
cudnn.benchmark = True
如此一来,之前的旧问题就得已解决,但是整个推理的时间会变长,所以建议各位在方法一和方法二中进行尝试。
3、感悟
开源代码能用即可,重在自我的学习和提升,没有必要频繁的git,一旦发现当前git下来的代码能跑,请及时备份!还有安装在base环境下的CUDA或者是Pytorch也没有必要频繁更新,最近看到好多朋友盲目更新YOLOv5版本、CUDA版本、Pytorch版本而踩坑。最后,欢迎大家在评论区友好发言、讨论。