Բովանդակություն:

Օբյեկտի հայտնաբերում Sipeed MaiX տախտակներով (Kendryte K210) ՝ 6 քայլ
Օբյեկտի հայտնաբերում Sipeed MaiX տախտակներով (Kendryte K210) ՝ 6 քայլ

Video: Օբյեկտի հայտնաբերում Sipeed MaiX տախտակներով (Kendryte K210) ՝ 6 քայլ

Video: Օբյեկտի հայտնաբերում Sipeed MaiX տախտակներով (Kendryte K210) ՝ 6 քայլ
Video: 15 Interesting and Spooky Halloween Facts 2024, Դեկտեմբեր
Anonim
Image
Image

Որպես Sipeed MaiX տախտակներով պատկերի ճանաչման մասին իմ նախորդ հոդվածի շարունակություն, ես որոշեցի գրել մեկ այլ ձեռնարկ ՝ կենտրոնանալով օբյեկտների հայտնաբերման վրա: Վերջերս ինչ -որ հետաքրքիր սարքավորում հայտնվեց Kendryte K210 չիպի հետ, ներառյալ Seeed AI Hat for Edge Computing, M5 stack's M5StickV և DFRobot's HuskyLens (թեև այդ մեկն ունի սեփական որոնվածը և ավելի նպատակաուղղված սկսնակների համար): Էժան գնի պատճառով Kendryte K210- ը դիմել է մարդկանց `ցանկանալով համակարգչային տեսլականը ավելացնել իրենց նախագծերին: Բայց, ինչպես միշտ, չինական ապարատային արտադրանքի դեպքում, տեխնիկական աջակցությունը բացակայում է, և սա այն է, ինչ ես փորձում եմ բարելավել իմ հոդվածներով և տեսանյութերով: Բայց հիշեք, որ ես Kendryte կամ Sipeed մշակողների թիմում չեմ և չեմ կարող պատասխանել իրենց արտադրանքի հետ կապված բոլոր հարցերին:

Հաշվի առնելով դա, եկեք սկսենք: Մենք կսկսենք կարճ (և պարզեցված) ակնարկով, թե ինչպես են աշխատում օբյեկտների ճանաչման CNN մոդելները:

ԹԱՐՄԱՆԵԼ ՄԱՅԻՍ 2020. Տեսնելով, թե ինչպես են K210 տախտակներով օբյեկտների հայտնաբերման վերաբերյալ իմ հոդվածն ու տեսանյութը դեռևս շատ տարածված և YouTube- ի և Google- ի լավագույն արդյունքների շարքում, ես որոշեցի թարմացնել հոդվածը `ներառելով AXeleRate, Keras- ի վրա հիմնված AI շրջանակի մասին տեղեկատվությունը Geարգանում եմ: aXeleRate- ը, ըստ էության, հիմնված է այն սցենարների հավաքածուի վրա, որոնք ես օգտագործել եմ պատկերի ճանաչման/օբյեկտի հայտնաբերման մոդելների վերապատրաստման համար `համակցված մեկ շրջանակի մեջ և օպտիմիզացված Google Colab- ի աշխատանքային հոսքի համար: Ավելի հարմար է օգտագործել և ավելի արդիական:

Հոդվածի հին տարբերակի համար այն դեռ կարող եք տեսնել steemit.com կայքում:

Քայլ 1. Բացատրվում է օբյեկտի հայտնաբերման մոդելի ճարտարապետությունը

Բացատրվում է օբյեկտի հայտնաբերման մոդելի ճարտարապետությունը
Բացատրվում է օբյեկտի հայտնաբերման մոդելի ճարտարապետությունը
Բացատրվում է օբյեկտի հայտնաբերման մոդելի ճարտարապետությունը
Բացատրվում է օբյեկտի հայտնաբերման մոդելի ճարտարապետությունը

Պատկերի ճանաչման (կամ պատկերի դասակարգման) մոդելները վերցնում են ամբողջ պատկերը որպես մուտքագրում և թողարկում հավանականությունների ցանկ յուրաքանչյուր դասի համար, որը մենք փորձում ենք ճանաչել: Դա շատ օգտակար է, եթե մեզ հետաքրքրող օբյեկտը զբաղեցնում է պատկերի մեծ մասը, և մենք շատ չենք մտածում դրա գտնվելու վայրի մասին: Բայց ինչ կլիներ, եթե մեր նախագիծը (ասենք ՝ դեմքի հետևող տեսախցիկ) մեզանից պահանջում էր ոչ միայն պատկերացում ունենալ պատկերի օբյեկտի տեսակի, այլև դրա կոորդինատների մասին: Իսկ ի՞նչ կասեք նախագծի մասին, որը պահանջում է հայտնաբերել բազմաթիվ օբյեկտներ (օրինակ ՝ հաշվելու համար):

Ահա, երբ օբյեկտի հայտնաբերման մոդելները հարմար են: Այս հոդվածում մենք կօգտագործենք YOLO (դուք միայն մեկ անգամ եք նայում) ճարտարապետությունը և բացատրությունը կկենտրոնացնենք տվյալ ճարտարապետության ներքին մեխանիկայի վրա:

Մենք փորձում ենք որոշել, թե ինչ օբյեկտներ կան նկարում և որոնք են դրանց կոորդինատները: Քանի որ մեքենայական ուսուցումը կախարդական չէ և ոչ թե «մտածող մեքենա» է, այլ պարզապես ալգորիթմ, որն օգտագործում է վիճակագրությունը ՝ գործառույթը (նյարդային ցանց) օպտիմալացնելու համար ՝ որոշակի խնդիր ավելի լավ լուծելու համար: Մենք պետք է այս խնդիրը վերափոխենք, որպեսզի այն ավելի «օպտիմալացվող» լինի: Այստեղ միամիտ մոտեցում կլինի այն, որ ալգորիթմը նվազագույնի հասցնի կորուստը (տարբերությունը) դրա կանխատեսման և օբյեկտի ճիշտ կոորդինատների միջև: Դա բավականին լավ կաշխատի, քանի դեռ պատկերի մեջ ունենք միայն մեկ օբյեկտ: Բազմաթիվ օբյեկտների համար մենք այլ մոտեցում ենք ցուցաբերում. Մենք ավելացնում ենք ցանցը և ստիպում մեր ցանցին կանխատեսել յուրաքանչյուր ցանցում օբյեկտ (ների) առկայությունը (կամ բացակայությունը): Հիանալի է հնչում, բայց միևնույն ժամանակ չափազանց մեծ անորոշություն է թողնում ցանցի համար. Մենք պետք է ավելացնենք ևս մեկ սահմանափակում `այսպես կոչված խարիսխներ: Խարիսխները սկզբնական չափեր են (լայնություն, բարձրություն), որոնցից մի քանիսը (օբյեկտի չափին ամենամոտը) կփոխվեն օբյեկտի չափին `օգտագործելով նյարդային ցանցի որոշ ելքեր (վերջնական հատկանիշների քարտեզ):

Այսպիսով, ահա ամենաբարձր մակարդակի տեսակետը, թե ինչ է կատարվում, երբ YOLO ճարտարապետության նյարդային ցանցը կատարում է նկարի վրա օբյեկտի հայտնաբերում: Ըստ առանձնահատկությունների արդյունահանող ցանցի կողմից հայտնաբերված առանձնահատկությունների, յուրաքանչյուր ցանցային բջիջի համար կատարվում է մի շարք կանխատեսումներ, որոնք ներառում են խարիսխների օֆսեթը, խարիսխի հավանականությունը և խարիսխի դասը: Հետո մենք ցածր հավանականությամբ և վոյլայով ենք գցում կանխատեսումները:

Քայլ 2: Պատրաստել միջավայրը

Պատրաստել միջավայրը
Պատրաստել միջավայրը

aXeleRate- ը հիմնված է penny4860- ի, SVHN yolo-v2 թվանշանի դետեկտորի հրաշալի նախագծի վրա: aXeleRate- ը Keras- ում YOLO դետեկտորի այս իրականացումը հասցնում է հաջորդ մակարդակի և օգտագործում է իր հարմար կազմաձևման համակարգը `տարբեր հետնապահոցներով պատկերների ճանաչման/օբյեկտի հայտնաբերման և պատկերի հատվածավորման ցանցերի ուսուցում և փոխակերպում:

