You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+14-7Lines changed: 14 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
### Convolutional Neural network Exercise
2
2
3
3
### Task 1 - Find Waldo
4
-
In this first task use cross-correlation to find Waldo in the image below:
4
+
In this first task we will use cross-correlation to find Waldo in the image below:
5
5

6
6
7
7
[ Image source: https://rare-gallery.com]
@@ -14,16 +14,18 @@ for an image matrix I and a kernel matrix $K$ of shape $(M \times N)$. To find w
14
14
15
15

16
16
17
+
By sliding the waldo-kernel over the image and computing the cross-correlation at each position we can find the position where waldo is located by looking for the maximum value in the resulting matrix.
18
+
17
19
#### Task 1.1 - Direct convolution
18
20
Navigate to the `src/custom_conv.py` module.
19
-
- Start in `my_conv_direct` and implement the convolution following the equation above. Test your function with vscode tests or `nox -s test`.
20
-
- Go to `src/waldo.py` and make sure that `my_conv_direct` is used for convolution. This script finds waldo in the image using your convolution function. Execute it with `python ./src/waldo.py` in your terminal.
21
-
- If your code passes the pytest but is too slow to find waldo feel free to use `scipy.signal.correlate2d` in `src/waldo.py` instead of your convolution function.
21
+
1. Start in `my_conv_direct` and implement the convolution following the equation above. Test your function with vscode tests or `nox -s test`.
22
+
2. Go to `src/waldo.py` and make sure that `my_conv_direct` is used for convolution. This script finds waldo in the image using your convolution function. Execute it with `python ./src/waldo.py` in your terminal.
23
+
3. If your code passes the pytest but is too slow to find waldo feel free to use `scipy.signal.correlate2d` in `src/waldo.py` instead of your convolution function.
22
24
23
25
#### Task 1.2 (Optional)
24
26
Navigate to the `src/custom_conv.py` module.
25
-
The function `my_conv` implements a fast version of the convolution operation above using a flattend kernel. We learned about this fast version in the lecture. Have a look at the slides again and then implement `get_indices` to make `my_conv` work. It should return
26
-
- A matrix of indices following the flattend convolution rule from the lecture, e.g. for a $(2\times 2)$ kernel and a $(3\times 3)$ image it should return the index transformation
27
+
The function `my_conv` implements a fast version of the convolution operation above using a flattened kernel. We learned about this fast version in the lecture. Have a look at the slides again and then implement `get_indices` to make `my_conv` work. It should return
28
+
- A matrix of indices following the flattened convolution rule from the lecture, e.g. for a $(2\times 2)$ kernel and a $(3\times 3)$ image it should return the index transformation
27
29
28
30
$$
29
31
\begin{pmatrix}
@@ -43,6 +45,11 @@ $$
43
45
$$o=(i-k)+1$$
44
46
where $i$ denotes the input size and $k$ the kernel size.
45
47
48
+
If you need help, follow the hints below:
49
+
- First create a list of starting indices for each row in the output. These are the upper left corners of each kernel application.
50
+
- Then create a list of offsets within the kernel. These are the indices that need to be added to each starting index to get the full set of indices for each kernel application.
51
+
- Finally use broadcasting to add the two lists together and get the final index matrix.
52
+
46
53
You can test the function with `nox -s test` by importing `my_conv` in `tests/test_conv.py` and changing `my_conv_direct` to `my_conv` in the test function. Make sure that `src/waldo.py` now uses `my_conv` for convolution and run the script again.
47
54
48
55
@@ -51,7 +58,7 @@ You can test the function with `nox -s test` by importing `my_conv` in `tests/te
51
58
52
59

53
60
54
-
Open `src/mnist.py` and implement MNIST digit recognition with `CNN` in `torch`
61
+
Open `src/mnist.py` and implement MNIST digit recognition with `CNN` in `torch`. Go through the TODOs in the file. You will see that a lot of the code is really similar or the same as in yesterday's exercise.
55
62
56
63
-*Reuse* your code from yesterday.
57
64
- Reuse yesterday's `Net` class, add convolutional layers and pooling. `torch.nn.Conv2d` and `torch.nn.MaxPool2d` will help you.
0 commit comments