06 Convolutional Neural Networks
🚧 Չորս դասախոսության սլայդերը պատրաստ են (L16–L19)։ Տնայիններից պատրաստ են HW1b և HW1c-ն (լուծումներով)․ HW2–HW4-ը դեռ գրվում են։
Այս գլխի մի մասը հենվում է LMU I2DL (slds-lmu/lecture_i2dl) նյութի վրա, CC BY 4.0։
🎲 Random
TBD
📚 Նյութը
Չորս դասախոսություն (սլայդերը ml/ch6_cnn/ պանակում)․
- L16 — CNN Foundations: պատկերը որպես թվերի ցանց, RGB և HSV, կոնվոլյուցիա 1D→2D, kernel-ների գործիքատուփ, padding / stride / pooling, ինչու՞ 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-ի թակարդը), Grad-CAM և Clever Hans, պիտակավորման տնտեսագիտությունը. PDF
- L19 — Vision Tasks: detection (IoU, NMS, YOLO), 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:
- The engine 🧀 —
convolve2d_naive(loop over output pixels), ապաconvolve2d_fast(loop over thek×ktaps, vectorised). Երկուսը պետք է համընկնեն1e-12ճշտությամբ։ Ստուգումները՝ identity kernel, L16-ի սլայդի օրինակը, ևo = ⌊(i − k + 2p)/s⌋ + 1բանաձևը։ - 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-ը։ - The thumbnail generator 🧀🧀 — YouTube-ի lo-fi երաժշտության thumbnail-ը՝ շերտ առ շերտ. cover → text → background → blur → darken։
σ = 30նշանակում է 181×181 kernel = 32,761 tap մեկ պիքսելի համար, ուստի separability-ն այստեղ ընտրություն չէ։ - 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:
- Blur as denoising 🧀🧀 — գտեք այն
σ-ն, որից հետո առանձին կորիզները միաձուլվում են։ - Edge orientation 🧀🧀 — Sobel X-ը տեսնում է ուղղահայաց եզրերը, Y-ը՝ հորիզոնականները. մեկ առանցքը վերականգնում է gradient-ի էներգիայի միայն ~65%-ը։
- Separate the stains 🧀🧀🧀 — RGB-ով չի ստացվում (այն իրականում պարզապես brightness threshold է՝ մի threshold-ի 0.15 փոփոխությունը պատասխանը փոխում է 9 անգամ)։ HSV-ով hue-ի առանցքի վրա haematoxylin-ը և eosin-ը ~20° հեռու են։
- Search the thresholds 🧀🧀🧀 — grid search երկու knob-ի վրա, ինչպես [08]-ում։ Բայց validation set չկա — ոչ ոք ոչ մի կորիզ չի պիտակավորել, ուստի «լավագույն» հարցը չի տրվում, միայն «հավանական»-ը։
- Count the nuclei 🧀🧀🧀 — connected components, ապա գնահատեք, թե ինչ արժե այդ թիվը (կպչող կորիզները դառնում են մեկ component)։
- Quantify slide B 🧀🧀🧀 — fibrosis և steatosis-ի մակերեսը trichrome ներկի վրա։
- The honesty question 🧀 — կիրառեք slide A-ի կանոնը slide B-ի վրա։ Բացատրեք, թե ինչու է քանդվում։
Առաջադրանք: HW1c_biopsy.ipynb (download) · view on GitHub
Լուծում: HW1c_biopsy_solution.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-ի փորձ։