我正在尝试按照这个教程制作一个交通标志分类代码。我已经训练了模型,但在尝试将pickle文件(训练好的模型)导入到代码中时,在model=pickle.load(hel)(第21行)处遇到了错误,我该如何解决这个问题?
注意:我已经安装了tensorflow和pickle。
控制台消息
2022-03-19 11:53:44.525832: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cudart64_110.dll'; dlerror: 未找到cudart64_110.dll2022-03-19 11:53:44.533297: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] 如果您的机器上没有设置GPU,请忽略上述cudart dlerror。2022-03-19 11:53:54.072135: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cudart64_110.dll'; dlerror: 未找到cudart64_110.dll2022-03-19 11:53:54.084145: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cublas64_11.dll'; dlerror: 未找到cublas64_11.dll2022-03-19 11:53:54.099108: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cublasLt64_11.dll'; dlerror: 未找到cublasLt64_11.dll2022-03-19 11:53:54.110572: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cufft64_10.dll'; dlerror: 未找到cufft64_10.dll2022-03-19 11:53:54.120208: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'curand64_10.dll'; dlerror: 未找到curand64_10.dll2022-03-19 11:53:54.130490: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cusolver64_11.dll'; dlerror: 未找到cusolver64_11.dll2022-03-19 11:53:54.140943: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cusparse64_11.dll'; dlerror: 未找到cusparse64_11.dll2022-03-19 11:53:54.150708: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cudnn64_8.dll'; dlerror: 未找到cudnn64_8.dll2022-03-19 11:53:54.157514: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1850] 无法打开一些GPU库。如果您想使用GPU,请确保上述提到的缺失库已正确安装。请按照https://www.tensorflow.org/install/gpu上的指南下载并设置您平台所需的库。跳过注册GPU设备...2022-03-19 11:53:54.175013: I tensorflow/core/platform/cpu_feature_guard.cc:151] 此TensorFlow二进制文件已使用oneAPI Deep Neural Network Library (oneDNN)优化,以在性能关键操作中使用以下CPU指令:AVX AVX2要在其他操作中启用它们,请使用适当的编译器标志重新构建TensorFlow。
代码:
import numpy as npimport cv2import pickle frameWidth= 640 frameHeight = 480brightness = 180threshold = 0.90 font = cv2.FONT_HERSHEY_SIMPLEXcap = cv2.VideoCapture(0)cap.set(3, frameWidth)cap.set(4, frameHeight)cap.set(10, brightness)# 导入训练好的模型hel=open("model_trained.p","rb") ## rb = 以字节读取模式model=pickle.load(hel) def grayscale(img): img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) return imgdef equalize(img): img =cv2.equalizeHist(img) return imgdef preprocessing(img): img = grayscale(img) img = equalize(img) img = img/255 return imgdef getCalssName(classNo): if classNo == 0: return '限速20公里/小时' elif classNo == 1: return '限速30公里/小时' elif classNo == 2: return '限速50公里/小时' elif classNo == 3: return '限速60公里/小时' elif classNo == 4: return '限速70公里/小时' elif classNo == 5: return '限速80公里/小时' elif classNo == 6: return '结束限速80公里/小时' elif classNo == 7: return '限速100公里/小时' elif classNo == 8: return '限速120公里/小时' elif classNo == 9: return '禁止超车' elif classNo == 10: return '禁止3.5吨以上车辆超车' elif classNo == 11: return '下一交叉路口让行' elif classNo == 12: return '优先道路' elif classNo == 13: return '让行' elif classNo == 14: return '停止' elif classNo == 15: return '禁止车辆通行' elif classNo == 16: return '禁止3.5吨以上车辆通行' elif classNo == 17: return '禁止进入' elif classNo == 18: return '一般警告' elif classNo == 19: return '左侧危险弯道' elif classNo == 20: return '右侧危险弯道' elif classNo == 21: return '双弯道' elif classNo == 22: return '颠簸路面' elif classNo == 23: return '湿滑路面' elif classNo == 24: return '右侧道路变窄' elif classNo == 25: return '道路施工' elif classNo == 26: return '交通信号灯' elif classNo == 27: return '行人' elif classNo == 28: return '儿童过马路' elif classNo == 29: return '自行车过马路' elif classNo == 30: return '小心冰雪' elif classNo == 31: return '野生动物过马路' elif classNo == 32: return '结束所有限速和超车限制' elif classNo == 33: return '前方右转' elif classNo == 34: return '前方左转' elif classNo == 35: return '直行' elif classNo == 36: return '直行或右转' elif classNo == 37: return '直行或左转' elif classNo == 38: return '靠右行驶' elif classNo == 39: return '靠左行驶' elif classNo == 40: return '必须进入环岛' elif classNo == 41: return '结束禁止超车' elif classNo == 42: return '结束禁止3.5吨以上车辆超车' while True: success, imgOrignal = cap.read() img = np.asarray(imgOrignal) img = cv2.resize(img, (32, 32)) img = preprocessing(img) cv2.imshow("Processed Image", img) img = img.reshape(1, 32, 32, 1) cv2.putText(imgOrignal, "类别: " , (20, 35), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA) cv2.putText(imgOrignal, "概率: ", (20, 75), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA) predictions = model.predict(img) classIndex = model.predict_classes(img) probabilityValue =np.amax(predictions) if probabilityValue > threshold: #print(getCalssName(classIndex)) cv2.putText(imgOrignal,str(classIndex)+" "+str(getCalssName(classIndex)), (120, 35), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA) cv2.putText(imgOrignal, str(round(probabilityValue*100,2) )+"%", (180, 75), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA) cv2.imshow("结果", imgOrignal) if cv2.waitKey(1) and 0xFF == ord('q'): break
回答:
您需要安装兼容的cuda和cudnn版本。请参考这个来了解构建配置。
或者
如果您在使用GPU,以下代码可以抑制警告。
# 这只是禁用警告,并不利用AVX来加速运行import osos.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
如果您使用的是Unix系统,尝试通过设置export TF_CPP_MIN_LOG_LEVEL=3
来禁用这些警告。谢谢!