Loading W Code...
6
Topics
Vision
Focus
Indian Context
Traffic CCTV analysis, crop disease detection, Aadhaar photo matching
Concept Level: Beginner
# WHY CNNS ARE NECESSARY
import numpy as np
import matplotlib.pyplot as plt
# Compare parameter counts
print("="*60)
print("PARAMETER COUNT COMPARISON")
print("="*60)
# Image sizes
image_sizes = [(28, 28, 1), (64, 64, 3), (224, 224, 3)]
for height, width, channels in image_sizes:
input_size = height * width * channels
# MLP approach
hidden_neurons = 1000
mlp_params = input_size * hidden_neurons + hidden_neurons # weights + biases
# CNN approach (assuming 32 3x3 filters)
filters = 32
filter_size = 3
cnn_params = filter_size * filter_size * channels * filters + filters
print(f"\nImage: {height}Ć{width}Ć{channels} = {input_size:,} pixels")
print(f" MLP (1000 neurons): {mlp_params:,} parameters")
print(f" CNN (32 3Ć3 filters): {cnn_params:,} parameters")
print(f" Reduction: {mlp_params/cnn_params:.0f}x fewer params!")
# Visualize translation invariance problem
print("\n" + "="*60)
print("TRANSLATION INVARIANCE PROBLEM")
print("="*60)
# Create a simple pattern
pattern = np.zeros((8, 8))
pattern[2:4, 2:4] = 1 # Small square
# Shift it
shifted = np.zeros((8, 8))
shifted[5:7, 5:7] = 1
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
axes[0].imshow(pattern, cmap='gray')
axes[0].set_title('Original Position')
axes[0].axis('off')
axes[1].imshow(shifted, cmap='gray')
axes[1].set_title('Shifted Position')
axes[1].axis('off')
# Show flattened difference
diff = np.abs(pattern.flatten() - shifted.flatten())
axes[2].bar(range(64), diff)
axes[2].set_title('Difference in Flattened Vectors')
axes[2].set_xlabel('Pixel Index')
plt.suptitle('Same Pattern, Different Position = MLP Sees as Different!', fontsize=14)
plt.tight_layout()
plt.show()
print("\nš” For MLP: same pattern at different positions = completely different input!")
print(" For CNN: same filter detects pattern regardless of position!")