Orodha ya maudhui:

Kugundua kitu na Bodi za MaiX zilizopigwa (Kendryte K210): Hatua 6
Kugundua kitu na Bodi za MaiX zilizopigwa (Kendryte K210): Hatua 6

Video: Kugundua kitu na Bodi za MaiX zilizopigwa (Kendryte K210): Hatua 6

Video: Kugundua kitu na Bodi za MaiX zilizopigwa (Kendryte K210): Hatua 6
Video: Счастливая история слепой кошечки по имени Нюша 2024, Julai
Anonim
Image
Image

Kama mwendelezo wa nakala yangu ya zamani juu ya utambuzi wa picha na Bodi za MaiX zilizopigwa, niliamua kuandika mafunzo mengine, nikizingatia kugundua kitu. Kulikuwa na vifaa vya kupendeza vilivyoibuka hivi karibuni na chip ya Kendryte K210, pamoja na Seeed AI Hat ya Edge Computing, M5StickV ya M5 na HuskyLens ya DFRobot (ingawa hiyo ina firmware ya wamiliki na inalenga zaidi Kompyuta kamili). Kwa sababu ya bei rahisi, Kendryte K210 amevutia watu, akitaka kuongeza maono ya kompyuta kwenye miradi yao. Lakini kama kawaida na bidhaa za vifaa vya Wachina, msaada wa teknolojia unakosekana na hii ni jambo ambalo ninajaribu kuboresha na nakala na video zangu. Lakini kumbuka, kwamba siko kwenye timu ya waendelezaji wa Kendryte au Sipeed na siwezi kujibu maswali yote yanayohusiana na bidhaa zao.

Kwa kuzingatia, wacha tuanze! Tutaanza na muhtasari mfupi (na rahisi) wa jinsi mifano ya utambuzi wa kitu CNN inavyofanya kazi.

UPDATE MAY 2020: Kuona jinsi nakala yangu na video kwenye Kugundua Kitu na bodi za K210 bado ni maarufu sana na kati ya matokeo ya juu kwenye YouTube na Google, niliamua kusasisha nakala hiyo ili kujumuisha habari kuhusu aXeleRate, mfumo wa Keras wa AI kwenye Makali mimi kuendeleza. Ni rahisi kutumia na zaidi hadi sasa.

Kwa toleo la zamani la nakala hiyo, bado unaweza kuiona kwenye steemit.com.

Hatua ya 1: Usanifu wa Mfano wa Kugundua Kitu

Usanifu wa Mfano wa Kugundua Kitu
Usanifu wa Mfano wa Kugundua Kitu
Usanifu wa Mfano wa Kugundua Kitu
Usanifu wa Mfano wa Kugundua Kitu

Mifano ya utambuzi wa picha (au uainishaji wa picha) huchukua picha nzima kama pembejeo na kutoa orodha ya uwezekano kwa kila darasa tunajaribu kutambua. Ni muhimu sana ikiwa kitu tunachopenda kinachukua sehemu kubwa ya picha na hatujali sana juu ya eneo lake. Lakini vipi ikiwa mradi wetu (sema, kamera inayofuatilia uso) hauitaji tu kuwa na maarifa juu ya aina ya kitu kwenye picha, lakini pia uratibu wake. Na vipi kuhusu mradi unaohitaji kugundua vitu vingi (kwa mfano kuhesabu)?

Hapa ndio wakati Mifano ya Kugundua Kitu inakuja vizuri. Katika kifungu hiki tutatumia usanifu wa YOLO (unaangalia mara moja tu) na tutazingatia maelezo juu ya ufundi wa ndani wa usanifu huu.

Tunajaribu kubaini ni vitu gani viko kwenye picha na ni nini kuratibu zao. Kwa kuwa ujifunzaji wa mashine sio uchawi na sio "mashine ya kufikiria", lakini ni algorithm tu ambayo hutumia takwimu kuboresha utendaji (mtandao wa neva) kusuluhisha vizuri shida fulani. Tunahitaji kuelezea shida hii kuifanya iwe "bora zaidi". Njia ya ujinga hapa itakuwa kuwa na algorithm inayopunguza upotezaji (tofauti) kati ya utabiri na uratibu sahihi wa kitu. Hiyo ingefanya kazi vizuri, maadamu tuna kitu kimoja tu kwenye picha. Kwa vitu vingi tunachukua njia tofauti - tunaongeza gridi na hufanya mtandao wetu utabiri uwepo (au kutokuwepo) kwa kitu (s) katika kila gridi. Inasikika sana, lakini bado inaacha kutokuwa na uhakika sana kwa mtandao - jinsi ya kutoa utabiri na nini cha kufanya wakati kuna vitu vingi vilivyo na kituo ndani ya seli moja ya gridi? Tunahitaji kuongeza kikwazo kimoja zaidi - kinachoitwa nanga. Anchors ni saizi za mwanzo (upana, urefu) ambazo zingine (karibu zaidi na saizi ya kitu) zitabadilishwa ukubwa wa kitu - kwa kutumia matokeo kutoka kwa mtandao wa neva (ramani ya mwisho ya kipengele).

