From a4b833a8b261d6aed2dd2fb2cc2337284627c1f1 Mon Sep 17 00:00:00 2001 From: imartinovic Date: Tue, 12 Dec 2023 20:39:13 +0100 Subject: [PATCH 1/7] [lab3en] Translate first part --- lab/lab3en.md | 376 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 376 insertions(+) create mode 100644 lab/lab3en.md diff --git a/lab/lab3en.md b/lab/lab3en.md new file mode 100644 index 0000000..5773661 --- /dev/null +++ b/lab/lab3en.md @@ -0,0 +1,376 @@ +--- +layout: page +title: Third Laboratory Exercise +description: Instructions for the third laboratory exercise. +nav_exclude: true +--- + +# Third laboratory exercise: object detection + +In this exercise, we will focus on object detection in images - one of the most important tasks in computer vision. Object detection involves the localization and classification of objects within an image. Localization is typically achieved by estimating the coordinates of a rectangle that best describes the object. Early approaches primarily dealt with binary object detection (such as the Viola-Jones algorithm), while more recent methods involve multi-class detection. + +The problem with early approaches was extracting shared features that would be good enough for recognizing objects of different semantic classes. This problem has been addressed with the advent of deep models and end-to-end learning capabilities. + +The development of object detection algorithms has been accompanied by the evolution of datasets. For a long time, the standard dataset was [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/), which distinguishes 20 object classes. Recently, this position has been taken over by the [MS COCO](https://cocodataset.org/#home) dataset, which identifies 80 object classes. Recognition across over 1000 different semantic classes is now being considered with the [LVIS](https://www.lvisdataset.org/) dataset. + +Modern approaches to object detection are based on deep models, and several distinctions exist among them. The most popular approaches assume anchor boxes at all locations on the feature map and predict the relative shifts and scales of these boxes to best describe the object. Examples of this group include popular approaches like Faster R-CNN, SSD, YOLO, and others. Other approaches (e.g., CornerNet) detect objects using key points paired based on predicted embeddings. Transformers have introduced a new approach based on predicting a set of queries, from which the object's location and classification are directly computed. + +In this exercise, we will delve into the Faster R-CNN model, specifically the version based on feature pyramids. + +# Faster R-CNN +The key components of the Faster R-CNN model that we will study are: +- The backbone, which computes image features, +- The upsampling path (FPN, feature pyramid network) that calculates a feature pyramid of approximately equal semantic levels, +- The region proposal network (RPN) for proposing regions of interest, +- The region of interest (RoI) pooling layer, +- And the final layer for region classification and fine-tuning of bounding boxes. +faster +Image 1. The architecture of the Faster R-CNN model based on the feature pyramid. + +In Figure 1, a detailed inference path of the Faster R-CNN model is presented, illustrating the interaction among the mentioned components. + +Considering that training such a model requires significant computational resources, in this exercise, we will focus solely on the forward pass of a pre-trained model on the COCO dataset. Your task will be to augment the provided implementation of the Faster R-CNN model. The instructions will guide you through the implementation step by step. The correctness of each step in your solution will be verified through tests comparing intermediate results of your implementation with those of the original implementation. + +## 1. Environment installation +For the purposes of this exercise, we will use Python 3 along with the following Python packages: +- [PyTorch](https://pytorch.org/) +- [torchvision](https://pytorch.org/vision/stable/index.html) +- [Pillow](https://python-pillow.org/) +- [Matplotlib](https://matplotlib.org/) +- [NumPy](https://numpy.org/) + +After ensuring that you have all the required packages, download the exercise skeleton from [GitHub](https://github.com/cvunizg/cvunizg-lab3-faster). Then, within the repository, create a new directory named `data` and unpack the contents of this [directory](https://www.dropbox.com/sh/wbybqchx98wg8ci/AAA_2KlewTokFc2OY-fC0_wna?dl=0) into it. The downloaded file contains saved intermediate results of the forward pass of the considered model, which will be used during the tests. +## 2. Okosnica +Put zaključivanja modela Faster R-CNN započinje +izlučivanjem značajki uz pomoć okosnice. +Okosnicu obično čini klasifikacijski model +bez globalnog sažimanja i potpuno povezanog sloja, +a koji je prethodno treniran na ImageNetu. +Inicijalizacijom okosnice s ImageNet parametrima +pospješujemo proces treniranja modela za ciljani zadatak +te smanjujemo potrebnu količinu gusto označenih slika. +U slučaju ograničenih računalnih resursa, +tijekom učenja detekcijskog modela +parametri okosnice se mogu i smrznuti. +Ipak, češći je slučaj da se oni tijekom treniranja +fino ugađaju za detekciju objekata. + +Naš azmatrani model za okosnicu +koristi model ResNet-50 +koji pripada obitelji modela +s rezidualnim vezama. +Osnovna gradivna jedinica modela ResNet-50 +i njegove veće braće (ResNet-101, ResNet-152) +prikazana je na slici 2. +Za ovakvu rezidualnu jedinicu kažemo da ima usko grlo (engl. bottleneck) +jer prva 1x1 konvolucija smanjuje broj kanala. +To značajno smanjuje memorijski i računski otisak +jer nakon nje slijedi skuplja 3x3 konvolucija. +Konačno, broj kanala se ponovno napuhuje +uz pomoć druge 1x1 konvolucije. +Na slici se može primijetiti i preskočna veza +koja ulaz u rezidualnu jedinicu +pribraja rezultatu obrade +iz konvolucijskih slojeva. +Ona omogućuje modelu bolji protok +gradijenata do ranijih slojeva +te učenje jednostavnijeg +rezidualnog mapiranja +koje odgovara razlici između ulaza +i "željenog" izlaza. + +faster + +Slika 2. Rezidualna konvolucijska jedinica s uskim grlom. + +Na slici 1 okosnica je prikazana nijansama zelene boje +i sastoji se od četiri rezidualna bloka. +Jednim blokom označavamo skup rezidualnih jedinica +koje se izvršavaju nad značajkama iste prostorne rezolucije. +Tako prvi rezidualni blok na svome izlazu daje značajke +koje su četiri puta poduzorkovane u odnosu na ulaznu sliku. +Na slici 1 je to označeno s "/4" na odgovarajućim strelicama. +Slično, drugi rezidualni blok daje značajke +koje su 8 puta poduzorkovane, treći 16, a četvrti 32 puta. +U literaturi se često ove značajke referira s prefiksom "res" +i brojem koji odgovara eksponentu potencije broja 2 koja +označava razinu poduzorkovanja. +Na primjer, izlazi prvog rezidualnog bloka označavaju se kao "res**2**", +jer su 2^**2** = 4 puta poduzorkovani u odnosu na ulaznu sliku. +Izlazi drugog rezidualnog bloka označavaju se kao "res**3**", +jer su 2^**3** = 8 puta poduzorkovani u odnosu na ulaznu sliku. +Slično, značajke preostala dva bloka označavat ćemo kao "res**4**" i "res**5**". + +### Zadaci +1. Obzirom da korištena okosnica očekuje normaliziranu sliku na ulazu, vaš prvi zadatak je implementirati funkciju + za normalizaciju slike. Deklaraciju funkcije `normalize_img` pronaći ćete u datoteci `utils.py`. Funkcija na + ulazu prima tenzor `img` koji je oblika (H, W, 3) gdje su H i W dimenzije slike. Funkcija treba vratiti + normalizirani tenzor oblika (3, H, W). Normalizacija se sastoji od skaliranja na interval [0-1], oduzimanja + srednje vrijednosti `image_mean` i dijeljenja sa standardnom devijacijom `image_std`. Srednja vrijednost i + standardna devijacija oblika su (3). Ispravnost vaše implementacije možete provjeriti pozivom testne skripte + "test_backbone.py". Pozicionirajte se u korjenski direktorij projekta te pozovite `python3 -m tests.test_backbone`. + +2. Dopunite implementaciju modela ResNet u datoteci `resnet.py`. Prvo, prema slici 2 dopunite metodu `Bottleneck.forward` koja implementira unaprijedni prolaz kroz rezidualnu jedinicu s uskim grlom. Zatim, u metodi `ResNet._forward_impl` spremite izlaze iz rezidualnih blokova u rječnik `out_dict` pod ključevima "res2", "res3", "res4" + i "res5". Primijetite da se u kodu prvi rezidualni blok označava s `layer1`, drugi s `layer2`, itd. Provjerite + ispravnost vaše implementacije pokretanjem iste testne skripte kao u prethodnom zadatku. + +3. Koliko kanala imaju izlazi iz pojedinog rezidualnog bloka? Značajke kojeg rezidualnog bloka su semantički + najbogatije, a koje prostorno najpreciznije? + +## 3. Put za naduzorkovanje + +Općenito, zadaća puta za naduzorkovanje (engl. upsampling path) +je izgradnja semantički bogate reprezentacije +koja je istovremeno i prostorno precizna. +Primijetite da niti jedan od izlaza okosnice ne zadovoljava oba spomenuta kriterija. +Značajke iz kasnijih blokova okosnice su semantički bogatije, +ali je njihova prostorna rezolucija manja. +S druge strane, značajke iz ranijih blokova okosnice +imaju finiju rezoluciju i zbog toga su prostorno preciznije, +ali su semantički manje bogate. +Stoga, ljestvičasti put za naduzorkovanje +postupno gradi željenu reprezentaciju +naduzorkovanjem semantički bogate reprezentacije +i kombiniranjem s prostorno preciznijim značajkama. +Različite inačice ove ideje prisutne su u mnogim modelima za gustu predikciju. + +Posebne varijante puta naduzorkovanja +prisutne su u detekciji objekata +koji umjesto reprezentacije na jednoj razini +grade rezolucijsku piramidu značajki. +Razlog tomu je što bi oslanjanje na +značajke isključivo jedne razine +teško rezultiralo invarijantnosti na mjerilo. +Primjerice, značajke niže rezolucije su dobre +za detekciju velikih objekata, +ali loše za detekciju malih jer +bi se informacija o njihovoj prisutnosti +mogla sasvim izgubiti uslijed poduzorkovanja. +S druge strane, na većim rezolucijama +bismo vjerojatno imali problema +s detekcijom velikih objekata +zbog ograničenog receptivnog polja +konvolucijskih modela. + +Stoga, već i prvi duboki modeli za detekciju objekata poput [SSD-a](https://arxiv.org/pdf/1512.02325.pdf) razmatraju +piramidu značajki (engl. feature pyramid). Oni izravno regresiraju opisujuće okvire iz značajki okosnice različitih +rezolucija. Međutim, problem s takvim pristupom je u tome što značajke iz različitih faza okosnice se također nalaze +na različitim semantičkim razinama. Tim problemom bavi se [FPN](https://arxiv.org/pdf/1612.03144.pdf) koji +koristi dodatni put za naduzorkovanje za izgradnju semantički bogate i ujednačene +rezolucijske piramide značajki. + +Naša inačica modela Faster R-CNN također koristi FPN. +Na slici 1 put naduzorkovanja označen je crvenom bojom. +Različite nijanse crvene boje ukazuju na činjenicu da +moduli za svaku razinu piramide +koriste različite parametre. +Svaki modul za naduzorkovanje ima dvije konvolucijske jedinice. +Jednu koja se primjenjuje na odgovarajuće značajke iz okosnice +(često nazivane preskočnim ili lateralnim vezama) +kako bi se izjednačio broj kanala s putem naduzorkovanja. +U literaturi se ove konvolucije stoga često zovu i +kanalnim projekcijama (engl. channel projection). +Druga konvolucijska jedinica se primjenjuje na zbroj +preskočne veze i naduzorkovane sume iz prethodne razine +za izračun konačne reprezentacije na toj razini piramide. +Detaljniji prikaz razmatranog puta nadozorkovanja +nalazi se na slici 3. + +faster +Slika 3. Detaljniji prikaz puta naduzorkovanja koji gradi piramidu značajki. +### Zadaci +1. U datoteci `utils.py` implementirajte modul `ConvNormActBlock` čiji se unaprijedni prolaz sastoji redom od + konvolucijskog sloja, te opcionalno aktivacijske funkcije i opcionalno normalizirajućeg sloja. Primijetite da modul + nasljeđuje razred `nn.Sequential` koji redom provodi zadanu listu slojeva. Za dodavanje sloja u listu možete + koristiti metodu `self.append`. Argument `padding` koji kontrolira nadopunjavanje prilikom konvolucije potrebno + je postaviti tako da se očuvaju prostorne dimenzije ulaza. + +2. U datoteci `fpn.py` implementirajte unaprijedni prolaz puta za naduzorkovanje u metodi `FeaturePyramidNetwork.forward`. Unaprijedni prolaz implementirajte prema slici 3. Pripazite na komentare napisane u kodu. + +3. Testirajte svoju implementaciju puta nadozurkovanja pokretanjem naredbe `python3 -m tests.test_fpn`. + +## 4. Mreža za predlaganje regija od interesa (RPN) +Zadaća mreže za predlaganje regija od interesa +je izdvojiti pravokutne regije unutar kojih bi +se mogao nalaziti neki objekt. +Taj zadatak sveden je na binarnu klasifikaciju +sidrenih okvira u pozitive i negative. +Negativi se odbacuju jer su to okviri koji ne sadrže objekte, +dok se pozitivi parametriziranom transformacijom +mijenjaju na način da preciznije uokviruju ciljani objekt. +Primijetite da mreža za predlaganje regija od interesa +ne razlikuje semantičke razrede objekata +(u literaturi se često koristi engl. izraz class-agnostic). +Njena zadaća je samo procijeniti +bi li se neki objekt mogao nalaziti +unutar razmatranog sidrenog okvira ili ne. +Pozitivni okviri se transformiraju parametrima $$t_x, t_y$$ +koji kontroliraju horizontalni i vertikalni pomak centra okvira +te parametrima $$t_w, t_h$$ koji kontroliraju +horizontalno i vertikalno skaliranje okvira. +Za spomenute parametre vrijede sljedeće jednadžbe: + +$$ +\begin{align} +t_x &= \frac{x - x_a}{w_a} \\ +t_y &= \frac{y - y_a}{h_a} \\ +t_w &= \log \frac{w}{w_a} \\ +t_h &= \log \frac{h}{h_a} +\end{align} +$$ + +gdje $$x_a, y_a, w_a, h_a$$ predstavljaju koordinate centra, širinu i visinu sidrenog okvira, +a $$x, y, w, h$$ predstavljaju koordinate centra, širinu i visinu ciljanog objekta. + +Iz slike 1 vidljivo je da se mreža +za predlaganje regija od interesa +primjenjuje na svaku razinu piramide značajki. +Jednaka nijansa plave boje za svaku razinu piramide +sugerira dijeljenje parametara. +Pored značajki ulaz u RPN čine i sidreni okviri +koji se također generiraju ovisno o razini piramide. +Konkretno, generator sidrenih okvira +smješta okvire u svakom pikselu +razmatranog tenzora značajki, +a njihova veličina ovisi o razini piramide. +Tako se na razini piramide najveće rezolucije +pretpostavljaju sidreni okviri najmanje osnovne veličine +jer na toj razini želimo detektirati male objekte. +Obrnuto, na razini piramide najmanje rezolucije +nalaze se sidreni okviri najveće osnovne veličine +jer na toj razini želimo detektirati velike objekte. +Važan detalj je da generator sidrenih okvira +ne pretpostavlja samo jedan okvir po lokaciji, +nego više njih, a razlikuju se po omjeru visine i širine +kako bi se mogli detektirati objekti različitih oblika. +Konkretno, u modelu kojeg mi razmatramo +osnovne veličine sidrenih okvira su [32, 64, 128, 256, 512] +za redom razine piramide [fpn2, fpn3, fpn4, fpn5, fpn6], +a razlikuju se omjeri visine i širine [1:1, 1:2, 2:1]. +RPN također zasebno razmatra +svaki od pretpostavljenih sidrenih okvira +na nekoj lokaciji. +To znači da RPN klasifikator +predviđa onoliko mapa značajki +koliko ima pretpostavljenih sidrenih okvira +u svakoj lokaciji. +Slično tome, RPN regresor parametara transformacije +predviđa 4 puta više mapa značajki +negoli ima pretpostavljenih sidrenih okvira +u svakoj lokaciji. +Na slici ispod prikazani su sidreni okviri +čiji je omjer presjeka i unije +s okvirom igrača na slici +veći od 0.65. + +bb44 anchors +
Slika 4. Pretpostavljeni sidreni okviri koji se s okvirom košarkaša na slici preklapaju s omjerom presjeka i +unije većim od 0.65 + +Spomenimo još da RPN ne propušta sve pozitivne okvira kroz unaprijedni prolaz. +Nakon što se odbace negativi i na +pozitive primjeni predviđena transformacija, +pristupa se filtriranju. +Prvo se odbacuju okviri čija je površina manja od zadane, +a zatim i oni koji imaju vjerojatnost prisutnosti objekta +nižu od zadanog praga. +Nakon toga se potiskuju nemaksimalni odzivi, +odnosno okviri koji imaju visoko preklapanje s nekim drugim pouzdanim okvirom. +Konačno, propušta se samo 1000 okvira s najvećom vjerojatnošću. +Ovo filtriranje značajno ubrzava unaprijedni prolaz kroz mrežu. +Na slici ispod prikazani su okviri koje je predložio RPN, +a imaju omjer presjeka i unije s okvirom igrača na slici +veći od 0.65. + +rpn +
Slika 5. Regije od interesa predložene od strane RPN-a koje se s okvirom košarkaša na slici preklapaju s +omjerom presjeka i unije većim od 0.65. + +### Zadaci +1. U datoteci `rpn.py` dovršite inicijalizaciju klasifikatora i regresora RPN-a u modulu RPNHead. +2. U datoteci `utils.py` dovršite implementaciju funkcije `decode_boxes` koja primjenjuje predviđenu transformaciju + na sidrene okvire. Implementaciju testirajte naredbom `python3 -m tests.test_decode_boxes`. + +## 5. Sažimanje po regijama (ROIPool) +Sažimanje po regijama (engl. Region of Interest Pooling, ROIPool) +izlučuje reprezentaciju fiksne veličine +za sve regije od interesa koje predlaže RPN. +Sažimanje po regijama prvo odredi +područje u razmatranom tenzoru značajki +koje odgovara regiji od interesa. +Zatim se to područje dijeli +na manja podpodručja +približno jednake veličine, +a njihov broj određen je parametrom modela. +Zatim se iz značajke svakoga područja +sažimlju prema zadanoj funkciji (npr. maksimumom). +Ovaj proces ilustriran je na gif-u ispod +za tenzor značajki sa samo jednim kanalom +i zadanom veličinom izlaza 2x2. + +rpn +
Slika 6. Ilustracija operacije sažimanja po regijama od interesa. Izvor: Deepsense.ai. + +U našem razmatranom modelu +veličina izlaza ROIPool-a je 7x7, +ali to ne znači da se svaki +okvir predstavlja sa samo 49 značajki. +Taj broj treba još pomnožiti s brojem kanala +razmatranog tenzora značajki +što odgovara broju kanala FPN-a, +a to je 256. +Dakle, svaki okvir predstavljen je s 7x7x256=12544 značajki. +Spomenimo još da novije inačice dvoprolaznih modela +obično koriste napredniji algoritam ROIAlign koji +koristi interpolaciju umjesto kvantizacije +za određivanje rubnih vrijednosti. + +## 6. Semantička klasifikacija i fino ugađanje okvira +Završni modul našeg razmatranog modela +na ulazu prima sažetu reprezentaciju i koordinate +svih regija od interesa koje je predložio RPN. +Zadaća ovog modula +je semantička klasifikacija +pristiglih okvira +i predviđanje paramatera +još jedne transformacije +za fino ugađanje okvira +na željene objekte. +Razlika u odnosu na RPN je što ovaj modul +klasificira okvire u +jedan od semantičkih razreda ili pozadinu. +Postojanje razreda koji predstavlja pozadinu +omogućuje modelu da i u ovome koraku +odbaci neke okvire koje smatra negativima. + +Zanimljiv detalj je da se za svaki okvir +predviđaju odvojeni parametri transformacije +za svaki od semantičkih razreda. +Možemo zamisliti kao da svaki okvir +umnožimo onoliko puta koliko imamo razreda +i za svaki od njih predvidimo +parametre transformacije. +Ovo omogućuje detekciju +preklapajućih objekata različitih razreda. + +Ovaj modul prvo računa dijeljenu reprezentaciju +za klasifikacijsku i regresijsku glavu +uz pomoć dva potpuno povezana sloja. +Zatim se na tu reprerzentaciju primjenjuju +još dva potpuno povezana sloja: +jedan za klasfikaciju, +a drugi za regresiju +semantički ovisnih +parametara transformacije. + +### Zadaci +1. U datoteci `faster.py` dovršite implementaciju funkcije `forward` u modulu `TwoMLPHead`. +2. U datoteci `faster.py` dovršite inicijalizaciju klasifikacijske i regresijske glave u modulu `FastRCNNPredictor`. +3. U datoteci `run_faster.py` implementirajte iscrtavanje rezultate detekcije za sve okvire čija je pouzdanost veća od + 0.95. +4. Pokrenite program naredbom `python3 run_faster.py` i provjerite je li detekcija uspješna. + +Očekivani rezultat izvođenja programa `run_faster.py` prikazan je na slici ispod. + +bb44 preds +
Slika 7. Rezultat izvođenja modela Faster R-CNN treniranog na skupu COCO. From 9fcc64b966a7ea98b245cfb86562e08e34489fd2 Mon Sep 17 00:00:00 2001 From: imartinovic Date: Wed, 20 Dec 2023 22:47:28 +0100 Subject: [PATCH 2/7] Add a little bit more translation --- lab/lab3en.md | 205 ++++++++++++-------------------------------------- 1 file changed, 48 insertions(+), 157 deletions(-) diff --git a/lab/lab3en.md b/lab/lab3en.md index 5773661..1373a4f 100644 --- a/lab/lab3en.md +++ b/lab/lab3en.md @@ -24,7 +24,7 @@ The key components of the Faster R-CNN model that we will study are: - The region proposal network (RPN) for proposing regions of interest, - The region of interest (RoI) pooling layer, - And the final layer for region classification and fine-tuning of bounding boxes. -faster +faster Image 1. The architecture of the Faster R-CNN model based on the feature pyramid. In Figure 1, a detailed inference path of the Faster R-CNN model is presented, illustrating the interaction among the mentioned components. @@ -40,156 +40,47 @@ For the purposes of this exercise, we will use Python 3 along with the following - [NumPy](https://numpy.org/) After ensuring that you have all the required packages, download the exercise skeleton from [GitHub](https://github.com/cvunizg/cvunizg-lab3-faster). Then, within the repository, create a new directory named `data` and unpack the contents of this [directory](https://www.dropbox.com/sh/wbybqchx98wg8ci/AAA_2KlewTokFc2OY-fC0_wna?dl=0) into it. The downloaded file contains saved intermediate results of the forward pass of the considered model, which will be used during the tests. -## 2. Okosnica -Put zaključivanja modela Faster R-CNN započinje -izlučivanjem značajki uz pomoć okosnice. -Okosnicu obično čini klasifikacijski model -bez globalnog sažimanja i potpuno povezanog sloja, -a koji je prethodno treniran na ImageNetu. -Inicijalizacijom okosnice s ImageNet parametrima -pospješujemo proces treniranja modela za ciljani zadatak -te smanjujemo potrebnu količinu gusto označenih slika. -U slučaju ograničenih računalnih resursa, -tijekom učenja detekcijskog modela -parametri okosnice se mogu i smrznuti. -Ipak, češći je slučaj da se oni tijekom treniranja -fino ugađaju za detekciju objekata. - -Naš azmatrani model za okosnicu -koristi model ResNet-50 -koji pripada obitelji modela -s rezidualnim vezama. -Osnovna gradivna jedinica modela ResNet-50 -i njegove veće braće (ResNet-101, ResNet-152) -prikazana je na slici 2. -Za ovakvu rezidualnu jedinicu kažemo da ima usko grlo (engl. bottleneck) -jer prva 1x1 konvolucija smanjuje broj kanala. -To značajno smanjuje memorijski i računski otisak -jer nakon nje slijedi skuplja 3x3 konvolucija. -Konačno, broj kanala se ponovno napuhuje -uz pomoć druge 1x1 konvolucije. -Na slici se može primijetiti i preskočna veza -koja ulaz u rezidualnu jedinicu -pribraja rezultatu obrade -iz konvolucijskih slojeva. -Ona omogućuje modelu bolji protok -gradijenata do ranijih slojeva -te učenje jednostavnijeg -rezidualnog mapiranja -koje odgovara razlici između ulaza -i "željenog" izlaza. - -faster - -Slika 2. Rezidualna konvolucijska jedinica s uskim grlom. - -Na slici 1 okosnica je prikazana nijansama zelene boje -i sastoji se od četiri rezidualna bloka. -Jednim blokom označavamo skup rezidualnih jedinica -koje se izvršavaju nad značajkama iste prostorne rezolucije. -Tako prvi rezidualni blok na svome izlazu daje značajke -koje su četiri puta poduzorkovane u odnosu na ulaznu sliku. -Na slici 1 je to označeno s "/4" na odgovarajućim strelicama. -Slično, drugi rezidualni blok daje značajke -koje su 8 puta poduzorkovane, treći 16, a četvrti 32 puta. -U literaturi se često ove značajke referira s prefiksom "res" -i brojem koji odgovara eksponentu potencije broja 2 koja -označava razinu poduzorkovanja. -Na primjer, izlazi prvog rezidualnog bloka označavaju se kao "res**2**", -jer su 2^**2** = 4 puta poduzorkovani u odnosu na ulaznu sliku. -Izlazi drugog rezidualnog bloka označavaju se kao "res**3**", -jer su 2^**3** = 8 puta poduzorkovani u odnosu na ulaznu sliku. -Slično, značajke preostala dva bloka označavat ćemo kao "res**4**" i "res**5**". - -### Zadaci -1. Obzirom da korištena okosnica očekuje normaliziranu sliku na ulazu, vaš prvi zadatak je implementirati funkciju - za normalizaciju slike. Deklaraciju funkcije `normalize_img` pronaći ćete u datoteci `utils.py`. Funkcija na - ulazu prima tenzor `img` koji je oblika (H, W, 3) gdje su H i W dimenzije slike. Funkcija treba vratiti - normalizirani tenzor oblika (3, H, W). Normalizacija se sastoji od skaliranja na interval [0-1], oduzimanja - srednje vrijednosti `image_mean` i dijeljenja sa standardnom devijacijom `image_std`. Srednja vrijednost i - standardna devijacija oblika su (3). Ispravnost vaše implementacije možete provjeriti pozivom testne skripte - "test_backbone.py". Pozicionirajte se u korjenski direktorij projekta te pozovite `python3 -m tests.test_backbone`. - -2. Dopunite implementaciju modela ResNet u datoteci `resnet.py`. Prvo, prema slici 2 dopunite metodu `Bottleneck.forward` koja implementira unaprijedni prolaz kroz rezidualnu jedinicu s uskim grlom. Zatim, u metodi `ResNet._forward_impl` spremite izlaze iz rezidualnih blokova u rječnik `out_dict` pod ključevima "res2", "res3", "res4" - i "res5". Primijetite da se u kodu prvi rezidualni blok označava s `layer1`, drugi s `layer2`, itd. Provjerite - ispravnost vaše implementacije pokretanjem iste testne skripte kao u prethodnom zadatku. - -3. Koliko kanala imaju izlazi iz pojedinog rezidualnog bloka? Značajke kojeg rezidualnog bloka su semantički - najbogatije, a koje prostorno najpreciznije? - -## 3. Put za naduzorkovanje - -Općenito, zadaća puta za naduzorkovanje (engl. upsampling path) -je izgradnja semantički bogate reprezentacije -koja je istovremeno i prostorno precizna. -Primijetite da niti jedan od izlaza okosnice ne zadovoljava oba spomenuta kriterija. -Značajke iz kasnijih blokova okosnice su semantički bogatije, -ali je njihova prostorna rezolucija manja. -S druge strane, značajke iz ranijih blokova okosnice -imaju finiju rezoluciju i zbog toga su prostorno preciznije, -ali su semantički manje bogate. -Stoga, ljestvičasti put za naduzorkovanje -postupno gradi željenu reprezentaciju -naduzorkovanjem semantički bogate reprezentacije -i kombiniranjem s prostorno preciznijim značajkama. -Različite inačice ove ideje prisutne su u mnogim modelima za gustu predikciju. - -Posebne varijante puta naduzorkovanja -prisutne su u detekciji objekata -koji umjesto reprezentacije na jednoj razini -grade rezolucijsku piramidu značajki. -Razlog tomu je što bi oslanjanje na -značajke isključivo jedne razine -teško rezultiralo invarijantnosti na mjerilo. -Primjerice, značajke niže rezolucije su dobre -za detekciju velikih objekata, -ali loše za detekciju malih jer -bi se informacija o njihovoj prisutnosti -mogla sasvim izgubiti uslijed poduzorkovanja. -S druge strane, na većim rezolucijama -bismo vjerojatno imali problema -s detekcijom velikih objekata -zbog ograničenog receptivnog polja -konvolucijskih modela. - -Stoga, već i prvi duboki modeli za detekciju objekata poput [SSD-a](https://arxiv.org/pdf/1512.02325.pdf) razmatraju -piramidu značajki (engl. feature pyramid). Oni izravno regresiraju opisujuće okvire iz značajki okosnice različitih -rezolucija. Međutim, problem s takvim pristupom je u tome što značajke iz različitih faza okosnice se također nalaze -na različitim semantičkim razinama. Tim problemom bavi se [FPN](https://arxiv.org/pdf/1612.03144.pdf) koji -koristi dodatni put za naduzorkovanje za izgradnju semantički bogate i ujednačene -rezolucijske piramide značajki. - -Naša inačica modela Faster R-CNN također koristi FPN. -Na slici 1 put naduzorkovanja označen je crvenom bojom. -Različite nijanse crvene boje ukazuju na činjenicu da -moduli za svaku razinu piramide -koriste različite parametre. -Svaki modul za naduzorkovanje ima dvije konvolucijske jedinice. -Jednu koja se primjenjuje na odgovarajuće značajke iz okosnice -(često nazivane preskočnim ili lateralnim vezama) -kako bi se izjednačio broj kanala s putem naduzorkovanja. -U literaturi se ove konvolucije stoga često zovu i -kanalnim projekcijama (engl. channel projection). -Druga konvolucijska jedinica se primjenjuje na zbroj -preskočne veze i naduzorkovane sume iz prethodne razine -za izračun konačne reprezentacije na toj razini piramide. -Detaljniji prikaz razmatranog puta nadozorkovanja -nalazi se na slici 3. - -faster -Slika 3. Detaljniji prikaz puta naduzorkovanja koji gradi piramidu značajki. -### Zadaci -1. U datoteci `utils.py` implementirajte modul `ConvNormActBlock` čiji se unaprijedni prolaz sastoji redom od - konvolucijskog sloja, te opcionalno aktivacijske funkcije i opcionalno normalizirajućeg sloja. Primijetite da modul - nasljeđuje razred `nn.Sequential` koji redom provodi zadanu listu slojeva. Za dodavanje sloja u listu možete - koristiti metodu `self.append`. Argument `padding` koji kontrolira nadopunjavanje prilikom konvolucije potrebno - je postaviti tako da se očuvaju prostorne dimenzije ulaza. - -2. U datoteci `fpn.py` implementirajte unaprijedni prolaz puta za naduzorkovanje u metodi `FeaturePyramidNetwork.forward`. Unaprijedni prolaz implementirajte prema slici 3. Pripazite na komentare napisane u kodu. - -3. Testirajte svoju implementaciju puta nadozurkovanja pokretanjem naredbe `python3 -m tests.test_fpn`. - -## 4. Mreža za predlaganje regija od interesa (RPN) +## 2. Backbone +The process of building the Faster R-CNN model begins with feature extraction using the backbone. The backbone typically consists of a classification model without global pooling and a fully connected layer, which has been pre-trained on ImageNet. By initializing the backbone with ImageNet parameters, we expedite the training process for the specific task and reduce the amount of densely labeled images required. In cases of limited computational resources, during the training of the detection model, backbone parameters can be frozen. Nevertheless, it is more common for these parameters to be fine-tuned during training for object detection. + +Our considered model utilizes the ResNet-50 model as a backbone, which belongs to the family of models with residual connections. The basic building block of the ResNet-50 model and its larger siblings (ResNet-101, ResNet-152) is depicted in Figure 2. For such a residual unit, we say it has a bottleneck because the initial 1x1 convolution reduces the number of channels. This significantly reduces the memory and computational footprint, as a more expensive 3x3 convolution follows. Finally, the number of channels is inflated again with the help of a second 1x1 convolution. In the figure, you can observe the skip connection that adds the input to the residual unit to the result of the processing from the convolutional layers. This enables the model to have better gradient flow to earlier layers and learn simpler residual mappings that correspond to the difference between the input and the "desired" output. + +faster + +Figure 2. Residual Convolutional Unit with Bottleneck. + +In Figure 1, the backbone is depicted in shades of green and consists of four residual blocks. By a block, we denote a set of residual units operating on features with the same spatial resolution. Thus, the first residual block outputs features that are subsampled by a factor of four compared to the input image, as indicated by "/4" on the corresponding arrows in Figure 1. Similarly, the second residual block produces features subsampled by a factor of 8, the third by 16, and the fourth by 32. In the literature, these features are often referred to with the prefix "res" and a number corresponding to the exponent of the power of 2 that denotes the subsampling level. For instance, the outputs of the first residual block are labeled as "res**2**" because they are subsampled by a factor of 2^**2** = 4 compared to the input image. The outputs of the second residual block are labeled as "res**3**" since they are subsampled by a factor of 2^**3** = 8. Similarly, we will denote the features of the remaining two blocks as "res**4**" and "res**5**". + +### Problems + +1. Considering that the utilized backbone expects a normalized image as input, your first task is to implement a function for image normalization. Find the declaration of the function `normalize_img` in the file `utils.py`. The function takes a tensor `img` as input, which has the shape (H, W, 3) where H and W are the dimensions of the image. The function should return a normalized tensor of shape (3, H, W). Normalization involves scaling to the range [0-1], subtracting the mean value `image_mean`, and dividing by the standard deviation `image_std`. The mean value and standard deviation have a shape of (3). You can verify the correctness of your implementation by running the test script "test_backbone.py." Navigate to the root directory of the project and execute `python3 -m tests.test_backbone` in the terminal. + +2. Complete the implementation of the ResNet model in the file `resnet.py`. First, according to Figure 2, complete the `Bottleneck.forward` method, which implements the forward pass through the bottleneck residual unit. Then, in the `ResNet._forward_impl` method, save the outputs from the residual blocks in the dictionary `out_dict` with keys "res2," "res3," "res4," and "res5." Note that in the code, the first residual block is labeled as `layer1`, the second as `layer2`, and so on. Check the correctness of your implementation by running the same test script as in the previous task. + +3. How many channels do the outputs from each residual block have? Which residual block's features are semantically richest, and which are spatially most precise? + +## 3. Upsampling path + +Generally, the task of the upsampling path is to construct a semantically rich representation that is simultaneously spatially precise. Notice that none of the outputs from the backbone satisfies both of these criteria. Features from later blocks in the backbone are more semantically rich, but their spatial resolution is lower. On the other hand, features from earlier blocks in the backbone have finer resolution and, as a result, are spatially more precise, but they are less semantically rich. Therefore, the upsampling path gradually builds the desired representation by upsampling a semantically rich representation and combining it with spatially more precise features. Different versions of this idea are present in many models for dense prediction. + +Special variations of the upsampling path are present in object detection, where instead of a representation at a single level, a feature resolution pyramid is built. The reason for this is that relying solely on features from a single level would likely result in a lack of scale invariance. For instance, lower-resolution features are good for detecting large objects but may perform poorly in detecting small ones, as information about their presence could be lost due to downsampling. On the other hand, at higher resolutions, there might be challenges in detecting large objects due to the limited receptive field of convolutional models. + +Therefore, even the earliest deep models for object detection, such as [SSD](https://arxiv.org/pdf/1512.02325.pdf), consider a feature pyramid. They directly regress descriptive bounding boxes from features at different resolutions in the backbone. However, the challenge with such an approach is that features from different stages of the backbone are also at different semantic levels. This issue is addressed by [FPN](https://arxiv.org/pdf/1612.03144.pdf), which employs an additional upsampling path to construct a semantically rich and uniform resolution feature pyramid. + +Our version of the Faster R-CNN model also utilizes FPN. In Figure 1, the upsampling path is marked in red. Different shades of red indicate that modules for each level of the pyramid use different parameters. Each upsampling module consists of two convolutional units. One is applied to the corresponding features from the backbone (often called skip or lateral connections) to equalize the number of channels with the upsampling path. In the literature, these convolutions are often referred to as channel projections. The second convolutional unit is applied to the sum of the skip connection and the upsampled feature map from the previous level to compute the final representation at that level of the pyramid. For a more detailed illustration of the considered upsampling path, refer to Figure 3. + +faster +Image 3. A more detailed depiction of the upsampling path that constructs the feature pyramid. + +### Problems + +1. In the file `utils.py`, implement the `ConvNormActBlock` module, whose forward pass consists sequentially of a convolutional layer, optionally an activation function, and optionally a normalization layer. Note that the module inherits from the `nn.Sequential` class, which sequentially applies the specified list of layers. To add a layer to the list, you can use the `self.append` method. Set the `padding` argument that controls padding during convolution to preserve the spatial dimensions of the input. + +2. In the file `fpn.py`, implement the forward pass of the upsampling path in the `FeaturePyramidNetwork.forward` method. Implement the forward pass according to Figure 3. Pay attention to the comments written in the code. + +3. Test your implementation of the upsampling path by running the command `python3 -m tests.test_fpn`. + +## 4. Region Proposal Network (RPN) Zadaća mreže za predlaganje regija od interesa je izdvojiti pravokutne regije unutar kojih bi se mogao nalaziti neki objekt. @@ -263,7 +154,7 @@ Na slici ispod prikazani su sidreni okviri s okvirom igrača na slici veći od 0.65. -bb44 anchors +bb44 anchors
Slika 4. Pretpostavljeni sidreni okviri koji se s okvirom košarkaša na slici preklapaju s omjerom presjeka i unije većim od 0.65 @@ -282,16 +173,16 @@ Na slici ispod prikazani su okviri koje je predložio RPN, a imaju omjer presjeka i unije s okvirom igrača na slici veći od 0.65. -rpn +rpn
Slika 5. Regije od interesa predložene od strane RPN-a koje se s okvirom košarkaša na slici preklapaju s omjerom presjeka i unije većim od 0.65. -### Zadaci +### Problems 1. U datoteci `rpn.py` dovršite inicijalizaciju klasifikatora i regresora RPN-a u modulu RPNHead. 2. U datoteci `utils.py` dovršite implementaciju funkcije `decode_boxes` koja primjenjuje predviđenu transformaciju na sidrene okvire. Implementaciju testirajte naredbom `python3 -m tests.test_decode_boxes`. -## 5. Sažimanje po regijama (ROIPool) +## 5. Region Of Interest Pooling Sažimanje po regijama (engl. Region of Interest Pooling, ROIPool) izlučuje reprezentaciju fiksne veličine za sve regije od interesa koje predlaže RPN. @@ -363,7 +254,7 @@ a drugi za regresiju semantički ovisnih parametara transformacije. -### Zadaci +### Problems 1. U datoteci `faster.py` dovršite implementaciju funkcije `forward` u modulu `TwoMLPHead`. 2. U datoteci `faster.py` dovršite inicijalizaciju klasifikacijske i regresijske glave u modulu `FastRCNNPredictor`. 3. U datoteci `run_faster.py` implementirajte iscrtavanje rezultate detekcije za sve okvire čija je pouzdanost veća od @@ -372,5 +263,5 @@ parametara transformacije. Očekivani rezultat izvođenja programa `run_faster.py` prikazan je na slici ispod. -bb44 preds +bb44 preds
Slika 7. Rezultat izvođenja modela Faster R-CNN treniranog na skupu COCO. From afcbd5b2279aab2f2e9ada52b16f3465ca939756 Mon Sep 17 00:00:00 2001 From: imartinovic Date: Wed, 20 Dec 2023 22:57:10 +0100 Subject: [PATCH 3/7] Translate chapter 4 --- lab/lab3en.md | 99 ++++++++------------------------------------------- 1 file changed, 15 insertions(+), 84 deletions(-) diff --git a/lab/lab3en.md b/lab/lab3en.md index 1373a4f..c1cf70c 100644 --- a/lab/lab3en.md +++ b/lab/lab3en.md @@ -81,26 +81,9 @@ Our version of the Faster R-CNN model also utilizes FPN. In Figure 1, the upsamp 3. Test your implementation of the upsampling path by running the command `python3 -m tests.test_fpn`. ## 4. Region Proposal Network (RPN) -Zadaća mreže za predlaganje regija od interesa -je izdvojiti pravokutne regije unutar kojih bi -se mogao nalaziti neki objekt. -Taj zadatak sveden je na binarnu klasifikaciju -sidrenih okvira u pozitive i negative. -Negativi se odbacuju jer su to okviri koji ne sadrže objekte, -dok se pozitivi parametriziranom transformacijom -mijenjaju na način da preciznije uokviruju ciljani objekt. -Primijetite da mreža za predlaganje regija od interesa -ne razlikuje semantičke razrede objekata -(u literaturi se često koristi engl. izraz class-agnostic). -Njena zadaća je samo procijeniti -bi li se neki objekt mogao nalaziti -unutar razmatranog sidrenog okvira ili ne. -Pozitivni okviri se transformiraju parametrima $$t_x, t_y$$ -koji kontroliraju horizontalni i vertikalni pomak centra okvira -te parametrima $$t_w, t_h$$ koji kontroliraju -horizontalno i vertikalno skaliranje okvira. -Za spomenute parametre vrijede sljedeće jednadžbe: +The task of a region proposal network is to extract rectangular regions within which an object might be located. This task is simplified to binary classification of anchor boxes into positives and negatives. Negatives are rejected because they are boxes that do not contain objects, while positives are refined through a parameterized transformation to more accurately encapsulate the target object. +It is important to note that the region proposal network does not differentiate between semantic object classes (commonly referred to as class-agnostic in the literature). Its sole task is to assess whether an object might be present within the considered anchor box or not. Positive boxes are transformed by parameters $$t_x, t_y$$ controlling the horizontal and vertical shift of the box's center, as well as parameters $$t_w, t_h$$ controlling the horizontal and vertical scaling of the box. The following equations apply to these parameters: $$ \begin{align} t_x &= \frac{x - x_a}{w_a} \\ @@ -110,77 +93,25 @@ t_h &= \log \frac{h}{h_a} \end{align} $$ -gdje $$x_a, y_a, w_a, h_a$$ predstavljaju koordinate centra, širinu i visinu sidrenog okvira, -a $$x, y, w, h$$ predstavljaju koordinate centra, širinu i visinu ciljanog objekta. - -Iz slike 1 vidljivo je da se mreža -za predlaganje regija od interesa -primjenjuje na svaku razinu piramide značajki. -Jednaka nijansa plave boje za svaku razinu piramide -sugerira dijeljenje parametara. -Pored značajki ulaz u RPN čine i sidreni okviri -koji se također generiraju ovisno o razini piramide. -Konkretno, generator sidrenih okvira -smješta okvire u svakom pikselu -razmatranog tenzora značajki, -a njihova veličina ovisi o razini piramide. -Tako se na razini piramide najveće rezolucije -pretpostavljaju sidreni okviri najmanje osnovne veličine -jer na toj razini želimo detektirati male objekte. -Obrnuto, na razini piramide najmanje rezolucije -nalaze se sidreni okviri najveće osnovne veličine -jer na toj razini želimo detektirati velike objekte. -Važan detalj je da generator sidrenih okvira -ne pretpostavlja samo jedan okvir po lokaciji, -nego više njih, a razlikuju se po omjeru visine i širine -kako bi se mogli detektirati objekti različitih oblika. -Konkretno, u modelu kojeg mi razmatramo -osnovne veličine sidrenih okvira su [32, 64, 128, 256, 512] -za redom razine piramide [fpn2, fpn3, fpn4, fpn5, fpn6], -a razlikuju se omjeri visine i širine [1:1, 1:2, 2:1]. -RPN također zasebno razmatra -svaki od pretpostavljenih sidrenih okvira -na nekoj lokaciji. -To znači da RPN klasifikator -predviđa onoliko mapa značajki -koliko ima pretpostavljenih sidrenih okvira -u svakoj lokaciji. -Slično tome, RPN regresor parametara transformacije -predviđa 4 puta više mapa značajki -negoli ima pretpostavljenih sidrenih okvira -u svakoj lokaciji. -Na slici ispod prikazani su sidreni okviri -čiji je omjer presjeka i unije -s okvirom igrača na slici -veći od 0.65. +where $$x_a, y_a, w_a, h_a$$ represent the coordinates of the anchor box center, its width, and height, and $$x, y, w, h$$ represent the coordinates of the target object center, its width, and height. + +From Figure 1, it is evident that the region proposal network (RPN) is applied to each level of the feature pyramid. The uniform shade of blue for each pyramid level suggests parameter sharing. In addition to feature maps, the input to the RPN consists of anchor boxes, which are also generated depending on the pyramid level. Specifically, the anchor box generator places boxes at each pixel of the considered feature tensor, and their size depends on the pyramid level. Thus, at the highest resolution level of the pyramid, anchor boxes of the smallest base size are assumed because this level is intended for detecting small objects. Conversely, at the lowest resolution level of the pyramid, anchor boxes of the largest base size are located since this level is designed for detecting large objects. + +An important detail is that the anchor box generator does not assume only one box per location but several, differing in aspect ratio, to detect objects of various shapes. In the model under consideration, the base sizes of anchor boxes are [32, 64, 128, 256, 512] in sequence for the pyramid levels [fpn2, fpn3, fpn4, fpn5, fpn6], and they vary in aspect ratios [1:1, 1:2, 2:1]. + +The RPN separately considers each assumed anchor box at a location. This means that the RPN classifier predicts as many feature maps as there are assumed anchor boxes at each location. Similarly, the RPN regressor of transformation parameters predicts four times more feature maps than the number of assumed anchor boxes at each location. The image below shows anchor boxes with an intersection over union (IoU) ratio with the player's bounding box on the image greater than 0.65. bb44 anchors -
Slika 4. Pretpostavljeni sidreni okviri koji se s okvirom košarkaša na slici preklapaju s omjerom presjeka i -unije većim od 0.65 - -Spomenimo još da RPN ne propušta sve pozitivne okvira kroz unaprijedni prolaz. -Nakon što se odbace negativi i na -pozitive primjeni predviđena transformacija, -pristupa se filtriranju. -Prvo se odbacuju okviri čija je površina manja od zadane, -a zatim i oni koji imaju vjerojatnost prisutnosti objekta -nižu od zadanog praga. -Nakon toga se potiskuju nemaksimalni odzivi, -odnosno okviri koji imaju visoko preklapanje s nekim drugim pouzdanim okvirom. -Konačno, propušta se samo 1000 okvira s najvećom vjerojatnošću. -Ovo filtriranje značajno ubrzava unaprijedni prolaz kroz mrežu. -Na slici ispod prikazani su okviri koje je predložio RPN, -a imaju omjer presjeka i unije s okvirom igrača na slici -veći od 0.65. +
Image 4. Assumed anchor boxes that overlap with the bounding box of the basketball player in the image with an intersection over union ratio greater than 0.65. + +Let's also mention that the RPN does not pass all positive boxes through the forward pass. After discarding negatives and applying the predicted transformation to positives, filtering takes place. First, boxes with an area smaller than a specified value are discarded, and then those with object presence probability below a set threshold. Afterward, non-maximum suppression is applied, i.e., boxes with high overlap with another reliable box are suppressed. Finally, only 1000 boxes with the highest probability are kept. This filtering significantly speeds up the forward pass through the network. The image below shows the boxes proposed by the RPN with an intersection over union ratio with the player's bounding box on the image greater than 0.65. rpn -
Slika 5. Regije od interesa predložene od strane RPN-a koje se s okvirom košarkaša na slici preklapaju s -omjerom presjeka i unije većim od 0.65. +
Image 5. Regions of interest proposed by the RPN that overlap with the bounding box of the basketball player in the image with an intersection over union ratio greater than 0.65. ### Problems -1. U datoteci `rpn.py` dovršite inicijalizaciju klasifikatora i regresora RPN-a u modulu RPNHead. -2. U datoteci `utils.py` dovršite implementaciju funkcije `decode_boxes` koja primjenjuje predviđenu transformaciju - na sidrene okvire. Implementaciju testirajte naredbom `python3 -m tests.test_decode_boxes`. +1. In the file `rpn.py`, complete the initialization of the RPN classifier and regressor in the RPNHead module. +2. In the file `utils.py`, complete the implementation of the `decode_boxes` function, which applies the predicted transformation to anchor boxes. Test the implementation with the command `python3 -m tests.test_decode_boxes`. ## 5. Region Of Interest Pooling Sažimanje po regijama (engl. Region of Interest Pooling, ROIPool) From be86dcf90a89d98182451f86601249d761997422 Mon Sep 17 00:00:00 2001 From: imartinovic Date: Wed, 20 Dec 2023 22:58:17 +0100 Subject: [PATCH 4/7] Translate chapter 4 --- lab/lab3en.md | 1 + 1 file changed, 1 insertion(+) diff --git a/lab/lab3en.md b/lab/lab3en.md index c1cf70c..b2609f3 100644 --- a/lab/lab3en.md +++ b/lab/lab3en.md @@ -84,6 +84,7 @@ Our version of the Faster R-CNN model also utilizes FPN. In Figure 1, the upsamp The task of a region proposal network is to extract rectangular regions within which an object might be located. This task is simplified to binary classification of anchor boxes into positives and negatives. Negatives are rejected because they are boxes that do not contain objects, while positives are refined through a parameterized transformation to more accurately encapsulate the target object. It is important to note that the region proposal network does not differentiate between semantic object classes (commonly referred to as class-agnostic in the literature). Its sole task is to assess whether an object might be present within the considered anchor box or not. Positive boxes are transformed by parameters $$t_x, t_y$$ controlling the horizontal and vertical shift of the box's center, as well as parameters $$t_w, t_h$$ controlling the horizontal and vertical scaling of the box. The following equations apply to these parameters: + $$ \begin{align} t_x &= \frac{x - x_a}{w_a} \\ From 96f3099015290f09c059090a522e3a6ca3643bfc Mon Sep 17 00:00:00 2001 From: imartinovic Date: Wed, 20 Dec 2023 23:06:49 +0100 Subject: [PATCH 5/7] Translate chapter 5 --- lab/lab3en.md | 34 ++++------------------------------ 1 file changed, 4 insertions(+), 30 deletions(-) diff --git a/lab/lab3en.md b/lab/lab3en.md index b2609f3..b5871f0 100644 --- a/lab/lab3en.md +++ b/lab/lab3en.md @@ -115,38 +115,12 @@ Let's also mention that the RPN does not pass all positive boxes through the for 2. In the file `utils.py`, complete the implementation of the `decode_boxes` function, which applies the predicted transformation to anchor boxes. Test the implementation with the command `python3 -m tests.test_decode_boxes`. ## 5. Region Of Interest Pooling -Sažimanje po regijama (engl. Region of Interest Pooling, ROIPool) -izlučuje reprezentaciju fiksne veličine -za sve regije od interesa koje predlaže RPN. -Sažimanje po regijama prvo odredi -područje u razmatranom tenzoru značajki -koje odgovara regiji od interesa. -Zatim se to područje dijeli -na manja podpodručja -približno jednake veličine, -a njihov broj određen je parametrom modela. -Zatim se iz značajke svakoga područja -sažimlju prema zadanoj funkciji (npr. maksimumom). -Ovaj proces ilustriran je na gif-u ispod -za tenzor značajki sa samo jednim kanalom -i zadanom veličinom izlaza 2x2. +Region of Interest Pooling (ROIPool) extracts a fixed-size representation for all proposed regions of interest suggested by the RPN. ROIPooling first determines the region in the considered feature tensor corresponding to the region of interest. Then, this region is divided into smaller sub-regions of approximately equal size, and their number is determined by a model parameter. Next, the features of each sub-region are pooled according to a specified function (e.g., maximum pooling). This process is illustrated in the gif below for a feature tensor with only one channel and an output size of 2x2. rpn -
Slika 6. Ilustracija operacije sažimanja po regijama od interesa. Izvor: Deepsense.ai. - -U našem razmatranom modelu -veličina izlaza ROIPool-a je 7x7, -ali to ne znači da se svaki -okvir predstavlja sa samo 49 značajki. -Taj broj treba još pomnožiti s brojem kanala -razmatranog tenzora značajki -što odgovara broju kanala FPN-a, -a to je 256. -Dakle, svaki okvir predstavljen je s 7x7x256=12544 značajki. -Spomenimo još da novije inačice dvoprolaznih modela -obično koriste napredniji algoritam ROIAlign koji -koristi interpolaciju umjesto kvantizacije -za određivanje rubnih vrijednosti. +
Image 6. Illustration of the Region of Interest Pooling operation. Source: Deepsense.ai. + +In our considered model, the output size of ROIPool is 7x7, but it doesn't mean that each frame is represented with only 49 features. This number needs to be multiplied by the number of channels in the considered feature tensor, which corresponds to the number of FPN channels, and that is 256. Therefore, each frame is represented with 7x7x256 = 12544 features. It is worth mentioning that newer versions of two-stage models typically use a more advanced algorithm called ROIAlign, which utilizes interpolation instead of quantization to determine boundary values. ## 6. Semantička klasifikacija i fino ugađanje okvira Završni modul našeg razmatranog modela From 717830c9907c0bf50eca3467e44f9f2dc947c401 Mon Sep 17 00:00:00 2001 From: imartinovic Date: Wed, 20 Dec 2023 23:12:11 +0100 Subject: [PATCH 6/7] Translate chapter 6 --- lab/lab3en.md | 56 +++++++++++---------------------------------------- 1 file changed, 12 insertions(+), 44 deletions(-) diff --git a/lab/lab3en.md b/lab/lab3en.md index b5871f0..003d549 100644 --- a/lab/lab3en.md +++ b/lab/lab3en.md @@ -122,52 +122,20 @@ Region of Interest Pooling (ROIPool) extracts a fixed-size representation for al In our considered model, the output size of ROIPool is 7x7, but it doesn't mean that each frame is represented with only 49 features. This number needs to be multiplied by the number of channels in the considered feature tensor, which corresponds to the number of FPN channels, and that is 256. Therefore, each frame is represented with 7x7x256 = 12544 features. It is worth mentioning that newer versions of two-stage models typically use a more advanced algorithm called ROIAlign, which utilizes interpolation instead of quantization to determine boundary values. -## 6. Semantička klasifikacija i fino ugađanje okvira -Završni modul našeg razmatranog modela -na ulazu prima sažetu reprezentaciju i koordinate -svih regija od interesa koje je predložio RPN. -Zadaća ovog modula -je semantička klasifikacija -pristiglih okvira -i predviđanje paramatera -još jedne transformacije -za fino ugađanje okvira -na željene objekte. -Razlika u odnosu na RPN je što ovaj modul -klasificira okvire u -jedan od semantičkih razreda ili pozadinu. -Postojanje razreda koji predstavlja pozadinu -omogućuje modelu da i u ovome koraku -odbaci neke okvire koje smatra negativima. - -Zanimljiv detalj je da se za svaki okvir -predviđaju odvojeni parametri transformacije -za svaki od semantičkih razreda. -Možemo zamisliti kao da svaki okvir -umnožimo onoliko puta koliko imamo razreda -i za svaki od njih predvidimo -parametre transformacije. -Ovo omogućuje detekciju -preklapajućih objekata različitih razreda. - -Ovaj modul prvo računa dijeljenu reprezentaciju -za klasifikacijsku i regresijsku glavu -uz pomoć dva potpuno povezana sloja. -Zatim se na tu reprerzentaciju primjenjuju -još dva potpuno povezana sloja: -jedan za klasfikaciju, -a drugi za regresiju -semantički ovisnih -parametara transformacije. +## 6. Semantic Classification and Fine-Tuning of Boxes +The final module of our considered model takes the compressed representation and coordinates of all proposed regions of interest (ROIs) by the Region Proposal Network (RPN) as input. The task of this module is semantic classification of incoming bounding boxes and predicting parameters for another transformation to finely adjust the boxes to the desired objects. Unlike the RPN, this module classifies the boxes into one of the semantic classes or background. The existence of a background class allows the model to reject some boxes as negatives in this step as well. + +An interesting detail is that, for each box, separate transformation parameters are predicted for each of the semantic classes. We can imagine that each box is multiplied by the number of classes, and transformation parameters are predicted for each of them. This enables the detection of overlapping objects of different classes. + +This module first calculates a shared representation for the classification and regression heads using two fully connected layers. Then, two additional fully connected layers are applied to this representation: one for classification and the other for the regression of semantically dependent transformation parameters. ### Problems -1. U datoteci `faster.py` dovršite implementaciju funkcije `forward` u modulu `TwoMLPHead`. -2. U datoteci `faster.py` dovršite inicijalizaciju klasifikacijske i regresijske glave u modulu `FastRCNNPredictor`. -3. U datoteci `run_faster.py` implementirajte iscrtavanje rezultate detekcije za sve okvire čija je pouzdanost veća od - 0.95. -4. Pokrenite program naredbom `python3 run_faster.py` i provjerite je li detekcija uspješna. +1. In the file `faster.py`, complete the implementation of the `forward` function in the `TwoMLPHead` module. +2. In the file `faster.py`, complete the initialization of the classification and regression heads in the `FastRCNNPredictor` module. +3. In the file `run_faster.py`, implement the visualization of detection results for all boxes with a confidence greater than 0.95. +4. Run the program with the command `python3 run_faster.py` and check if the detection is successful. -Očekivani rezultat izvođenja programa `run_faster.py` prikazan je na slici ispod. +The expected result of running the `run_faster.py` program is shown in the image below. bb44 preds -
Slika 7. Rezultat izvođenja modela Faster R-CNN treniranog na skupu COCO. +
Image 7. Result of executing the Faster R-CNN model trained on the COCO dataset. From 9b474c1e783736511faae6b4837d24f671bed1c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josip=20=C5=A0ari=C4=87?= Date: Thu, 21 Dec 2023 14:51:46 +0100 Subject: [PATCH 7/7] Update lab3en.md --- lab/lab3en.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lab/lab3en.md b/lab/lab3en.md index 003d549..f9f57e0 100644 --- a/lab/lab3en.md +++ b/lab/lab3en.md @@ -24,7 +24,7 @@ The key components of the Faster R-CNN model that we will study are: - The region proposal network (RPN) for proposing regions of interest, - The region of interest (RoI) pooling layer, - And the final layer for region classification and fine-tuning of bounding boxes. -faster +faster Image 1. The architecture of the Faster R-CNN model based on the feature pyramid. In Figure 1, a detailed inference path of the Faster R-CNN model is presented, illustrating the interaction among the mentioned components. @@ -39,13 +39,13 @@ For the purposes of this exercise, we will use Python 3 along with the following - [Matplotlib](https://matplotlib.org/) - [NumPy](https://numpy.org/) -After ensuring that you have all the required packages, download the exercise skeleton from [GitHub](https://github.com/cvunizg/cvunizg-lab3-faster). Then, within the repository, create a new directory named `data` and unpack the contents of this [directory](https://www.dropbox.com/sh/wbybqchx98wg8ci/AAA_2KlewTokFc2OY-fC0_wna?dl=0) into it. The downloaded file contains saved intermediate results of the forward pass of the considered model, which will be used during the tests. +After ensuring that you have all the required packages, download the exercise skeleton from [GitHub](https://github.com/UNIZG-FER-D307/compvis-lab3-faster). Then, within the repository, create a new directory named `data` and unpack the contents of this [directory](https://www.dropbox.com/sh/wbybqchx98wg8ci/AAA_2KlewTokFc2OY-fC0_wna?dl=0) into it. The downloaded file contains saved intermediate results of the forward pass of the considered model, which will be used during the tests. ## 2. Backbone The process of building the Faster R-CNN model begins with feature extraction using the backbone. The backbone typically consists of a classification model without global pooling and a fully connected layer, which has been pre-trained on ImageNet. By initializing the backbone with ImageNet parameters, we expedite the training process for the specific task and reduce the amount of densely labeled images required. In cases of limited computational resources, during the training of the detection model, backbone parameters can be frozen. Nevertheless, it is more common for these parameters to be fine-tuned during training for object detection. Our considered model utilizes the ResNet-50 model as a backbone, which belongs to the family of models with residual connections. The basic building block of the ResNet-50 model and its larger siblings (ResNet-101, ResNet-152) is depicted in Figure 2. For such a residual unit, we say it has a bottleneck because the initial 1x1 convolution reduces the number of channels. This significantly reduces the memory and computational footprint, as a more expensive 3x3 convolution follows. Finally, the number of channels is inflated again with the help of a second 1x1 convolution. In the figure, you can observe the skip connection that adds the input to the residual unit to the result of the processing from the convolutional layers. This enables the model to have better gradient flow to earlier layers and learn simpler residual mappings that correspond to the difference between the input and the "desired" output. -faster +faster Figure 2. Residual Convolutional Unit with Bottleneck. @@ -69,7 +69,7 @@ Therefore, even the earliest deep models for object detection, such as [SSD](htt Our version of the Faster R-CNN model also utilizes FPN. In Figure 1, the upsampling path is marked in red. Different shades of red indicate that modules for each level of the pyramid use different parameters. Each upsampling module consists of two convolutional units. One is applied to the corresponding features from the backbone (often called skip or lateral connections) to equalize the number of channels with the upsampling path. In the literature, these convolutions are often referred to as channel projections. The second convolutional unit is applied to the sum of the skip connection and the upsampled feature map from the previous level to compute the final representation at that level of the pyramid. For a more detailed illustration of the considered upsampling path, refer to Figure 3. -faster +faster Image 3. A more detailed depiction of the upsampling path that constructs the feature pyramid. ### Problems @@ -102,12 +102,12 @@ An important detail is that the anchor box generator does not assume only one bo The RPN separately considers each assumed anchor box at a location. This means that the RPN classifier predicts as many feature maps as there are assumed anchor boxes at each location. Similarly, the RPN regressor of transformation parameters predicts four times more feature maps than the number of assumed anchor boxes at each location. The image below shows anchor boxes with an intersection over union (IoU) ratio with the player's bounding box on the image greater than 0.65. -bb44 anchors +bb44 anchors
Image 4. Assumed anchor boxes that overlap with the bounding box of the basketball player in the image with an intersection over union ratio greater than 0.65. Let's also mention that the RPN does not pass all positive boxes through the forward pass. After discarding negatives and applying the predicted transformation to positives, filtering takes place. First, boxes with an area smaller than a specified value are discarded, and then those with object presence probability below a set threshold. Afterward, non-maximum suppression is applied, i.e., boxes with high overlap with another reliable box are suppressed. Finally, only 1000 boxes with the highest probability are kept. This filtering significantly speeds up the forward pass through the network. The image below shows the boxes proposed by the RPN with an intersection over union ratio with the player's bounding box on the image greater than 0.65. -rpn +rpn
Image 5. Regions of interest proposed by the RPN that overlap with the bounding box of the basketball player in the image with an intersection over union ratio greater than 0.65. ### Problems @@ -137,5 +137,5 @@ This module first calculates a shared representation for the classification and The expected result of running the `run_faster.py` program is shown in the image below. -bb44 preds +bb44 preds
Image 7. Result of executing the Faster R-CNN model trained on the COCO dataset.