YOLOv5+DeepSORT目标识别跟踪项目
运行报错:RuntimeError: "slow_conv2d_cpu" not implemented for 'Half'
网上搜到是无卡运行不能用GPU函数的原因 但是找不到half()函数 不知如何修改
完整报错如下:
(venv) C:\Users\86183\Desktop\Yolov5-Deepsort-main\Yolov5-Deepsort-main>python demo.py
fps: 25
Traceback (most recent call last):
File "C:\Users\86183\Desktop\Yolov5-Deepsort-main\Yolov5-Deepsort-main\demo.py", line 55, in
main()
File "C:\Users\86183\Desktop\Yolov5-Deepsort-main\Yolov5-Deepsort-main\demo.py", line 27, in main
result = det.feedCap(im)
^^^^^^^^^^^^^^^
File "C:\Users\86183\Desktop\Yolov5-Deepsort-main\Yolov5-Deepsort-main\utils\BaseDetector.py", line 35, in feedCap
im, faces, face_bboxes = update_tracker(self, im)
^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\86183\Desktop\Yolov5-Deepsort-main\Yolov5-Deepsort-main\tracker.py", line 40, in update_tracker
_, bboxes = target_detector.detect(image)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\86183\Desktop\Yolov5-Deepsort-main\Yolov5-Deepsort-main\AIDetector_pytorch.py", line 47, in detect
pred = self.m(img, augment=False)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\86183\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\86183\Desktop\Yolov5-Deepsort-main\Yolov5-Deepsort-main\models\yolo.py", line 117, in forward
return self.forward_once(x, profile) # single-scale inference, train
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\86183\Desktop\Yolov5-Deepsort-main\Yolov5-Deepsort-main\models\yolo.py", line 148, in forward_once
x = m(x) # run
^^^^
File "C:\Users\86183\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\86183\Desktop\Yolov5-Deepsort-main\Yolov5-Deepsort-main\models\common.py", line 171, in forward
return self.conv(torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\86183\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\86183\Desktop\Yolov5-Deepsort-main\Yolov5-Deepsort-main\models\common.py", line 45, in fuseforward
return self.act(self.conv(x))
^^^^^^^^^^^^
File "C:\Users\86183\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\86183\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\torch\nn\modules\conv.py", line 463, in forward
return self._conv_forward(input, self.weight, self.bias)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\86183\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\torch\nn\modules\conv.py", line 459, in _conv_forward
return F.conv2d(input, weight, bias, self.stride,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: "slow_conv2d_cpu" not implemented for 'Half'
先看看GPU支持半精度浮点数吗,在修改下AIDetector_pytorch.py文件的数据类型:img = img.float()
说明你的CPU 不支持,看看代码有的地方是不是用了half() 或者 to(torch.float16)。如果没有这样额半精度,可以试试吧模型转换为全精度模式没在加载模型后添加
model = model.float()
应该就可以运行了,但是会慢一点,。
这个错误可能是由于在 GPU 上运行时,TensorFlow 没有正确地转换位于半精度浮点数(Float16)的权重参数,导致出现运行时错误。为了解决这个问题,可以尝试以下方法:
确认您的 TensorFlow 版本是否正确。在 TensorFlow 的旧版本中,直接使用半精度浮点数会导致错误。建议使用 TensorFlow 2.1 或更高版本,以避免此问题。
尝试在模型构建的过程中使用 tf.keras.mixed_precision
模块中的 mixed_precision.experimental.set_policy()
函数,以启用自动混合精度。这将确保在 GPU 上运行时,TensorFlow 会自动使用 Float16 的精度,而在 CPU 上运行时则默认使用 Float32 的精度。例如:
tf.keras.mixed_precision.experimental.set_policy('mixed_float16')
import tensorflow as tf
# 加载/训练模型
model = tf.keras.models.load_model('my_model.h5')
model = tf.keras.mixed_precision.experimental.cast_to_float32(model)
# 在使用与权重应用相关的函数时,将数据转换为半精度浮点数
inputs = tf.cast(inputs, tf.float16)
希望这些信息能够对您有所帮助。
根据错误提示,问题似乎是出现在 PyTorch 中。"slow_conv2d_cpu" not implemented for 'Half' 的报错说明某些操作只支持 float32 或者 float64 类型的数据,而您当前代码中使用了 half 数据类型,导致了这个错误。
为了解决这个问题,您可以尝试更换数据类型或者调整模型设置。具体来说,您可以参照以下步骤进行修改:
更换数据类型:在代码中找到使用 half 数据类型的部分,将其改为 float32 或者 float64,例如:
x = x.to(dtype=torch.float32)
调整模型设置:在 YOLOv5+DeepSORT 模型中,可能存在一些只能在 float32 或者 float64 数据类型下使用的层,例如 BN 层等。您可以修改模型架构,将这些层替换成适合 half 数据类型的层。
另外,如果您的硬件支持 GPU 加速,建议您尝试使用 GPU 运行代码以提高运行效率和减少错误发生概率。
weight_dtype = torch.float32
if args.mixed_precision == "fp16":
weight_dtype = torch.float16
elif args.mixed_precision == "bf16":
weight_dtype = torch.bfloat16
报错信息提示来看可能是模型的数据类型不匹配导致的,将模型的数据类型修改为支持GPU运行的float类型试试