Kwa hivyo, hapa kuna maoni ya kiwango cha juu juu ya kile kinachoendelea wakati mtandao wa usanifu wa YOLO unafanya kugundua kitu kwenye picha. Kulingana na huduma zilizogunduliwa na mtandao wa dondoo, kwa kila seli ya gridi seti ya utabiri hufanywa, ambayo ni pamoja na kukabiliana na nanga, uwezekano wa nanga na darasa la nanga. Kisha tunatupa utabiri na uwezekano mdogo na voila!

Hatua ya 2: Andaa Mazingira

Andaa Mazingira
Andaa Mazingira

aXeleRate inategemea mradi mzuri na penny4860, SVHN yolo-v2 kigunduzi cha tarakimu. aXeleRate inachukua utekelezaji huu wa kigunduzi cha YOLO huko Keras kwa kiwango kinachofuata na hutumia mfumo wake wa usanidi rahisi kufanya mafunzo na ubadilishaji wa utambuzi wa picha / kugundua kitu na mitandao ya kugawanya picha na nyuma kadhaa.

Njia mbili za kutumia aXeleRate: kukimbia ndani ya mashine ya Ubuntu au Google Colab. Kwa kukimbia katika Google Colab, angalia mfano huu:

PASCAL-VOC daftari la ugunduzi wa kitu

Kufundisha mtindo wako ndani na kuisafirisha ili itumike na kuongeza kasi ya vifaa pia ni rahisi sana sasa. Ninakushauri sana uweke utegemezi wote unaofaa katika mazingira ya Anaconda kuweka mradi wako ukitenganishwa na wengine na epuka mizozo.

Pakua kisakinishi hapa.

Baada ya usakinishaji kukamilika, tengeneza mazingira mapya:

kuunda conda -n yolo chatu = 3.7

Wacha tuamilishe mazingira mapya

conda activate yolo

Kiambishi awali kabla ya ganda lako la bash litaonekana na jina la mazingira, ikionyesha kwamba unafanya kazi sasa katika mazingira hayo.

Sakinisha aXeleRate kwenye mashine yako ya ndani na

bomba funga git +

Na kisha endesha hii kupakua hati ambazo utahitaji kwa mafunzo na maanani:

clone ya git

Unaweza kukimbia majaribio ya haraka na tests_training.py kwenye folda yaXeleRate. Itatumia mafunzo na maanani kwa kila aina ya mfano, kuokoa na kubadilisha mifano iliyofunzwa. Kwa kuwa ni mafunzo tu kwa nyakati 5 na hifadhidata ni ndogo sana, hautaweza kupata modeli muhimu, lakini hati hii inakusudiwa tu kuangalia kutokuwepo kwa makosa.

Hatua ya 3: Treni Mfano wa Kugundua Kitu Na Kera

Treni Mfano wa Kugundua Kitu Na Kera
Treni Mfano wa Kugundua Kitu Na Kera

Sasa tunaweza kuendesha hati ya mafunzo na faili ya usanidi. Kwa kuwa utekelezaji wa Keras wa kipelelezi cha kitu cha YOLO ni ngumu sana, badala ya kuelezea kila kipande cha nambari inayofaa, nitaelezea jinsi ya kusanidi mafunzo na pia kuelezea moduli zinazohusika, ikiwa unataka kufanya mabadiliko kwao.

Wacha tuanze na mfano wa kuchezea na tufundishe kigunduzi cha rangi. Kuna faili ya usanidi ndani ya / folda ya usanidi, raccoon_detector.json. Tunachagua MobileNet7_5 kama usanifu (ambapo 7_5 ni kigezo cha alpha cha utekelezaji wa asili wa Mobilenet, inadhibiti upana wa mtandao) na 224x224 kama saizi ya kuingiza. Wacha tuangalie vigezo muhimu zaidi katika usanidi:

Aina ni mfano wa mbele - Classifier, Detector au SegnetUsanifu ni backend ya mfano (dondoo la kipengee)

- Yolo Kamili - Yolo ndogo - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - SqueezeNet - VGG16 - ResNet50

