Eskuz idatzitako marrazkien sailkapena. Txostena Yandex-en

Duela hilabete batzuk, Google-ko gure lankideek gastatu on Kaggle-n, sentsazionalean lortutako irudien sailkapena sortzeko lehiaketa jokoa "Azkar, Marraztu!" Yandex-eko Roman Vlasov garatzailea biltzen zuen taldeak laugarren postua lortu zuen lehiaketan. Urtarrileko ikaskuntza automatikoaren prestakuntzan, Romanek bere taldearen ideiak, sailkatzailearen azken ezarpena eta aurkarien praktika interesgarriak partekatu zituen.


- Kaixo guztioi! Nire izena Roma Vlasov da, gaur Quick, Draw-en berri emango dizut! Doodle Recognition Erronka.

Eskuz idatzitako marrazkien sailkapena. Txostena Yandex-en

Gure taldean bost lagun zeuden. Batzeko epea amaitu baino lehen sartu nintzen. Zorte txarra izan genuen, apur bat astindu gintuzten, baina diru posiziotik astindu gintuzten, eta urrezko posiziotik astindu zituzten. Eta ohorezko laugarren postua lortu genuen.

(Lehiaketan zehar, taldeek beren burua behatu zuten balorazio batean, zeina proposatutako datu-multzoaren zati batean erakutsitako emaitzetan oinarrituta osatu zen. Azken balorazioa, berriz, datu-multzoaren beste zati batean eratu zen. Horrela egiten da. lehiaketako parte-hartzaileek ez dituztela algoritmoak datu zehatzetara egokitzen.Horregatik, finalean, balorazioak aldatzean, postuak apur bat astintzen dira (ingelesezko shake up - nahasteko): beste datu batzuetan, emaitza izan daiteke. desberdina izatea.Romanen taldea lehen hiru postuetan zegoen.Kasu honetan, lehen hirurak dirua da, balorazio monetarioaren eremua, lehen hiru postuei soilik eman zitzaien diru-saria.Astinduaren ostean, taldea dagoeneko sartuta zegoen. laugarren postua. Era berean, beste taldeak garaipena galdu zuen, urrezko postua. - Ed.)

Eskuz idatzitako marrazkien sailkapena. Txostena Yandex-en

Lehiaketa ere esanguratsua izan zen Evgeniy Babakhnin-ek maisu handi bat jaso zuelako, Ivan Sosinek maisu bat jaso zuen, Roman Solovievek maisu nagusi izaten jarraitu zuen, Alex Parinov-ek maisu bat jaso zuen, aditu bihurtu nintzen eta orain maisu naiz.

Eskuz idatzitako marrazkien sailkapena. Txostena Yandex-en

Zer da hau Quick, Draw? Google-ren zerbitzu bat da. Google-k IA ezagutaraztea zuen helburua eta zerbitzu honekin sare neuronalak nola funtzionatzen duten erakutsi nahi zuen. Hara joan, Marraz dezagun sakatu, eta orri berri bat agertuko zaizu esaten dizuten tokian: marraztu sigi-saga bat, 20 segundo dituzu horretarako. 20 segundotan sigi-saga bat marrazten saiatzen ari zara, hemen bezala, adibidez. Lortzen baduzu, sareak dio sigi-saga bat dela eta aurrera egiten duzu. Horrelako sei argazki baino ez daude.

Google-ren sareak ez bazuen marraztu duzuna antzeman, gurutze bat jarri zitzaion ataza horri. Aurrerago esango dizut zer esan nahi duen etorkizunean marrazki bat sareak aintzat hartzen duen ala ez.

Zerbitzu honek erabiltzaile kopuru nahiko handia bildu zuen, eta erabiltzaileek marraztu zituzten irudi guztiak erregistratuta zeuden.

Eskuz idatzitako marrazkien sailkapena. Txostena Yandex-en

