← Tous les exercices
Une convolution avec padding et stride
Partie 1 · ★★★★
Complète une convolution générale sur liste de listes. Elle commence par entourer l'image d'un cadre de zéros (padding), puis fait glisser la fenêtre en avançant de s pixels (stride).
Applique-la au carré de 6 × 6 avec le filtre vertical : (1) par défaut (4 × 4) ; (2) avec p=1 : la carte garde 6 × 6, et les zéros du cadre créent un faux bord à droite de l'organe ; (3) avec s=2 : on ne garde qu'une réponse sur deux dans chaque sens, soit 2 × 2.
image = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1], [0, 0, 0, 1, 1, 1], [0, 0, 0, 1, 1, 1], [0, 0, 0, 1, 1, 1]] filtre_vertical = [[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]] def remplir(image, p): n = len(image) vide = [0] * (n + 2 * ___) return [vide[:] for _ in range(p)] + [[0] * p + ligne + [0] * p for ligne in image] + [vide[:] for _ in range(p)] def convolution(image, filtre, p=0, s=1): im = remplir(image, p) k = len(filtre) N = len(im) return [[sum(im[i + a][j + b] * filtre[a][b] for a in range(k) for b in range(k)) for j in range(0, N - k + 1, ___)] for i in range(0, N - k + 1, s)] carte = convolution(image, filtre_vertical) carte_padding = convolution(image, filtre_vertical, p=1) carte_stride = convolution(image, filtre_vertical, s=2)
Ctrl/⌘+Entrée