Zbulimi dhe njohja e tekstit (e njohur edhe si Njohja e tekstit) nga një imazh është një problem shumë i dobishëm dhe sfidues me të cilin studiuesit e të mësuarit të thellë kanë punuar prej shumë vitesh për shkak të aplikimeve të tij praktike në fusha si skanimi i dokumenteve, navigimi i robotëve dhe marrja e imazheve, etj. Pothuajse të gjitha metodat përbëheshin nga dy faza të veçanta deri më tani: 1) Zbulimi i tekstit 2) Njohja e tekstit. Zbulimi i tekstit thjesht zbulon se ku ndodhet teksti në imazhin e dhënë dhe në këto rezultate, njohja e tekstit në fakt njeh karakteret nga teksti. Për shkak të këtyre dy fazave, kërkoheshin dy modele të veçanta për t'u trajnuar dhe kështu koha e parashikimit ishte pak më e lartë. Për shkak të kohës më të lartë të testimit, modelet nuk ishin të përshtatshme për aplikime në kohë reale. Ndryshe nga kjo, FOTS zgjidh këtë problem me dy faza duke përdorur një model/rrjet të unifikuar të trajnueshëm nga fundi në fund duke zbuluar dhe njohur tekstin në të njëjtën kohë. Ai përdor veçori të përbashkëta konvolucionale midis detyrave të zbulimit dhe njohjes së tekstit, të cilat mësojnë më shumë veçori gjenerike dhe përmirësojnë kohën e testimit në mënyrë që të mund të jenë të dobishme në aplikacionet në kohë reale si OCR nga transmetimet video me FPS më të larta. FOTS përmirëson gjithashtu zbulimin e tekstit në skenat që kanë tekste të rreshtuara/rrotulluara për shkak të komponentit të tij të veçantë të quajtur "RoIRotate" (Rrotullimi i Rajonit të Interesit), i cili rrotullon tekstin e rreshtuar duke mbajtur raportin e pamjes të njëjtë dhe më pas aplikon njohjen e tekstit.

Përvijimi

  1. Problem biznesi
  2. Formulimi i problemit ML
  3. Burimi i të dhënave dhe përmbledhja
  4. Analiza e të dhënave eksploruese (EDA)
  5. Përpunimi paraprak i të dhënave/Gjenerimi i së vërtetës bazë
  6. Modelimi
  7. Llogaritja e humbjes
  8. Rezultatet
  9. Përfundim
  10. Puna e ardhshme
  11. Referencat

Këtu është depoja ime e Github e cila përmban të gjithë kodin: https://github.com/Kaushal28/FOTS-PyTorch

1. Problem biznesi

Leximi i tekstit nga imazhet natyrore është shumë i dobishëm në shumë fusha si analiza e dokumenteve, të kuptuarit e skenës, navigimi i robotëve, marrja e imazheve dhe makinat vetë-drejtuese. Është gjithashtu një nga detyrat më sfiduese për shkak të shkronjave të ndryshme, madhësive / shkallëve dhe shtrirjes së tekstit në imazhet e jetës reale. Disa nga këto aplikacione kërkojnë gjithashtu jo vetëm zbulim dhe njohje më të shpejtë të tekstit nga imazhet (njohje nga transmetimet video), gjë që e bën problemin e njohjes së tekstit edhe më sfidues.

2. Formulimi i problemit ML

Problemi i nxjerrjes së tekstit nga imazhet natyrore mund të formulohet si një proces me dy faza: 1) Zbulimi/lokalizimi i tekstit 2) Njohja e tekstit. Zbulimi i tekstit mund të formulohet më tej si regresion kufizues dhe klasifikim për piksel i tekstit (nëse piksel është pjesë e tekstit apo jo). FOTS kombinon të dy fazat dhe lejon trajnimin e një modeli nga fundi në fund për zbulimin dhe njohjen e saktë të tekstit.

3. Burimi i të dhënave dhe përmbledhja

Për të trajnuar modelin FOTS nga fundi në fund, siç sugjerohet nga letra origjinale, duhet të përdoren grupet e mëposhtme të të dhënave:

SynthText Dataset: i cili është një grup të dhënash i krijuar në mënyrë sintetike, në të cilin shembujt e fjalëve vendosen në imazhet e skenës natyrore, duke marrë parasysh paraqitjet e skenës. Ky është një grup të dhënash shumë i madh i cili përmban 800 mijë imazhe me tekste të ndryshme.

Seti i të dhënave ICDAR-2015: Ky është grupi i të dhënave të botës reale që ka imazhe nga kamerat e veshjes. Ky grup të dhënash është relativisht shumë i vogël (vetëm 1000 imazhe trajnimi) në krahasim me grupin e të dhënave SynthText.

Duke qenë se grupi i të dhënave SynthText është mjaft i madh, dokumenti sugjeron që të trajnohet i gjithë modeli mbi të dhe më pas të përshtaten imazhet e botës reale, modeli mund të akordohet mirë në grupin e të dhënave ICDAR-2015.

4. Analiza e të dhënave eksplorative (EDA)

Këtu është thelbi i EDA-s së detajuar që është bërë për të kuptuar të dhënat e dhëna.

Shpërndarja e madhësisë së imazhit:

Këtu janë disa shembuj nga grupi i të dhënave SynthText:

Këtu janë disa mostra nga të dhënat e ICDAR-2015

Nga cilësia e imazhit dhe madhësia/orientimi i kutive kufizuese, është e qartë se grupi i të dhënave ICDAR-2015 është mjaft sfidues në krahasim me grupin e të dhënave SynthText.

5. Përpunimi paraprak i të dhënave / Gjenerimi i së vërtetës së tokës

Për të trajnuar komponentin e zbulimit të tekstit të modelit FOTS, maskat/imazhet e mëposhtme të së vërtetës tokësore kërkohen të krijohen për çdo imazh të së vërtetës tokësore.

  1. Harta e rezultateve: Cili është një kanal imazhi që përfaqëson nëse piksel është pjesë e tekstit ose sfondit për çdo piksel në imazhin e dhënë. Këtu është një shembull i hartës së rezultatit të së vërtetës tokësore dhe imazhit përkatës:

2. Gjeo-Harta: Harta gjeografike përmban 5 maska/kanale: Për çdo piksel që është pjesë e tekstit, 4 kanalet e para parashikojnë distancat e tij në anët e sipërme, të poshtme, majtas, djathtas të kutisë kufizuese që përmban këtë piksel, dhe kanali i fundit parashikon orientimin e kutisë kufizuese përkatëse. Këtu është vizualizimi i këtyre 5 kanaleve të gjeo-hartës me të vërtetën përkatëse:

Këtu janë detaje të shkëlqyera të gjenerimit të së vërtetës tokësore që përdoret për të gjeneruar imazhet e mësipërme.

3. Maska e trajnimit: Ky është një imazh me një kanal, i cili përdoret për të injoruar kutitë kufitare shumë të vogla dhe kutitë kufitare pa transkripta nga procesi i llogaritjes së trajnimit dhe humbjes.

Prandaj, para trajnimit të modelit, duhet të krijohen të vërtetat e mëposhtme të terrenit: 1) Harta e rezultateve, 2) Gjeo-harta 3) lista e kutive kufizuese 4) transkriptet e tekstit 5) Maska e trajnimit

Për shkak të kësaj, procesi i gjenerimit të së vërtetës në terren bëhet i shtrenjtë për burimet dhe kërkon kohë të lartë të CPU. Nëse modeli është duke u trajnuar në GPU me parapërpunim të të dhënave në fluturim, GPU-ja do të vazhdojë të presë për grupin tjetër të të dhënave pasi gjenerimi i së vërtetës bazë të grupit do të ishte në CPU. Kjo do të humbiste kohën/burimin e panevojshëm të GPU-së. Pra, si pjesë e këtij zbatimi, të dhënat do të përpunohen dhe ruhen paraprakisht dhe më pas do të përdoren drejtpërdrejt për trajnim. Kjo përmirëson shpejtësinë e trajnimit, si dhe efikasitetin e burimeve.

Këtu është lidhja me të dhënat e parapërpunuara të krijuara për trajnim si pjesë e këtij zbatimi: https://www.kaggle.com/kaushal2896/synth1k-preprocessed. I cili përfshin 12800 imazhe dhe të vërteta bazë nga grupi i të dhënave SynthText.

6. Modelimi

Siç u përmend në dokumentin FOTS, modeli përbëhet nga komponentët kryesorë të mëposhtëm:

Nxjerrja e veçorive

Për të nxjerrë veçoritë e nivelit të lartë nga imazhi hyrës, përdoren shtresat e përbashkëta konvolucionale me ResNet50 të trajnuar (në ImageNet) si shtyllë. Konvolucionet e përbashkëta nuk janë gjë tjetër veçse shtresa konvolucionale me pesha të përbashkëta ndërmjet tyre. Këtu është arkitektura e konvolucioneve të aksioneve:

