美文网首页FastAI
FastAI02-获取label的多种方法

FastAI02-获取label的多种方法

作者: 科技老丁哥 | 来源:发表于2019-10-08 15:14 被阅读0次

本文是学习lesson1-pets后的总结。

在图像数据集的准确过程中,图片一般保存到一个文件夹中,所以加载可以按照固定的套路来,但label的形式却是千差万别,有的图片的label位于图片文件名中,我们要自己提取出来,有的位于图片的文件夹名称中,有的放在csv中等,所以我们要借助fastAI的函数,提取出每张图片对应的label。

比如对于mnist_sample数据集,这个数据集只有3,7两种图片,两种label,可以通过fastAI的URLs来自动下载。如下:

# path = untar_data(URLs.MNIST_SAMPLE); 
path=Path('/home/ray/DataSet/mnist_sample')

1. 借助pandas来获取labels

如果原始的图片对应的labels位于csv等文本文件中,而且图片名称和label一一对应,那么我们可以用pandas来加载该csv文件,然后提取得到labels. fastAI中已经定义了from_df函数来获取labels.
eg:

df = pd.read_csv(path/'labels.csv')
df.head()

提取方法:

data = ImageDataBunch.from_df(path, df, ds_tfms=tfms, size=24)
data.classes

[0, 1]

2. 从csv中直接提取labels

其实,fastAI已经定义了从csv直接提取labels的函数from_csv,使用方法为:

data = ImageDataBunch.from_csv(path, ds_tfms=tfms, size=28)

注意此处的path是该labels.csv文件所在目录,所以如果是其他名称的csv文件,需要修改from_csv中的csv_labels参数。

3. 使用正则表达式提取labels

如果labels存在于图片的路径中,我们可以构建正则表达式提取出各自的labels, eg:

fn_paths = [path/name for name in df['name']]
fn_paths[:2]

[PosixPath('/home/ray/DataSet/mnist_sample/train/3/7463.png'),
PosixPath('/home/ray/DataSet/mnist_sample/train/3/21102.png')]

这种,fn_paths就是由所有图片的路径构成的list,我们可以用正则提取出3和7,eg:

pat = r"/(\d)/\d+\.png$"
data = ImageDataBunch.from_name_re(path, fn_paths, pat=pat, ds_tfms=tfms, size=24)
data.classes

['3', '7']

注意:要提取出的labels放在正则表达式中的()中。

4. 使用自定义函数来提取出labels

我们也可以自定义函数来获取图片路径中的labels, 比如:

data = ImageDataBunch.from_name_func(path, fn_paths, ds_tfms=tfms, size=24,
        label_func = lambda x: '3' if '/3/' in str(x) else '7')
data.classes

['3', '7']

里面的label_func就是从fn_paths中提取出label的func,虽然是个lambda表达式,但换成其他函数也可以。

5. 从list中直接加载labels

一般的图片的路径会放到一个list中,我们可以从这个list中提取出labels,也组成list,这样image的list和label组成的list就会一一对应。这样就可以用from_lists来构建ImageDataBunch对象。

labels = [('3' if '/3/' in str(x) else '7') for x in fn_paths]
labels[:5]

data = ImageDataBunch.from_lists(path, fn_paths, labels=labels, ds_tfms=tfms, size=24)
data.classes

['3', '7']

上面的5种方法基本上涵盖了所有labels可能出现的情况。

相关文章

网友评论

    本文标题:FastAI02-获取label的多种方法

    本文链接:https://www.haomeiwen.com/subject/qbpbpctx.html