CPU环境下运行基于yolov5的行人检测代码(pedestrain detection based on yolov5 in CPU)

发布时间 2023-07-19 16:31:56作者: ttweixiao9999

最近在捣腾基于 yolov5 的行人检测代码,在 github 上下载一个案例之后因为没用 GPU 运行一直碰壁,出现了许多 bug,现在整理了下 error 和解决方法,成功调试出了基于 yolov5 的行人检测代码,分享给大家~

1. 运行环境:window10,CPU,Visual Studio Code

2. 项目路径:dyh 的 unbox_yolov5_deepsort_counting  yolov5 deepsort 行人 车辆 跟踪 检测 计数 项目

3. 环境配置

(1)下载代码文件 https://github.com/dyh/unbox_yolov5_deepsort_counting.git

(2)使用 anaconda 创建虚拟环境:conda create -n yolov5_pedestrain python=3.7  (注意,这里不要创建 python3.6,因为 python3.6 在安装 opencv 或者用 vscode 进行调试时会遇到很多问题。)

(3)进入虚拟环境:conda activate yolov5_pedestrain

(4)在 anaconda 环境下通过切换磁盘命令和 cd 命令进入到 unbox_yolov5_deepsort_counting 目录下 (例如,我的文件在 E盘 python_project 文件夹下的进入方式)

(5)复制生成一个 requirements2.txt 文件,删除其中的 pkg-resources 这一行,再运行 pip install -r requirements2.txt  (这里是为了解决安装 pkg-resources 出现的 error)

 (6)安装 pytorch,使用命令:pip install torch torchvision torchaudio 

至此,环境的安装就此完成。

4. 运行代码文件 main.py

可以直接在 anaconda 所在的环境下直接输入 python main.py 运行代码文件,为了方便调试,我是用 vscode 打开项目,在 vscode 环境下进行运行调试,这里读者可以自行选择运行方式。我在运行过程中遇到了以下 error,并附上相应的解决方案。

(1)error1: 

Exception has occurred: TypeError

load() missing 1 required positional argument: 'Loader'

错误原因:pyyaml 版本不匹配

解决方法:修改 pyyaml 到合适的版本,即在 anaconda 终端输入 pip install pyyaml==5.4.1

参考文章https://github.com/HowieMa/DeepSORT_YOLOv5_Pytorch/issues/11

(2)error2:

Exception has occurred: RuntimeError
"slow_conv2d_cpu" not implemented for 'Half'

错误原因:cuda 支持 Half 半精度类型,而 CPU 环境下则不支持 Half 精度

解决方法:把文件中运行时会出现 Half 的地方改成 float,即把

detector.py 文件中的 model.half() 改成 model.float() ;img = img.half() 改成 img = img.float() ;

utils\general.py 文件中的 x['model'].half()   改成  x['model'].float() ;

参考文章https://github.com/dyh/unbox_yolov5_deepsort_counting/issues/40

(3)error3:

Exception has occurred: AttributeError
'Upsample' object has no attribute 'recompute_scale_factor'

错误原因:torch 版本过高带来的错误

解决方法:注释掉 Upsample 中的 recompute_scale_factor 属性,即找到 anaconda 的安装目录,进入到 yolov5_pedestrain 环境文件下,找到 torch 的安装包文件,再找到 Upsample 文件,最后把 recompute_scale_factor 属性注释。如我是把 anaconda 安装在 D盘的 software 文件夹下的,那我的 Upsample 路径就是在 D:\software\anaconda3\envs\yolov5_pedestrain\Lib\site-packages\torch\nn\modules\upsampling.py 下,打开该文件,我在157行找到该属性,然后用 # 进行注释,修改如下(注意括号要到下一行,不然会出现语法错误):

参考文章https://github.com/ultralytics/yolov5/issues/6948

解决完上面的问题后,再次运行 main.py 代码,就可以顺利运行,之后就可以看到行人检测的结果了:

如果不是使用 vscode 或者 pycharm 开发环境,直接在 anaconda 中用命令行运行,结果如下:

至此,在 CPU 环境下顺利跑通基于 yolov5 的行人检测代码过程到此结束,希望能帮助到大家~