Ia 50 milioi irudi biltzea lortu genuen. Hortik abiatuta, gure lehiaketarako tren eta proba data osatu zen. Bide batez, probako datu kopurua eta klase kopurua lodiz nabarmentzen dira arrazoi bategatik. Geroxeago kontatuko dizkizut.

Datuen formatua honakoa zen. Hauek ez dira RGB irudiak soilik, baizik eta, gutxi gorabehera, erabiltzaileak egindako guztiaren erregistroa. Hitza da gure helburua, herrialde-kodea doodle-aren egilea nongoa da, denbora-zigilua denbora da. Aitortutako etiketak sareak Google-ren irudia ezagutu duen ala ez erakusten du. Eta marrazkia bera sekuentzia bat da, erabiltzaileak puntuekin marrazten duen kurba baten hurbilketa. Eta denborak. Hau da irudia marrazten hasten den denbora.

Eskuz idatzitako marrazkien sailkapena. Txostena Yandex-en

Datuak bi formatutan aurkeztu ziren. Hau da lehenengo formatua, eta bigarrena sinplifikatuta dago. Hortik denborak moztu zituzten eta puntu multzo hori puntu multzo txikiago batekin hurbildu zuten. Horretarako erabiltzen zuten Douglas-Pecker algoritmoa. Lerro zuzen bat besterik gabe hurbiltzen den puntu multzo handi bat duzu, baina, egia esan, zuzen hori bi punturekin hurbil dezakezu. Hau da algoritmoaren ideia.

Datuak honela banatu dira. Dena uniformea ​​da, baina badaude aberraldi batzuk. Arazoa konpondu genuenean, ez genuen begiratu. Gauza nagusia da ez zegoela benetan gutxi ziren klaserik, ez genuen laginketa ponderaturik eta datuen gain-laginketarik egin beharrik.

Eskuz idatzitako marrazkien sailkapena. Txostena Yandex-en

Nolakoak ziren irudiak? Hau da "hegazkin" klasea eta haren adibideak, etiketak aitortuak eta ezezagunak dituztenak. Haien ratioa 1 eta 9 ingurukoa zen. Ikus dezakezunez, datuak nahiko zaratatsuak dira. Hegazkin bat dela suposatuko nuke. Ezezaguna ikusten baduzu, kasu gehienetan zarata besterik ez da. Norbait "hegazkina" idazten ere saiatu zen, baina itxuraz frantsesez.

Parte-hartzaile gehienek saretak hartu, lerro sekuentzia horretatik datuak RGB irudi gisa marraztu eta sarera bota zituzten. Gutxi gora behera modu berean marraztu nuen: kolore paleta bat hartu nuen, lehenengo lerroa kolore batekin marraztu nuen, hau da, paleta honen hasieran zegoen, azken lerroa beste batekin, zeina zen, zeina paletaren amaieran zegoen, eta haien artean. Paleta hau erabiliz nonahi interpolatu nuen. Bide batez, honek lehen diapositiban bezala marraztuz gero baino emaitza hobea eman zuen, beltzez besterik ez.

Beste taldekide batzuek, Ivan Sosin adibidez, marrazketarako planteamendu apur bat desberdinak probatu zituzten. Kanal batekin irudi gris bat besterik ez zuen marraztu, beste kanal batekin trazu bakoitza hasieratik amaierara, 32tik 255era, gradiente batekin marraztu zuen, eta hirugarren kanalarekin 32tik 255era bitarteko trazu guztien gainean.

Beste gauza interesgarri bat da Alex Parinov-ek sarera informazioa igo zuela herrialdeko kodea erabiliz.

Eskuz idatzitako marrazkien sailkapena. Txostena Yandex-en

Lehiaketan erabilitako metrika batez besteko batez besteko zehaztasuna da. Zein da metrika honen funtsa lehiaketarako? Hiru iragarpen eman ditzakezu, eta hiru hauetan iragarpen zuzenik ez badago, orduan 0 lortuko duzu. Zuzena baldin badago, bere ordena hartzen da kontuan. Eta helburuko emaitza 1 gisa zenbatuko da zure iragarpenaren ordenarekin zatituta. Esaterako, hiru iragarle egin dituzu, eta zuzena lehenengoa da, gero 1etik 1 zatitu eta 1 lortzen duzu. Iragarlea zuzena bada eta bere ordena 2 bada, orduan 1 bi 2 zatitu, 0,5 lortuko duzu. Bueno, etab.

Eskuz idatzitako marrazkien sailkapena. Txostena Yandex-en

Datuen aurreprozesaketarekin -marrazkiak nola marraztu eta abar- pixka bat erabaki dugu. Zein arkitektura erabili genuen? PNASNet, SENet eta SE-Res-NeXt bezalako arkitektura klasikoak erabiltzen saiatu gara, gero eta lehiaketa berrietan gehiago sartzen ari dira. ResNet eta DenseNet ere bazeuden.

Eskuz idatzitako marrazkien sailkapena. Txostena Yandex-en

Eskuz idatzitako marrazkien sailkapena. Txostena Yandex-en

Eskuz idatzitako marrazkien sailkapena. Txostena Yandex-en

Nola irakatsi genuen hori? Hartu genituen modelo guztiak aldez aurretik entrenatu ziren imagenet-en. Datu asko dauden arren, 50 milioi irudi, baina hala ere, imagenet-en aurrez trebatutako sare bat hartuz gero, emaitza hobeak erakusten zituen hutsetik entrenatuko bazenu baino.

Zein irakaskuntza teknika erabili dugu? Hau da Cosing Annealing with Warm Restarts, beranduago hitz egingo dudana. Azken txapelketetan ia guztietan erabiltzen dudan teknika da hau, eta horiekin sareak nahiko ondo entrenatzea lortzen da, minimo on bat lortzeko.

Eskuz idatzitako marrazkien sailkapena. Txostena Yandex-en

Hurrengoa Murriztu ikasketa-tasa Plateau-n. Sarea entrenatzen hasten zara, ikaskuntza-tasa jakin bat ezartzen duzu, irakasten jarraitzen duzu eta zure galera pixkanaka balio jakin batera bat egiten du. Hau egiaztatzen duzu, adibidez, hamar garaitan galera ez da batere aldatu. Zure ikaskuntza-tasa balio pixka batean murrizten duzu eta ikasten jarraitzen duzu. Berriro apur bat jaisten da, gutxieneko batean bat egiten du eta berriro ere ikasketa-tasa jaisten duzu, eta abar, zure sarea azkenean bat egiten duen arte.

Hurrengoa teknika interesgarri bat da: ez jaitsi ikaskuntza-tasa, lotearen tamaina handitu. Bada izen bereko artikulu bat. Sare bat entrenatzen duzunean, ez duzu ikasketa-tasa murriztu behar, lotearen tamaina handitu dezakezu.

Teknika hau, bide batez, Alex Parinov-ek erabili zuen. 408ren pareko lote batekin hasi zen, eta bere sarea lautada batera iritsi zenean, lotearen tamaina bikoiztu besterik ez zuen egin, etab.

Izan ere, ez dut gogoan zer balio lortu zuen bere lotearen tamaina, baina interesgarria dena da Kaggle-n teknika bera erabiltzen zuten taldeak zeudela, haien lotearen tamaina 10000 ingurukoa zen. Bide batez, ikaskuntza sakonerako esparru modernoak, esaterako. PyTorch-ek, adibidez, oso erraz egiteko aukera ematen du. Zure lotea sortzen duzu eta sarera ez dagoen bezala bidaltzen duzu, bere osotasunean, baina zatitan zatitzen duzu zure bideo-txartelean sartzeko, gradienteak kalkulatu eta lote osorako gradientea kalkulatu ondoren, eguneratu. pisuak.

Bide batez, lehiaketa honetan lote-tamaina handiak sartzen ziren oraindik, datuak nahiko zaratatsuak zirelako, eta lote-tamaina handi batek gradientea zehaztasun handiagoz hurbiltzen lagundu zidalako.

Sasi-etiketaketa ere erabili zen, gehienbat Roman Solovievek erabilia. Probako datuen erdiak loteka hartu zituen laginak, eta lote horietan trebatu zuen sarea.

Irudien tamainak garrantzia zuen, baina kontua da datu asko dituzula, denbora luzez entrenatu behar duzula eta zure irudiaren tamaina nahiko handia bada, oso denbora luzez entrenatuko zara. Baina horrek ez zion asko gehitu zure azken sailkatzailearen kalitateari, eta, beraz, merezi izan zuen nolabaiteko truke-offen bat erabiltzea. Eta tamainaz oso handiak ez ziren irudiak bakarrik probatu genituen.

Nola ikasi zen dena? Lehen, tamaina txikiko argazkiak atera ziren, hainbat garai exekutatu ziren, honek denbora dezente behar zuen. Gero tamaina handiko irudiak eman ziren, sarea trebatu zen, gero are gehiago, are gehiago, hutsetik entrenatu eta denbora asko ez galtzeko.

Optimizatzaileei buruz. SGD eta Adam erabili ditugu. Modu honetan eredu bakarra lortu ahal izan zen, 0,941-0,946ko abiadura ematen zuen sailkapen publikoan, eta hori nahiko ona da.

Ereduak nolabait konbinatzen badituzu, 0,951 inguruan lortuko duzu. Teknika bat gehiago erabiltzen baduzu, 0,954ko azken puntuazioa lortuko duzu arbel publikoan, guk lortu dugun bezala. Baina horri buruz gehiago. Jarraian, maketak nola muntatu genituen, eta nola lortu genuen halako azken abiadura lortzea kontatuko dizuet.

Jarraian, Cosing Annealing-ari buruz hitz egin nahiko nuke Berrabiarazi Epelekin edo Gradiente Estokastikoa Berrabiarazi Epelekin. Gutxi gorabehera, printzipioz, edozein optimizatzaile erabil dezakezu, baina kontua hau da: sare bat entrenatzen baduzu eta pixkanaka gutxieneko batera joaten bada, dena ondo dago, sare bat lortuko duzu, akats batzuk egiten dituzu, baina apur bat desberdin entrenatu dezake. Hasierako ikaskuntza-tasa bat ezarriko duzu, eta pixkanaka-pixkanaka jaitsiko duzu formula honen arabera. Jaitsi egiten duzu, zure sarea gutxienera iristen da, gero pisuak gordetzen dituzu eta berriro entrenamenduaren hasieran zegoen ikaskuntza-tasa ezartzen duzu, horrela gutxieneko horretatik nonbait gora eginez, eta berriro ere zure ikas-tasa jaitsiz.

Horrela, hainbat minimo bisita ditzakezu aldi berean, eta horietan zure galera, gehi edo ken, berdina izango da. Baina kontua da pisu hauek dituzten sareek akats desberdinak emango dituztela zure datan. Horien batez bestekoa eginez, nolabaiteko hurbilketa lortuko duzu, eta zure abiadura handiagoa izango da.

Eskuz idatzitako marrazkien sailkapena. Txostena Yandex-en

Gure ereduak nola muntatu genituen buruz. Aurkezpenaren hasieran, probako datu kopuruari eta klase kopuruari erreparatzeko esan nuen. Test multzoko helburu kopuruari 1 gehitzen badiozu eta klase kopuruarekin zatitzen baduzu, 330 zenbakia lortuko duzu, eta hau foroan idatzi zen - probako klaseak orekatuta daudela. Hau erabil liteke.

Horretan oinarrituta, Roman Solovievek metrika bat sortu zuen, Proxy Score deitu genion, eta nahiko ondo erlazionatu zen sailkapenarekin. Kontua da: iragarpen bat egiten duzu, zure iragarleen goiko 1a hartu eta klase bakoitzeko objektu kopurua zenbatu. Ondoren, kendu balio bakoitzetik 330 eta gehitu ondoriozko balio absolutuak.

Ondorengo balioak lortu dira. Honek ez zigun zundaketa-taula bat sortzen, baizik eta lokalean balioztatzen eta gure multzoetarako koefizienteak hautatzen.

Talde batekin halako abiadura lor liteke. Zer gehiago egin nezake? Demagun zure probako klaseak orekatuak direlako informazioa erabili duzula.

Oreka ezberdina zen. Horietako baten adibidea β€” lehen postua lortu zuten mutilen oreka.

Zer egin dugu? Gure oreka nahiko erraza zen, Evgeny Babakhnin-ek iradoki zuen. Lehenik eta behin gure iragarpenak lehen 1en arabera sailkatu ditugu eta haietatik hautagaiak hautatu ditugu, klase kopurua 330etik gorakoa izan ez dadin. Baina klase batzuetan 330 iragarle baino gutxiagorekin geratzen zara. Ados, ordena ditzagun lehen 2 eta 3 nagusien arabera. , eta hautagaiak ere hautatuko ditugu.

Zertan desberdintzen zen gure oreka lehen postuaren orekatik? Ikuspegi iteratiboa erabili zuten, klase ezagunena hartuz eta klase horren probabilitateak kopuru txiki batean gutxituz klase hori ezagunena ez zen arte. Hurrengo klaserik ezagunena hartu genuen. Beraz, jaisten jarraitu zuten klase guztien kopurua berdindu arte.

Denek gehi edo ken bat erabili zuten tren sareetarako, baina denek ez zuten orekarik erabili. Orekatzea erabiliz, urrea sartu zintezke, eta zorterik bazenu, dirura.

Nola aurreprozesatu data bat? Denek aldez aurretik prozesatu zuten data, plus edo minus, modu berean: eskuz egindako ezaugarriak eginez, denborak trazu kolore ezberdinekin kodetzen saiatuz, etab. 8. postua lortu zuen Alexey Nozdrin-Plotnitskyk hitz egin zuen honi buruz.

Eskuz idatzitako marrazkien sailkapena. Txostena Yandex-en

Bestela egin zuen. Esan zuen zure eskuz egindako ezaugarri guzti hauek ez dutela funtzionatzen, ez duzula hori egin behar, zure sareak hau guztia bere kabuz ikasi beharko luke. Eta horren ordez, zure datuak aldez aurretik prozesatzen zituzten ikasketa-moduluak sortu zituen. Jatorrizko datuak aldez aurretik prozesatu gabe bota zituen: puntu koordenatuak eta denborak.

Gero, koordenatuen arabera hartu zuen aldea, eta denboraren arabera egin zuen guztia batez bestekoa. Eta matrize luze samarra atera zuen. 1D konboluzioa hainbat aldiz aplikatu zion 64xn tamainako matrizea lortzeko, non n puntu kopuru osoa den, eta 64 egiten da, ondoriozko matrizea edozein sare konbolutiboko geruza elikatzeko, zeinak kanal kopurua onartzen duen. - 64. 64xn matrizea lortu zuen, gero honetatik nolabaiteko tamainako tentsorea sortu behar zen, kanal kopurua 64ren berdina izan zedin. 0tik 32rako tartean X, Y puntu guztiak normalizatu zituen. 32x32 tamainako tentsorea. Ez dakit zergatik nahi zuen 32x32, horrela gertatu zen. Eta koordenatu horretan 64xn tamainako matrize honen zati bat jarri zuen. Beraz, 32x32x64 tentsore batekin amaitu zen, zure sare neuronal konboluzionalean gehiago jar dezakezuna. Hori da esan nahi nuen guztia.

Iturria: www.habr.com

Gehitu iruzkin berria