Hwanil
(hwanil choi)
January 18, 2018, 6:34am
1
Hi. i’m a novice in pytorch.
I really want to train cat&dog images with CNN
But it isn’t do well…
I think, my image loading mothod is not good.
def imlist(fpath):
flist = os.listdir(fpath)
return flist
def traindata(impath,flist):
train = []
length = len(flist)
for i in range(length):
path = impath + flist[i]
im = pilimg.open(path)
im = im.resize((32,32))
im = np.array(im)
im = np.reshape(im,(1,3,32,32))
im = torch.FloatTensor(im)
if 'dog' in flist[i]:
train.append((im,torch.LongTensor([1])))
if 'cat' in flist[i]:
train.append((im,torch.LongTensor([0])))
return train
fpath is a folder path which has train images and function imlist return a list which has file name of train image.
How can I load images???
and How can I resize images to use cnn ??
Does torch cnn use image format [batch size, channel size, img size, img size]?
help me ! .
Thank you.
@Hwanil
You can load images using the following code:
traindir = os.path.join(args.data, 'train')
valdir = os.path.join(args.data, 'val')
testdir = os.path.join(args.data, 'test')
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
train_loader = data.DataLoader(
datasets.ImageFolder(traindir,
transforms.Compose([
transforms.RandomSizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
normalize,
])),
batch_size=args.batch_size,
shuffle=True,
num_workers=args.workers,
pin_memory=True)
val_loader = data.DataLoader(
datasets.ImageFolder(valdir,
transforms.Compose([
transforms.Scale(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
normalize,
])),
batch_size=args.batch_size,
shuffle=True,
num_workers=args.workers,
pin_memory=True)
test_loader = data.DataLoader(
TestImageFolder(testdir,
transforms.Compose([
transforms.Scale(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
normalize,
])),
batch_size=1,
shuffle=False,
num_workers=1,
pin_memory=False)
1 Like
Hwanil
(hwanil choi)
January 18, 2018, 7:13am
3
Thank you for your help
I’ll try it.
I have a question .
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
is This parameter(mean) always same value? or just do ?
This values are tested for ImageNet dataset which are RGB images. SO you can use this values.
1 Like
This is a very good example for starting. you can see this example.
1 Like
Bit late, but here’s some code I just did for pytorch 4.1
def load_dataset():
data_path = 'data/train/'
train_dataset = torchvision.datasets.ImageFolder(
root=data_path,
transform=torchvision.transforms.ToTensor()
)
train_loader = torch.utils.data.DataLoader(
train_dataset,
batch_size=64,
num_workers=0,
shuffle=True
)
return train_loader
for batch_idx, (data, target) in enumerate(load_dataset()):
#train network