R语言 在文件夹中随机子集或样本图像

xxls0lw8  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(100)

我正在尝试使用Cats and Dogs数据集-https://www.kaggle.com/competitions/dogs-vs-cats/data自学R(keras包)中的图像分类
但数据集是相当大的,我想工作与较少数量的图像开始-大约2000-3000,主要是为了速度,因为我有一个旧的电脑。
有没有什么方法可以直接从RStudio中将一个文件夹中的文件列表(即图像)子集并将其复制/移动到新文件夹中?手动执行此操作对于20,000个图像来说将是一场噩梦!
理想情况下,我希望以随机的方式进行子集划分,但如果失败了,我想顺序采样(例如,按照文件名的顺序)可能不会对我的结果产生太大影响。

k2arahey

k2arahey1#

你可以在Kaggle中使用R,所以你不需要在自己的硬件上训练,也不需要下载数据集的本地副本。要从Kaggle的训练存档中提取猫和狗的平衡样本,你可以这样做:

fs::dir_tree("../input")
# ../input
# └── dogs-vs-cats
#     ├── sampleSubmission.csv
#     ├── test1.zip
#     └── train.zip

# list archive content as data.frame
train_ls <- unzip("../input/dogs-vs-cats/train.zip", list = TRUE)
str(train_ls)
# 'data.frame': 25001 obs. of  3 variables:
#  $ Name  : chr  "train/" "train/cat.0.jpg" "train/cat.1.jpg" "train/cat.10.jpg" ...
#  $ Length: num  0 12414 16880 34315 28377 ...
#  $ Date  : POSIXct, format: "2013-09-20 10:12:00" "2013-09-20 10:05:00" ...

cats <- grep("cat", train_ls$Name, fixed = TRUE, value = TRUE)
dogs <- grep("dog", train_ls$Name, fixed = TRUE, value = TRUE)
# a balanced dataset, equal number of occurances:
str(cats); str(dogs)
# chr [1:12500] "train/cat.0.jpg" "train/cat.1.jpg" "train/cat.10.jpg" ...
# chr [1:12500] "train/dog.0.jpg" "train/dog.1.jpg" "train/dog.10.jpg" ...

# sample of size 10 from both classes
set.seed(123)
cat_sample <- sample(cats, size = 10, replace = FALSE)
dog_sample <- sample(dogs, size = 10, replace = FALSE)
str(cat_sample); str(dog_sample)
# chr [1:10] "train/cat.12212.jpg" "train/cat.12256.jpg" ...
# chr [1:10] "train/dog.3031.jpg" "train/dog.4819.jpg" "train/dog.7585.jpg" ...

# extract only cat_sample & cat_sample images from train archive
unzip("../input/dogs-vs-cats/train.zip", files = c(cat_sample, dog_sample))

字符串
生成目录树:

fs::dir_tree()
# .
# └── train
#     ├── cat.11654.jpg
#     ├── cat.12212.jpg
#     ├── cat.12256.jpg
#     ├── cat.1434.jpg
#     ├── cat.1781.jpg
#     ├── cat.6594.jpg
#     ├── cat.7148.jpg
#     ├── cat.8124.jpg
#     ├── cat.9221.jpg
#     ├── cat.9983.jpg
#     ├── dog.12478.jpg
#     ├── dog.1346.jpg
#     ├── dog.3031.jpg
#     ├── dog.3343.jpg
#     ├── dog.430.jpg
#     ├── dog.4819.jpg
#     ├── dog.6979.jpg
#     ├── dog.7035.jpg
#     ├── dog.7585.jpg
#     └── dog.7932.jpg


在本地系统上工作时,只需更新train.zip位置。

相关问题