Kwa habari zaidi juu ya nanga, tafadhali soma hapa

Lebo ni lebo zilizopo kwenye mkusanyiko wa data yako. MUHIMU: Tafadhali, orodhesha lebo zote zilizopo kwenye mkusanyiko wa data.

kiwango_chaguo huamua ni kiasi gani cha kuadhibu utabiri mbaya wa ujasiri wa watabiri wa kitu

hakuna_bject_scale huamua ni kiasi gani cha kuadhibu utabiri mbaya wa ujasiri wa watabiri wasio wa vitu

coord_scale huamua ni kiasi gani cha kuadhibu nafasi mbaya na utabiri wa saizi (x, y, w, h)

class_scale huamua ni kiasi gani cha kuadhibu utabiri mbaya wa darasa

kuongeza - kuongeza picha, kubadilisha ukubwa, kuhama na kufifisha picha ili kuzuia kuzidiwa na kuwa na anuwai kubwa katika hifadhidata.

nyakati za mafunzo, nyakati za uthibitishaji - ni mara ngapi kurudia mkusanyiko wa data. Muhimu ikiwa una nyongeza

kuwezeshwa

first_trainable_layer - hukuruhusu kufungia matabaka fulani ikiwa unatumia mtandao wa huduma iliyofunzwa mapema

Sasa tunahitaji kupakua hifadhidata, ambayo nilishiriki kwenye Hifadhi yangu ya Google (seti ya data ya asili), ambayo ni setaseti ya kugundua rangi, iliyo na picha 150 zilizochapishwa.

Hakikisha kubadilisha mistari katika faili ya usanidi (train_image_folder, train_annot_folder) ipasavyo na kisha anza mafunzo kwa amri ifuatayo:

chatu axelerate / treni.py -c usanidi / raccoon_detector.json

train.py inasoma usanidi kutoka kwa faili ya.json na hufundisha mfano huo na axelerate / mitandao / yolo / yolo_frontend.py script. yolo / backend / loss.py ni mahali ambapo kazi ya upotezaji wa kawaida inatekelezwa na yolo / backend / network.py ni mahali ambapo mtindo umeundwa (pembejeo, kipengee cha kipengee na safu za kugundua zimewekwa pamoja). axelerate / mitandao / common_utils / fit.py ni script ambayo hutumia mchakato wa mafunzo na axelerate / mitandao / common_utils / feature.py ina vitoa huduma. Ikiwa una nia ya kutumia mtindo uliofunzwa na chipu cha K210 na firmware ya Micropython, kwa sababu ya mapungufu ya kumbukumbu unaweza kuchagua kati ya MobileNet (2_5, 5_0 na 7_5) na TinyYolo, lakini nimepata MobileNet inatoa usahihi zaidi wa utambuzi.

Kwa kuwa ni mfano wa kuchezea na ina picha 150 tu za miamba, mchakato wa mafunzo unapaswa kuwa haraka sana, hata bila GPU, ingawa usahihi utakuwa mbali na nyota. Kwa mradi unaohusiana na kazi nimefundisha kigunduzi cha ishara ya trafiki na kigunduzi cha nambari, data zote mbili zilijumuisha mifano elfu chache ya mafunzo.

Hatua ya 4: Ibadilishe iwe Umbizo la.kmodel

Badilisha iwe kwa Umbizo la.kmodel
Badilisha iwe kwa Umbizo la.kmodel

Na aXeleRate, ubadilishaji wa mfano unafanywa kiatomati - hii labda ndio tofauti kubwa kutoka kwa toleo la zamani la maandishi ya mafunzo! Pamoja unapata faili za mfano na grafu ya mafunzo iliyohifadhiwa vizuri kwenye folda ya mradi. Pia niligundua kuwa usahihi wa upeanaji wakati mwingine unashindwa kutoa makadirio juu ya utaftaji halisi wa mfano wa kugundua kitu na hii ndio sababu niliongeza ramani kama kipimo cha uthibitisho wa mifano ya kugundua kitu. Unaweza kusoma zaidi kuhusu ramani hapa.

Ikiwa ramani, inamaanisha usahihi wa wastani (kipimo chetu cha uthibitishaji) haibadiliki kwa wakati 20, mafunzo yatasimama mapema. Kila wakati ramani inaboresha, mfano huhifadhiwa kwenye folda ya mradi. Baada ya mafunzo kumalizika, aXeleRate hubadilisha kiatomati bora zaidi kuwa fomati maalum - unaweza kuchagua, "tflite", "k210" au "edgetpu" kuanzia sasa.

Sasa kwa hatua ya mwisho, kwa kweli tunaendesha mfano wetu kwenye vifaa vya Sipeed!

