在跑著名的deepfill_v2时,遇到了一点麻烦,在此记录一下,如果能帮到遇到相同问题的朋友就再好不过了(*^▽^*)
论文:Free-Form Image Inpainting with Gated Convolution(https://arxiv.org/abs/1806.03589)
项目地址:https://github.com/JiahuiYu/generative_inpainting
言归正传:
1.Prepare training images filelist
作者给出了例子,有代码能力的朋友应该都能看懂,这里贴一下我改写的代码(基本没改(●—●)):
import os
from random import shuffle
folder_path = '/media/david/comvision/YZW/dataset/celebaHQ_256' # 数据集地址
train_filename = './data_flist/train_shuffled.flist' # 训练用flist
validation_filename = './data_flist/test_shuffled.flist' # 测试用flist
is_shuffled = 1 # 数据打乱,默认为1(打乱)
print(type(is_shuffled))
if __name__ == "__main__":
# get the list of directories and separate them into 2 types: training and validation
training_dirs = os.listdir(folder_path + "/train_pic") # 训练集
validation_dirs = os.listdir(folder_path + "/test_pic") # 测试集
# make 2 lists to save file paths
training_file_names = []
validation_file_names = []
# append all files into 2 lists
for training_dir in training_dirs:
# append each file into the list file names
training_folder = os.listdir(folder_path + "/train_pic" + "/" + training_dir)
for training_item in training_folder:
# modify to full path -> directory
training_item = folder_path + "/train_pic" + "/" + training_dir + "/" + training_item
training_file_names.append(training_item)
# append all files into 2 lists
for validation_dir in validation_dirs:
# append each file into the list file names
validation_folder = os.listdir(folder_path + "/test_pic" + "/" + validation_dir)
for validation_item in validation_folder:
# modify to full path -> directory
validation_item = folder_path + "/test_pic" + "/" + validation_dir + "/" + validation_item
validation_file_names.append(validation_item)
# print all file paths
for i in training_file_names:
print(i)
for i in validation_file_names:
print(i)
# shuffle file names if set
if is_shuffled == 1:
shuffle(training_file_names)
shuffle(validation_file_names)
# make output file if not existed
if not os.path.exists(train_filename):
os.mknod(train_filename)
if not os.path.exists(validation_filename):
os.mknod(validation_filename)
# write to file
fo = open(train_filename, "w")
fo.write("\n".join(training_file_names))
fo.close()
fo = open(validation_filename, "w")
fo.write("\n".join(validation_file_names))
fo.close()
# print process
print("Written file is: ", train_filename, ", is_shuffle: ", is_shuffled)
唯一需要注意的是数据集的层次结构:
- model_logs
- neuralgym_logs
- training_data
-- training
--- <folder1>
--- <folder2>
--- .....
-- validation
--- <val_folder1>
--- <val_folder2>
--- .....
- <this_file.py>
2.配置环境
用Pycharm来运行代码的小伙伴可能会遇到这个报错:
ImportError: libcublas.so.9.0: cannot open shared object file: No such file
这里要分两种情况讨论:
1) 你的TensorFlow和cuda的版本真的没有配置对,这种情况很容易解决啦,这里就不多加赘述。
2) Pycharm自己的问题
这类情况表现为在终端和 Pycharm console 运行并不会出现该错误,只有在Pycharm在导入时出现错误,那么有两种解决方案:
(1) 配置 Pycharm 中的环境变量(Environment variables)
在Pycharm 运行的脚本的配置界面添加环境变量:
[1] - Edit configurations - (在 Run/Debug Configurations 界面)
[2] - Environment variables - (在 Environment 项组)
[3] - 新增环境变量 LD_LIBRARY_PATH=/usr/local/你的cuda文件夹名/lib64
(2)修改 pycharm.sh
,以确保 pycharm 具有读取 .bashrc
环境变量文件的权限。
在 pycharm.sh
文件中 IFS="$(printf '\n\t')"
的后面一行添加如下内容:
LD_LIBRARY_PATH="/usr/local/cuda/lib64:/usr/local/cuda-9.0/lib64:/usr/local/cuda-9.0/extras/CUPTI/lib64"
致谢与参考:
https://github.com/JiahuiYu/generative_inpainting
https://github.com/JiahuiYu/generative_inpainting/issues/15
https://www.aiuai.cn/aifarm678.html