인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

QWD님의 프로필 이미지
QWD

작성한 질문수

딥러닝 CNN 완벽 가이드 - TFKeras 버전

resnet구현하는 파트에서 CIFAR_Dataset관련하여 질문이 있습니다

작성

·

164

0

안녕하세요 딥러닝 CNN 완벽가이드를 수강하는 학생입니다.

다름이 아니라 resnet을 구현하고 cifar10으로 성능테스트를 해보는 과정에서 의문이 있어 질문드립니다.

class CIFAR_Dataset(Sequence):

def __init__(self, images_array, labels, batch_size=BATCH_SIZE, augmentor=None, shuffle=False, pre_func=None):
self.images_array = images_array
self.labels = labels
self.batch_size = batch_size
self.augmentor = augmentor
self.pre_func = pre_func
self.shuffle = shuffle
if self.shuffle:
# self.on_epoch_end()
pass

처음 sequence dataset을 설명해주셨을 때(catndog), self.images_filenames = images_filenames를 통해 데이터프레임에 있는 image의 경로를 받아오면 메모리에 문제가 없는데 만약 self.images_filenames에 이미지의 numpy array 형태로 받아오면 메모리가 터질수 있다라고 설명하셨는데요.

cifar10의 데이터는 numpy array형태로 되어있는 걸로 알고있는데 self.images_array = images_array를 통해 cifar10의 이미지 array를 받아오면 self.images_array에 cifar10의 모든 image array가 들어오게 되는게 아닌가요?? 그렇게 되면 메모리가 터진다고 말씀하셨던거 같은데...

제가 잘못이해하고 있는건지 이 부분이 좀 헷갈려서 질문드립니다

 

답변 1

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까, 

개별 이미지 데이터의 경우 1장이 차지하는 메모리 크기가 이미지 사이즈(해상도)에 많은 영향을 받습니다. 

사이즈가 클 수록 메모리를 많이 차지 하게 됩니다. 거기다 이미지 갯수도 많다면 한번에 모든 이미지를 다 메모리에 올릴 수가 없습니다. 그래서 순차적으로 batch size만큼 이미지 파일을 메모리로 퍼 올리는 작업을 ImageDataGenerator 등에서 수행합니다. 

하지만 cifar10은 image 사이즈가 매우 작기 때문에 한번에 모든 이미지를 다 메모리에 올릴 수 있습니다.  그렇기 때문에 numpy 형태의 image array로 데이터가 제공됩니다. 

감사합니다. 

QWD님의 프로필 이미지
QWD

작성한 질문수

질문하기