06 Convolutional Neural Networks

Warning

🚧 Not finished. This chapter has not been taught yet, and the page below was drafted by Claude rather than written up from a delivered lecture. Treat it as a preview: expect gaps and mistakes until it has been reviewed.

Warning

🚧 Չորս դասախոսության սլայդերը պատրաստ են (L16–L19)։ Տնայիններից պատրաստ են HW1b և HW1c-ն (լուծումներով)․ HW2–HW4-ը դեռ գրվում են։

🎲 Random

TBD

📚 Նյութը

Չորս դասախոսություն (սլայդերը ml/ch6_cnn/ պանակում)․

  • L16 — CNN Foundations: պատկերը որպես թվերի ցանց (գույնը՝ [33]-ի կարճ recap-ով), Hubel & Wiesel-ի բջիջները և CNN-ների ծագումը, կոնվոլյուցիա 1D→2D, kernel-ների գործիքատուփ, padding / stride / pooling, ինչպես է սովորում shared kernel-ը (գրադիենտները գումարվում են), ինչու՞ dense ցանցը սխալ գործիք է պատկերների համար. PDF
  • L17 — CNN Architectures: ImageNet-ի պատմությունը, LeNet → AlexNet → VGG → ResNet, residual learning-ը որպես «boosting խորության մեջ», և 2026-ի տեսլականը (ViT, VLM, diffusion, SAM). PDF
  • L18 — Transfer Learning: ինչու՞ եք հազվադեպ զրոյից սովորեցնում, freeze vs fine-tune (+ BatchNorm-ի թակարդը), 2026-ի pretrained backbone-երը (DINOv3, CLIP), Grad-CAM և Clever Hans, պիտակավորման տնտեսագիտությունը. PDF
  • L19 — Vision Tasks: detection (IoU, NMS, YOLO, և mAP-ն ու YOLO-ի մեկ cell-ի decode-ը՝ ձեռքով), segmentation (semantic vs instance, U-Net), կոնվոլյուցիայի տարբերակները (dilated, transposed, separable). PDF

Լրացուցիչ՝ The Convolution, Mathematically — ոչ պարտադիր հավելված (convolution theorem, Fourier, cross-correlation). PDF

📝 Թեմայի վերաբերյալ հարցաշար (Google Form): TBD

🏡 Տնային

HW1b — Photoshop from scratch 🧀🧀

Կոնվոլյուցիան գրվում է ձեռքով, առանց scipy.signal-ի և cv2-ի։ Ամեն ֆիլտր Photoshop-ի իրական menu item է. Filter > Other > Custom երկխոսությունը բառացիորեն 5×5 kernel-ի ցանց է։ Ամեն ինչ աշխատում է laptop-ի CPU-ի վրա, առանց GPU-ի և առանց training-ի։

Tasks:

  1. The engine 🧀 — convolve2d_naive (loop over output pixels), ապա convolve2d_fast (loop over the k×k taps, vectorised). Երկուսը պետք է համընկնեն 1e-12 ճշտությամբ։ Ստուգումները՝ identity kernel, L16-ի սլայդի օրինակը, և o = ⌊(i − k + 2p)/s⌋ + 1 բանաձևը։
  2. The kernel zoo 🧀 — ամեն ֆիլտր առանձին, իր knob-ով՝ box blur (k = 3…41), Gaussian (σ = 1…8), motion blur (4 ուղղություն × 3 երկարություն), unsharp mask (4 amount × 3 scale), emboss (4 պտույտ), Sobel X/Y/magnitude, և ձեր սեփական երեք kernel-ը։
  3. The thumbnail generator 🧀🧀 — YouTube-ի lo-fi երաժշտության thumbnail-ը՝ շերտ առ շերտ. cover → text → background → blur → darken։ σ = 30 նշանակում է 181×181 kernel = 32,761 tap մեկ պիքսելի համար, ուստի separability-ն այստեղ ընտրություն չէ։
  4. HSV 🧀🧀 — rgb_to_hsv ձեռքով, ապա Hue/Saturation panel-ը՝ hue rotation, desaturation, «կարմիր զգեստը սև-սպիտակ ֆիլմում»։
  • Bonus 🎁 — ցույց տվեք, որ 2D Gaussian-ը երկու 1D-ի outer product-ն է (k² tap → 2k), և չափեք արագացումը։

Առաջադրանք: HW1b_photoshop.ipynb (download) · view on GitHub

Լուծում: HW1b_photoshop_solution.ipynb (download) · view on GitHub

HW1c — A liver biopsy, filtered 🧀🧀🧀

