Мазмуну:

Sipeed MaiX такталары менен объекттерди аныктоо (Kendryte K210): 6 кадам
Sipeed MaiX такталары менен объекттерди аныктоо (Kendryte K210): 6 кадам

Video: Sipeed MaiX такталары менен объекттерди аныктоо (Kendryte K210): 6 кадам

Video: Sipeed MaiX такталары менен объекттерди аныктоо (Kendryte K210): 6 кадам
Video: У МОЕЙ ДЕВУШКИ ДЕНЬ РОЖДЕНИЯ (хит клип) 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, AI үчүн Keras негизиндеги маалымат жөнүндө маалыматты кошуу үчүн жаңыртууну чечтим. Мен иштеп чыгам. aXeleRate, негизинен, мен сүрөттү таануу/объекттерди аныктоо моделдерин үйрөтүү үчүн колдонгон скрипттердин жыйындысына негизделген - бир алкакка бириктирилген жана Google Colabдагы жумуш процесси үчүн оптималдаштырылган. Колдонууга ыңгайлуу жана дагы заманбап.

Макаланын эски версиясы үчүн дагы эле steemit.com сайтынан көрө аласыз.

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

Объекттерди аныктоо модели архитектурасы түшүндүрүлдү
Объекттерди аныктоо модели архитектурасы түшүндүрүлдү
Объекттерди аныктоо модели архитектурасы түшүндүрүлдү
Объекттерди аныктоо модели архитектурасы түшүндүрүлдү

Сүрөттөрдү таануу (же сүрөттөрдү классификациялоо) моделдери бүт сүрөттү киргизүү катары кабыл алып, биз тааныганга аракет кылып жаткан ар бир класс үчүн ыктымалдыктардын тизмесин чыгарат. Бизди кызыктырган объект сүрөттүн чоң бөлүгүн ээлесе жана анын жайгашкан жерине анча маани бербесе, бул абдан пайдалуу. Бирок, эгерде биздин долбоор (айталы, жүздү көзөмөлдөөчү камера) бизден сүрөттөгү объектинин түрү жөнүндө гана билимге ээ болбостон, анын координаттарын талап кылсачы? Ал эми бир нече объекттерди табууну талап кылган долбоор жөнүндө эмне айтууга болот (мисалы, саноо үчүн)?

Бул жерде Объекттерди аныктоо моделдери жардамга келет. Бул макалада биз YOLO (сиз бир гана жолу карайсыз) архитектурасын колдонобуз жана ушул архитектуранын ички механикасына түшүндүрмө беребиз.

Биз сүрөттө кандай объекттер бар экенин жана алардын координаттары кандай экенин аныктоого аракет кылып жатабыз. Машина үйрөнүү сыйкыр эмес жана "ой жүгүртүүчү машина" эмес, белгилүү бир маселени жакшыраак чечүү үчүн функцияны (нейрон тармагын) оптималдаштыруу үчүн статистиканы колдонгон алгоритм. Биз бул маселени дагы "оптималдаштыруу" үчүн парафраздашыбыз керек. Бул жерде жөнөкөйлөштүрүлгөн мамиле - бул болжолдоо менен объекттин туура координаттарынын ортосундагы жоготууну (айырманы) азайтуучу алгоритмге ээ болуу. Сүрөттө бизде бир гана объект болгондо, бул абдан жакшы иштейт. Бир нече объекттер үчүн биз башкача мамиле кылабыз - биз торду кошобуз жана тармагыбыз ар бир тордо объектилердин болушун (же жоктугун) болжолдойт. Уккулуктуу угулат, бирок дагы эле тармак үчүн өтө көп белгисиздикти калтырат - божомолду кантип чыгаруу керек жана бир торчонун ичинде борбору бар бир нече объект болгондо эмне кылуу керек? Биз дагы бир чектөөнү кошушубуз керек - анкерлер деп аталат. Анкерлер - бул баштапкы өлчөмдөр (туурасы, бийиктиги), алардын кээ бирлери (объекттин өлчөмүнө эң жакын) объектинин өлчөмүнө чейин өзгөртүлөт - нейрон тармагынын айрым жыйынтыктарын колдонуу менен (акыркы функция картасы).

Ошентип, бул жерде YOLO архитектуралык нейрон тармагы сүрөттө объект аныктоону аткарганда эмне болуп жаткандыгы жөнүндө жогорку деңгээлдеги көрүнүш. Функциялардын экстрактордук тармагы тарабынан аныкталган өзгөчөлүктөргө ылайык, ар бир торчо ячейкасы үчүн болжолдоолор топтому түзүлөт, анкерлердин ордун басуу, анкерлердин ыктымалдуулугу жана якор классын камтыйт. Андан кийин биз божомолдорду төмөн ыктымалдуулук менен жокко чыгарабыз!

2 -кадам: Айлана -чөйрөнү даярдоо

Айлана -чөйрөнү даярдоо
Айлана -чөйрөнү даярдоо

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

AXeleRate колдонуунун эки жолу бар: Ubuntu машинасында же Google Colabда локалдык түрдө иштөө. Google Colabда иштөө үчүн бул мисалды карап көрүңүз:

PASCAL-VOC Object Detection Colab дептери

Моделиңизди жергиликтүү деңгээлде үйрөтүү жана аны экспорттоо аппараттык ылдамдатуу менен бир топ жеңилирээк. Сиздин долбооруңузду башкалардан бөлүп кармоо жана чыр -чатактарды болтурбоо үчүн сизге Анаконда чөйрөсүндө бардык керектүү көз карандылыктарды орнотууну сунуштайм.

Орнотуучуну бул жерден жүктөп алыңыз.

Орнотуу аяктагандан кийин, жаңы чөйрөнү түзүңүз:

Conda түзүү -n yolo python = 3.7

Жаңы чөйрөнү иштетели

йолону активдештирүү

Баш кабыгыңыздын алдындагы префикс айлана -чөйрөнүн аталышы менен пайда болот, бул сиз азыр ошол чөйрөдө иштеп жатканыңызды көрсөтөт.

Жергиликтүү машинаңызга aXeleRate орнотуңуз

pip орнотуу git+https://github.com/AIWintermuteAI/aXeleRate

Анан муну иштетип, сценарийлерди жүктөп алуу үчүн сизге тренинг жана корутунду керек:

git клону

Сиз aXeleRate папкасында tests_training.py менен тез тесттерди иштете аласыз. Ал ар бир моделдин түрү боюнча тренингдерди жана жыйынтыктарды чыгарат, үйрөтүлгөн моделдерди сактап калат. Бул 5 доор үчүн гана машыгуу болгондуктан, маалымат топтому өтө кичине, сиз пайдалуу моделдерди ала албайсыз, бирок бул скрипт каталардын жоктугун текшерүү үчүн гана арналган.

3 -кадам: Керас менен объекттерди табуу моделин үйрөтүңүз

Керас менен объекттерди табуу моделин үйрөтүңүз
Керас менен объекттерди табуу моделин үйрөтүңүз

Эми биз конфигурация файлы менен окуу скриптин иштете алабыз. 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/network/yolo/yolo_frontend.py скрипти менен машыктырат. yolo/backend/loss.py - бул жерде бажы жоготуу функциясы ишке ашырылат, ал эми yolo/backend/network.py - бул модель түзүлгөн жерде (киргизүү, өзгөчөлүк экстрактору жана аныктоо катмарлары бириктирилген). axelerate/network/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 Firmware менен иштөө

Micropython Firmware менен иштөө
Micropython Firmware менен иштөө

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 M) экенин жана кичинекей объектилерди табууда кыйынчылыктар болорун унутпаңыз (токтомдун төмөндүгүнөн).

Сүрөттү таануу боюнча мурунку макалама комментарийлерде алган суроолорумдун бири, UART/I2C аркылуу аныктоо жыйынтыктарын Sipeed иштеп чыгуу такталарына туташкан башка түзмөккө кантип жөнөтүү керек. Менин github репозиторийимде сиз raccoon_detector_uart.py деген башка скрипт үлгүсүн таба аласыз, ал (сиз ойлогондой) ракотторду аныктайт жана UART аркылуу чектөө кутучаларынын координаттарын жөнөтөт. UART байланышы үчүн колдонулган казыктар ар кандай такталардан айырмаланарын унутпаңыз, бул документтерде өзүңүздү текшеришиңиз керек.

6 -кадам: Жыйынтык

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

Мына мен бул окуу куралын жазууда колдонгон кээ бир макалалар, эгерде сиз нейрон тармактары менен объекттерди аныктоо жөнүндө көбүрөөк билгиңиз келсе, карап көрүңүз:

Чектөө кутусунун объект детекторлору: YOLOну түшүнүү, сиз бир гана жолу карайсыз

YOLOну түшүнүү (көбүрөөк математика)

YOLO объектилерин локалдаштыруу Керас менен кантип иштээри жөнүндө жумшак көрсөтмө (2 -бөлүк)

YOLO, YOLOv2 жана азыр YOLOv3 менен реалдуу убакытта объекттерди аныктоо

Машинанын көрүнүшү менен укмуштуудай долбоорлорду куруу үчүн азыр алган билимиңизди колдоно аласыз деп үмүттөнөбүз! Бул жерден Sipeed такталарын сатып алсаңыз болот, алар камтылган системалардагы ML үчүн эң арзан варианттардын бири.

Эгерде сизде кандайдыр бир суроолор болсо, мени LinkedInге кошуңуз жана менин YouTube каналыма жазылыңыз, машина үйрөнүү жана робототехникага байланышкан кызыктуу долбоорлор жөнүндө кабардар болуу үчүн.

Сунушталууда: