## Description

1. [7 points] Implement seam carving:

(a) [1 point] Compute magnitude of gradients of an image

(b) [4 points] Find the connected path of pixels that has the smallest sum of gradients. A

path is valid if it is connected (the neighboring points in the path are also neighboring

pixels in the image), it starts in the first row of the image and in each step continues one

row down. It finishes in the last row of the image.

(c) [1 point] Remove the pixels in the path from the image. This gives you a new image with

one column less.

(d) [1 point] Remove a few paths with the lowest sum of gradients. Create a few examples

and include them in your document.

You can find more details about seam carving in this paper:

S. Avidan and A. Shamir, Seam Carving for Content-Aware Image Resizing, SIGGRAPH 2007,

http://www.win.tue.nl/~wstahw/edu/2IV05/seamcarving.pdf

2. [2 points] Image upscaling:

Write down the mathematical form of the convolution filter that performs upscaling of a

1D signal by a factor d. You do not need to write code. Please plot this filter (you can plot

it by hand).

3. [6 points] Neural Network:

(a) [3 points] In the main.py script we provide a training pipeline for image classification on the

MNIST dataset (digit classification). Please follow the readme file to download the MNIST

dataset ( 50MB). Implement the forward pass for One-layer MLP and the cross entropy

loss function with the requirement specified in the mlp.py. In particular, you are expected

to implement cross entropy loss function, sigmoid, softmax functions and the init , forward

functions for OneLayerNN class in mlp.py. You are only allowed to use numpy for this

exercise.

(b) [3 points] Implement the backpropagation with gradient descent functions for OneLayerNN

class in mlp.py and running main.py to train OneLayerNN. The function is used to first

compute the gradient of the loss function with respect to the weight matrix and biases,

and then run gradient descent using the specified learning rate. Please submit the training

curves (the accuracy for every epoch) and the best accuracy you obtained. You can play

1

with different initializations and learning rates. You are also only allowed to use numpy

for this exercise.

Additional credit [2 points]: Implement the functions init , forward and backpropagation with gradient descent for TwoLayerNN class in mlp.py, and submit the new training

curve and the accuracy you get with a two layer MLP.

You are expected to submit main.py and mlp.py for this problem.

2