AXeleRate- ի օգտագործման երկու եղանակ կա. Գործարկել տեղական Ubuntu մեքենայի վրա կամ Google Colab- ում: Google Colab- ում աշխատելու համար դիտեք այս օրինակը.

PASCAL-VOC օբյեկտի հայտնաբերման Colab տետր

Այժմ շատ ավելի հեշտ է ձեր մոդելի ուսուցումը և այն արտահանելը, որը կօգտագործվի ապարատային արագացումով: Ես խորհուրդ եմ տալիս տեղադրել Անակոնդայի միջավայրում անհրաժեշտ բոլոր կախվածությունները `ձեր նախագիծը մյուսներից առանձնացնելու և կոնֆլիկտներից խուսափելու համար:

Ներբեռնեք տեղադրողը այստեղ:

Տեղադրման ավարտից հետո ստեղծեք նոր միջավայր.

conda create -n yolo python = 3.7

Եկեք ակտիվացնենք նոր միջավայրը

conda ակտիվացնել yolo

Ձեր bash shell- ից առաջ մի նախածանց կհայտնվի միջավայրի անունով ՝ նշելով, որ դուք այժմ աշխատում եք այդ միջավայրում:

Տեղադրեք aXeleRate- ը ձեր տեղական մեքենայի հետ ՝

pip տեղադրել git+https://github.com/AIWintermuteAI/aXeleRate

Եվ այնուհետև գործարկեք սա ՝ վերապատրաստման և եզրակացության համար անհրաժեշտ սցենարներ ներբեռնելու համար.

git կլոն

Դուք կարող եք արագ թեստեր անցկացնել test_training.py- ով aXeleRate թղթապանակում: Այն կիրականացնի ուսուցում և եզրակացություն յուրաքանչյուր մոդելի տիպի համար, կփրկի և փոխակերպի պատրաստված մոդելներին: Քանի որ այն ուսուցում է միայն 5 դարաշրջանների համար, և տվյալների հավաքածուն շատ փոքր է, դուք չեք կարողանա օգտակար մոդելներ ձեռք բերել, բայց այս սցենարը նախատեսված է միայն սխալների բացակայությունը ստուգելու համար:

Քայլ 3. Վերապատրաստեք օբյեկտների հայտնաբերման մոդելը Keras- ով

Կերասով վարժեցրեք օբյեկտի հայտնաբերման մոդել
Կերասով վարժեցրեք օբյեկտի հայտնաբերման մոդել

Այժմ մենք կարող ենք վարժության սցենար գործարկել կազմաձևման ֆայլով: Քանի որ YOLO օբյեկտի դետեկտորի Keras- ի իրականացումը բավականին բարդ է, յուրաքանչյուր համապատասխան ծածկագրի բացատրության փոխարեն ես կբացատրեմ, թե ինչպես կարգավորել դասընթացը, ինչպես նաև նկարագրել համապատասխան մոդուլները, եթե ինքներդ որոշ փոփոխություններ կատարեք:

Եկեք սկսենք խաղալիքի օրինակով և պատրաստենք ռակունի դետեկտոր: /Config թղթապանակի ներսում կա կազմաձևման ֆայլ ՝ raccoon_detector.json: Մենք ընտրում ենք MobileNet7_5- ը որպես ճարտարապետություն (որտեղ 7_5- ը Mobilenet- ի սկզբնական իրականացման ալֆա պարամետր է, վերահսկում է ցանցի լայնությունը) և 224x224 որպես մուտքի չափ: Եկեք նայենք կազմաձևման ամենակարևոր պարամետրերին.

Տեսակը մոդելի առջև է ՝ դասակարգիչ, դետեկտոր կամ Segnet

- Ամբողջ Յոլո - Փոքրիկ Յոլո - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - ճզմումՆեթ - VGG16 - ResNet50

Խարիսխների մասին լրացուցիչ տեղեկությունների համար կարդացեք այստեղ ՝

Պիտակները պիտակներ են, որոնք առկա են ձեր տվյալների հավաքածուում: ԿԱՐԵՎՈՐ. Խնդրում ենք թվարկել տվյալների բազայում առկա բոլոր պիտակները:

object_scale- ը որոշում է, թե որքան պետք է տուգանել օբյեկտի կանխատեսողների վստահության սխալ կանխատեսումը

no_object_scale- ը որոշում է, թե որքան պետք է տուգանել ոչ օբյեկտային կանխատեսողների վստահության սխալ կանխատեսումը

coord_scale- ը որոշում է, թե որքան տուգանել սխալ դիրքի և չափի կանխատեսումները (x, y, w, h)

class_scale- ը որոշում է, թե որքան տուգանել սխալ դասի կանխատեսումը

հավելում - պատկերի մեծացում, չափափոխում, փոփոխում և պղտորում, որպեսզի կանխվի ավելորդ համընկնումը և տվյալների հավաքածուի ավելի մեծ բազմազանություն ունենա:

train_times, validation_times - քանի անգամ է կրկնել տվյալների հավաքածուն: Օգտակար է, եթե ունեք հավելում

միացված է

first_trainable_layer - թույլ է տալիս սառեցնել որոշակի շերտեր, եթե օգտագործում եք նախապես պատրաստված գործառնական ցանց

Այժմ մենք պետք է ներբեռնենք տվյալների հավաքածուն, որը ես կիսեցի իմ Google Drive- ում (սկզբնական տվյալների հավաքածու), որը ռակունի հայտնաբերման տվյալների հավաքածու է, որը պարունակում է 150 ծանոթագրված նկար:

Համոզվեք, որ համապատասխանաբար փոխեք կազմաձևման ֆայլի տողերը (train_image_folder, train_annot_folder) և այնուհետև սկսեք մարզումը հետևյալ հրամանով.

python axelerate/train.py -c configs/raccoon_detector.json

train.py- ն կարդում է.json ֆայլից կազմաձևը և վարժեցնում է մոդելը axelerate/network/yolo/yolo_frontend.py սցենարով: yolo/backend/loss.py այն վայրն է, որտեղ իրականացվում է մաքսային կորստի գործառույթը, և yolo/backend/network.py- ն այն վայրն է, որտեղ ստեղծվում է մոդելը (մուտքը, հատկանիշների արդյունահանողը և հայտնաբերման շերտերը միասին): axelerate/networks/common_utils/fit.py- ը սցենար է, որն իրականացնում է ուսուցման գործընթացը, և axelerate/network/common_utils/feature.py- ն պարունակում է հատկանիշներ հանողներ: Եթե մտադիր եք օգտագործել պատրաստված մոդել K210 չիպով և Micropython ծրագրակազմով, հիշողության սահմանափակության պատճառով կարող եք ընտրել MobileNet (2_5, 5_0 և 7_5) և TinyYolo- ի միջև, բայց ես գտա, որ MobileNet- ը տալիս է հայտնաբերման ավելի լավ ճշգրտություն:

Քանի որ դա խաղալիքի օրինակ է և պարունակում է միայն ջրարջերի 150 պատկեր, ուսուցման գործընթացը պետք է լինի բավականին արագ, նույնիսկ առանց GPU- ի, չնայած ճշգրտությունը հեռու կլինի աստղայինից: Աշխատանքի հետ կապված նախագծի համար ես պատրաստել եմ ճանապարհային նշանների դետեկտոր և համարների դետեկտոր, երկու տվյալների հավաքածուն էլ ներառում էր մի քանի հազար ուսուցման օրինակ:

Քայլ 4. Փոխարկեք այն.kmodel ձևաչափի

Փոխարկեք այն.kmodel ձևաչափի
Փոխարկեք այն.kmodel ձևաչափի

AXeleRate- ով մոդելի փոխարկումը կատարվում է ինքնաբերաբար. Սա թերևս ամենամեծ տարբերությունն է վերապատրաստման սցենարների հին տարբերակից: Բացի այդ, դուք ստանում եք մոդելի ֆայլերը և ուսուցման գրաֆիկը կոկիկ կերպով պահված ծրագրի թղթապանակում: Նաև ես իսկապես գտա, որ հրաժարվելու ճշգրտությունը երբեմն չի կարողանում գնահատել օբյեկտի հայտնաբերման իրական կատարողականության մոդելը և դրա համար ես ավելացրել եմ mAP- ը ՝ որպես օբյեկտի հայտնաբերման մոդելների վավերացման չափիչ: MAP- ի մասին ավելին կարող եք կարդալ այստեղ:

Եթե MAP, միջին միջին ճշգրտությունը (մեր վավերացման չափանիշը) չի բարելավվում 20 դարաշրջանների համար, ուսուցումը ժամանակից շուտ կդադարեցվի: Ամեն անգամ, երբ mAP- ը բարելավվում է, մոդելը պահվում է նախագծի թղթապանակում: Ուսուցման ավարտից հետո aXeleRate- ը ինքնաբերաբար լավագույն մոդելը փոխակերպում է նշված ձևաչափերի. Այժմ կարող եք ընտրել ՝ «tflite», «k210» կամ «edgetpu»:

Հիմա մինչև վերջին քայլը ՝ իրականում գործարկելով մեր մոդելը Sipeed ապարատով:

Քայլ 5. Գործարկեք Micropython որոնվածը

Գործարկեք Micropython որոնվածը
Գործարկեք Micropython որոնվածը

Հնարավոր է եզրակացություններ անել օբյեկտի հայտնաբերման մեր մոդելի հետ C կոդով, բայց հարմարության համար մենք փոխարենը կօգտագործենք Micropython որոնվածը և MaixPy IDE- ն:

Ներբեռնեք MaixPy IDE- ն այստեղից և micropython որոնվածը `այստեղից: Կարող եք օգտագործել python script kflash.py ՝ որոնվածը այրելու կամ այստեղից ներբեռնելու առանձին GUI ֆլեշ գործիք:

