CPU环境下运行基于yolov5的行人检测代码(pedestrain detection based on yolov5 in CPU)
最近在捣腾基于 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 的行人检测代码过程到此结束,希望能帮助到大家~