Hatua ya 5: Endesha kwenye Firmware ya Micropython

Endesha kwenye Firmware ya Micropython
Endesha kwenye Firmware ya Micropython

Inawezekana kuendesha kielelezo na mtindo wetu wa kugundua kitu na nambari ya C, lakini kwa urahisi tutatumia firmware ya Micropython na MaixPy IDE badala yake.

Pakua MaixPy IDE kutoka hapa na micropython firmware kutoka hapa. Unaweza kutumia chatu script kflash.py kuchoma firmware au kupakua zana tofauti ya GUI hapa.

Nakili mfano.kmodel kwenye mzizi wa kadi ya SD na ingiza kadi ya SD kwenye Sipeed Maix Bit (au kifaa kingine cha K210). Vinginevyo unaweza kuchoma.kmodel kwenye kumbukumbu ya kifaa. Hati yangu ya mfano inasomeka.kmodel kutoka kumbukumbu ndogo. Ikiwa unatumia kadi ya SD, tafadhali badilisha mstari huu

kazi = kpu.load (0x200000)

kwa

task = kpu.load ("/ sd / model.kmodel")

Fungua MaixPy IDE na bonyeza kitufe cha unganisho. Fungua hati ya raccoon_detector.py kutoka kwa mfano_script / k210 / folda ya kichunguzi na bonyeza kitufe cha Anza. Unapaswa kuona mtiririko wa moja kwa moja kutoka kwa kamera na visanduku vya kuzunguka karibu … vizuri, raccoons. Unaweza kuongeza usahihi wa mfano kwa kutoa mifano zaidi ya mafunzo, lakini kumbuka kuwa ni mfano mdogo wa hadithi (1.9 M) na itakuwa na shida kugundua vitu vidogo (kwa sababu ya azimio la chini).

Moja ya maswali niliyopokea katika maoni kwa nakala yangu ya awali juu ya utambuzi wa picha ni jinsi ya kutuma matokeo ya kugundua juu ya UART / I2C kwa kifaa kingine kilichounganishwa na bodi za maendeleo zilizopigwa. Katika ghala langu la github utaweza kupata hati nyingine ya mfano, raccoon_detector_uart.py, ambayo (uliidhani) hugundua raccoons na hutuma kuratibu za masanduku ya kufunga juu ya UART. Kumbuka kwamba pini zinazotumiwa kwa mawasiliano ya UART ni tofauti na bodi tofauti, hii ni kitu unahitaji kujiangalia kwenye hati.

Hatua ya 6: Muhtasari

Kendryte K210 ni chip thabiti kwa maono ya kompyuta, rahisi, japo na kumbukumbu ndogo inapatikana. Hadi sasa, katika mafunzo yangu tumefunika kuitumia kwa kutambua vitu vya kawaida, kugundua vitu vya kawaida na kuendesha majukumu kadhaa ya maono ya kompyuta ya OpenMV. Ninajua kwa ukweli kwamba pia inafaa kwa utambuzi wa uso na kwa kuchekesha kidogo inawezekana kufanya utenganishaji wa picha na sehemu ya picha (unaweza kutumia aXeleRate kufundisha mfano wa kugawanywa kwa semantic, lakini bado sikutekeleza udharau na K210). Jisikie huru kutazama maswala ya hifadhi ya AXeleRate na fanya PR ikiwa unafikiria kuna maboresho ambayo unaweza kuchangia!

Hapa kuna nakala kadhaa ambazo nilitumia kuandika mafunzo haya, angalia ikiwa unataka kujifunza zaidi juu ya kugundua kitu na mitandao ya neva:

Vipimo vya kugundua vitu vya sanduku: kuelewa YOLO, Unaangalia Mara Moja tu

Kuelewa YOLO (math zaidi)

Mwongozo mpole juu ya jinsi ujanibishaji wa kitu cha YOLO hufanya kazi na Keras (Sehemu ya 2)

Kugundua Kitu cha wakati halisi na YOLO, YOLOv2 na sasa YOLOv3

Natumahi unaweza kutumia maarifa unayo sasa kujenga miradi ya kushangaza na maono ya mashine! Unaweza kununua bodi zilizopigwa hapa, ni kati ya chaguzi za bei rahisi zinazopatikana kwa ML kwenye mifumo iliyoingia.

Niongeze kwenye LinkedIn ikiwa una maswali yoyote na ujiandikishe kwenye kituo changu cha YouTube ili upate arifa kuhusu miradi ya kufurahisha zaidi inayojumuisha ujifunzaji wa mashine na roboti.

Ilipendekeza: