Мазмұны:

Saied MaiX тақталарымен объектілерді анықтау (Kendryte K210): 6 қадам
Saied MaiX тақталарымен объектілерді анықтау (Kendryte K210): 6 қадам

Бейне: Saied MaiX тақталарымен объектілерді анықтау (Kendryte K210): 6 қадам

Бейне: Saied MaiX тақталарымен объектілерді анықтау (Kendryte K210): 6 қадам
Бейне: Asereje (Remix) Majabi & The Gubi imlaylow & Chusi 2024, Шілде
Anonim
Image
Image

Sipeed MaiX тақталарымен суретті тану туралы алдыңғы мақаланың жалғасы ретінде мен объектіні анықтауға баса назар аударып, басқа оқулық жазуды шештім. Жақында Kendryte K210 чипімен бірге Edge Computing үшін Seeed AI Hat, M5 стек M5StickV және DFRobot HuskyLens сияқты қызықты аппараттық құралдар пайда болды (бірақ меншікті микробағдарламасы бар және жаңадан бастаушыларға арналған). Kendryte K210 арзан болғандықтан, өз жобаларына компьютерлік көзқарасты қосқысы келетін адамдарға жүгінді. Бірақ қытайлық аппараттық өнімдерде әдеттегідей, техникалық қолдау жоқ, мен бұл мақалалар мен бейнелермен жақсартуға тырысамын. Есіңізде болсын, мен Kendryte немесе Sipeed әзірлеушілер тобында емеспін және олардың өніміне қатысты барлық сұрақтарға жауап бере алмаймын.

Осыны ескере отырып, бастайық! Біз объектілерді танудың CNN модельдерінің қалай жұмыс істейтініне қысқаша (және жеңілдетілген) шолудан бастаймыз.

2020 ЖЫЛДЫҢ МАЙЫН ЖАҢАРТУ: K210 тақталарымен объектілерді анықтау туралы менің мақалам мен бейнесюжетімнің әлі де өте танымал екенін және YouTube пен Google-дегі ең жақсы нәтижелердің бірі екенін көріп, мен мақаланы aXeleRate, Keras негізіндегі AI үшін ақпаратты қосу үшін жаңартуды шештім. Мен шетін дамытамын. aXeleRate, негізінен, суретті тану/объектілерді анықтау модельдерін үйрету үшін қолданған сценарийлер жиынтығына негізделген - бір жүйеге біріктірілген және Google Colab жұмыс процесі үшін оңтайландырылған. Қолдануға ыңғайлы және жаңартылған.

Мақаланың ескі нұсқасы үшін оны steemit.com сайтынан көруге болады.

1 -қадам: Объектілерді анықтау моделінің архитектурасы түсіндірілген

Объектілерді анықтау үлгісі архитектурасы түсіндірілген
Объектілерді анықтау үлгісі архитектурасы түсіндірілген
Объектілерді анықтау үлгісі архитектурасы түсіндірілген
Объектілерді анықтау үлгісі архитектурасы түсіндірілген

Кескінді тану (немесе кескінді жіктеу) модельдері бүкіл суретті кіріс ретінде қабылдайды және біз тануға тырысатын әрбір класс үшін ықтималдықтар тізімін шығарады. Егер бізді қызықтыратын объект кескіннің үлкен бөлігін алса және оның орналасқан жері біз үшін маңызды емес болса, бұл өте пайдалы. Бірақ егер біздің жобамыз (айталық, бет бақылау камерасы) бізден суреттегі объектінің түрі туралы ғана емес, сонымен қатар оның координаттары туралы білімді талап етсе ше? Ал бірнеше объектілерді анықтауды қажет ететін жоба туралы не айтуға болады (мысалы, санау үшін)?

Міне, бұл кезде объектілерді анықтау модельдері ыңғайлы болады. Бұл мақалада біз YOLO архитектурасын қолданамыз және осы архитектураның ішкі механикасына түсініктеме береміз.

Біз суретте қандай нысандар бар екенін және олардың координаттары қандай екенін анықтауға тырысамыз. Машиналық оқыту сиқыр емес және «ойлаушы машина» емес, белгілі бір мәселені жақсы шешу үшін функцияны (нейрондық желі) оңтайландыру үшін статистиканы қолданатын алгоритм. Біз бұл мәселені «оңтайландыруға» айналдыру үшін оны қайта айтуымыз керек. Бұл жерде болжау мен объектінің дұрыс координаттары арасындағы жоғалтуды (айырмашылықты) азайту алгоритмі болуы мүмкін. Бұл өте жақсы жұмыс істейді, егер бізде суретте бір ғана объект болса. Бірнеше объектілер үшін біз басқа тәсіл қолданамыз - біз торды қосамыз және желіні әр торапта объектілердің болуын (немесе болмауын) болжауға мәжбүрлейміз. Бұл керемет естіледі, бірақ әлі де желіге тым көп белгісіздік қалдырады - болжамды қалай шығару керек және бір тор ұяшығының ортасында бірнеше объектілер болған кезде не істеу керек? Бізге тағы бір шектеу қою керек - якорь деп аталады. Зәкір - бұл бастапқы өлшемдер (ені, биіктігі), олардың кейбіреулері (объект өлшеміне ең жақын) объектінің өлшеміне өзгертіледі - нейрондық желіден шығудың көмегімен (соңғы мүмкіндік картасы).

Сонымен, міне, YOLO архитектуралық нейрондық желісі кескінде объектіні анықтауды жүзеге асырғанда не болып жатқанын жоғары деңгейдегі көрініс. Экстракторлық желі анықтаған ерекшеліктерге сәйкес, әр торкөздік ұяшық үшін анкерлердің ығысуы, зәкір ықтималдығы мен якорь класы кіретін болжамдар жиынтығы жасалады. Содан кейін біз ықтималдығы төмен және voila болжамдарын алып тастаймыз!

2 -қадам: Қоршаған ортаны дайындаңыз

Қоршаған ортаны дайындаңыз
Қоршаған ортаны дайындаңыз

aXeleRate penny4860, SVHN yolo-v2 цифрлық детектордың керемет жобасына негізделген. aXeleRate Керастағы YOLO детекторының бұл деңгейін келесі деңгейге көтереді және оның ыңғайлы конфигурация жүйесін қолданады, оның көмегімен суретті тану/объектілерді анықтау және кескінді сегменттеу желілерін әр түрлі фондықтармен оқыту мен түрлендіру жүзеге асады.

AXeleRate қолданудың екі әдісі: жергілікті жерде Ubuntu компьютерінде немесе Google Colab жүйесінде жұмыс істеу. Google Colab -те жұмыс істеу үшін мына мысалды қараңыз:

PASCAL-VOC объектілерді анықтау Colab дәптері

Модельді жергілікті деңгейде оқыту және оны аппараттық жеделдету үшін пайдалану экспорттау қазір әлдеқайда оңай. Мен сіздің жобаңызды басқалардан бөлек ұстау және қақтығыстарды болдырмау үшін Anaconda ортасында барлық қажетті тәуелділіктерді орнатуды ұсынамын.

Орнатқышты мына жерден жүктеңіз.

Орнату аяқталғаннан кейін жаңа ортаны жасаңыз:

conda create -n yolo python = 3.7

Жаңа ортаны белсендірейік

жолды белсендіріңіз

Bash қабығының алдындағы префикс ортаның атымен көрсетіледі, бұл сіздің қазір сол ортада жұмыс жасайтындығыңызды білдіреді.

AXeleRate бағдарламасын жергілікті компьютерге орнатыңыз

pip install git+https://github.com/AIWintermuteAI/aXeleRate

Содан кейін жаттығулар мен тұжырымдар үшін қажет сценарийлерді жүктеу үшін оны іске қосыңыз:

git клоны

