我一直在代码中获取不受支持的操作数类型'str'和'str'。我创建了一个数据集,用于校园内人行道的语义分割。我想训练该数据集,但是在尝试从带有标签的图像中获取标签以将它们与功能为'get_y_fn'的输入图像映射时出现错误。我想用Google Colab中的fastai库训练此数据集
%reload_ext autoreload
%autoreload 2
%matplotlib inline
import fastai
from fastai import *
from fastai.vision import *
import pathlib
import os
from PIL import Image
import matplotlib.pyplot as plt
fnames = get_image_files(path_img)
lbl_names = get_image_files(path_lbl)
get_y_fn = lambda x: path_lbl/f'{x.stem}.png'
data = (SegmentationItemList.from_folder(path_img)
.random_split_by_pct()
.label_from_func(get_y_fn,classes=codes)
.transform(get_transforms(),size=128,tfm_y=True)
.databunch(bs=4))
TypeError Traceback (most recent call last)
<ipython-input-18-80efbaeba6e7> in <module>()
2 data = (SegmentationItemList.from_folder(path_img)
3 .split_by_rand_pct()
----> 4 .label_from_func(get_y_fn,classes=codes)
5 .transform(get_transforms(),size=128,tfm_y=True)
6 .databunch(bs=4))
3 frames
<ipython-input-10-44f94a438cac> in <lambda>(x)
----> 1 get_y_fn = lambda x: path_lbl/f'{x.stem}.png'
TypeError: unsupported operand type(s) for /: 'str' and 'str'
[通过Google Colab中的代码,我发现您一直在使用字符串作为路径,而如果要重现fastai代码,则它使用paths的路径对象而不是字符串,因此可以简单地替换:
get_y_fn = lambda x: path_lbl/f'{x.stem}_mask{x.suffix}'
与
get_y_fn = lambda x: path_lbl + "/" +f'{x.stem}_mask{x.suffix}'
由于path_lbl是字符串对象而不是路径对象。
您还可以使用python的pathlib库将path_lbl对象从字符串更改为路径。