LIVEFB数据集下载以及前序处理

(前情提要:最近改了模型准备在多个数据集上跑一下,一开始准备找师兄要LIVEFB的数据集,结果师兄说看这个效果不好,没尝试这个数据集,好的嘛,那咱就自己动手丰衣足食,开整!)

LIVEFB 官方github源代码

更改后的完整代码,我放在文末。

step1:下载数据集

在LIVEFB论文中提到的网址找到github代码,下载后发现还要下好几个数据集才行,下面是需要准备的数据集:
VOC Train Validation从代码里找的下载地址
VOC test来自该博客
emotic来自官方,简单的填表就能下,需魔法
Blur Detection:代码给的下载地址
AVA dataset知乎
(吐槽一下:AVA 30G左右 百度网盘速度又慢 我真的下了好久 下吐了)

到这里长征之路走了三分之一了!


step2:运行代码

流程简述:首先就是将以上4个数据集(除了Blur dataset)的图,重命名后放入到一个统一的文件夹去,然后再根据labels_image包括的图像名(这是我们需要留下的),从而删掉不需要的图片。

2.1 重命名图片

#Extract VOC Train Validation tar File, Rename Images, and Move Image Files
#解压下载的VOC2012 trainval到database/voc_emotic_ava下
files = "database/voc_emotic_ava/VOCdevkit/VOC2012/JPEGImages/*"
with tqdm(total = int(len(glob.glob(files))), position=0, leave=True) as pbar:
    for path in glob.glob(files):
        name = path.split("\\")[-1]#由于window路径问题,用/这里获得的是文件夹的名字,换成了\\
        #print("name:",name)
        newp1 = path.replace(name,"")+"JPEGImages__"+name
        newp2 = path.replace(name, "")+"VOC2012__"+name
        os.rename(path, newp1)
        shutil.copy(newp1, 'database/voc_emotic_ava/')
        os.rename(newp1, newp2)
        shutil.copy(newp2, 'database/voc_emotic_ava/')
        os.remove(newp2)
        pbar.update()
    pbar.update()
    pbar.close()
shutil.rmtree('database/voc_emotic_ava/VOCdevkit')#删除文件
print("VOC - Done!")

(代码没贴完,在开头的github链接可查看完整代码)

主要是\和/的问题
在这里插入图片描述
全部运行完后,文件夹里的图片已经被重命名
在这里插入图片描述

2.2 删除文件夹中多余的图片

直接用原文给的代码有问题,需要改一下,我们的目的是要删除voc_emotic_ava和blur dataset文件夹中不需要的图片
在这里插入图片描述
将文件夹范围限制在voc_emotic_ava和blur dataset中,注意小细节!!还是\和/的问题
在这里插入图片描述

#删掉不需要的图片
df_ims = pd.read_csv('labels_image.csv')
ims = df_ims['name']
ims = ims.values.tolist()
#   这里对blur dataset和voc_emotic_ava文件夹操作就行
folders = ['blur_dataset','voc_emotic_ava']
#folders = os.listdir('database')

for folder in folders:
    files = 'database/'+folder+"/*"
    for path in glob.glob(files):
        name = path.replace("database/","")
        #这里的\\要变成/
        name = name.replace("\\", "/")
        if name not in ims:
            os.remove(path)
print("Cleaning - Done!")

到这里我们已经完成三分之二了,已经得到LIVEFB数据集(无patch版)


Step3:Patch Sample

源代码这部分有两个问题:
问题1.缺少遍历文件夹里的图片
解决办法:加个for循环,代码在后面

问题2.x,y顺序弄反,导致裁剪时,长宽超过原图片本身长宽
解决办法:x应该是“left_patch”,y应该是“top_patch”,
在patch sample时出bug了,长宽超过原图片本身长宽,导致patch后值为空,如图:在这里插入图片描述
这里我弄了好久,尝试了好多方法,最后发现github原链接里面的讨论有大佬说了:
also the x,y in the code is wrong, x should be “left patch” and y should be “top patch”, otherwise the crop box will be outside the image and failed to write patch.basically the code provided is shit and you need to debug on your own.
最后,贴上代码:

#分块
try:
    if os.path.isdir('database/patches') == False:
        os.mkdir('database/patches')
except OSError:
    print ("Creation of the directory %s failed" % 'patch')

def patch_sampling(im_path, patch_index, x, y, width, height):
    img=cv2.imread(im_path)
    patch = img[y:y + height, x:x + width]
    name = im_path.split('\\')[-1]
    p_path = 'database/patches/'+name+"_"+"patch_"+str(patch_index)+".jpg"
    cv2.imwrite(p_path,patch)

df_coor = pd.read_csv('all_patches.csv')
folders = ['blur_dataset','voc_emotic_ava']

for folder in folders:
    if folder != 'patches':
        im_paths = 'database/'+folder+"/*"
        for path in glob.glob(im_paths):#加上循环
            print("path:",path)
            im_name = path.split('\\')[-1]#读取图片名
            patch_name = "patches/"+im_name
            row = df_coor.loc[df_coor['name_patch']==patch_name]#在csv文件中找到指定的图片那行数据
            if len(row) == 1:
                #x1 = int(row['top_patch_1'].values.tolist()[0])
                x1 = int(row['left_patch_1'].values.tolist()[0])
                #y1 = int(row['left_patch_1'].values.tolist()[0])
                y1 = int(row['top_patch_1'].values.tolist()[0])

                x2 = int(row['left_patch_2'].values.tolist()[0])
                y2 = int(row['top_patch_2'].values.tolist()[0])
                x3 = int(row['left_patch_3'].values.tolist()[0])
                y3 = int(row['top_patch_3'].values.tolist()[0])
                h1 = int(row['height_patch_1'].values.tolist()[0])
                w1 = int(row['width_patch_1'].values.tolist()[0])
                h2 = int(row['height_patch_2'].values.tolist()[0])
                w2 = int(row['width_patch_2'].values.tolist()[0])
                h3 = int(row['height_patch_3'].values.tolist()[0])
                w3 = int(row['width_patch_3'].values.tolist()[0])
                patch_sampling(path, 1, x1, y1, w1, h1)#分割图片
                patch_sampling(path, 2, x2, y2, w2, h2)
                patch_sampling(path, 3, x3, y3, w3, h3)
print("Patch sampling - Done!")

好的,家人们!咱们已经走完LIVEFB的长征路了,可以开始跑模型了!!!
感动得落泪,呜呜呜

放github了,好用的话记得给start,酸Q~
FLIVE完整代码

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值