Sare konboluzionalak murrizteko Jedi teknika - inausketa

Sare konboluzionalak murrizteko Jedi teknika - inausketa

Berriro aurretik objektuak detektatzeko zeregina da. Lehentasuna zehaztasun onargarria duen funtzionamendu-abiadura da. YOLOv3 arkitektura hartu eta gehiago entrenatzen duzu. Zehaztasuna (mAp75) 0.95 baino handiagoa da. Baina korrika-tasa baxua da oraindik. Zorroa.

Gaur kuantizazioa saihestuko dugu. Eta mozketaren azpian begiratuko dugu Inausketa eredua β€” Sarearen zati erredundanteak moztea, Inferentzia bizkortzeko zehaztasuna galdu gabe. Argi dago non, zenbat eta nola moztu. Ikus dezagun nola egin eskuz eta non automatiza dezakezun. Bukaeran keras-en biltegi bat dago.

Sarrera

Nire aurreko lantokian, Macroscop-en, Perm-en, ohitura bat hartu nuen: algoritmoen exekuzio-denbora beti kontrolatzea. Eta beti egiaztatu sarearen exekuzio-denbora egokitasun-iragazki baten bidez. Normalean, produkzioko punta-puntakoak ez du iragazki hori pasatzen, eta horrek Inausketara eraman ninduen.

Inausketa gai zaharra da eztabaidatu zena Stanfordeko hitzaldiak 2017an. Ideia nagusia entrenatutako sarearen tamaina murriztea da, zehaztasuna galdu gabe, hainbat nodo kenduz. Polita dirudi, baina oso gutxitan entzuten dut erabileraren berri. Seguruenik, ez dago nahikoa inplementaziorik, ez dago errusierazko artikulurik, edo, besterik gabe, denek inausketa-jakitea jotzen dute eta isilik geratzen dira.
Baina kendu dezagun

Biologiari begirada bat

Maite dut Deep Learning-ek biologiatik datozen ideiak aztertzen dituenean. Haiek, bilakaera bezala, fidagarriak izan daitezke (ba al zenekien ReLUren oso antzekoa dela garunean neuronak aktibatzeko funtzioa?)

Ereduzko inausketa prozesua ere biologiatik hurbil dago. Hemen sarearen erantzuna garunaren plastikotasunarekin alderatu daiteke. Adibide interesgarri pare bat daude liburuan. Norman Doidge:

  1. Erdi bakarrarekin jaiotako emakume baten burmuinak bere burua birprogramatu du falta den erdiaren funtzioak betetzeko.
  2. Tipoak ikusmenaren ardura duen garunaren zatia jaurti zuen. Denborarekin, garunaren beste atal batzuk hartu zituzten funtzio horiek. (ez gara errepikatzen saiatzen ari)

Era berean, zure ereduko zirkulu ahuletako batzuk moztu ditzakezu. Azken aukera gisa, gainerako sortak ebakitakoak ordezkatzen lagunduko du.

Maite duzu Transfer Learning edo hutsetik ikasten ari zara?

Aukera zenbaki bat. Transfer Learning erabiltzen duzu Yolov3-n. Retina, Mask-RCNN edo U-Net. Baina gehienetan ez ditugu COCOn bezalako 80 objektu-klase ezagutu behar. Nire praktikan, dena 1-2 mailetara mugatzen da. Pentsa daiteke 80 klaseetarako arkitektura erredundantea dela hemen. Horrek iradokitzen du arkitektura txikiagoa egin behar dela. Gainera, hori egin nahiko nuke lehendik entrenatu diren pisuak galdu gabe.

Bigarren aukera. Agian datu eta baliabide informatiko asko dituzu, edo arkitektura super pertsonalizatua behar duzu. Ez du axola. Baina sarea hutsetik ikasten ari zara. Ohiko prozedura datuen egitura aztertzea da, GEHIEGIZKO potentzia duen arkitektura bat hautatzea eta birziklatzeari uzteak bultzatzea. 0.6 baja ikusi nituen, Karl.

Bi kasuetan, sarea murriztu daiteke. Motibatuta. Orain goazen asmatzera zer motatako erdainzisioa inausketa

Algoritmo orokorra

Sortak kendu genitzakeela erabaki genuen. Nahiko sinplea dirudi:

Sare konboluzionalak murrizteko Jedi teknika - inausketa