AXeleRate қалтасында test_training.py көмегімен жылдам тесттер жүргізуге болады. Ол әр модель үшін дайындық пен қорытынды жасайды, үйретілген модельдерді сақтайды және түрлендіреді. Бұл тек 5 дәуірге арналған жаттығулар болғандықтан және деректер жиынтығы өте аз болғандықтан, сіз пайдалы модельдерді ала алмайсыз, бірақ бұл сценарий тек қателердің жоқтығын тексеруге арналған.

3 -қадам: Keras көмегімен объектілерді анықтау моделін үйретіңіз

Keras көмегімен объектілерді анықтау моделін үйретіңіз
Keras көмегімен объектілерді анықтау моделін үйретіңіз

Енді біз конфигурация файлы бар оқу сценарийін іске қоса аламыз. Keras YOLO объектілер детекторын енгізу өте күрделі болғандықтан, мен кодты түсіндіруді емес, жаттығуларды қалай конфигурациялау керектігін түсіндіремін, сонымен қатар, егер сіз оларға өзгерістер енгізгіңіз келсе.

Ойыншықтың мысалынан бастайық және ракон детекторын үйретейік. /Config қалтасында raccoon_detector.json конфигурация файлы бар. Біз MobileNet7_5 архитектурасы ретінде таңдаймыз (мұнда 7_5 - Mobilenet -тің бастапқы енгізілуінің альфа -параметрі, желінің енін басқарады) және кіріс өлшемі ретінде 224x224. Конфигурациядағы ең маңызды параметрлерді қарастырайық:

Түр - бұл модельдің алдыңғы жағы - классификатор, детектор немесе Segnet архитектурасы - бұл модельдің артқы жағы (функция шығарушы)

- Толық Йоло - Кішкене Йоло - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - SqueezeNet - VGG16 - ResNet50

Зәкірлер туралы қосымша ақпарат алу үшін мына жерден оқыңыз

Жапсырмалар - бұл деректер жиынында бар белгілер. МАҢЫЗДЫ: Деректер жиынтығында бар барлық белгілерді тізімдеңіз.

object_scale объект болжаушылардың сенімділігін қате болжау үшін қанша жазалау керектігін анықтайды

no_object_scale объектілік емес болжаушылардың сенімділігін қате болжау үшін қанша жазалау керектігін анықтайды

coord_scale дұрыс емес позиция мен мөлшерді болжау үшін қанша жазалау керектігін анықтайды (x, y, w, h)

class_scale дұрыс емес сыныпты болжау үшін қанша мөлшерде жазалау керектігін анықтайды

augumentation - кескінді ұлғайту, оның мөлшерін өзгерту, бұру және бұлыңғырлау, бұл деректер жиынтығының үлкен болуын болдырмайды.

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/networks/yolo/yolo_frontend.py сценарийімен жаттықтырады. yolo/backend/loss.py - бұл реттелетін жоғалту функциясы іске асатын жерде, ал модель - жасалатын жерде yolo/backend/network.py (кіріс, мүмкіндік шығарғыш және анықтау қабаттары біріктірілген). axelerate/желілер/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 қостым. Карталар туралы толығырақ мына жерден оқи аласыз.

Егер картаның орташа дәлдігі (біздің растау көрсеткіші) 20 дәуірде жақсармаса, жаттығу мерзімінен бұрын тоқтатылады. Картаны жақсартқан сайын модель жоба қалтасында сақталады. Оқыту аяқталғаннан кейін, aXeleRate автоматты түрде ең жақсы үлгіні белгіленген форматтарға түрлендіреді - сіз қазір «tflite», «k210» немесе «edgetpu» таңдай аласыз.

Енді соңғы қадамға, біздің модельді Sipeed аппараттық құралында іске қосамыз!

5 -қадам: Micropython микробағдарламасын іске қосыңыз

Micropython микробағдарламасын іске қосыңыз
Micropython микробағдарламасын іске қосыңыз

C кодын қолдана отырып, объектілерді анықтау үлгісімен қорытынды жасауға болады, бірақ ыңғайлылық үшін оның орнына Micropython микробағдарламасы мен MaixPy IDE қолданамыз.

