还在使用python获取图片路径吗?还在为存储图片路径打一连串的代码吗?
前言
这两天在看人脸修复模型的时候,看到了DiFFBIR模型,发现了一个宝藏技巧,特此记录一下
技巧
在此先贴下原代码
# collect all iamge files in img_dir
find [img_dir] -type f > files.list
# shuffle collected files
shuf files.list > files_shuf.list
# pick train_size files in the front as training set
head -n [train_size] files_shuf.list > files_shuf_train.list
# pick remaining files as validation set
tail -n +[train_size + 1] files_shuf.list > files_shuf_val.list
看完觉得太妙了,尽管之前有学过相关命令,但是看完这个之后还是会觉得真的妙!
解析
说明
在此之前说明一下,本人菜鸟一个,之前获取保存训练图像路径都是使用的python代码,例如:
import os
import random
IMG_FORMAT = ('.png','.jpg','.bmp','.jpeg')
def get_imgs(path):
imgs = []
for root,_,files in os.walk(path):
for file in files:
if file.endswith(IMG_FORMAT):
imgs.append(os.path.join(root,file))
return imgs
train_data_root = ""
with open("train.txt","w")as f:
for img_path in get_imgs(train_data_root):
f.write(img_path+"\n)
#打乱数据就使用了random模块
random.shuffle(imgs)
#将数据切分为train,和val就使用切片
trainset = imgs[:train_size]
valset = imgs[train_size:]
很平平无其的一大堆获取图片路径,保存图片路径的代码
取其精华
知道看到此写法之后发现真的太妙了,直接使用一行命令代替了这么多行python代码
#第一步:获取所有类型的图片路径并将其保存到files.list中
find [img_dir] -type f > files.list
#第二步:使用shuf命令打乱路径(即图片顺序)
shuf files.list > files_shuf.list
#第三步:获取对应长度作为train和val数据
#获取文件头部开始计算train_size数量的图片,真的太妙了!!
head -n [train_size] files_shuf.list > files_shuf_train.list
#获取文件尾部计算train_size位置开始数量的图片
tail -n +[train_size + 1] files_shuf.list > files_shuf_val.list
总结
代码不一定多才厉害,“短小精悍”才是最牛波一
《菜就多练》