Բովանդակություն:
- Քայլ 1. Բացատրվում է օբյեկտի հայտնաբերման մոդելի ճարտարապետությունը
- Քայլ 2: Պատրաստել միջավայրը
- Քայլ 3. Վերապատրաստեք օբյեկտների հայտնաբերման մոդելը Keras- ով
- Քայլ 4. Փոխարկեք այն.kmodel ձևաչափի
- Քայլ 5. Գործարկեք Micropython որոնվածը
- Քայլ 6: Ամփոփում
Video: Օբյեկտի հայտնաբերում Sipeed MaiX տախտակներով (Kendryte K210) ՝ 6 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:45
Որպես 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 ձևաչափի
AXeleRate- ով մոդելի փոխարկումը կատարվում է ինքնաբերաբար. Սա թերևս ամենամեծ տարբերությունն է վերապատրաստման սցենարների հին տարբերակից: Բացի այդ, դուք ստանում եք մոդելի ֆայլերը և ուսուցման գրաֆիկը կոկիկ կերպով պահված ծրագրի թղթապանակում: Նաև ես իսկապես գտա, որ հրաժարվելու ճշգրտությունը երբեմն չի կարողանում գնահատել օբյեկտի հայտնաբերման իրական կատարողականության մոդելը և դրա համար ես ավելացրել եմ mAP- ը ՝ որպես օբյեկտի հայտնաբերման մոդելների վավերացման չափիչ: MAP- ի մասին ավելին կարող եք կարդալ այստեղ:
Եթե MAP, միջին միջին ճշգրտությունը (մեր վավերացման չափանիշը) չի բարելավվում 20 դարաշրջանների համար, ուսուցումը ժամանակից շուտ կդադարեցվի: Ամեն անգամ, երբ mAP- ը բարելավվում է, մոդելը պահվում է նախագծի թղթապանակում: Ուսուցման ավարտից հետո aXeleRate- ը ինքնաբերաբար լավագույն մոդելը փոխակերպում է նշված ձևաչափերի. Այժմ կարող եք ընտրել ՝ «tflite», «k210» կամ «edgetpu»:
Հիմա մինչև վերջին քայլը ՝ իրականում գործարկելով մեր մոդելը Sipeed ապարատով:
Քայլ 5. Գործարկեք 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 ալիքին ՝ մեքենայական ուսուցման և ռոբոտաշինության հետ կապված ավելի հետաքրքիր նախագծերի մասին տեղեկանալու համար:
Խորհուրդ ենք տալիս:
Պատկերի ճանաչում K210 տախտակներով և Arduino IDE/Micropython- ով ՝ 6 քայլ (նկարներով)
Պատկերի ճանաչում K210 տախտակների և Arduino IDE/Micropython- ի հետ. Ես արդեն գրել եմ մեկ հոդված, թե ինչպես գործարկել OpenMV- ի դեմո ցուցադրումները Sipeed Maix Bit- ում, ինչպես նաև պատրաստել եմ այս տախտակի միջոցով օբյեկտների հայտնաբերման ցուցադրական տեսանյութ: Մարդկանց տված բազմաթիվ հարցերից մեկն այն է
Ազնվամորի Պի օբյեկտի հայտնաբերում. 7 քայլ
Raspberry Pi օբյեկտի հայտնաբերում. Այս ուղեցույցը տալիս է քայլ առ քայլ հրահանգներ, թե ինչպես ստեղծել Raspberry Pi- ի վրա TensorFlow’s Object Detection API- ն: Հետևելով այս ուղեցույցի քայլերին ՝ դուք կկարողանաք օգտագործել ձեր Raspberry Pi- ն ՝ կենդանի տեսանյութերի միջոցով օբյեկտների հայտնաբերում իրականացնելու P
Օբյեկտի հայտնաբերում W/ Dragonboard 410c կամ 820c OpenCV- ի և Tensorflow- ի միջոցով. 4 քայլ
Օբյեկտի հայտնաբերում W/ Dragonboard 410c կամ 820c OpenCV- ի և Tensorflow- ի միջոցով. Այս հրահանգները նկարագրում են, թե ինչպես տեղադրել OpenCV, Tensorflow և մեքենայական ուսուցման շրջանակներ Python 3.5 – ի համար ՝ օբյեկտների հայտնաբերման ծրագիրը գործարկելու համար:
Sipeed MaiX Bit OpenMV ցուցադրում - Համակարգչային տեսողություն. 3 քայլ
Sipeed MaiX Bit OpenMV Դեմո - Համակարգչային Տեսողություն. Սա երկրորդ հոդվածն է Sipeed AI- ի մասին Edge միկրոկառավարիչի հարթակում: Այս անգամ ես գրելու եմ MaiX Bit- ի մասին (հղում դեպի Seeed Studio Shop) ՝ ավելի փոքր, հացաթխման պատրաստ զարգացման տախտակ: Նրա բնութագրերը շատ նման են
Տեսողական օբյեկտի հայտնաբերում ֆոտոխցիկով (TfCD). 15 քայլ (նկարներով)
Տեսախցիկների միջոցով օբյեկտների հայտնաբերում (TfCD). Ognանաչողական ծառայությունները, որոնք կարող են ճանաչել հույզերը, մարդկանց դեմքերը կամ պարզ առարկաները, դեռ զարգացման վաղ փուլում են, սակայն մեքենայական ուսուցման դեպքում այս տեխնոլոգիան գնալով զարգանում է: Մենք կարող ենք ակնկալել, որ այս հրաշքն ավելի շատ կտեսնենք