EE-559 – Deep learning
- 7. Networks for computer vision
Fran¸ cois Fleuret https://fleuret.org/dlc/
[version of: June 8, 2018]
ÉCOLE POLYTECHNIQUE FÉDÉRALE DE LAUSANNE
EE-559 Deep learning 7. Networks for computer vision Fran cois - - PowerPoint PPT Presentation
EE-559 Deep learning 7. Networks for computer vision Fran cois Fleuret https://fleuret.org/dlc/ [version of: June 8, 2018] COLE POLYTECHNIQUE FDRALE DE LAUSANNE Tasks and data-sets Fran cois Fleuret EE-559 Deep learning
[version of: June 8, 2018]
ÉCOLE POLYTECHNIQUE FÉDÉRALE DE LAUSANNE
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 2 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 3 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 3 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 4 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 5 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 5 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 6 / 89
<annotation > <folder >n02123394 </ folder > <filename >n02123394_2084 </ filename > <source > <database >ImageNet database </ database > </source > <size > <width >500 </ width > <height >375 </ height > <depth >3</depth > </size > <segmented >0</ segmented > <object > <name >n02123394 </name > <pose >Unspecified </pose > <truncated >0</ truncated > <difficult >0</ difficult > <bndbox > <xmin >265 </ xmin > <ymin >185 </ ymin > <xmax >470 </ xmax > <ymax >374 </ ymax > </bndbox > </object > <object > <name >n02123394 </name > <pose >Unspecified </pose > <truncated >0</ truncated > <difficult >0</ difficult > <bndbox > <xmin >90 </xmin > <ymin >1</ymin > <xmax >323 </ xmax > <ymax >353 </ ymax > </bndbox > </object > </annotation >
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 7 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 8 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 9 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 10 / 89
1 C
y=1 ˆ
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 11 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 12 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 12 / 89
0.9 0.925 0.95 0.975 1 0.025 0.05 0.075 0.1 TP FP ROC
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 13 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 14 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 15 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 16 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 17 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 18 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 18 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 18 / 89
import torchvision alexnet = torchvision .models.alexnet ()
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 19 / 89
import torchvision alexnet = torchvision .models.alexnet ()
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 19 / 89
import torchvision alexnet = torchvision .models.alexnet ()
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 19 / 89
(features): Sequential ( (0): Conv2d (1, 6, kernel_size =(5, 5), stride =(1, 1)) (1): ReLU (inplace) (2): MaxPool2d (size =(2, 2), stride =(2, 2), dilation =(1, 1)) (3): Conv2d (6, 16, kernel_size =(5, 5), stride =(1, 1)) (4): ReLU (inplace) (5): MaxPool2d (size =(2, 2), stride =(2, 2), dilation =(1, 1)) ) ( classifier ): Sequential ( (0): Linear (256
(1): ReLU (inplace) (2): Linear (120
(3): ReLU (inplace) (4): Linear (84
)
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 20 / 89
(features): Sequential ( (0): Conv2d (3, 64, kernel_size =(11 , 11) , stride =(4, 4), padding =(2, 2)) (1): ReLU (inplace) (2): MaxPool2d (size =(3, 3), stride =(2, 2), dilation =(1, 1)) (3): Conv2d (64, 192, kernel_size =(5, 5), stride =(1, 1), padding =(2, 2)) (4): ReLU (inplace) (5): MaxPool2d (size =(3, 3), stride =(2, 2), dilation =(1, 1)) (6): Conv2d (192 , 384, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (7): ReLU (inplace) (8): Conv2d (384 , 256, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (9): ReLU (inplace) (10): Conv2d (256 , 256, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (11): ReLU (inplace) (12): MaxPool2d (size =(3, 3), stride =(2, 2), dilation =(1, 1)) ) ( classifier ): Sequential ( (0): Dropout (p = 0.5) (1): Linear (9216
(2): ReLU (inplace) (3): Dropout (p = 0.5) (4): Linear (4096
(5): ReLU (inplace) (6): Linear (4096
)
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 21 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 22 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 22 / 89
(features): Sequential ( (0): Conv2d (3, 64, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (1): ReLU (inplace) (2): Conv2d (64, 64, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (3): ReLU (inplace) (4): MaxPool2d (size =(2, 2), stride =(2, 2), dilation =(1, 1)) (5): Conv2d (64, 128, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (6): ReLU (inplace) (7): Conv2d (128 , 128, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (8): ReLU (inplace) (9): MaxPool2d (size =(2, 2), stride =(2, 2), dilation =(1, 1)) (10): Conv2d (128 , 256, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (11): ReLU (inplace) (12): Conv2d (256 , 256, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (13): ReLU (inplace) (14): Conv2d (256 , 256, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (15): ReLU (inplace) (16): Conv2d (256 , 256, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (17): ReLU (inplace) (18): MaxPool2d (size =(2, 2), stride =(2, 2), dilation =(1, 1)) (19): Conv2d (256 , 512, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (20): ReLU (inplace) (21): Conv2d (512 , 512, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (22): ReLU (inplace) (23): Conv2d (512 , 512, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (24): ReLU (inplace) (25): Conv2d (512 , 512, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (26): ReLU (inplace) (27): MaxPool2d (size =(2, 2), stride =(2, 2), dilation =(1, 1)) (28): Conv2d (512 , 512, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (29): ReLU (inplace) (30): Conv2d (512 , 512, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (31): ReLU (inplace) (32): Conv2d (512 , 512, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (33): ReLU (inplace) (34): Conv2d (512 , 512, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (35): ReLU (inplace) (36): MaxPool2d (size =(2, 2), stride =(2, 2), dilation =(1, 1)) )
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 23 / 89
( classifier): Sequential ( (0): Linear (25088
(1): ReLU (inplace) (2): Dropout (p = 0.5) (3): Linear (4096
(4): ReLU (inplace) (5): Dropout (p = 0.5) (6): Linear (4096
)
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 24 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 25 / 89
import PIL , torch , torchvision # Load and normalize the image img = torchvision .transforms .ToTensor ()(PIL.Image.open(’blacklab.jpg ’)) img = img.view(1, img.size (0) , img.size (1) , img.size (2)) img = 0.5 + 0.5 * (img - img.mean ()) / img.std ()
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 26 / 89
import PIL , torch , torchvision # Load and normalize the image img = torchvision .transforms .ToTensor ()(PIL.Image.open(’blacklab.jpg ’)) img = img.view(1, img.size (0) , img.size (1) , img.size (2)) img = 0.5 + 0.5 * (img - img.mean ()) / img.std () # Load an already trained network and compute its prediction alexnet = torchvision .models.alexnet(pretrained = True) alexnet.eval ()
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 26 / 89
import PIL , torch , torchvision # Load and normalize the image img = torchvision .transforms .ToTensor ()(PIL.Image.open(’blacklab.jpg ’)) img = img.view(1, img.size (0) , img.size (1) , img.size (2)) img = 0.5 + 0.5 * (img - img.mean ()) / img.std () # Load an already trained network and compute its prediction alexnet = torchvision .models.alexnet(pretrained = True) alexnet.eval ()
# Prints the classes scores , indexes = output.data.view (-1).sort(descending = True) class_names = eval(open(’ imagenet1000_clsid_to_human .txt ’, ’r’).read ()) for k in range (15): print ( ’#{:d} ({:.02f}) {:s}’. format(k, scores[k], class_names [indexes[k]]))
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 26 / 89
#1 (12.26) Weimaraner #2 (10.95) Chesapeake Bay retriever #3 (10.87) Labrador retriever #4 (10.10) Staffordshire bullterrier , Staffordshire bull terrier #5 (9.55) flat -coated retriever #6 (9.40) Italian greyhound #7 (9.31) American Staffordshire terrier , Staffordshire terrier , American pit bull terrier , pit bull terrier #8 (9.12) Great Dane #9 (8.94) German short -haired pointer #10 (8.53) Doberman , Doberman pinscher #11 (8.35) Rottweiler #12 (8.25) kelpie #13 (8.24) barrow , garden cart , lawn cart , wheelbarrow #14 (8.12) bucket , pail #15 (8.07) soccer ball
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 27 / 89
#1 (12.26) Weimaraner #2 (10.95) Chesapeake Bay retriever #3 (10.87) Labrador retriever #4 (10.10) Staffordshire bullterrier , Staffordshire bull terrier #5 (9.55) flat -coated retriever #6 (9.40) Italian greyhound #7 (9.31) American Staffordshire terrier , Staffordshire terrier , American pit bull terrier , pit bull terrier #8 (9.12) Great Dane #9 (8.94) German short -haired pointer #10 (8.53) Doberman , Doberman pinscher #11 (8.35) Rottweiler #12 (8.25) kelpie #13 (8.24) barrow , garden cart , lawn cart , wheelbarrow #14 (8.12) bucket , pail #15 (8.07) soccer ball
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 27 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 28 / 89
x(l) H W C
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 29 / 89
x(l) H W C HWC
Reshape
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 29 / 89
x(l) H W C x(l+1) HWC
Reshape
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 29 / 89
x(l) H W C H W C x(l+1)
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 29 / 89
x(l) x(l+1) w(l+1)
Reshape
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 30 / 89
x(l) x(l+2) w(l+2) x(l+1) w(l+1)
Reshape
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 30 / 89
x(l) w(l+1) x(l+1)
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 30 / 89
x(l) x(l+2) w(l+2) w(l+1) x(l+1)
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 30 / 89
x(l) x(l+2) w(l+2) w(l+1) x(l+1)
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 31 / 89
x(l) x(l+2) w(l+2) w(l+1) x(l+1) x(l+1) x(l+2)
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 31 / 89
def convolutionize (layers , input_size ): l = [] x = Variable(torch.zeros(torch.Size ((1, ) + input_size))) for m in layers: if isinstance(m, nn.Linear): n = nn.Conv2d( in_channels = x.size (1) ,
kernel_size = (x.size (2) , x.size (3))) n.weight.data.view (-1).copy_(m.weight.data.view (-1)) n.bias.data.view (-1).copy_(m.bias.data.view (-1)) m = n l.append(m) x = m(x) return l model = torchvision .models.alexnet(pretrained = True) model = nn. Sequential ( * convolutionize (list(model.features) + list(model. classifier ), (3, 224, 224)) )
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 32 / 89
def convolutionize (layers , input_size ): l = [] x = Variable(torch.zeros(torch.Size ((1, ) + input_size))) for m in layers: if isinstance(m, nn.Linear): n = nn.Conv2d( in_channels = x.size (1) ,
kernel_size = (x.size (2) , x.size (3))) n.weight.data.view (-1).copy_(m.weight.data.view (-1)) n.bias.data.view (-1).copy_(m.bias.data.view (-1)) m = n l.append(m) x = m(x) return l model = torchvision .models.alexnet(pretrained = True) model = nn. Sequential ( * convolutionize (list(model.features) + list(model. classifier ), (3, 224, 224)) )
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 32 / 89
AlexNet ( (features): Sequential ( (0): Conv2d (3, 64, kernel_size =(11 , 11) , stride =(4, 4), padding =(2, 2)) (1): ReLU (inplace) (2): MaxPool2d (size =(3, 3), stride =(2, 2), dilation =(1, 1)) (3): Conv2d (64, 192, kernel_size =(5, 5), stride =(1, 1), padding =(2, 2)) (4): ReLU (inplace) (5): MaxPool2d (size =(3, 3), stride =(2, 2), dilation =(1, 1)) (6): Conv2d (192 , 384, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (7): ReLU (inplace) (8): Conv2d (384 , 256, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (9): ReLU (inplace) (10): Conv2d (256 , 256, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (11): ReLU (inplace) (12): MaxPool2d (size =(3, 3), stride =(2, 2), dilation =(1, 1)) ) ( classifier): Sequential ( (0): Dropout (p = 0.5) (1): Linear (9216
(2): ReLU (inplace) (3): Dropout (p = 0.5) (4): Linear (4096
(5): ReLU (inplace) (6): Linear (4096
) )
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 33 / 89
Sequential ( (0): Conv2d (3, 64, kernel_size =(11 , 11) , stride =(4, 4), padding =(2, 2)) (1): ReLU (inplace) (2): MaxPool2d (size =(3, 3), stride =(2, 2), dilation =(1, 1)) (3): Conv2d (64, 192, kernel_size =(5, 5), stride =(1, 1), padding =(2, 2)) (4): ReLU (inplace) (5): MaxPool2d (size =(3, 3), stride =(2, 2), dilation =(1, 1)) (6): Conv2d (192 , 384, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (7): ReLU (inplace) (8): Conv2d (384 , 256, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (9): ReLU (inplace) (10): Conv2d (256 , 256, kernel_size =(3, 3), stride =(1, 1), padding =(1, 1)) (11): ReLU (inplace) (12): MaxPool2d (size =(3, 3), stride =(2, 2), dilation =(1, 1)) (13): Dropout (p = 0.5) (14): Conv2d (256 , 4096 , kernel_size =(6, 6), stride =(1, 1)) (15): ReLU (inplace) (16): Dropout (p = 0.5) (17): Conv2d (4096 , 4096 , kernel_size =(1, 1), stride =(1, 1)) (18): ReLU (inplace) (19): Conv2d (4096 , 1000 , kernel_size =(1, 1), stride =(1, 1)) )
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 34 / 89
Input image Conv layers Max-pooling 1000d FC layers
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 35 / 89
Input image Conv layers Max-pooling 1000d FC layers
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 35 / 89
Input image Conv layers Max-pooling 1000d FC layers
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 35 / 89
Input image Conv layers Max-pooling 1000d FC layers
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 35 / 89
Input image Conv layers Max-pooling 1000d FC layers
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 35 / 89
Input image Conv layers Max-pooling 1000d FC layers Input image Conv layers
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 35 / 89
Input image Conv layers Max-pooling 1000d FC layers Input image Conv layers Max-pooling 1000d FC layers
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 35 / 89
Input image Conv layers Max-pooling 1000d FC layers Input image Conv layers Max-pooling 1000d FC layers
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 35 / 89
Input image Conv layers Max-pooling 1000d FC layers Input image Conv layers Max-pooling 1000d FC layers
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 35 / 89
Input image Conv layers Max-pooling 1000d FC layers Input image Conv layers Max-pooling 1000d FC layers
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 35 / 89
Input image Conv layers Max-pooling 1000d FC layers Input image Conv layers Max-pooling 1000d FC layers
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 35 / 89
Input image Conv layers Max-pooling 1000d FC layers Input image Conv layers Max-pooling 1000d FC layers
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 35 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 36 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 36 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 37 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 38 / 89
. . . . . .
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 39 / 89
1x1 convolutions 3x3 convolutions 5x5 convolutions Filter concatenation Previous layer 3x3 max pooling
(a) Inception module, na¨ ıve version
1x1 convolutions 3x3 convolutions 5x5 convolutions Filter concatenation Previous layer 3x3 max pooling 1x1 convolutions 1x1 convolutions 1x1 convolutions
(b) Inception module with dimension reductions
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 40 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 41 / 89
input Conv 7x7+2(S) MaxPool 3x3+2(S) LocalRespNorm Conv 1x1+1(V) Conv 3x3+1(S) LocalRespNorm MaxPool 3x3+2(S) Conv 1x1+1(S) Conv 1x1+1(S) Conv 1x1+1(S) MaxPool 3x3+1(S) DepthConcat Conv 3x3+1(S) Conv 5x5+1(S) Conv 1x1+1(S) Conv 1x1+1(S) Conv 1x1+1(S) Conv 1x1+1(S) MaxPool 3x3+1(S) DepthConcat Conv 3x3+1(S) Conv 5x5+1(S) Conv 1x1+1(S) MaxPool 3x3+2(S) Conv 1x1+1(S) Conv 1x1+1(S) Conv 1x1+1(S) MaxPool 3x3+1(S) DepthConcat Conv 3x3+1(S) Conv 5x5+1(S) Conv 1x1+1(S) Conv 1x1+1(S) Conv 1x1+1(S) Conv 1x1+1(S) MaxPool 3x3+1(S) AveragePool 5x5+3(V) DepthConcat Conv 3x3+1(S) Conv 5x5+1(S) Conv 1x1+1(S) Conv 1x1+1(S) Conv 1x1+1(S) Conv 1x1+1(S) MaxPool 3x3+1(S) DepthConcat Conv 3x3+1(S) Conv 5x5+1(S) Conv 1x1+1(S) Conv 1x1+1(S) Conv 1x1+1(S) Conv 1x1+1(S) MaxPool 3x3+1(S) DepthConcat Conv 3x3+1(S) Conv 5x5+1(S) Conv 1x1+1(S) Conv 1x1+1(S) Conv 1x1+1(S) Conv 1x1+1(S) MaxPool 3x3+1(S) AveragePool 5x5+3(V) DepthConcat Conv 3x3+1(S) Conv 5x5+1(S) Conv 1x1+1(S) MaxPool 3x3+2(S) Conv 1x1+1(S) Conv 1x1+1(S) Conv 1x1+1(S) MaxPool 3x3+1(S) DepthConcat Conv 3x3+1(S) Conv 5x5+1(S) Conv 1x1+1(S) Conv 1x1+1(S) Conv 1x1+1(S) Conv 1x1+1(S) MaxPool 3x3+1(S) DepthConcat Conv 3x3+1(S) Conv 5x5+1(S) Conv 1x1+1(S) AveragePool 7x7+1(V) FC Conv 1x1+1(S) FC FC SoftmaxActivation softmax0 Conv 1x1+1(S) FC FC SoftmaxActivation softmax1 SoftmaxActivation softmax2
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 42 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 43 / 89
. . .
Conv 3 × 3 64 → 64 BN ReLU 64 Conv 3 × 3 64 → 64 BN + ReLU
. . .
64
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 44 / 89
. . .
Conv 3 × 3 256 → 256 BN ReLU 256 Conv 3 × 3 256 → 256 BN + ReLU
. . .
256
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 45 / 89
. . .
Conv 3 × 3 256 → 256 BN ReLU 256 Conv 3 × 3 256 → 256 BN + ReLU
. . .
256
. . .
Conv 1 × 1 256 → 64 BN ReLU 256 Conv 3 × 3 64 → 64 BN ReLU Conv 1 × 1 64 → 256 BN + ReLU
. . .
256
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 45 / 89
. . .
Conv 3 × 3 256 → 256 BN ReLU 256 Conv 3 × 3 256 → 256 BN + ReLU
. . .
256
. . .
Conv 1 × 1 256 → 64 BN ReLU 256 Conv 3 × 3 64 → 64 BN ReLU Conv 1 × 1 64 → 256 BN + ReLU
. . .
256
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 45 / 89
layer name output size 18-layer 34-layer 50-layer 101-layer 152-layer conv1 112×112 7×7, 64, stride 2 conv2 x 56×56 3×3 max pool, stride 2
3×3, 64
3×3, 64
1×1, 64 3×3, 64 1×1, 256 ×3 1×1, 64 3×3, 64 1×1, 256 ×3 1×1, 64 3×3, 64 1×1, 256 ×3 conv3 x 28×28
3×3, 128
3×3, 128
1×1, 128 3×3, 128 1×1, 512 ×4 1×1, 128 3×3, 128 1×1, 512 ×4 1×1, 128 3×3, 128 1×1, 512 ×8 conv4 x 14×14
3×3, 256
3×3, 256
1×1, 256 3×3, 256 1×1, 1024 ×6 1×1, 256 3×3, 256 1×1, 1024 ×23 1×1, 256 3×3, 256 1×1, 1024 ×36 conv5 x 7×7
3×3, 512
3×3, 512
1×1, 512 3×3, 512 1×1, 2048 ×3 1×1, 512 3×3, 512 1×1, 2048 ×3 1×1, 512 3×3, 512 1×1, 2048 ×3 1×1 average pool, 1000-d fc, softmax FLOPs 1.8×109 3.6×109 3.8×109 7.6×109 11.3×109
Table 1. Architectures for ImageNet. Building blocks are shown in brackets (see also Fig. 5), with the numbers of blocks stacked. Down- sampling is performed by conv3 1, conv4 1, and conv5 1 with a stride of 2.
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 46 / 89
method
top-5 err. (test) VGG [41] (ILSVRC’14) 7.32 GoogLeNet [44] (ILSVRC’14) 6.66 VGG [41] (v5) 6.8 PReLU-net [13] 4.94 BN-inception [16] 4.82 ResNet (ILSVRC’15) 3.57 Table 5. Error rates (%) of ensembles. The top-5 error is on the test set of ImageNet and reported by the test server.
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 47 / 89
. . .
+ Conv 1 × 1 256 → 4 BN ReLU 256 Conv 3 × 3 4 → 4 BN ReLU Conv 1 × 1 4 → 256 BN Conv 1 × 1 256 → 4 BN ReLU Conv 3 × 3 4 → 4 BN ReLU Conv 1 × 1 4 → 256 BN ReLU
. . .
256
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 48 / 89
. . .
+ Conv 1 × 1 256 → 4 BN ReLU 256 Conv 3 × 3 4 → 4 BN ReLU Conv 1 × 1 4 → 256 BN Conv 1 × 1 256 → 4 BN ReLU Conv 3 × 3 4 → 4 BN ReLU Conv 1 × 1 4 → 256 BN ReLU
. . .
256
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 48 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 49 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 50 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 50 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 50 / 89
LeNet5 (LeCun et al., 1989) LSTM (Hochreiter and Schmidhuber, 1997) Highway Net (Srivastava et al., 2015) No recurrence Deep hierarchical CNN (Ciresan et al., 2012) Bigger + GPU AlexNet (Krizhevsky et al., 2012) Bigger + ReLU + dropout Overfeat (Sermanet et al., 2013) Fully convolutional VGG (Simonyan and Zisserman, 2014) Bigger + small filters Net in Net (Lin et al., 2013) MLPConv GoogLeNet (Szegedy et al., 2015) Inception modules ResNet (He et al., 2015) No gating BN-Inception (Ioffe and Szegedy, 2015) Batch Normalization Inception-ResNet (Szegedy et al., 2016) ResNeXt (Xie et al., 2016) DenseNet (Huang et al., 2016) Wide ResNet (Zagoruyko and Komodakis, 2016) Wider Dense pass-through Aggregated channels Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 51 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 52 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 53 / 89
Input image Conv layers Max-pooling 1000d FC layers classication Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 54 / 89
Input image Conv layers Max-pooling 1000d FC layers classication 4d FC layers Localization Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 54 / 89
Figure 7: Examples of bounding boxes produced by the regression network, before being com- bined into final predictions. The examples shown here are at a single scale. Predictions may be more optimal at other scales depending on the objects. Here, most of the bounding boxes which are initially organized as a grid, converge to a single location and scale. This indicates that the network is very confident in the location of the object, as opposed to being spread out randomly. The top left image shows that it can also correctly identify multiple location if several objects are present. The various aspect ratios of the predicted bounding boxes shows that the network is able to cope with various object poses.
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 55 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 56 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 56 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 57 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 57 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 58 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 58 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 58 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 59 / 89
448 448 3 7 7
7x7x64-s-2 Maxpool Layer 2x2-s-2
3 3 112 112 192 3 3 56 56 256
4096
3x3x192 Maxpool Layer 2x2-s-2
1x1x128 3x3x256 1x1x256 3x3x512 Maxpool Layer 2x2-s-2
3 3 28 28 512
1x1x256 3x3x512 1x1x512 3x3x1024 Maxpool Layer 2x2-s-2
3 3 14 14 1024
1x1x512 3x3x1024 3x3x1024 3x3x1024-s-2
3 3 7 7 1024 7 7 1024 7 7 30
3x3x1024 3x3x1024
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 60 / 89
448 448 3 7 7
7x7x64-s-2 Maxpool Layer 2x2-s-2
3 3 112 112 192 3 3 56 56 256
4096
3x3x192 Maxpool Layer 2x2-s-2
1x1x128 3x3x256 1x1x256 3x3x512 Maxpool Layer 2x2-s-2
3 3 28 28 512
1x1x256 3x3x512 1x1x512 3x3x1024 Maxpool Layer 2x2-s-2
3 3 14 14 1024
1x1x512 3x3x1024 3x3x1024 3x3x1024-s-2
3 3 7 7 1024 7 7 1024 7 7 30
3x3x1024 3x3x1024
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 60 / 89
448 448 3 7 7
7x7x64-s-2 Maxpool Layer 2x2-s-2
3 3 112 112 192 3 3 56 56 256
4096
3x3x192 Maxpool Layer 2x2-s-2
1x1x128 3x3x256 1x1x256 3x3x512 Maxpool Layer 2x2-s-2
3 3 28 28 512
1x1x256 3x3x512 1x1x512 3x3x1024 Maxpool Layer 2x2-s-2
3 3 14 14 1024
1x1x512 3x3x1024 3x3x1024 3x3x1024-s-2
3 3 7 7 1024 7 7 1024 7 7 30
3x3x1024 3x3x1024
ˆ
xi,1
ˆ
yi,1
ˆ
wi,1
ˆ
hi,1
ˆ
ci,1 . . .
ˆ
xi,B
ˆ
yi,B
ˆ
wi,B
ˆ
hi,B
ˆ
ci,B
ˆ
pi,1 . . .
ˆ
pi,C
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 60 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 61 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 61 / 89
i
i,j is 1 if there is an object in cell i and predicted box j is the most fitting
i
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 62 / 89
i,j s and
S2
B
i,j
S2
B
i,j (ci,j −ˆ
S2
B
i,j
i,j
S2
i C
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 63 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 64 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 64 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 64 / 89
300 300 3
VGG-16 through Conv5_3 layer
19 19 Conv7 (FC7) 1024 10 10 Conv8_2 512 5 5 Conv9_2 256 3 Conv10_2 256 256 38 38 Conv4_3 3 1 Image
Conv: 1x1x1024 Conv: 1x1x256 Conv: 3x3x512-s2 Conv: 1x1x128 Conv: 3x3x256-s2 Conv: 1x1x128 Conv: 3x3x256-s1
Detections:8732 per Class
Classifier : Conv: 3x3x(4x(Classes+4))
512 448 448 3 Image 7 7 1024 7 7 30
Fully Connected
YOLO Customized Architecture Non-Maximum Suppression
Fully Connected
Non-Maximum Suppression Detections: 98 per class
Conv11_2
74.3mAP 59FPS 63.4mAP 45FPS
Classifier : Conv: 3x3x(6x(Classes+4))
19 19 Conv6 (FC6) 1024
Conv: 3x3x1024
SSD YOLO Extra Feature Layers
Conv: 1x1x128 Conv: 3x3x256-s1 Conv: 3x3x(4x(Classes+4))
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 65 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 66 / 89
AlexNet (Krizhevsky et al., 2012) Overfeat (Sermanet et al., 2013) Box regression R-CNN (Girshick et al., 2013) Region proposal + crop in image Fast R-CNN (Girshick, 2015) Crop in feature maps Faster R-CNN (Ren et al., 2015) Convolutional region proposal YOLO (Redmon et al., 2015) No crop SSD (Liu et al., 2015) Fully convolutional + multi-scale maps Multi-scale convolutions + multi boxes Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 67 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 68 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 69 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 69 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 69 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 70 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 70 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 70 / 89
3d 1 2 , 64d 1 4 , 128d 1 8 , 256d 1 16 , 512d 1 32 , 512d 1 32 , 4096d 2× conv/relu + maxpool 2× conv/relu + maxpool 3× conv/relu + maxpool 3× conv/relu + maxpool 3× conv/relu + maxpool 2× fc-conv/relu VGG without its last layer Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 71 / 89
3d 1 2 , 64d 1 4 , 128d 1 8 , 256d 1 16 , 512d 1 32 , 512d 1 32 , 4096d 2× conv/relu + maxpool 2× conv/relu + maxpool 3× conv/relu + maxpool 3× conv/relu + maxpool 3× conv/relu + maxpool 2× fc-conv/relu 1 32 , 21d 21d fc-conv deconv
×32
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 71 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 72 / 89
3d 1 2 , 64d 1 4 , 128d 1 8 , 256d 1 16 , 512d 1 32 , 512d 1 32 , 4096d 2× conv/relu + maxpool 2× conv/relu + maxpool 3× conv/relu + maxpool 3× conv/relu + maxpool 3× conv/relu + maxpool 2× fc-conv/relu 1 32 , 21d 1 16 , 21d 1 16 , 21d 1 16 , 21d 1 8 , 21d 1 8 , 21d 21d 1 8 , 21d fc-conv deconv
×2
fc-conv fc-conv + deconv
×2
+ deconv
×8
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 73 / 89
FCN-8s SDS [14] Ground Truth Image
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 74 / 89
Image Ground Truth Output Input learning. and 6.3 FCNs tation tion. this upper r images r The P achieve
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 75 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 76 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 77 / 89
train_set = datasets.MNIST (’./ data/mnist/’, train = True , download = True) train_input = Variable(train_set. train_data .view(-1, 1, 28, 28).float ()) train_target = Variable(train_set. train_labels )
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 78 / 89
train_set = datasets.MNIST (’./ data/mnist/’, train = True , download = True) train_input = Variable(train_set. train_data .view(-1, 1, 28, 28).float ()) train_target = Variable(train_set. train_labels )
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 78 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 79 / 89
from torch.utils.data import DataLoader from torchvision import datasets , transforms train_transforms = transforms .Compose( [ transforms .RandomCrop (28, padding = 3), transforms .ToTensor (), transforms .Normalize(mean = (33.32 , ), std = (78.56 , )) ] ) train_loader = DataLoader( datasets.MNIST(root = ’./data ’, train = True , download = True , transform = train_transforms ), batch_size = 100, num_workers = 4, shuffle = True , pin_memory = torch.cuda. is_available () )
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 80 / 89
for e in range(nb_epochs): for input , target in iter( train_loader ): if torch.cuda. is_available (): input , target = input.cuda (), target.cuda () input , target = Variable(input), Variable(target)
loss = criterion(output , target) model.zero_grad () loss.backward ()
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 81 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 82 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 83 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 83 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 83 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 83 / 89
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 83 / 89
data_dir = os.environ.get(’PYTORCH_DATA_DIR ’) or ’.’ num_workers = 4 batch_size = 64 transform = torchvision . transforms .ToTensor () train_set = torchvision .datasets.CIFAR10(root = data_dir , train = True , download = False , transform = transform) train_loader = torch.utils.data.DataLoader (train_set , batch_size = batch_size , shuffle = True , num_workers = num_workers ) test_set = torchvision .datasets.CIFAR10(root = data_dir , train = False , download = False , transform = transform) test_loader = torch.utils.data. DataLoader(test_set , batch_size = batch_size , shuffle = False , num_workers = num_workers )
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 84 / 89
def make_resnet_block (nb_channels , kernel_size = 3): return
nn.Conv2d(nb_channels , nb_channels , kernel_size = kernel_size , padding = ( kernel_size
nn.ReLU(inplace = True), nn.Conv2d(nb_channels , nb_channels , kernel_size = kernel_size , padding = ( kernel_size
)
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 85 / 89
class Monster(nn.Module): def __init__(self , nb_residual_blocks , nb_channels ): super(Monster , self).__init__ () nb_alexnet_channels = 64 alexnet_feature_map_size = 7 # For 32 x32 (e.g. CIFAR) alexnet = torchvision .models.alexnet(pretrained = True) # Conv2d (3, 64, kernel_size =(11 , 11) , stride =(4, 4), padding =(2, 2)) self.features = nn.Sequential ( alexnet.features [0], nn.ReLU(inplace = True) ) self.converter = nn. Sequential( nn.Conv2d(nb_alexnet_channels , nb_channels , kernel_size = 3, padding = 1), nn.ReLU(inplace = True) )
for k in range( nb_residual_blocks ):
self.fc = nn.Linear(nb_channels , 10)
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 86 / 89
def freeze_features (self , q): for p in self.features. parameters (): # If frozen (q == True) we do NOT need the gradient
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 87 / 89
def freeze_features (self , q): for p in self.features. parameters (): # If frozen (q == True) we do NOT need the gradient
def forward(self , x): x = self.features(x) x = self.converter(x) for b in self. resnet_blocks : x = x + b(x) x = self. final_average (x).view(x.size (0) ,
x = self.fc(x) return x
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 87 / 89
nb_epochs = 100 nb_epochs_frozen_features = nb_epochs // 2 nb_residual_blocks = 16 nb_channels = 64 model , criterion = Monster(nb_residual_blocks , nb_channels ), nn. CrossEntropyLoss () if torch.cuda. is_available (): model.cuda () criterion.cuda ()
model.train(True) for e in range(nb_epochs):
acc_loss = 0.0 for input , target in iter( train_loader ): if torch.cuda. is_available (): input , target = input.cuda (), target.cuda () input , target = Variable(input), Variable(target)
loss = criterion(output , target) acc_loss += loss.data [0] model.zero_grad () loss.backward ()
print(e, acc_loss)
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 88 / 89
nb_test_errors , nb_test_samples = 0, 0 model.train(False) for input , target in iter( test_loader ): if torch.cuda. is_available (): input = input.cuda () target = target.cuda () input = Variable(input)
wta = torch.max(output.data , 1) [1]. view (-1) for i in range(target.size (0)): nb_test_samples += 1 if wta[i] != target[i]: nb_test_errors += 1 print(’ test_error {:.02f}% ({:d}/{:d}) ’.format( 100 * nb_test_errors / nb_test_samples , nb_test_errors , nb_test_samples ) )
Fran¸ cois Fleuret EE-559 – Deep learning / 7. Networks for computer vision 89 / 89