This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# test out some of these transforms | |
rescale = Rescale(100) | |
crop = RandomCrop(50) | |
composed = transforms.Compose([Rescale(250), | |
RandomCrop(224)]) | |
# apply the transforms to a sample image | |
test_num = 500 | |
sample = face_dataset[test_num] | |
fig = plt.figure() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# define the data tranform | |
# order matters! i.e. rescaling should come before a smaller crop | |
data_transform = transforms.Compose([Rescale(250), | |
RandomCrop(224), | |
Normalize(), | |
ToTensor()]) | |
# create the transformed dataset | |
transformed_dataset = FacialKeypointsDataset(csv_file='/data/training_frames_keypoints.csv', | |
root_dir='/data/training/', |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
self.conv1 = nn.Conv2d(1, 32, 5) | |
# output size = (W-F)/S +1 = (224-5)/1 + 1 = 220 | |
self.pool1 = nn.MaxPool2d(2, 2) | |
# 220/2 = 110 the output Tensor for one image, will have the dimensions: (32, 110, 110) | |
self.conv2 = nn.Conv2d(32,64,3) | |
# output size = (W-F)/S +1 = (110-3)/1 + 1 = 108 | |
self.pool2 = nn.MaxPool2d(2, 2) | |
#108/2=54 the output Tensor for one image, will have the dimensions: (64, 54, 54) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
self.drop1 = nn.Dropout(p = 0.1) | |
self.drop2 = nn.Dropout(p = 0.2) | |
self.drop3 = nn.Dropout(p = 0.25) | |
self.drop4 = nn.Dropout(p = 0.25) | |
self.drop5 = nn.Dropout(p = 0.3) | |
self.drop6 = nn.Dropout(p = 0.4) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def forward(self, x): | |
## TODO: Define the feedforward behavior of this model | |
## x is the input image and, as an example, here you may choose to include a pool/conv step: | |
## x = self.pool(F.relu(self.conv1(x))) | |
x = self.pool1(F.relu(self.conv1(x))) | |
x = self.drop1(x) | |
x = self.pool2(F.relu(self.conv2(x))) | |
x = self.drop2(x) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# create the transformed dataset | |
transformed_dataset = FacialKeypointsDataset(csv_file='/data/training_frames_keypoints.csv', | |
root_dir='/data/training/', | |
transform=data_transform) | |
print('Number of images: ', len(transformed_dataset)) | |
# iterate through the transformed dataset and print some stats about the first few samples | |
for i in range(4): |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# load training data in batches | |
batch_size = 10 | |
train_loader = DataLoader(transformed_dataset, | |
batch_size=batch_size, | |
shuffle=True, | |
num_workers=0) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## TODO: Define the loss and optimization | |
import torch.optim as optim | |
criterion = nn.SmoothL1Loss() | |
optimizer = optim.Adam(net.parameters(), lr = 0.001) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# load in a haar cascade classifier for detecting frontal faces | |
face_cascade = cv2.CascadeClassifier('detector_architectures/haarcascade_frontalface_default.xml') | |
# run the detector | |
# the output here is an array of detections; the corners of each detection box | |
# if necessary, modify these parameters until you successfully identify every face in a given image | |
faces = face_cascade.detectMultiScale(image, 1.2, 2) | |
# make a copy of the original image to plot detections on | |
image_with_detections = image.copy() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def showpoints(image,keypoints): | |
plt.figure() | |
keypoints = keypoints.data.numpy() | |
keypoints = keypoints * 60.0 + 68 | |
keypoints = np.reshape(keypoints, (68, -1)) | |
plt.imshow(image, cmap='gray') |
OlderNewer