Teicneòlas Jedi airson lìonraidhean convolutional a lughdachadh - bearradh
Air thoiseach ort a-rithist tha an obair a bhith a’ lorg nithean. Is e am prìomhachas astar obrachaidh le mionaideachd iomchaidh. Bidh thu a’ gabhail ailtireachd YOLOv3 agus ga thrèanadh tuilleadh. Tha cruinneas (mAp75) nas àirde na 0.95. Ach tha an ìre ruith fhathast ìosal. Crap.
An-diugh bidh sinn a 'dol seachad air tomhas. Agus fon ghearradh bidh sinn a 'coimhead Pruning modail - a’ gearradh phàirtean den lìonra gun fheum gus Co-dhùnadh a luathachadh gun a bhith a’ call cruinneas. Tha e soilleir càite, cia mheud agus ciamar a ghearradh. Feuch an obraich sinn a-mach mar a nì thu seo le làimh agus far an urrainn dhut a dhèanamh fèin-ghluasadach. Aig an deireadh tha stòr air keras.
Ro-ràdh
Aig an àite-obrach a bh 'agam roimhe, Macroscop ann am Perm, fhuair mi aon chleachdadh - gus sùil a chumail an-còmhnaidh air àm cur gu bàs algorithms. Agus an-còmhnaidh thoir sùil air ùine ruith an lìonra tro chriathrag iomchaidheachd. Mar as trice cha bhith cinneasachadh ùr-nodha a’ dol seachad air a ’chriathrag seo, a thug orm Pruning.
'S e seann chuspair a chaidh a dheasbad ann an pruning Stanford òraidean a ann an 2017. Is e am prìomh bheachd meud an lìonra trèanaidh a lughdachadh gun a bhith a ’call cruinneas le bhith a’ toirt air falbh diofar nodan. Tha e fionnar, ach is ann ainneamh a chluinneas mi mu bhith ga chleachdadh. Is dòcha, chan eil buileachadh gu leòr ann, chan eil artaigilean ann an cànan na Ruis ann, no dìreach tha a h-uile duine den bheachd gu bheil e a ’pronnadh eòlas agus a’ fuireach sàmhach.
Ach bheir sinn air falbh e
Taisbeanadh air bith-eòlas san
Tha gaol agam air nuair a bhios Deep Learning a’ coimhead air beachdan a thig bho bhith-eòlas. Faodar earbsa a bhith annta, mar mean-fhàs (an robh fios agad gu bheil ReLU glè choltach ri gnìomh gnìomhachd neuron san eanchainn?)
Tha am pròiseas Pruning Model cuideachd faisg air bith-eòlas. Faodar freagairt an lìonra an seo a choimeas ri plastachd an eanchainn. Tha eisimpleir no dhà inntinneach anns an leabhar. Tormod Doidge:
Tha eanchainn boireannaich a rugadh le dìreach leth air ath-chlàradh gus gnìomhan an leth a tha a dhìth a choileanadh.
Loisg am fear dheth am pàirt den eanchainn aige a bha an urra ri lèirsinn. Thar ùine, ghabh pàirtean eile den eanchainn thairis na gnìomhan sin. (chan eil sinn a 'feuchainn ri ath-aithris)
Mar an ceudna, faodaidh tu cuid de na convolutions lag a ghearradh a-mach bhon mhodail agad. Mar an roghainn mu dheireadh, cuidichidh na pasganan a tha air fhàgail an àite an fheadhainn gearraidh.
An toil leat Transfer Learning no a bheil thu ag ionnsachadh bhon fhìor thoiseach?
Roghainn àireamh a h-aon. Bidh thu a’ cleachdadh Transfer Learning air Yolov3. Retina, Mask-RCNN no U-Net. Ach a’ mhòr-chuid den ùine chan fheum sinn 80 clas nithean mar ann an COCO aithneachadh. Anns a 'chleachdadh agam, tha a h-uile dad cuingealaichte ri ìrean 1-2. Dh’ fhaodadh aon a bhith den bheachd gu bheil an ailtireachd airson 80 clas gun fheum an seo. Tha seo a 'moladh gum feumar an ailtireachd a dhèanamh nas lugha. A bharrachd air an sin, bu mhath leam seo a dhèanamh gun a bhith a’ call na cuideaman ro-thrèanadh a th’ ann mar-thà.
Roghainn àireamh a dhà. Is dòcha gu bheil tòrr dàta agus goireasan coimpiutaireachd agad, no dìreach gu bheil feum agad air ailtireachd air leth àbhaisteach. Chan eil e gu diofar. Ach tha thu ag ionnsachadh an lìonra bhon fhìor thoiseach. Is e am modh àbhaisteach a bhith a’ coimhead air structar an dàta, a’ taghadh ailtireachd a tha TORAIDHEAN ann an cumhachd, agus a’ putadh air falbh bho ath-thrèanadh. Chunnaic mi 0.6 dropouts, Karl.
Anns an dà chùis, faodar an lìonra a lùghdachadh. Air a bhrosnachadh. A-nis leig dhuinn faighinn a-mach dè an seòrsa pruning circumcision
Algorithm coitcheann
Cho-dhùin sinn gum b’ urrainn dhuinn na pasganan a thoirt air falbh. Tha e a’ coimhead gu math sìmplidh:
Tha toirt air falbh convolution sam bith na uallach don lìonra, a bhios mar as trice a’ leantainn gu beagan àrdachadh ann am mearachd. Air an aon làimh, tha an àrdachadh mearachd seo na chomharradh air cho ceart ‘s a tha sinn a’ toirt air falbh convolutions (mar eisimpleir, tha àrdachadh mòr a ’nochdadh gu bheil sinn a’ dèanamh rudeigin ceàrr). Ach tha àrdachadh beag gu math iomchaidh agus gu tric bidh e air a chuir às le trèanadh aotrom a bharrachd às deidh sin le LR beag. Cuir ceum trèanaidh a bharrachd ris:
A-nis feumaidh sinn obrachadh a-mach cuin a tha sinn airson stad a chuir air ar lùb Ionnsachaidh <-> Pruning. Is dòcha gu bheil roghainnean coimheach an seo nuair a dh’ fheumas sinn an lìonra a lughdachadh gu meud agus astar sònraichte (mar eisimpleir, airson innealan gluasadach). Ach, is e an roghainn as cumanta leantainn air adhart leis a’ chearcall gus am bi a’ mhearachd nas àirde na tha iomchaidh. Cuir ris an t-suidheachadh:
Mar sin, bidh an algairim a 'fàs soilleir. Tha e fhathast ri dhèanamh a-mach ciamar a nì thu co-dhùnadh air na convolutions a chaidh a dhubhadh às.
Lorg pacaidean a chaidh a dhubhadh às
Feumaidh sinn cuid de chonnspaidean a thoirt air falbh. Is e droch bheachd a th’ ann a bhith a’ ruith air adhart agus “a’ losgadh” duine sam bith, ged a dh’ obraicheas e. Ach leis gu bheil ceann agad, faodaidh tu smaoineachadh agus feuchainn ri convolutions “lag” a thaghadh airson an toirt air falbh. Tha grunn roghainnean ann:
Tha còir aig gach aon de na roghainnean air beatha agus na feartan gnìomhachaidh aige fhèin. An seo bidh sinn a’ beachdachadh air an roghainn leis a’ tomhas L1 as lugha
Pròiseas làimhe airson YOLOv3
Anns an ailtireachd thùsail tha blocaichean air fhàgail. Ach ge bith dè cho fionnar ‘s a tha iad airson lìonraidhean domhainn, cuiridh iad bacadh oirnn beagan. Is e an duilgheadas nach urrainn dhut rèiteachaidhean le clàran-amais eadar-dhealaichte anns na sreathan seo a dhubhadh às:
Mar sin, tagh sinn sreathan às an urrainn dhuinn rèiteachaidhean a dhubhadh às gu saor:
A-nis togaidh sinn cearcall obrach:
A luchdachadh a-nuas le gnìomhachadh
A 'faighinn a-mach dè an ìre a bu chòir a ghearradh
Gearr a-mach
Ag ionnsachadh 10 amannan le LR = 1e-4
Deuchainn
Tha e feumail a bhith a’ luchdachadh convolutions gus tuairmse a dhèanamh air an ìre de phàirt as urrainn dhuinn a thoirt air falbh aig ceum sònraichte. A’ luchdachadh sìos eisimpleirean:
Tha sinn a’ faicinn gu bheil ìre L5 glè ìosal aig cha mhòr a h-uile àite aig 1% de chonnspaidean agus is urrainn dhuinn an toirt air falbh. Aig gach ceum, chaidh an luchdachadh sìos seo a-rithist agus chaidh measadh a dhèanamh air dè na sreathan agus cia mheud a ghabhadh a ghearradh a-mach.
Chaidh am pròiseas gu lèir a chrìochnachadh ann an ceumannan 4 (àireamhan an seo agus anns a h-uile àite airson an RTX 2060 Super):
Ceum
map 75
Àireamh de pharamadairean, millean
Meud lìonra, mb
Bhon tùs, %
Uair ruith, ms
Suidheachadh circumcision
0
0.9656
60
241
100
180
-
1
0.9622
55
218
91
175
5% de na h-uile
2
0.9625
50
197
83
168
5% de na h-uile
3
0.9633
39
155
64
155
15% airson sreathan le 400+ convolutions
4
0.9555
31
124
51
146
10% airson sreathan le 100+ convolutions
Chaidh aon bhuaidh adhartach a chur ri ceum 2 - meud batch 4 a 'freagairt air cuimhne, a luathaich gu mòr am pròiseas trèanaidh a bharrachd.
Aig ceum 4, chaidh am pròiseas a stad air sgàth cha do thog eadhon trèanadh a bharrachd fad-ùine mAp75 gu seann luachan.
Mar thoradh air an sin, chaidh againn air an co-dhùnadh a luathachadh le 15%, lughdaich am meud le 35% agus na caill gu dìreach.
Automation airson ailtireachd nas sìmplidh
Airson ailtireachd lìonra nas sìmplidhe (às aonais cuir-ris cumhach, blocaichean concaternate agus fuigheall), tha e gu math comasach fòcas a chuir air a bhith a ’giullachd a h-uile sreath connspaideach agus fèin-ghluasad a dhèanamh air a’ phròiseas airson a bhith a ’gearradh a-mach convolutions.
Chuir mi an roghainn seo an gnìomh an seo.
Tha e sìmplidh: chan fheum thu ach gnìomh call, optimizer agus gineadairean baidse:
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)
Ma tha feum air, faodaidh tu na paramadairean rèiteachaidh atharrachadh:
{
"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
}
A bharrachd air an sin, tha cuingealachadh stèidhichte air an claonadh àbhaisteach air a chuir an gnìomh. Is e an t-amas am pàirt a thèid a thoirt air falbh a chuingealachadh, gun a bhith a’ gabhail a-steach connspaidean le ceumannan L1 a tha “gu leòr” mar-thà:
Mar sin, leigidh sinn leat dìreach convolutions lag a thoirt air falbh bho sgaoilidhean coltach ris an fhear cheart agus gun a bhith a’ toirt buaidh air toirt air falbh bho sgaoilidhean coltach ris an fhear chlì:
Nuair a thig an cuairteachadh gu àbhaisteach, faodar an co-èifeachd pruning_standart_deviation_part a thaghadh bho:
Tha mi a’ moladh barail de 2 sigma. No faodaidh tu am feart seo a leigeil seachad, a’ fàgail an luach < 1.0.
Is e an toradh graf de mheud lìonra, call, agus ùine ruith lìonra airson an deuchainn gu lèir, àbhaisteach gu 1.0. Mar eisimpleir, an seo chaidh meud an lìonraidh a lughdachadh cha mhòr 2 uair gun a bhith a’ call càileachd (lìonra beag convolutional le cuideaman 100k):
Tha an astar ruith fo ùmhlachd atharrachaidhean àbhaisteach agus cha mhòr nach eil e air atharrachadh. Tha mìneachadh ann airson seo:
Tha an àireamh de convolutions ag atharrachadh bho goireasach (32, 64, 128) gu nach eil as freagarraiche airson bhidio cairtean - 27, 51, etc. Is dòcha gu bheil mi ceàrr an seo, ach is dòcha gu bheil buaidh aige.
Chan eil an ailtireachd farsaing, ach cunbhalach. Le bhith a 'lùghdachadh an leud, chan eil sinn a' toirt buaidh air an doimhneachd. Mar sin, bidh sinn a 'lùghdachadh an luchd, ach chan eil sinn ag atharrachadh an astar.
Mar sin, chaidh an leasachadh a chuir an cèill ann an lùghdachadh ann an luchd CUDA rè an ruith le 20-30%, ach chan ann ann an lùghdachadh san ùine ruith
Builean
Leig leinn meòrachadh. Bheachdaich sinn air 2 roghainn airson bearradh - airson YOLOv3 (nuair a dh’ fheumas tu obrachadh le do làmhan) agus airson lìonraidhean le ailtireachd nas sìmplidh. Chithear gu bheil e comasach anns an dà chùis lùghdachadh meud lìonra agus luaths a choileanadh gun a bhith a 'call cruinneas. Toraidhean:
A 'lùghdachadh meud
Ruith luathachaidh
Lùghdachadh CUDA Load
Mar thoradh air an sin, càirdeas àrainneachdail (Tha sinn a 'dèanamh feum as fheàrr de chleachdadh ghoireasan coimpiutaireachd san àm ri teachd. An àiteigin tha aon toilichte Greta Thunberg)
Pàipear-taice
Às deidh a’ cheum pruning, faodaidh tu tomhas a chuir ris (mar eisimpleir, le TensorRT)