目标检测的数据读取换成其他的数据,占用的内存无限上升
Created by: yeyupiaoling
环境
- PaddlePaddle 1.2 GPU
- Ubuntu 16.04
- Python 3.5
问题
我把目标检测中的VOC数据集换成其他的数据集后:https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleCV/object_detection/reader.py
发现在读取数据的时候占用的内存一直上升,单纯是读取文件数据,我已经把训练的代码注释掉了,可以确认是在读取数据的时候就不断占用内存。
我修改成同步读取数据的方式,还是卡死。
数据的是一个人脸数据集,一直只标记一个人脸位置。其他的我没觉得有什么问题。
以下代码片段是我修改成同步读取数据的方式,同样是读取数据过程中卡死:
def face_dataset(settings, model, file_path):
def reader():
with open(file_path, 'r') as f:
file_list = f.readlines()
np.random.shuffle(file_list)
for l in file_list:
image_path, label, bbox = l.split('\t')
bboxs = bbox.split(',')
image_path = os.path.join(settings.data_dir, image_path)
im = Image.open(image_path)
if im.mode == 'L':
im = im.convert('RGB')
im_width, im_height = im.size
bbox_labels = []
bbox_sample = []
# start from 1
bbox_sample.append(float(label))
bbox_sample.append(float(bboxs[0]) / im_width)
bbox_sample.append(float(bboxs[1]) / im_height)
bbox_sample.append(float(bboxs[2]) / im_width)
bbox_sample.append(float(bboxs[3]) / im_height)
bbox_labels.append(bbox_sample)
im, sample_labels = preprocess(im, bbox_labels, model, settings)
im = im.astype('float32')
if model == 'train' and len(sample_labels) == 0:
continue
sample_labels = np.array(sample_labels)
boxes = sample_labels[:, 1:5]
lbls = sample_labels[:, 0].astype('int32')
yield im, boxes, lbls
return reader
def train(settings, file_list):
file_path = os.path.join(settings.data_dir, file_list)
model = 'train'
return face_dataset(settings, model, file_path)
def test(settings, file_list):
file_path = os.path.join(settings.data_dir, file_list)
model = 'test'
return face_dataset(settings, model, file_path)