Blloqet portokalli të lehta janë shtresa ResNet-50 të trajnuara paraprakisht të përdorura për nxjerrjen e veçorive. Blloqet jeshile të lehta janë veçori dalëse nga blloku përkatës ResNet50. Blloku "deconv" përdoret për të ekzaminuar imazhin/tiparet hyrëse për të rritur madhësinë e imazhit/veçorisë dalëse. Gjithashtu vini re se tiparet e nivelit të ulët janë të lidhura drejtpërdrejt me hartat e veçorive të nivelit të lartë, të cilat tregohen si shigjeta të zeza në diagramin e mësipërm.

Këtu është kodi për nxjerrjen e veçorive nga blloqe të ndryshme të ResNet50

def _extract_features(self, x):
    """Extract features from given input and backbone."""
    x = self.back_bone.conv1(x)
    x = self.back_bone.bn1(x)
    x = self.back_bone.relu(x)
    x = self.back_bone.maxpool(x)
    res2 = self.back_bone.layer1(x)
    res3 = self.back_bone.layer2(res2)
    res4 = self.back_bone.layer3(res3)
    res5 = self.back_bone.layer4(res4)
    return res5, res4, res3, res2

Dhe këtu është zbatimi i bllokut "deconv":

def _deconv(self, feature):
    """Apply deconv operation (inverse of pooling) on given feature map."""
    # Upsample the given feature.
    # Doc: https://pytorch.org/docs/stable/nn.functional.html#interpolate
    return F.interpolate(
        feature,
        mode='bilinear',
        scale_factor=2,  # As per the paper
        align_corners = True
    )

Dega e zbulimit të tekstit

Dega e zbulimit të tekstit përdor rrjetin plotësisht konvolucional si detektor teksti. Këto shtresa konvolucionale do të kishin 5 kanale për hartën e rezultateve dhe hartën gjeografike. Pasi kutitë kufizuese të propozohen nga dega e detektorit të tekstit, NMS me vetëdije për lokalitetin (shtypja jo max) do të përdoret për të marrë kutinë kufizuese me IoU-në më të lartë mbi kutinë e kufirit të së vërtetës tokësore.

Këtu është detektori i zbatimit të fragmentit të kodit duke përdorur shtresa konvolucionale.

class Detector(nn.Module):
    """Detector branch of FOTS. This is basically fully convolutions."""

    def __init__(self):
        super().__init__()
        self.conv_score = nn.Conv2d(32, 1, kernel_size = 1)
        self.conv_loc = nn.Conv2d(32, 4, kernel_size = 1)
        self.conv_angle = nn.Conv2d(32, 1, kernel_size = 1)
    def forward(self, x):
        ...

RoIRotate (Rrotullimi i Rajonit të Interesit)

RoIRotate aplikon transformimin në rajonet e veçorive të orientuara/drejtuara për të marrë hartat e veçorive të përafruara me bosht. Këtu është një vizualizim intuitiv i procesit RoIRotate:

Vini re se imazhi i mësipërm është vetëm për vizualizim. Zbatimi aktual i RoIRotate funksionon mbi hartat e veçorive të nxjerra nga konvolucione të përbashkëta në vend të imazheve të papërpunuara.

Dega e njohjes së tekstit

Dega e njohjes së tekstit synon të parashikojë etiketat e tekstit duke përdorur veçoritë e rajonit të nxjerra nga konvolucionet e përbashkëta dhe të transformuara nga RoIRotate.

Dega e njohjes së tekstit përbëhet nga konvolucione sekuenciale si VGG, bashkime me reduktim vetëm përgjatë boshtit të lartësisë, një LSTM dydrejtimëshe, një lidhje plotësisht dhe dekoderi përfundimtar CTC (Klasifikimi i përkohshëm i lidhjeve). Këta komponentë të njohur kolektivisht si CRNN (Rrjeti nervor konvolutional recurrent).

Këtu është arkitektura e nivelit të lartë të CRNN tipike:

Në FOTS, shtresat konvolucionale janë VGG si shtresa sekuenciale. Arkitektura e të cilit është paraqitur në tabelën e mëposhtme:

Type                Kernel              Out
[size, stride]      Channels
---------------------------------------------------
conv_bn_relu        [3, 1]              64
---------------------------------------------------
conv_bn_relu        [3, 1]              64
---------------------------------------------------
height-max-pool     [(2, 1), (2, 1)]    64
---------------------------------------------------
conv_bn_relu        [3, 1]              128
---------------------------------------------------
conv_bn_relu        [3, 1]              128
---------------------------------------------------
height-max-pool     [(2, 1), (2, 1)]    128
---------------------------------------------------
conv_bn_relu        [3, 1]              256
---------------------------------------------------
conv_bn_relu        [3, 1]              256
---------------------------------------------------
height-max-pool     [(2, 1), (2, 1)]    256
---------------------------------------------------
bi-directional      lstm                256
---------------------------------------------------
fully-connected                     |S| = n_classes
---------------------------------------------------

