Jedi tehnika konvolucionÄlo tÄ«klu samazinÄÅ”anai - atzaroÅ”ana
Pirms jums atkal ir uzdevums noteikt objektus. PrioritÄte ir darbÄ«bas Ätrums ar pieÅemamu precizitÄti. JÅ«s lietojat YOLOv3 arhitektÅ«ru un turpiniet to apmÄcÄ«t. PrecizitÄte (mAp75) ir lielÄka par 0.95. Bet skrieÅ”anas Ätrums joprojÄm ir zems. Smuki.
Å odien mÄs apiesim kvantÄÅ”anu. Un mÄs skatÄ«simies zem griezuma Modeļa atzaroÅ”ana ā lieko tÄ«kla daļu apgrieÅ”ana, lai paÄtrinÄtu secinÄjumu izdarÄ«Å”anu, nezaudÄjot precizitÄti. Ir skaidrs, kur, cik daudz un kÄ griezt. IzdomÄsim, kÄ to izdarÄ«t manuÄli un kur to var automatizÄt. BeigÄs ir krÄtuve uz keras.
Ievads
IepriekÅ”ÄjÄ darba vietÄ PermÄ esoÅ”ajÄ Macroscop ieguvu vienu ieradumu - vienmÄr sekot lÄ«dzi algoritmu izpildes laikam. Un vienmÄr pÄrbaudiet tÄ«kla izpildlaiku, izmantojot atbilstÄ«bas filtru. Parasti jaunÄkÄs ražoÅ”anas tehnoloÄ£ijas neiztur Å”o filtru, kas mani noveda pie atzaroÅ”anas.
AtzaroÅ”ana ir veca tÄma, kas tika apspriesta Stenfordas lekcijas 2017. gadÄ. GalvenÄ ideja ir samazinÄt apmÄcÄ«tÄ tÄ«kla izmÄru, nezaudÄjot precizitÄti, noÅemot dažÄdus mezglus. Tas izklausÄs forÅ”i, bet es reti dzirdu par tÄ izmantoÅ”anu. IespÄjams, nav pietiekami daudz implementÄciju, nav rakstu krievu valodÄ vai vienkÄrÅ”i visi uzskata, ka tas ir apcirpÅ”anas know-how un klusÄ.
Bet sadalīsim to atseviŔķi
Ieskats bioloÄ£ijÄ
Man patÄ«k, kad Deep Learning aplÅ«ko idejas, kas nÄk no bioloÄ£ijas. ViÅiem, tÄpat kÄ evolÅ«cijai, var uzticÄties (vai zinÄjÄt, ka ReLU ir ļoti lÄ«dzÄ«gs neironu aktivÄcijas funkcija smadzenÄs?)
Modeļu atzaroÅ”anas process ir arÄ« tuvs bioloÄ£ijai. TÄ«kla reakciju Å”eit var salÄ«dzinÄt ar smadzeÅu plastiskumu. GrÄmatÄ ir pÄris interesanti piemÄri. Normans Doidžs:
Sievietes, kura piedzima tikai ar vienu pusÄ«ti, smadzenes ir pÄrprogrammÄjuÅ”Äs, lai veiktu trÅ«kstoÅ”Äs pusÄ«tes funkcijas.
Puisis noÅ”Äva par redzi atbildÄ«go smadzeÅu daļu. Laika gaitÄ Å”Ä«s funkcijas pÄrÅÄma citas smadzeÅu daļas. (mÄs nemÄÄ£inÄm atkÄrtot)
TÄpat no sava modeļa varat izgriezt dažus vÄjos lÄ«kumus. KÄ pÄdÄjais lÄ«dzeklis atlikuÅ”ie saiŔķi palÄ«dzÄs aizstÄt sagrieztos.
Vai jums patÄ«k Transfer Learning vai jÅ«s mÄcÄties no nulles?
Variants numur viens. JÅ«s izmantojat Transfer Learning vietnÄ Yolov3. Retina, Mask-RCNN vai U-Net. Bet lielÄkoties mums nav jÄatpazÄ«st 80 objektu klases, piemÄram, COCO. ManÄ praksÄ viss aprobežojas ar 1.-2.klasi. VarÄtu pieÅemt, ka arhitektÅ«ra 80 klasÄm Å”eit ir lieka. Tas liek domÄt, ka arhitektÅ«ra ir jÄsamazina. TurklÄt es vÄlÄtos to darÄ«t, nezaudÄjot esoÅ”os iepriekÅ” apmÄcÄ«tos svarus.
Variants numur divi. VarbÅ«t jums ir daudz datu un skaitļoÅ”anas resursu vai jums vienkÄrÅ”i nepiecieÅ”ama Ä«paÅ”i pielÄgota arhitektÅ«ra. Vienalga. Bet jÅ«s apgÅ«stat tÄ«klu no nulles. ParastÄ procedÅ«ra ir aplÅ«kot datu struktÅ«ru, atlasÄ«t arhitektÅ«ru, kuras jauda ir PÄRÄRÄŖGA, un izstumt no pÄrkvalificÄÅ”anÄs pametuÅ”os. RedzÄju 0.6 izkritÄjus, KÄrli.
Abos gadÄ«jumos tÄ«klu var samazinÄt. MotivÄts. Tagad izdomÄsim, kÄda ir apgraizÄ«Å”anas atzaroÅ”ana
VispÄrÄjs algoritms
MÄs nolÄmÄm, ka varam izÅemt saiÅus. Tas izskatÄs pavisam vienkÄrÅ”i:
Jebkuru konvolÅ«ciju noÅemÅ”ana rada stresu tÄ«klam, kas parasti izraisa kļūdu pieaugumu. No vienas puses, Å”is kļūdu pieaugums ir rÄdÄ«tÄjs tam, cik pareizi mÄs noÅemam konvolucijas (piemÄram, liels pieaugums norÄda, ka mÄs darÄm kaut ko nepareizi). Bet neliels pieaugums ir diezgan pieÅemams un bieži tiek novÄrsts ar sekojoÅ”u vieglu papildu apmÄcÄ«bu ar nelielu LR. Pievienojiet papildu apmÄcÄ«bas posmu:
Tagad mums ir jÄnoskaidro, kad mÄs vÄlamies pÄrtraukt mÅ«su MÄcÄ«bu<->AtzaroÅ”anas cilpu. Å eit var bÅ«t eksotiskas iespÄjas, kad mums ir jÄsamazina tÄ«kls lÄ«dz noteiktam izmÄram un Ätrumam (piemÄram, mobilajÄm ierÄ«cÄm). TomÄr visizplatÄ«tÄkÄ iespÄja ir turpinÄt ciklu, lÄ«dz kļūda kļūst lielÄka par pieÅemamu. Pievienojiet nosacÄ«jumu:
TÄtad algoritms kļūst skaidrs. Atliek izdomÄt, kÄ noteikt dzÄstos lÄ«kumus.
MeklÄt izdzÄstÄs pakotnes
Mums ir jÄnovÄrÅ” daži satricinÄjumi. Steidzoties uz priekÅ”u un ānoÅ”autā kÄdu ir slikta ideja, lai gan tas darbosies. Bet, tÄ kÄ jums ir galva, varat domÄt un mÄÄ£inÄt noÅemt noÅemÅ”anai "vÄjus" lÄ«kumus. Ir vairÄkas iespÄjas:
Katrai no iespÄjÄm ir tiesÄ«bas uz dzÄ«vÄ«bu un savas Ä«stenoÅ”anas iezÄ«mes. Å eit mÄs apsveram iespÄju ar mazÄko L1 pasÄkumu
ManuÄls process YOLOv3
SÄkotnÄjÄ arhitektÅ«rÄ ir atlikuÅ”ie bloki. Bet neatkarÄ«gi no tÄ, cik forÅ”i tie ir dziļajiem tÄ«kliem, tie mums nedaudz traucÄs. GrÅ«tÄ«bas ir tÄdas, ka Å”ajos slÄÅos nevar izdzÄst saskaÅojumus ar dažÄdiem indeksiem:
TÄpÄc atlasÄ«sim slÄÅus, no kuriem varam brÄ«vi dzÄst saskaÅojumus:
Tagad izveidosim darba ciklu:
Notiek aktivizÄcijas augÅ”upielÄde
IzdomÄjot, cik daudz nogriezt
Izbeidz
10 laikmetu apguve ar LR=1e-4
TestÄÅ”ana
KonvolÅ«ciju izkrauÅ”ana ir noderÄ«ga, lai novÄrtÄtu, cik daudz daļas mÄs varam noÅemt noteiktÄ posmÄ. IzkrauÅ”anas piemÄri:
MÄs redzam, ka gandrÄ«z visur 5% lÄ«kumu ir ļoti zema L1 norma, un mÄs varam tos noÅemt. KatrÄ solÄ« Ŕī izkrauÅ”ana tika atkÄrtota un tika novÄrtÄts, kuras kÄrtas un cik daudz var izgriezt.
Viss process tika pabeigts 4 soļos (numuri Ŕeit un visur RTX 2060 Super):
Solis
mAp75
Parametru skaits, milj
TÄ«kla izmÄrs, mb
No sÄkuma, %
Darbības laiks, ms
ApgraizÄ«Å”anas stÄvoklis
0
0.9656
60
241
100
180
SÄkot no
1
0.9622
55
218
91
175
5% no visa
2
0.9625
50
197
83
168
5% no visa
3
0.9633
39
155
64
155
15% slÄÅiem ar 400+ lÄ«kumiem
4
0.9555
31
124
51
146
10% slÄÅiem ar 100+ lÄ«kumiem
2. darbÄ«bai tika pievienots viens pozitÄ«vs efekts - 4. partijas izmÄrs ietilpa atmiÅÄ, kas ievÄrojami paÄtrinÄja papildu apmÄcÄ«bas procesu.
4. darbÄ«bÄ process tika apturÄts, jo pat ilgstoÅ”a papildu apmÄcÄ«ba nepaaugstinÄja mAp75 lÄ«dz vecajÄm vÄrtÄ«bÄm.
RezultÄtÄ mums izdevÄs paÄtrinÄt secinÄjumu izdarÄ«Å”anu par 15%, samaziniet izmÄru par 35% un nezaudÄ tieÅ”i.
AutomatizÄcija vienkÄrÅ”ÄkÄm arhitektÅ«rÄm
VienkÄrÅ”ÄkÄm tÄ«kla arhitektÅ«rÄm (bez nosacÄ«juma pievienoÅ”anas, salikÅ”anas un atlikuÅ”ajiem blokiem) ir pilnÄ«gi iespÄjams koncentrÄties uz visu konvolucionÄlo slÄÅu apstrÄdi un automatizÄt konvolÅ«ciju izgrieÅ”anas procesu.
Es Ä«stenoju Å”o iespÄju Å”eit.
Tas ir vienkÄrÅ”i: jums ir nepiecieÅ”ama tikai zaudÄÅ”anas funkcija, optimizÄtÄjs un pakeÅ”u Ä£eneratori:
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)
Ja nepiecieÅ”ams, varat mainÄ«t konfigurÄcijas parametrus:
{
"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
}
TurklÄt tiek ieviests ierobežojums, kas balstÄ«ts uz standarta novirzi. MÄrÄ·is ir ierobežot noÅemto daļu, izslÄdzot lÄ«kumus ar jau āpietiekamiemā L1 pasÄkumiem:
TÄdÄjÄdi mÄs ļaujam noÅemt tikai vÄjÄs konvolÅ«cijas no sadalÄ«jumiem, kas ir lÄ«dzÄ«gi labajam, un neietekmÄjam noÅemÅ”anu no sadalÄ«jumiem, kas lÄ«dzÄ«gi kreisajam:
Kad sadalÄ«jums tuvojas normÄlam, atzaroÅ”anas_standarta_deviÄcijas_daļas koeficientu var izvÄlÄties no:
Es iesaku pieÅemt 2 sigmas. Vai arÄ« varat ignorÄt Å”o funkciju, atstÄjot vÄrtÄ«bu < 1.0.
Izvade ir tÄ«kla lieluma, zudumu un tÄ«kla izpildlaika diagramma visam testam, normalizÄta uz 1.0. PiemÄram, Å”eit tÄ«kla izmÄrs tika samazinÄts gandrÄ«z 2 reizes, nezaudÄjot kvalitÄti (mazs konvolucionÄlais tÄ«kls ar 100 XNUMX svaru):
BraukÅ”anas Ätrums ir pakļauts normÄlÄm svÄrstÄ«bÄm un praktiski nemainÄs. Tam ir izskaidrojums:
KonvolÅ«ciju skaits mainÄs no Ärta (32, 64, 128) uz videokartÄm ne ÄrtÄko - 27, 51 utt. Å eit es varÄtu kļūdÄ«ties, bet visticamÄk tam ir ietekme.
ArhitektÅ«ra nav plaÅ”a, bet konsekventa. Samazinot platumu, mÄs neietekmÄjam dziļumu. TÄdÄjÄdi mÄs samazinÄm slodzi, bet nemainÄm Ätrumu.
TÄpÄc uzlabojums izpaudÄs kÄ CUDA slodzes samazinÄjums palaiÅ”anas laikÄ par 20-30%, bet ne darbÄ«bas laika samazinÄjums.
RezultÄti
PÄrdomÄsim. MÄs apsvÄrÄm 2 atzaroÅ”anas iespÄjas - YOLOv3 (kad jÄstrÄdÄ ar rokÄm) un tÄ«kliem ar vienkÄrÅ”Äku arhitektÅ«ru. Redzams, ka abos gadÄ«jumos ir iespÄjams panÄkt tÄ«kla izmÄra samazinÄÅ”anu un paÄtrinÄjumu, nezaudÄjot precizitÄti. RezultÄti:
Samazinot izmÄru
PaÄtrinÄjuma skrÄjiens
CUDA slodzes samazinÄÅ”ana
RezultÄtÄ videi draudzÄ«gums (MÄs optimizÄjam skaitļoÅ”anas resursu izmantoÅ”anu nÄkotnÄ. Kaut kur ir laimÄ«gs GrÄta TÅ«nberga)
Pielikums
PÄc atzaroÅ”anas posma varat pievienot kvantÄÅ”anu (piemÄram, ar TensorRT)