Edozein biribildura kentzea estresagarria da sarearentzat, eta horrek normalean akatsak areagotzen ditu. Alde batetik, akatsen gehikuntza hori biribildurak nola zuzen kentzen ditugun adierazle da (adibidez, igoera handi batek zerbait gaizki egiten ari garela adierazten du). Baina igoera txiki bat nahiko onargarria da eta sarritan ezabatzen da LR txiki batekin ondorengo prestakuntza osagarri arinarekin. Gehitu prestakuntza-urrats gehigarri bat:

Sare konboluzionalak murrizteko Jedi teknika - inausketa

Orain asmatu behar dugu noiz gelditu nahi dugun gure Learning<->Pruning begizta. Aukera exotikoak egon daitezke hemen sarea tamaina eta abiadura jakin batera murriztu behar dugunean (adibidez, gailu mugikorretarako). Hala ere, aukerarik ohikoena zikloarekin jarraitzea da errorea onargarria baino handiagoa izan arte. Gehitu baldintza bat:

Sare konboluzionalak murrizteko Jedi teknika - inausketa

Beraz, algoritmoa argi geratzen da. Ezabatutako biribilguneak nola zehaztu jakiteko geratzen da.

Bilatu ezabatutako paketeak

Konboluzio batzuk kendu behar ditugu. Aurrera egitea eta edonori "tiro egitea" ideia txarra da, nahiz eta funtzionatuko duen. Baina burua duzunez, kentzeko konboluzio "ahulak" hautatzen pentsatu eta saiatu zaitezke. Hainbat aukera daude:

  1. L1 neurri txikiena edo magnitude_baxua_inaustea. Pisu txikiko biribilguneek azken erabakiari ekarpen gutxi egiten diotela ideia
  2. L1-neurri txikiena batez bestekoa eta desbideratze estandarra kontuan hartuta. Banaketaren izaeraren ebaluazioarekin osatzen dugu.
  3. Biribilguneak maskaratzea eta azken zehaztasunean gutxien eragiten dutenak baztertzea. Biribilketa hutsalen determinazio zehatzagoa, baina oso denbora eta baliabide asko behar dituena.
  4. Beste batzuk

Aukera bakoitzak bizitzarako eskubidea eta bere ezarpen-ezaugarriak ditu. Hemen L1-neurri txikiena duen aukera kontuan hartzen dugu

YOLOv3rako eskuzko prozesua

Jatorrizko arkitekturak hondar blokeak ditu. Baina sare sakonetarako oso politak diren arren, zertxobait oztopatuko gaituzte. Zailtasuna da ezin dituzula ezabatu geruza hauetan indize ezberdinekin bateratzeak:

Sare konboluzionalak murrizteko Jedi teknika - inausketa

Hori dela eta, hauta ditzagun adiskidetzeak libreki ezabatu ditzakegun geruzak:

Sare konboluzionalak murrizteko Jedi teknika - inausketa

Orain lan-ziklo bat eraiki dezagun:

  1. Aktibazioak kargatzen
  2. Zenbat moztu behar den jakitea
  3. Moztu
  4. LR=10e-1rekin 4 aro ikastea
  5. Probak

Biribilguneak deskargatzea erabilgarria da urrats jakin batean zenbat zati kendu dezakegun kalkulatzeko. Deskargatzeko adibideak:

Sare konboluzionalak murrizteko Jedi teknika - inausketa

Ikusten dugu ia leku guztietan biribilketen %5ak L1-arau oso baxua duela eta kendu ditzakegula. Pauso bakoitzean, deskarga hori errepikatzen zen eta balorazioa egiten zen zein geruza eta zenbat ebaki zitezkeen.

Prozesu osoa 4 urratsetan burutu zen (zenbakiak hemen eta nonahi RTX 2060 Super-rako):

Urratsera mapa75 Parametro kopurua, milioi Sarearen tamaina, mb Hasieratik, % Exekutatu denbora, ms Zirkuntzisio-baldintza
0 0.9656 60 241 100 180 -
1 0.9622 55 218 91 175 guztien %5
2 0.9625 50 197 83 168 guztien %5
3 0.9633 39 155 64 155 % 15 400 biribildu baino gehiago dituzten geruzetarako
4 0.9555 31 124 51 146 % 10 100 biribildu baino gehiago dituzten geruzetarako

Efektu positibo bat gehitu zitzaion 2. urratsari - 4 lotearen tamaina memorian sartzen zen, eta horrek asko azkartu zuen prestakuntza osagarriaren prozesua.
4. urratsean, prozesua gelditu egin zen iraupen luzeko prestakuntza osagarriak ere ez zuen mAp75 balio zaharretara igo.
Ondorioz, inferentzia bizkortzea lortu dugu 15%, murriztu tamaina 35% eta ez galdu zehazki.