HW1b-ի գործիքները կիրառվում են լյարդի իրական բիոպսիայի վրա (H&E և Masson trichrome ներկեր)։ Աշխատում է — հետո անցնում եք երկրորդ slide-ին և դադարում է աշխատել։ Հենց դա է ամբողջ գլխի փաստարկը։

Tasks:

  1. Blur as denoising 🧀🧀 — գտեք այն σ-ն, որից հետո առանձին կորիզները միաձուլվում են։
  2. Edge orientation 🧀🧀 — Sobel X-ը տեսնում է ուղղահայաց եզրերը, Y-ը՝ հորիզոնականները. մեկ առանցքը վերականգնում է gradient-ի էներգիայի միայն ~65%-ը։
  3. Separate the stains 🧀🧀🧀 — RGB-ով չի ստացվում (այն իրականում պարզապես brightness threshold է՝ մի threshold-ի 0.15 փոփոխությունը պատասխանը փոխում է 9 անգամ)։ HSV-ով hue-ի առանցքի վրա haematoxylin-ը և eosin-ը ~20° հեռու են։
  4. Search the thresholds 🧀🧀🧀 — grid search երկու knob-ի վրա, ինչպես [08]-ում։ Բայց validation set չկա — ոչ ոք ոչ մի կորիզ չի պիտակավորել, ուստի «լավագույն» հարցը չի տրվում, միայն «հավանական»-ը։
  5. Count the nuclei 🧀🧀🧀 — connected components, ապա գնահատեք, թե ինչ արժե այդ թիվը (կպչող կորիզները դառնում են մեկ component)։
  6. Quantify slide B 🧀🧀🧀 — fibrosis և steatosis-ի մակերեսը trichrome ներկի վրա։
  7. The honesty question 🧀 — կիրառեք slide A-ի կանոնը slide B-ի վրա։ Բացատրեք, թե ինչու է քանդվում։

Առաջադրանք: HW1c_biopsy.ipynb (download) · view on GitHub

Լուծում: HW1c_biopsy_solution.ipynb (download) · view on GitHub

Project — Barcode scanner, ձեռքով սարքած 🧀🧀🧀

Ամբողջական pipeline՝ լուսանկարից մինչև 13 թվանշան, առանց neural network-ի և առանց training-ի — բայց այս անգամ, ի տարբերություն HW1b/HW1c-ի, cv2-ն թույլատրված է։ Սա reference walkthrough է (ոչ թե TODO-ներով տնային)․ ամեն քայլ բացատրված է, և ամեն պնդում չափված է հենց notebook-ի մեջ։

Barcode-ը HW1c-ի հակապատկերն է․ բիոպսիան ոչ ոք չի սարքել, որ camera-ին հեշտ լինի, իսկ barcode-ը հենց դրա համար է սարքված — quiet zone-ներ, guard bar-եր, parity, check digit։ Երբ աշխարհը սարքված է մեքենայի համար, classical CV-ն ճիշտ գործիքն է։

Ինչ կա մեջը.

  1. Check digit — որ սխալներն է բռնում (բոլոր single-digit-ները), որոնք՝ ոչ (5-ով տարբերվող հարևան զույգերի փոխատեղումները)՝ չափված։
  2. EAN-13 encoder — L/G/R այբուբենները, parity-ի մեջ թաքնված 13-րդ թվանշանը։
  3. Decoder — scanline → runs → widths → digits, և ուղղության հայտնաբերում («գլխիվայր էլ կկարդա»)։
  4. Դիմացկունություն — blur, noise, լուսավորության ramp․ ամեն fix մտնում է միայն before/after չափումով (adaptive threshold-ը ramp-ը սարքում է, բայց noise-ը ջարդում է — cascade + check digit)։
  5. Կողմնորոշում — gradient-ներ ու structure tensor, 0–170° բոլոր անկյուններով։
  6. Localization — դասական |gx|-|gy| հնարքը (45°-ում մեռնում է) ընդդեմ rotation-proof coherence map-ի։
  7. Իրական լուսանկարներ — Wikimedia-ի 6 նկար․ 5/6, մեկ ազնիվ ձախողում (շշի ուսին փաթաթված barcode) և մեկ բռնված «checksum-valid սուտ»։
  8. Մրցում OpenCV-ի built-in detector-ի դեմ — նույն 6 նկարի վրա այն կարդում է 3/6։

Walkthrough: project_barcode.ipynb (download) · view on GitHub

HW2–HW4 — TBD

  • HW2 (L17) — architecture comparison CIFAR-10-ի վրա։
  • HW3 (L18) — transfer learning + Grad-CAM audit (Oxford-IIIT Pets)։
  • HW4 (L19) — pretrained YOLO ձեր սեփական լուսանկարների վրա + dilated conv-ի փորձ։

Flag Counter