Uainishaji wa michoro iliyoandikwa kwa mkono. Ripoti katika Yandex

Miezi michache iliyopita, wenzetu kutoka Google zilizotumika kwenye Kaggle shindano la kuunda kiainishaji cha picha zilizopatikana kwa njia ya kuvutia mchezo "Haraka, Chora!" Timu, ambayo ni pamoja na msanidi wa Yandex Roman Vlasov, ilichukua nafasi ya nne kwenye mashindano. Katika mafunzo ya Januari ya kujifunza mashine, Roman alishiriki mawazo ya timu yake, utekelezaji wa mwisho wa kiainishaji, na mazoea ya kuvutia ya wapinzani wake.


- Salaam wote! Jina langu ni Roma Vlasov, leo nitakuambia kuhusu Haraka, Chora! Changamoto ya Utambuzi wa Doodle.

Uainishaji wa michoro iliyoandikwa kwa mkono. Ripoti katika Yandex

Kulikuwa na watu watano kwenye timu yetu. Nilijiunga kabla ya tarehe ya mwisho ya kuunganisha. Tulikuwa na bahati mbaya, tulitikiswa kidogo, lakini tulitikiswa kutoka kwa nafasi ya pesa, na walitikiswa kutoka kwa dhahabu. Na tulichukua nafasi ya nne ya heshima.

(Wakati wa shindano, timu zilijiona katika ukadiriaji, ambao uliundwa kulingana na matokeo yaliyoonyeshwa kwenye sehemu moja ya seti ya data iliyopendekezwa. Ukadiriaji wa mwisho, kwa upande wake, uliundwa kwa sehemu nyingine ya mkusanyiko wa data. Hii inafanywa hivyo kwamba washiriki wa shindano hawarekebishi algorithms zao kwa data maalum. Kwa hivyo, katika fainali, wakati wa kubadili kati ya makadirio, nafasi hutetemeka kidogo (kutoka kwa Kiingereza kuitingisha - kuchanganya): kwa data zingine, matokeo yanaweza kuibuka. kuwa tofauti.Timu ya Roman ilikuwa ya kwanza katika nafasi tatu za juu.Katika kesi hii, tatu bora ni pesa, eneo la ukadiriaji wa pesa, kwani ni nafasi tatu za kwanza tu ndizo zilipewa zawadi ya pesa.Baada ya kutetereka, timu tayari ilikuwa ndani. nafasi ya nne. Vivyo hivyo, timu nyingine ilipoteza ushindi, nafasi ya dhahabu. - Mh.)

Uainishaji wa michoro iliyoandikwa kwa mkono. Ripoti katika Yandex

Ushindani huo pia ulikuwa muhimu kwa kuwa Evgeniy Babakhnin alipokea mkuu, Ivan Sosin alipokea bwana, Roman Soloviev alibaki bwana mkubwa, Alex Parinov alipokea bwana, nikawa mtaalam, na sasa mimi ni bwana.

Uainishaji wa michoro iliyoandikwa kwa mkono. Ripoti katika Yandex

Haraka, Chora ni nini? Hii ni huduma kutoka kwa Google. Google ilikuwa na lengo la kutangaza AI na kwa huduma hii ilitaka kuonyesha jinsi mitandao ya neural inavyofanya kazi. Unaenda huko, bofya Hebu tuchore, na ukurasa mpya unatokea ambapo umeambiwa: chora zigzag, una sekunde 20 za kufanya hivi. Unajaribu kuchora zigzag katika sekunde 20, kama hapa, kwa mfano. Ukifanikiwa, mtandao unasema ni zigzag na unaendelea. Kuna picha sita tu kama hizo.

Ikiwa mtandao wa Google ulishindwa kutambua ulichochora, msalaba uliwekwa kwenye kazi. Baadaye nitakuambia nini itamaanisha katika siku zijazo ikiwa mchoro unatambuliwa na mtandao au la.

Huduma hii ilikusanya idadi kubwa ya watumiaji, na picha zote ambazo watumiaji walichora ziliwekwa kumbukumbu.

Uainishaji wa michoro iliyoandikwa kwa mkono. Ripoti katika Yandex

Tulifanikiwa kukusanya takriban picha milioni 50. Kutokana na hili, treni na tarehe ya majaribio ya shindano letu iliundwa. Kwa njia, kiasi cha data katika mtihani na idadi ya madarasa imeangaziwa kwa ujasiri kwa sababu. Nitakuambia juu yao baadaye kidogo.

Muundo wa data ulikuwa kama ifuatavyo. Hizi sio picha za RGB tu, lakini, kwa kusema, logi ya kila kitu ambacho mtumiaji alifanya. Neno ndilo lengo letu, msimbo wa nchi ni mahali ambapo mwandishi wa doodle anatoka, muhuri wa wakati ni wakati. Lebo inayotambulika inaonyesha tu ikiwa mtandao ulitambua picha kutoka kwa Google au la. Na mchoro yenyewe ni mlolongo, makadirio ya curve ambayo mtumiaji huchota na pointi. Na nyakati. Huu ni wakati tangu mwanzo wa kuchora picha.

Uainishaji wa michoro iliyoandikwa kwa mkono. Ripoti katika Yandex

Data iliwasilishwa katika miundo miwili. Huu ni umbizo la kwanza, na la pili ni rahisi. Walikata muda kutoka hapo na kukadiria seti hii ya pointi kwa seti ndogo ya pointi. Kwa hili walitumia Algorithm ya Douglas-Pecker. Una seti kubwa ya pointi ambazo zinakadiria tu mstari ulionyooka, lakini kwa kweli unaweza kukadiria mstari huu kwa pointi mbili tu. Hili ni wazo la algorithm.

Data ilisambazwa kama ifuatavyo. Kila kitu ni sawa, lakini kuna baadhi ya nje. Tulipotatua tatizo, hatukuiangalia. Jambo kuu ni kwamba hakukuwa na madarasa ambayo yalikuwa machache sana, hatukulazimika kufanya sampuli za uzani na upitishaji wa data.

Uainishaji wa michoro iliyoandikwa kwa mkono. Ripoti katika Yandex

Picha zilionekanaje? Hili ni darasa la "ndege" na mifano kutoka kwayo yenye lebo zinazotambuliwa na zisizotambulika. Uwiano wao ulikuwa mahali fulani karibu 1 hadi 9. Kama unaweza kuona, data ni kelele sana. Ningedhani ni ndege. Ukiangalia haijatambuliwa, katika hali nyingi ni kelele tu. Mtu hata alijaribu kuandika "ndege," lakini inaonekana kwa Kifaransa.

Washiriki wengi walichukua gridi tu, wakachora data kutoka kwa mlolongo huu wa mistari kama picha za RGB, na kuzitupa kwenye mtandao. Nilichora takriban kwa njia ile ile: nilichukua palette ya rangi, nikachora mstari wa kwanza na rangi moja, ambayo ilikuwa mwanzoni mwa palette hii, mstari wa mwisho na mwingine, ambao ulikuwa mwisho wa palette, na kati yao. Niliingilia kila mahali kwa kutumia palette hii. Kwa njia, hii ilitoa matokeo bora kuliko ikiwa utachora kama kwenye slaidi ya kwanza - nyeusi tu.

Washiriki wengine wa timu, kama vile Ivan Sosin, walijaribu mbinu tofauti kidogo za kuchora. Kwa chaneli moja alichora tu picha ya kijivu, na chaneli nyingine alichora kila kiharusi na gradient kutoka mwanzo hadi mwisho, kutoka 32 hadi 255, na kwa chaneli ya tatu alichora gradient juu ya viboko vyote kutoka 32 hadi 255.

Jambo lingine la kufurahisha ni kwamba Alex Parinov alipakia habari kwenye mtandao kwa kutumia msimbo wa nchi.

Uainishaji wa michoro iliyoandikwa kwa mkono. Ripoti katika Yandex

Kipimo kinachotumika katika shindano hilo ni Usahihi wa Wastani wa Wastani. Ni nini kiini cha kipimo hiki cha ushindani? Unaweza kutoa predics tatu, na ikiwa hakuna predic sahihi katika hizi tatu, basi unapata 0. Ikiwa kuna moja sahihi, basi utaratibu wake unazingatiwa. Na matokeo lengwa yatahesabiwa kuwa 1 kugawanywa na mpangilio wa utabiri wako. Kwa mfano, ulifanya watabiri watatu, na moja sahihi ni ya kwanza, kisha ugawanye 1 kwa 1 na kupata 1. Ikiwa mtabiri ni sahihi na utaratibu wake ni 2, kisha ugawanye 1 na 2, unapata 0,5. Naam, nk.

Uainishaji wa michoro iliyoandikwa kwa mkono. Ripoti katika Yandex

Kwa usindikaji wa data - jinsi ya kuchora picha na kadhalika - tumeamua kidogo. Je, tulitumia usanifu gani? Tulijaribu kutumia usanifu wa mafuta kama vile PNASNet, SENet, na usanifu wa kisasa kama SE-Res-NeXt, wanazidi kuingia katika mashindano mapya. Pia kulikuwa na ResNet na DenseNet.

Uainishaji wa michoro iliyoandikwa kwa mkono. Ripoti katika Yandex

Uainishaji wa michoro iliyoandikwa kwa mkono. Ripoti katika Yandex

Uainishaji wa michoro iliyoandikwa kwa mkono. Ripoti katika Yandex

Je, tulifundishaje hili? Miundo yote tuliyochukua ilifunzwa awali kwenye imagenet. Ingawa kuna data nyingi, picha milioni 50, lakini bado, ukichukua mtandao uliofunzwa awali kwenye imagenet, ilionyesha matokeo bora zaidi kuliko kama uliufunza tangu mwanzo.

Je, tulitumia mbinu gani za kufundisha? Hii ni Cosing Annealing na Warm Restarts, ambayo nitazungumzia baadaye kidogo. Hii ni mbinu ambayo mimi hutumia katika karibu mashindano yangu yote ya hivi karibuni, na pamoja nao inageuka kutoa mafunzo kwa gridi vizuri kabisa, kufikia kiwango cha chini kizuri.

Uainishaji wa michoro iliyoandikwa kwa mkono. Ripoti katika Yandex

Inayofuata Punguza Kiwango cha Kujifunza kwenye Plateau. Unaanza kufundisha mtandao, weka kiwango fulani cha kujifunza, endelea kuifundisha, na upotezaji wako polepole hubadilika kuwa thamani fulani. Unaangalia hii, kwa mfano, kwa enzi kumi hasara haijabadilika hata kidogo. Unapunguza kiwango chako cha kujifunza kwa thamani fulani na kuendelea kujifunza. Inashuka tena kidogo, inaungana kwa kiwango cha chini, na unapunguza tena kiwango cha kujifunza, na kadhalika, hadi mtandao wako uungane.

Ifuatayo ni mbinu ya kuvutia: Usioze kiwango cha kujifunza, ongeza ukubwa wa kundi. Kuna makala yenye jina moja. Unapofunza mtandao, sio lazima upunguze kiwango cha kujifunza, unaweza kuongeza ukubwa wa kundi.

Mbinu hii, kwa njia, ilitumiwa na Alex Parinov. Alianza na kundi sawa na 408, na mtandao wake ulipofika nyanda za juu, aliongeza ukubwa wa kundi mara mbili, nk.

Kwa kweli, sikumbuki ni thamani gani ukubwa wa kundi lake ulifikia, lakini cha kufurahisha ni kwamba kulikuwa na timu kwenye Kaggle ambazo zilitumia mbinu sawa, ukubwa wa kundi lao ulikuwa karibu 10000. Kwa njia, mifumo ya kisasa ya kujifunza kwa kina, kama vile. PyTorch, kwa mfano, inakuwezesha kufanya hivyo kwa urahisi sana. Unatengeneza kundi lako na kuwasilisha kwa mtandao sio kama ilivyo, kwa ukamilifu, lakini ugawanye katika vipande ili iweze kuingia kwenye kadi yako ya video, uhesabu gradients, na baada ya kuhesabu gradient kwa kundi zima, sasisha. uzito.

Kwa njia, saizi kubwa za kundi bado zilijumuishwa kwenye shindano hili, kwa sababu data ilikuwa ya kelele kabisa, na saizi kubwa ya kundi ilikusaidia kukadiria kwa usahihi zaidi gradient.

Kuweka alama za uwongo pia kulitumiwa, zaidi kutumiwa na Roman Soloviev. Alitoa sampuli karibu nusu ya data kutoka kwa jaribio katika vikundi, na akafunza gridi ya taifa kwenye bati kama hizo.

Saizi ya picha ilikuwa muhimu, lakini ukweli ni kwamba una data nyingi, unahitaji kutoa mafunzo kwa muda mrefu, na ikiwa saizi ya picha yako ni kubwa sana, basi utafunza kwa muda mrefu sana. Lakini hii haikuongeza sana ubora wa kiainishaji chako cha mwisho, kwa hivyo ilifaa kutumia aina fulani ya biashara. Na tulijaribu tu picha ambazo hazikuwa kubwa sana kwa ukubwa.

Yote yalijifunzaje? Kwanza, picha za ukubwa mdogo zilichukuliwa, enzi kadhaa ziliendeshwa juu yao, hii ilichukua muda mwingi. Kisha picha za ukubwa mkubwa zilitolewa, mtandao ulifunzwa, basi hata zaidi, hata zaidi, ili usiifunze kutoka mwanzo na usipoteze muda mwingi.

Kuhusu viboreshaji. Tulitumia SGD na Adam. Kwa njia hii iliwezekana kupata mfano mmoja, ambao ulitoa kasi ya 0,941-0,946 kwenye ubao wa kiongozi wa umma, ambayo ni nzuri kabisa.

Ikiwa utakusanya mifano kwa njia fulani, utapata mahali karibu 0,951. Ukitumia mbinu moja zaidi, utapata alama ya mwisho ya 0,954 kwenye bodi ya umma, kama tu tulivyopata. Lakini zaidi juu ya hilo baadaye. Ifuatayo nitakuambia jinsi tulivyokusanya mifano, na jinsi tulivyoweza kufikia kasi ya mwisho.

Ifuatayo ningependa kuzungumza juu ya Kuongeza Ufungaji kwa Kuanzisha tena Joto au Kushuka kwa Gradient ya Stochastic na Kuanzisha tena Joto. Kwa kusema, kwa kanuni, unaweza kutumia kiboreshaji chochote, lakini jambo ni hili: ikiwa utafunza mtandao mmoja tu na polepole unabadilika kwa kiwango cha chini, basi kila kitu ni sawa, utapata mtandao mmoja, hufanya makosa fulani, lakini wewe. inaweza kuifundisha kwa njia tofauti kidogo. Utaweka kiwango cha awali cha kujifunza, na ukishushe hatua kwa hatua kulingana na fomula hii. Unaipunguza, mtandao wako unakuja kwa kiwango cha chini, kisha unaokoa uzani, na tena kuweka kiwango cha kujifunza ambacho kilikuwa mwanzoni mwa mafunzo, na hivyo kwenda juu kutoka kwa kiwango hiki cha chini, na tena kupunguza kiwango chako cha kujifunza.

Kwa hivyo, unaweza kutembelea viwango vya chini kadhaa mara moja, ambayo hasara yako itakuwa, pamoja na au minus, sawa. Lakini ukweli ni kwamba mitandao iliyo na uzani huu itatoa makosa tofauti kwenye tarehe yako. Kwa kuziweka wastani, utapata aina fulani ya makadirio, na kasi yako itakuwa kubwa zaidi.

Uainishaji wa michoro iliyoandikwa kwa mkono. Ripoti katika Yandex

Kuhusu jinsi tulivyokusanya mifano yetu. Mwanzoni mwa uwasilishaji, nilisema makini na kiasi cha data katika mtihani na idadi ya madarasa. Ikiwa unaongeza 1 kwa idadi ya malengo katika seti ya mtihani na kugawanya kwa idadi ya madarasa, utapata nambari 330, na hii iliandikwa kwenye jukwaa - kwamba madarasa katika mtihani ni ya usawa. Hii inaweza kutumika.

Kulingana na hili, Roman Soloviev alikuja na metriki, tukaiita Alama ya Wakala, ambayo ilihusiana vyema na ubao wa wanaoongoza. Jambo ni: unafanya utabiri, chukua 1 ya juu ya watabiri wako na uhesabu idadi ya vitu kwa kila darasa. Ifuatayo, toa 330 kutoka kwa kila thamani na uongeze maadili kamili yanayotokana.