Պատճենեք model.kmodel- ը SD քարտի արմատին և տեղադրեք SD քարտը Sipeed Maix Bit- ում (կամ այլ K210 սարքում): Այլապես կարող եք.kmodel- ը այրել սարքի ֆլեշ հիշողությանը: Իմ օրինակային սցենարը կարդում է.kmodel- ը ֆլեշ հիշողությունից: Եթե դուք օգտագործում եք SD քարտ, փոխեք այս տողը

առաջադրանք = kpu.load (0x200000)

դեպի

առաջադրանք = kpu.load ("/sd/model.kmodel")

Բացեք MaixPy IDE- ը և սեղմեք միացման կոճակը: Բացեք raccoon_detector.py սցենարը example_scripts/k210/detector թղթապանակից և սեղմեք Start կոճակը: Դուք պետք է տեսախցիկից ուղիղ հեռարձակում տեսնեք, որի շուրջը փակ տուփեր կան … դե, ջրարջերը: Դուք կարող եք բարձրացնել մոդելի ճշգրտությունը ՝ տրամադրելով ավելի շատ ուսուցման օրինակներ, բայց հիշեք, որ դա հեքիաթային փոքր մոդել է (1.9 Մ) և այն խնդիրներ կունենա փոքր օբյեկտների հայտնաբերման մեջ (ցածր թույլատրելիության պատճառով):

