Võistlused on suurepärane võimalus masinõppe oskuste taseme tõstmiseks. Lisaks sellele, et pääsete juurde kvaliteetsetele andmekogudele, antakse teile ka selged eesmärgid. See aitab teil keskenduda olulisele osale: olemasolevate probleemide jaoks kvaliteetsete lahenduste kujundamisele.
Mina ja mu sõber võtsime hiljuti osa N + 1 kala, N + 2 kala konkurentsi. See masinõppevõistlus, millel on palju pilditöötlust, nõuab, et töötleksite videoklippe, kus kalad on tuvastatud, mõõdetud ja hoitud või tagasi merre visatud.
Artiklis tutvustan teid, kuidas me võistluselt probleemile lähenesime, kasutades tavalisi pilditöötlustehnikaid ja eelnevalt koolitatud närvivõrgu mudeleid. Esitatud lahenduste jõudlust mõõdeti kindla valemi põhjal. Oma lahendusega suutsime kindlustada 11. koha.
Masinõppe lühitutvustuse saamiseks võite viidata sellele see artikkel .
Meile esitati videod, kus oli näha üks või mitu kala igas segmendis. Need videod on jäädvustatud erinevatel paatidel, mis püüavad Maine'i lahes jahvatatud kalu.
Videod koguti fikseeritud asendiga kaameratest, mis olid paigutatud joonlaua alla vaatamiseks. Joonlauale pannakse kala, kalamees eemaldab nende käed joonlaualt ja seejärel viskab kalamees kalad kas vette või hoiab neid vastavalt liigile ja suurusele.
Selle projekti jaoks oli kolm ülesannet. Lõplik eesmärk oli luua algoritm, mis genereerib automaatselt videofailide märkused, kus märkused koosnevad:
Konkursi korraldajad lõid koondmõõdiku, mis andis üldise tunde kõigi nende ülesannete täitmisel. Mõõdik oli iga ülesande jaoks individuaalse mõõdiku lihtne kaalutud kombinatsioon. Kuigi kaalud olid kindlad, soovitasid nad meil keskenduda hästi ümardatud algoritmile, mis suutis kõigi ülesannete täitmisele kaasa aidata!
Iga üksiku ülesande toimivusmõõdikute kohta saate lisateavet selle kohta, kuidas üldist toimivusmõõdikut arvutatakse ametlik võistlusveeb .
Töötades koos masinõpe piltide või videotega tegelevaid projekte, siis tõenäoliselt kasutate neid konvolutsioonilised närvivõrgud . Kuid enne konvolutsiooniliste närvivõrkude kasutamist pidime raamid ette töötlema ja lahendama mõned muud alamülesanded erinevate strateegiate abil.
Treenimiseks kasutasime ühte nVidia 1080Ti GPU-d. Suur osa meie ajast läks kaotsi, kui üritasime oma koodi optimeerida, et konkurentsis asjakohane püsida. Kuid lõpuks kulutasime vähem aega seal, kus see oleks rohkem oluline olnud.
Siluettanalüüsiga sai paatide arvu leidmine üsna tühiseks ülesandeks. Sammud olid järgmised ja kasutasid mõnda väga standardset tehnikat:
SURF tuvastab pildil huvipunktid ja loob funktsioonide kirjeldused. See lähenemisviis on tõeliselt jõuline isegi erinevate pildimuutuste korral.
Kui pildi huvipunktide tunnused on teada, viiakse läbi K-keskne klasterdamine, millele järgneb siluettanalüüs, et määrata piltidel ligikaudne paatide arv.
Kuigi andmekogum sisaldas eraldi videofaile, tundus, et iga video kattus andmekogumi teiste videotega. Selle põhjuseks võib olla see, et videod olid jagatud ühest pikast videost ja seega said iga video alguses või lõpus mõned ühised kaadrid.
Selliste kaadrite tuvastamiseks ja vajaduse korral eemaldamiseks kasutasime raamidel mõnda kiiret räsimisfunktsiooni.
Rakendades mõnda standardset pilditöötlusmeetodit, leidsime joonlaua asukoha ja suuna. Seejärel pöörasime ja kärpisime pilti, et joonlaud jääks ühtlaselt kõikidesse kaadritesse. See võimaldas meil ka raami suurust kümnekordistada.
Tuvastatud joonlaud (joonistatud keskmisele raamile):
Kärbitud ja pööratud ala:
Selle etapi rakendamine kalade järjestuse määramiseks võttis selle võistluse ajal suurema osa minu ajast. Uute konvolutsiooniliste närvivõrkude koolitamine tundus liiga kulukas, seetõttu otsustasime kasutada eelnevalt koolitatud närvivõrke.
Selleks valisime järgmised närvivõrgud:
Neid närvivõrgu mudeleid koolitatakse ImageNeti andmekogum .
Võtsime välja ainult mudelite konvolutsioonilised kihid ja viisime neist läbi võistluste andmekogumi. Väljundis oli mul üsna kompaktne funktsioonide hulk.
Seejärel koolitasime närvivõrke ainult täielikult ühendatud tihedate kihtidega ja prognoosime tulemusi iga eelkoormatud mudeli jaoks. Pärast seda keskmistasime tulemuse ja tulemused osutusid üsna kehvaks.
Otsustasime selle asendada Pikaajaline lühimälu (LSTM) närvivõrgud parema prognoosimise jaoks, kus sisendandmed olid viie kaadri jada, mis transformeeriti eelnevalt ettevalmistatud mudelitega.
Kõigi mudelite väljundite ühendamiseks kasutasime geomeetrilist keskmist.
Kalade tuvastamise torujuhe oli:
Ühe video tulemus näeb välja umbes selline:
Pärast suurema osa võistluse kestusest kulutasime eelmisele etapile, püüdsime korvata kaotatud aega, töötades eelmise etapi mudelitega kalaliikide tuvastamiseks.
Meie lähenemine sellele oli umbes järgmine:
Kala pikkuse määramiseks kasutasime närvivõrke. Üks neist koolitati kalapeade tuvastamiseks ja teine kalasabade tuvastamiseks. Kalade pikkused olid ligilähedased kahe närvivõrgu tuvastatud kahe punkti vaheliseks kauguseks.
Etappide üldine skeem nägi välja selline:
Üldine disain oli üsna lihtne, kuna enne eraldi tulemuste ühendamist viidi videoraamid läbi eespool kirjeldatud etappidest.
Siluettanalüüs on tehnika, mis võimaldab eristada üksteisest visuaalselt eraldatud andmepunktide klastreid.
Masinõppe mudel on masinõppe algoritmide andmete koolituse tulemus. Mudelit saab hiljem kasutada sarnaste sisendite jaoks asjakohase väljundi tootmiseks.