Thamani zifuatazo zilipatikana. Hili lilitusaidia kutounda ubao wa wanaoongoza unaochunguza, lakini kuthibitisha ndani ya nchi na kuchagua coefficients kwa ensembles zetu.

Kwa kukusanyika unaweza kupata kasi kama hiyo. Ni nini kingine ningeweza kufanya? Tuseme umetumia taarifa kwamba madarasa katika mtihani wako yana usawa.

Usawazishaji ulikuwa tofauti. Mfano wa mmoja wao - kusawazisha kutoka kwa wavulana ambao walichukua nafasi ya kwanza.

Tulifanya nini? Kusawazisha kwetu ilikuwa rahisi sana, ilipendekezwa na Evgeny Babakhnin. Kwanza tulipanga utabiri wetu kwa 1 bora na tukachagua watahiniwa kutoka kwao - ili idadi ya madarasa isizidi 330. Lakini kwa baadhi ya madarasa unaishia na vitabiri visivyozidi 330. Sawa, hebu pia tupange kwa 2 bora na 3 bora. , na pia tutachagua wagombea.

Kusawazisha kwetu kulitofautianaje na kusawazisha mahali pa kwanza? Walitumia mbinu ya kurudia, kuchukua darasa maarufu zaidi na kupunguza uwezekano wa darasa hilo kwa idadi ndogo hadi darasa hilo lisiwe maarufu zaidi. Tulichukua darasa lililofuata maarufu zaidi. Hivyo waliendelea kuwashusha mpaka idadi ya tabaka zote ikawa sawa.

Kila mtu alitumia mbinu ya kuongeza au kuondoa moja kutoa mafunzo kwa mitandao, lakini si kila mtu alitumia kusawazisha. Kutumia kusawazisha, unaweza kwenda kwenye dhahabu, na ikiwa ulikuwa na bahati, basi kwenye pesa.

Jinsi ya kuandaa tarehe mapema? Kila mtu alitayarisha tarehe, pamoja na au kupunguza, kwa njia ile ile - kufanya vipengele vilivyotengenezwa kwa mikono, kujaribu kusimba nyakati na rangi tofauti za kiharusi, nk Alexey Nozdrin-Plotnitsky, ambaye alichukua nafasi ya 8, alizungumza kuhusu hili.

Uainishaji wa michoro iliyoandikwa kwa mkono. Ripoti katika Yandex

Alifanya hivyo tofauti. Alisema kuwa vipengele vyako vyote vilivyotengenezwa kwa mikono havifanyi kazi, huna haja ya kufanya hivyo, mtandao wako unapaswa kujifunza yote haya peke yake. Na badala yake, alikuja na moduli za kujifunza ambazo zilichambua data yako. Alitupa data asili ndani yao bila kusindika - kuratibu za uhakika na nyakati.

Kisha akachukua tofauti kulingana na kuratibu, na akaiweka wastani kulingana na nyakati. Na akaja na tumbo refu. Alitumia ubadilishaji wa 1D kwake mara kadhaa ili kupata matrix ya saizi 64xn, ambapo n ni jumla ya idadi ya alama, na 64 inafanywa ili kulisha tumbo linalosababishwa kwa safu ya mtandao wowote wa mapinduzi, ambao unakubali idadi ya chaneli. - 64. alipata tumbo la 64xn, basi kutokana na hili ilikuwa ni lazima kuunda tensor ya ukubwa fulani ili idadi ya njia iwe sawa na 64. Alirekebisha pointi zote X, Y katika safu kutoka 0 hadi 32 ili kuunda tensor ya ukubwa 32x32. Sijui kwa nini alitaka 32x32, ikawa hivyo tu. Na katika uratibu huu aliweka kipande cha tumbo hili la ukubwa wa 64xn. Kwa hivyo iliishia tu na tensor ya 32x32x64 ambayo unaweza kuweka zaidi kwenye mtandao wako wa neva wa kushawishi. Hiyo ndiyo yote nilitaka kusema.

Chanzo: mapenzi.com

Kuongeza maoni