MaixPy IDE бағдарламасын осы жерден және micropython микробағдарламасын осы жерден жүктеп алыңыз. Микробағдарламаны жазу немесе бөлек GUI флэш -құралын жүктеу үшін kflash.py python сценарийін қолдануға болады.

Model.kmodel файлын SD картасының түбіріне көшіріп, SD картасын Sipeed Maix Bit (немесе басқа K210 құрылғысына) салыңыз. Сонымен қатар.kmodel құрылғының флэш -жадына жазуға болады. Менің мысал сценарийі флэш жадтан.kmodel оқиды. Егер сіз SD картасын қолдансаңыз, бұл жолды өзгертіңіз

тапсырма = kpu.load (0x200000)

дейін

тапсырма = kpu.load («/sd/model.kmodel»)

MaixPy IDE ашыңыз және қосылу түймесін басыңыз. Example_scripts/k210/detector қалтасынан raccoon_detector.py сценарийін ашып, Бастау түймесін басыңыз. Сіз айналасында қораптары бар камерадан тікелей трансляцияны көруіңіз керек … жақсы, ракондар. Сіз қосымша мысалдар келтіре отырып, модельдің дәлдігін арттыра аласыз, бірақ бұл шағын модель (1,9 М) екенін және ұсақ заттарды анықтауда қиындықтар болатынын есте сақтаңыз (ажыратымдылығы төмен болғандықтан).

Бұрынғы суретті тану туралы мақалама түсініктемелерде алған сұрақтардың бірі - UART/I2C арқылы анықтау нәтижелерін Sipeed әзірлеу тақталарына қосылған басқа құрылғыға қалай жіберу. Менің github репозиторийінде сіз raccoon_detector_uart.py басқа скрипт үлгісін таба аласыз, ол ракондарды анықтайды және UART арқылы шектеу қораптарының координаттарын жібереді. Есіңізде болсын, UART байланысы үшін қолданылатын түйреуіштер әр түрлі тақталардан ерекшеленеді, бұл құжаттамада өзіңізді тексеру керек.

6 -қадам: Қорытынды

Kendryte K210 - шектеулі жады болса да, компьютерді көруге арналған қатты чип. Әзірге менің оқулықтарда біз оны реттелетін объектілерді тану, реттелетін объектілерді анықтау және OpenMV негізіндегі компьютерді көруге арналған кейбір тапсырмаларды орындау үшін қолдануды қарастырдық. Мен бұл жүзді тануға да жарамды екенін білемін, және позаны анықтау мен кескінді сегментациялауға болады (сіз семантикалық сегменттеу моделін үйрету үшін aXeleRate -ті қолдана аласыз, бірақ мен K210 тұжырымын әлі енгізген жоқпын). AXeleRate репозиторийі мәселелерін қарап шығуға және PR қосуға болады, егер сіз өз үлесіңізді қосатын жақсартулар бар деп ойласаңыз!

Міне, мен бұл оқулықты жазуда қолданған бірнеше мақалалар, егер сіз нейрондық желілермен объектілерді анықтау туралы көбірек білгіңіз келсе, қараңыз:

Шектеу қорапшасы объектілерінің детекторлары: YOLO түсіну, сіз тек бір рет қарайсыз

YOLO туралы түсінік (қосымша математика)

YOLO объектісін оқшаулау Кераспен қалай жұмыс істейтіні туралы жұмсақ нұсқаулық (2 -бөлім)

YOLO, YOLOv2 және қазір YOLOv3 көмегімен нақты уақыттағы объектілерді анықтау

Сіз қазірдің өзінде алған білімдеріңізді машиналық көзқараспен керемет жобалар жасау үшін қолдана аласыз деп үміттенемін! Сіз мұнда Sipeed тақталарын сатып ала аласыз, олар ендірілген жүйелерде ML үшін қол жетімді ең арзан нұсқалардың бірі.

Егер сізде сұрақтар туындаса, мені LinkedIn -ге қосыңыз және менің YouTube каналыма жазылыңыз, машиналық оқыту мен робототехникаға қатысты қызықты жобалар туралы хабардар болыңыз.

Ұсынылған: