在语义分割模型训练时,遇到出现TypeError: unsupported operand type(s) for /: ‘NoneType‘ and ‘float‘
File "C:\Users\Lenovo\Desktop\BsiNet\BsiNet-torch-main\dataset.py", line 91, in __getitem__
dist = load_distance(os.path.join(self.dir,img_file_name+'.tif'), self.distance_type)
File "C:\Users\Lenovo\Desktop\BsiNet\BsiNet-torch-main\dataset.py", line 145, in load_distance
dist = dist/255.
TypeError: unsupported operand type(s) for /: 'NoneType' and 'float'
一旦train就遇到上面的情况,一个epoch都运行不了。就算debug,也只能运行几个epoch就报错。从提示的信息来看,是读取文件失败,尝试了多次读取
原程序:
dist= cv2.imread(path.replace("image", "dist_contour_tif").replace("tif", "tif"), 0)
dist = dist / 255.
尝试多次读取:
while True:
try:
dist= cv2.imread(path.replace("image", "dist_contour_tif").replace("tif", "tif"), 0)
dist = dist / 255.
except Exception as e:
print("=====================LR_img read image error=======================")
print(e)
# print("index:", index)
print("===================================================================")
else:
break
但是查询依然报错,所以尝试用PIL来读取图像文件
from PIL import Image
import numpy as np
if distance_type == "dist_contour_tif":
# 使用PIL库读取图像
img = Image.open(path.replace("image", "dist_contour_tif").replace("tif", "tif"))
# 将图像转换为NumPy数组
dist = np.array(img)
# 归一化操作
dist = dist / 255.0
完美解决!