Automatizazioa arkitektura sinpleagoetarako

Sare arkitektura sinpleagoetarako (baldintzazko gehigarri, konkaternatu eta hondar blokerik gabe), nahiko posible da konboluzio-geruza guztiak prozesatzea eta biribilguneak mozteko prozesua automatizatzea.

Aukera hau ezarri dut Hemen.
Erraza da: galera-funtzioa, optimizatzailea eta sorta-sorgailuak baino ez dituzu behar:

import pruning
from keras.optimizers import Adam
from keras.utils import Sequence

train_batch_generator = BatchGenerator...
score_batch_generator = BatchGenerator...

opt = Adam(lr=1e-4)
pruner = pruning.Pruner("config.json", "categorical_crossentropy", opt)

pruner.prune(train_batch, valid_batch)

Beharrezkoa izanez gero, konfigurazio-parametroak alda ditzakezu:

{
    "input_model_path": "model.h5",
    "output_model_path": "model_pruned.h5",
    "finetuning_epochs": 10, # the number of epochs for train between pruning steps
    "stop_loss": 0.1, # loss for stopping process
    "pruning_percent_step": 0.05, # part of convs for delete on every pruning step
    "pruning_standart_deviation_part": 0.2 # shift for limit pruning part
}

Gainera, desbideratze estandarrean oinarritutako muga bat ezartzen da. Helburua kentzen den zatia mugatzea da, dagoeneko "nahikoak" diren L1 neurriak dituzten biribilguneak baztertuz:

Sare konboluzionalak murrizteko Jedi teknika - inausketa

Horrela, eskuinekoaren antzeko banaketetatik konboluzio ahulak bakarrik kentzeko aukera ematen dizugu eta ez du eraginik ezkerrekoaren antzeko banaketetatik kentzean:

Sare konboluzionalak murrizteko Jedi teknika - inausketa

Banaketa normala hurbiltzen denean, pruning_standart_deviation_part koefizientea aukera daiteke:

Sare konboluzionalak murrizteko Jedi teknika - inausketa
2 sigmaren hipotesi bat gomendatzen dut. Edo eginbide hau alde batera utzi dezakezu, balioa < 1.0 utziz.

Irteera proba osorako sarearen tamainaren, galeraren eta sarearen exekuzio-denboraren grafikoa da, 1.0-ra normalizatuta. Adibidez, hemen sarearen tamaina ia 2 aldiz murriztu zen kalitatea galdu gabe (100k pisu dituen sare konboluzional txikia):

Sare konboluzionalak murrizteko Jedi teknika - inausketa

Martxaren abiadura gorabehera arrunten menpe dago eta ia aldatu gabe jarraitzen du. Honetarako azalpen bat dago:

  1. Biribilketa kopurua erosoa izatetik (32, 64, 128) bideo-txarteletarako erosoena ez izatera aldatzen da - 27, 51, etab. Hemen oker egon naiteke, baina ziurrenik eragina du.
  2. Arkitektura ez da zabala, koherentea baizik. Zabalera murriztuz, ez dugu sakoneran eragiten. Horrela, karga murrizten dugu, baina ez dugu abiadura aldatzen.

Hori dela eta, hobekuntza exekuzioan zehar CUDA karga % 20-30 murriztean adierazi da, baina ez exekuzio denboraren murrizketan.

Emaitzak

Gogoeta egin dezagun. Inausketa egiteko 2 aukera kontuan hartu ditugu: YOLOv3rako (eskuekin lan egin behar duzunean) eta arkitektura sinpleagoko sareetarako. Ikusten da bi kasuetan posible dela sarearen tamaina murriztea eta bizkortzea zehaztasuna galdu gabe. Emaitzak:

  • Tamaina murriztea
  • Azelerazio lasterketa
  • CUDA karga murriztea
  • Ondorioz, ingurumena errespetatzea (Etorkizuneko baliabide informatikoen erabilera optimizatzen dugu. Nonbait pozik dago Greta Thunberg)

eranskina

  • Inausketa urratsaren ondoren, kuantizazioa gehi dezakezu (adibidez, TensorRT-rekin)
  • Tensorflow-ek gaitasunak eskaintzen ditu magnitude_baxua_inaustea. Obrak.
  • biltegia Garatu nahi dut eta pozik lagunduko dut

Iturria: www.habr.com

Gehitu iruzkin berria