Պատկերի ճանաչման վերաբերյալ իմ նախորդ հոդվածի մեկնաբանություններում ստացած հարցերից մեկն այն է, թե ինչպես UART/I2C- ով հայտնաբերման արդյունքները ուղարկել Sipeed զարգացման տախտակներին միացված այլ սարքի: Իմ github պահոցում դուք կկարողանաք գտնել մեկ այլ օրինակ սցենար ՝ raccoon_detector_uart.py, որը (կռահեցիք) հայտնաբերում է ջրարջերը և ուղարկում UART- ի վրայով սահմանափակող արկղերի կոորդինատները: Հիշեք, որ UART հաղորդակցության համար օգտագործվող քորոցները տարբերվում են տարբեր տախտակներից, սա այն է, ինչ ձեզ հարկավոր է ինքներդ ստուգել փաստաթղթերում:

Քայլ 6: Ամփոփում

Kendryte K210- ը համակարգչային տեսողության համար ամուր չիպ է, ճկուն, չնայած սահմանափակ հիշողության առկայությամբ: Մինչ այժմ, իմ ձեռնարկներում մենք անդրադարձել ենք դրա օգտագործմանը ՝ անհատականացված օբյեկտների ճանաչման, անհատականացված օբյեկտների հայտնաբերման և OpenMV- ի վրա հիմնված համակարգչային տեսողության որոշ առաջադրանքների վրա: Ես հաստատ գիտեմ, որ այն նաև հարմար է դեմքի ճանաչման համար, և որոշ շեղումների դեպքում պետք է հնարավոր լինի կատարել հայտնաբերման և պատկերի հատվածավորում (դուք կարող եք օգտագործել aXeleRate- ը ՝ իմաստաբանական հատվածավորման մոդել պատրաստելու համար, բայց ես դեռևս եզրակացություն չեմ կատարել K210- ի հետ). Ազատորեն դիտեք aXeleRate պահեստի խնդիրները և PR արեք, եթե կարծում եք, որ կան որոշ բարելավումներ, որոնց կարող եք նպաստել:

Ահա որոշ հոդվածներ, որոնք ես օգտագործել եմ այս ձեռնարկը գրելիս, նայեք, եթե ցանկանում եք ավելին իմանալ նյարդային ցանցերով օբյեկտների հայտնաբերման մասին.

Սահմանափակ տուփի օբյեկտների դետեկտորներ. Հասկանալով YOLO- ն, դու նայում ես միայն մեկ անգամ

Հասկանալ YOLO- ն (ավելի շատ մաթեմատիկա)

Նուրբ ուղեցույց, թե ինչպես է գործում YOLO օբյեկտի տեղայնացումը Keras- ի հետ (մաս 2)

Իրական ժամանակի օբյեկտների հայտնաբերում YOLO- ի, YOLOv2- ի և այժմ YOLOv3- ի հետ

Հուսով եմ, որ դուք կարող եք օգտագործել ձեր ունեցած գիտելիքները մեքենայական տեսլականով որոշ հիանալի նախագծեր կառուցելու համար: Այստեղ կարող եք ձեռք բերել Sipeed տախտակներ, դրանք ներդրված համակարգերում ML- ի համար մատչելի ամենաէժան տարբերակներից են:

Եթե ունեք հարցեր, ավելացրեք ինձ LinkedIn- ում և բաժանորդագրվեք իմ YouTube ալիքին ՝ մեքենայական ուսուցման և ռոբոտաշինության հետ կապված ավելի հետաքրքիր նախագծերի մասին տեղեկանալու համար:

Խորհուրդ ենք տալիս: