Pythonのメモリリーク
Pythonでデータオーグメンテーションするプログラムを書きました。
5000枚ほどの入力画像を入れたいのですが、
実行するに連れてメモリ使用量がどんどん増加します。
メモリリークが疑えますので、ガーベジコレクション試みましたが解決できませんでした。
解決に向けてのアドバイスを頂きたく質問します。
よろしくおねがいします。
import tensorflow as tf
import numpy as np
from PIL import Image
import glob
import os
import configparser
inifile = configparser.ConfigParser()
inifile.read('./config.ini', 'UTF-8-SIG')
in_image = glob.glob(inifile.get('directory', 'in_dir') + '/*')
in_fileName = os.listdir(inifile.get('directory', 'in_dir'))
#<<debug>>
#print(in_image)
#print(in_fileName)
print(len(in_image))
for num in range(len(in_image)):
image = tf.read_file(str(in_image[num]))
direct, filename = os.path.split(str(in_image[num]))
name, ext = os.path.splitext(filename)
print('direct:{}, file:{}'.format(direct, filename))
if image is None:
print("Not Open")
continue
with tf.Session() as sess:
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
for i in range(5):
if int(inifile.get('format', 'JPG')) == 1:
tmp_img = tf.cast(tf.image.decode_jpeg(image, channels=3), tf.float32)
elif int(inifile.get('format', 'BMP')) == 1:
tmp_img = tf.cast(tf.image.decode_image(image, channels=3), tf.float32)
if int(inifile.get('data_arg_flip', 'flag_flip')) == 1:
tmp_img = tf.image.random_flip_left_right(tmp_img)
if int(inifile.get('data_arg_brightnes', 'flag_brightness')) == 1:
tmp_img = tf.image.random_brightness(tmp_img, max_delta = int(inifile.get('data_arg_brightnes', 'max_delta')))
if int(inifile.get('data_arg_contrast', 'flag_contrast')) == 1:
tmp_img = tf.image.random_contrast(tmp_img, lower=float(inifile.get('data_arg_contrast', 'lower')), upper=float(inifile.get('data_arg_contrast', 'upper')))
if int(inifile.get('data_arg_rot', 'flag_rot')) == 1:
tmp_img = tf.image.rot90(tmp_img, k=i)
out_img = sess.run(tmp_img)
# print(img.shape)
# print(img)
if int(inifile.get('format', 'JPG')) == 1:
Image.fromarray(np.uint8(out_img)).save(inifile.get('directory', 'out_dir') + '/' + name + '_{0:03d}.jpg'.format(i))
elif int(inifile.get('format', 'BMP')) == 1:
Image.fromarray(np.uint8(out_img)).save(inifile.get('directory', 'out_dir') + '/' + name + '_{0:03d}.bmp'.format(i))
iniファイル
# file directory
[directory]
in_dir = ./original_image
out_dir = ./out_image
# data format
[format]
JPG = 0
BMP = 1
# arg_settings
[data_arg_set]
arg_num = 4
# function settings
[data_arg_flip]
flag_flip = 0
[data_arg_brightnes]
flag_brightness = 1
max_delta = 1
# max : 63
[data_arg_contrast]
flag_contrast = 1
lower = 0.8
upper = 1.0
# min : 0.1
# max : 2.0
[data_arg_rot]
flag_rot = 0