Modeli FOTS është ndërtuar duke përdorur katër komponentët e mësipërm. Këtu është përmbledhja e shkurtër e rrjedhës së punës: Së pari, imazhi i hyrjes do të kalonte nëpër konvolucionet e përbashkëta dhe veçoritë do të nxirren (veçoritë do të kishin 1/4 e madhësisë së figurës hyrëse), më pas, kutitë kufizuese do të parashikoheshin nga zbulimi i tekstit degë, ato kuti kufizuese do të kaloheshin përmes RoIRotate dhe do të bëheshin të rreshtuara horizontalisht. Ato kuti kufizuese të transformuara më pas do të kalojnë nëpër degën e njohjes së tekstit, e cila do të përdorë dekoderin CTC për të parashikuar transkriptin nga veçoritë.

Këtu është arkitektura e të gjithë modelit FOTS:

7. Llogaritja e humbjes

Humbja për modelin FOTS përbëhet nga degët e zbulimit dhe njohjes së tekstit.

Humbja e zbulimit

Humbja e zbulimit merr në konsideratë entropinë e balancuar binar të kryqëzuar (sipas letrës, por në këtë zbatim, koeficienti i zarit përdoret për konvergjencë më të shpejtë), e cila njihet edhe si humbje klasifikimi.

Komponenti tjetër i humbjes së zbulimit merr në konsideratë IoU ndërmjet kutive kufizuese të së vërtetës së parashikuar dhe tokësore, si dhe rrotullimin e kutive kufizuese të parashikuara.

Humbja totale e zbulimit përbëhet nga humbjet e mësipërme:

Lambda_reg është një hiperparametër dhe është vendosur në 20 në këtë zbatim.

Humbja e njohjes

Humbja CTC përdoret si humbje e njohjes.

Humbja totale e FOTS përbëhet nga humbja e zbulimit + humbja e njohjes.

Lambda_reg është gjithashtu një hiperparametër dhe është vendosur në 1 në këtë zbatim.

8. Rezultatet

Modeli fillimisht u trajnua vetëm për zbulimin e tekstit duke përdorur ~ 12K imazhe SynthText dhe 25 epoka. Rezultatet ishin të kënaqshme.

Këtu është grafiku i humbjes së zbulimit (kur modeli është i trajnuar vetëm për zbulimin e tekstit):

Sidoqoftë, për të trajnuar modelin si për njohjen e tekstit ashtu edhe për zbulimin e tekstit, ai kërkon një grup të dhënash mjaft të mëdha (synthText i plotë) dhe kohë më të gjatë trajnimi. Për shkak të kufizimeve të harduerit, modeli nuk ishte plotësisht i trajnuar dhe testuar për njohjen e tekstit.

Këtu janë grafikët e humbjes kur modeli u trajnua për zbulimin dhe njohjen së bashku.

Këtu janë disa parashikime nga modeli (vetëm zbulim)

9. Përfundim

Në këtë punë, unë zbatova FOTS, një kornizë e trajnueshme nga fundi në fund për zbulimin e tekstit të skenës së orientuar. Një operacion i ri RoIRotate është propozuar për të unifikuar zbulimin dhe njohjen në një tubacion nga fundi në fund. Duke ndarë veçoritë konvolucionale, hapi i njohjes së tekstit është pothuajse pa kosto, gjë që mundëson që sistemi ynë të funksionojë me shpejtësi në kohë reale.

10. Puna e ardhshme

Siç u përmend më parë, për shkak të kufizimeve të harduerit, modeli nuk u trajnua plotësisht në imazhe të tëra 800K të të dhënave SynthText. Kam në plan të trajnoj plotësisht modelin FOTS pasi të jetë në dispozicion GPU e mjaftueshme për trajnim më të gjatë për të arritur rezultate të mira njohjeje së bashku me rezultatet e zbulimit të tekstit.

11. Referencat

https://arxiv.org/pdf/1801.01671.pdf



https://arxiv.org/pdf/1704.03155.pdf



Nëse ju pëlqeu postimi, duartrokitni këtë histori dhe lidheni me mua në LinkedIn: https://www.linkedin.com/in/kaushal-shah-466587110/