python系列踩坑指南

python库 踩坑指南

一 opencv篇:

  • 问题1:使用cv2读取mp4视频(无论h265或h264编码都有这种情况)时,
    h264编码的视频偶尔出现ret,img = videocap.read() 读不到数据的情况;
    h265编码的视频则可能出现警告:hevc @ 0x556678a95800 Could not find ref with POC
  • 原因:视频的帧数可能出现非整数的情况,不能使用设置从指定帧读取:
cap.set(cv2.CAP_PROP_POS_FRAMES, start_frame)	# 设置初始帧

在这里插入图片描述

  • Solution:因此尽量从头开始读,参考:
current_frame = 0
while cap.isOpened():
    ret, frame = cap.read()
    if ret:
        if current_frame >= start_frame:
            out.write(frame)
        current_frame += 1
        if current_frame >= end_frame:
            break
    else:
        break
  • 问题2:在pycharm中使用import cv2时,cv2.xxx无法自动补全,无法进入源码;
  • 原因:opencv-python最新的4.7版本有bug
  • Solution:进入cv2的源码位置,将二进制文件(cv2.abi3.so或cv2.pyd)从…/site-packages/cv2下复制一份,粘贴到上级目录…/site-packages
  • 参考:https://zhuanlan.zhihu.com/p/597733611
    在这里插入图片描述windows为 cv2.pyd在这里插入图片描述
    问题3: opencv-python 默认使用的是CPU运行,想要使用GPU加速。
    Solution: 官方下的安装包虽然有GPU的dll,但并没有CUDA跟OpenCL的支持的,你需要自己重新编译一次OpenCV
    Ref: https://zhuanlan.zhihu.com/p/345439669

二 模型推理篇

  • 问题:使用onnx模型推理时,可能会发现使用的是CUP进行推理;
  • 报错内容:安装后运行报错,Fail to load libonnxruntime_providers_cuda.so with error: libcurand.so.10:cannot open shared object file: No such file or directory

正常流程:

  1. 完全卸载,重新安装
pip uninstall onnxruntime
pip install onnxruntime-gpu==1.16.3
  1. 确认GPU是否可用
print(onnxruntime.get_device())				# 输出 GPU 不一定成功
ort_session = onnxruntime.InferenceSession("model_name.onnx",providers=['CUDAExecutionProvider'])
print(ort_session.get_providers())			# 输出:['CUDAExecutionProvider', 'CPUExecutionProvider']表示成功
  • 上述流程失败,需要做相关问题排查:
  1. CUDA版本:请确保您的CUDA版本与onnxruntime-gpu版本兼容(详见:https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html)
  2. 环境变量:这是让onnxruntime找到cuda的关键一步:
# 设置PATH、LD_LIBRARY_PATH,缺什么设置什么
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

注意:/usr/local/cuda/lib64 需要替换成自己的路径,查找自己的路径方法:

sudo find / -name libcurand.so.10

实测发现:

将上述命令添加到~/.bashrc文件中,然后使用source ~/.bashrc命令来更新环境变量后,只能在当前终端中有效;

后调整为在pycharm中设置该环境变量,具体步骤为:(参考:https://blog.youkuaiyun.com/weixin_48962061/article/details/119151486)

这里我使用且成功的方式为,在运行—编辑配置-环境变量中添加

Name为LD_LIBRARY_PATH, Value为/usr/local/cuda/lib64:$LD_LIBRARY_PATH
至此,基本解决无法在pycharm中和终端中使用GPU推理模型的问题

三、安装混合精度训练工具apex

网上尝试的办法可能会报错:

ModuleNotFoundError: No module named 'packaging'
  error: subprocess-exited-with-error

这里参考流程:

git clone https://github.com/NVIDIA/apex.git
cd apex
pip install -v --disable-pip-version-check --no-cache-dir --no-build-isolation --config-settings “--global-option=--cpp_ext” --config-settings “--global-option=--cuda_ext” ./

Ref:https://github.com/InternLM/InternLM/issues/87

四、子目录导入 python包 异常报错

  • 问题描述:
    在这里插入图片描述
    解决方案参考:
    推荐写法:
import os, sys
from pathlib import Path
mmaction_dir = Path(__file__).parents[2].__str__()		# 获取主目录绝对路径
if mmaction_dir not in sys.path:
	sys.path.insert(0, mmaction_dir)

  1. 子目录代码中,使用相对导入 来导入mmaction模块。
假设convert.py位于mmaction目录的子目录中。如果mmaction是一个包,你需要在mmaction目录下有一个__init__.py文件
from .. import mmaction			# 在convert.py中
  1. 修改PYTHONPATH环境变量
export PYTHONPATH="/path/to/mmaction:$PYTHONPATH"
python benchmark/python/convert.py
  1. 使用sys.path动态添加路径
import sys
sys.path.append('../..')  # 根据实际目录结构调整路径

import mmaction
  1. 使用setup.py和install
    如果你的项目是一个完整的Python包,你可以创建一个setup.py文件来定义你的包,并使用pip来安装它。这样,Python就会自动处理导入问题。setup.py文件可能看起来像这样:
    在这里插入图片描述
  2. 检查__init__.py文件
    确保mmaction目录和所有子目录中都有__init__.py文件,这样Python才会将它们视为包。

!! MMCV篇

安装报错,原因主要是版本不匹配。(如No module named ‘mmcv._ext’)
参考官方:https://gitcode.net/mirrors/open-mmlab/mmcv/-/blob/master/README_zh-CN.md

、、

shell参考:
https://blog.youkuaiyun.com/professor_tao/article/details/125947389
https://blog.youkuaiyun.com/m0_37931718/article/details/98206877
shell编程中文手册??

**yaml参考:**https://blog.youkuaiyun.com/star_xxzeng/article/details/115030707
**log参考:**https://blog.youkuaiyun.com/u012206617/article/details/87870479

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值