Агуулгын хүснэгт:

Sipeed MaiX хавтангаар объект илрүүлэх (Kendryte K210): 6 алхам
Sipeed MaiX хавтангаар объект илрүүлэх (Kendryte K210): 6 алхам

Видео: Sipeed MaiX хавтангаар объект илрүүлэх (Kendryte K210): 6 алхам

Видео: Sipeed MaiX хавтангаар объект илрүүлэх (Kendryte K210): 6 алхам
Видео: PyAi k210 - новая платформа машинного зрения на Kendryte k210 2024, Арваннэгдүгээр
Anonim
Image
Image

Sipeed MaiX самбар ашиглан дүрс таних тухай өмнөх нийтлэлээ үргэлжлүүлэхийн тулд би объект илрүүлэхэд анхаарлаа хандуулж өөр нэг хичээл бичихээр шийдлээ. Kendryte K210 чиптэй Edge Computing -д зориулсан Seeed AI Hat, M5 стекийн M5StickV, DFRobot -ийн HuskyLens зэрэг хэд хэдэн сонирхолтой тоног төхөөрөмж саяхан гарч ирэв. Хямд үнэтэй учраас Kendryte K210 нь төслүүддээ компьютерийн алсын харааг оруулахыг хүсч буй хүмүүсийг уриалав. Гэхдээ хятадын техник хангамжийн бүтээгдэхүүнүүдийн нэгэн адил техникийн дэмжлэг дутагдаж байгаа бөгөөд үүнийг нийтлэл, видеогоороо сайжруулахыг хүсч байна. Гэхдээ би Kendryte эсвэл Sipeed хөгжүүлэгчдийн багт байдаггүй бөгөөд тэдний бүтээгдэхүүнтэй холбоотой бүх асуултанд хариулж чадахгүй гэдгийг санаарай.

Үүнийг санаж эхэлье! Бид CNN загварыг таних загвар хэрхэн ажилладаг талаар товч (хялбаршуулсан) тоймоос эхлэх болно.

2020 оны 5-Р САРЫГ ШИНЭЧЛЭХ: K210 самбар бүхий объект илрүүлэх тухай миний нийтлэл, видео бичлэг маш алдартай хэвээр байгаа бөгөөд YouTube, Google-ийн шилдэг үр дүнгийн дунд байгаа тул би нийтлэлээ aXeleRate, AI-д зориулсан 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 объект илрүүлэх колаб дэвтэр

Загвараа дотооддоо сургаж, тоног төхөөрөмжийн хурдатгалд ашиглахын тулд экспортлох нь одоо илүү хялбар болсон байна. Төсөлөө бусдаас тусгаарлаж, зөрчилдөөнөөс зайлсхийхийн тулд шаардлагатай бүх хамаарлыг Анаконда орчинд суулгахыг зөвлөж байна.

Суулгагчийг эндээс татаж авна уу.

Суулгаж дууссаны дараа шинэ орчин үүсгэнэ үү.

conda үүсгэх -n yolo python = 3.7

Шинэ орчинг идэвхжүүлцгээе

yolo -г идэвхжүүлээрэй

Таны bash бүрхүүлийн өмнөх угтвар орчны нэрээр гарч ирэх бөгөөд энэ нь та одоо тэр орчинд ажиллаж байгааг илтгэнэ.

AXeleRate -ийг өөрийн компьютер дээр суулгаарай

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

Дараа нь сургалт, дүгнэлт хийхэд шаардлагатай скриптүүдийг татаж авахын тулд үүнийг ажиллуулна уу.

git clone

Та aXeleRate фолдерт test_training.py ашиглан хурдан тест хийж болно. Энэ нь загвар бүрийн хувьд сургалт, дүгнэлт хийх, бэлтгэгдсэн загваруудыг хадгалах, хөрвүүлэх болно. Энэ нь зөвхөн 5 эрин үеийг хамарсан сургалт бөгөөд өгөгдлийн сан нь маш бага тул та ашигтай загварыг авах боломжгүй болно, гэхдээ энэ скрипт нь зөвхөн алдаа байхгүй эсэхийг шалгахад зориулагдсан болно.

Алхам 3: Объект илрүүлэх загварыг Керас ашиглан сургах

Объект илрүүлэх загварыг Керастай хамт сургах
Объект илрүүлэх загварыг Керастай хамт сургах

Одоо бид тохиргооны файлтай сургалтын скрипт ажиллуулж болно. YOLO объект илрүүлэгчийг Керас хэрэгжүүлэх нь нэлээд төвөгтэй тул холбогдох код бүрийг тайлбарлахын оронд би сургалтыг хэрхэн тохируулах, мөн холбогдох модулиудыг тайлбарлах болно.

Тоглоомын жишээнээс эхэлж, элбэнх детектор сургая. Raccoon_detector.json /config хавтас дотор тохиргооны файл байдаг. Бид MobileNet7_5 -ийг архитектураар (7_5 бол анхны Mobilenet -ийн хэрэгжүүлэлтийн альфа параметр, сүлжээний өргөнийг хянадаг), оролтын хэмжээг 224x224 болгон сонгодог. Тохиргооны хамгийн чухал параметрүүдийг авч үзье.

Төрөл нь урд талын загвар юм - Ангилагч, детектор эсвэл Segnet архитектур бол загварын арын хэсэг юм

- Full Yolo - Tiny Yolo - 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 Драйв дээрээ хуваалцсан мэдээллийн санг (анхны өгөгдлийн сан) татаж авах хэрэгтэй.

Тохиргооны файл дахь мөрүүдийг (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/сүлжээнүүд/common_utils/fit.py бол сургалтын явцыг хэрэгжүүлдэг скрипт бөгөөд axelerate/сүлжээнүүд/common_utils/feature.py нь онцлог шинжлэгчүүдийг агуулдаг. Хэрэв та K210 чип болон Micropython програм хангамж бүхий бэлтгэгдсэн загварыг ашиглахыг хүсч байгаа бол санах ойн хязгаарлалтын улмаас MobileNet (2_5, 5_0 ба 7_5) болон TinyYolo -ийн аль нэгийг сонгох боломжтой боловч MobileNet нь илүү нарийвчлалтай нарийвчлалтай болохыг олж мэдсэн.

Энэ бол тоглоомын жишээ бөгөөд зөвхөн элбэнх 150 дүрсийг агуулдаг тул нарийвчлал нь одтой харьцуулахад хол байх болно, гэхдээ GPU байхгүй байсан ч гэсэн сургалтын процесс маш хурдан явагдах ёстой. Ажилтай холбоотой төслийн хувьд би замын дохио илрүүлэгч, дугаар илрүүлэгчийг сургасан бөгөөд мэдээллийн багцад хэд хэдэн мянга гаруй сургалтын жишээ багтсан болно.

Алхам 4: Үүнийг.kmodel формат руу хөрвүүлэх

Үүнийг.kmodel формат руу хөрвүүлэх
Үүнийг.kmodel формат руу хөрвүүлэх

AXeleRate -ийн тусламжтайгаар загвар хөрвүүлэлтийг автоматаар хийдэг - энэ нь сургалтын скриптийн хуучин хувилбараас хамгийн том ялгаа юм! Дээрээс нь та загварын файлууд болон сургалтын графикийг төслийн хавтсанд сайтар хадгалсан болно. Түүнчлэн, хөндлөнгийн нарийвчлал нь объектыг илрүүлэх бодит гүйцэтгэлийн талаар заримдаа үнэлгээ өгдөггүй болохыг олж мэдсэн бөгөөд ингэснээр би mAP -ийг объект илрүүлэх загварт баталгаажуулалтын хэмжүүр болгон нэмсэн юм. Та MAP -ийн талаар илүү ихийг эндээс уншиж болно.

Хэрэв зураглалын дундаж дундаж нарийвчлал (бидний баталгаажуулалтын хэмжүүр) 20 эрин үед сайжрахгүй бол сургалт хугацаанаасаа өмнө зогсох болно. Газрын зураг сайжрах бүрт загвар нь төслийн хавтсанд хадгалагддаг. Сургалт дууссаны дараа aXeleRate нь хамгийн сайн загварыг автоматаар тогтоосон формат руу хөрвүүлдэг бөгөөд та одоогоор "tflite", "k210" эсвэл "edgetpu" -г сонгож болно.

Эцсийн алхам бол бидний загварыг Sipeed техник хангамж дээр ажиллуулж байна!

Алхам 5: Micropython Firmware дээр ажиллуулна уу

Micropython Firmware дээр ажиллуулна уу
Micropython Firmware дээр ажиллуулна уу

С кодыг ашиглан объект илрүүлэх загварыг ашиглах боломжтой боловч хялбар болгох үүднээс бид Micropython firmware болон MaixPy IDE -ийг ашиглах болно.

MaixPy IDE -ийг эндээс, micropython програмыг эндээс татаж аваарай. Та python скриптийг ашиглан kflash.py програмыг шарах эсвэл тусдаа GUI флаш хэрэгслийг эндээс татаж авах боломжтой.

Model.kmodel файлыг SD картны эх рүү хуулж, SD картыг Sipeed Maix Bit (эсвэл бусад K210 төхөөрөмж) руу оруулна уу. Эсвэл та.kmodel -ийг төхөөрөмжийн флаш санах ойд шатааж болно. Миний жишээ скрипт флаш санах ойгоос.kmodel уншдаг. Хэрэв та SD карт ашиглаж байгаа бол энэ мөрийг өөрчилнө үү

даалгавар = kpu.load (0x200000)

руу

даалгавар = kpu.load ("/sd/model.kmodel")

MaixPy IDE -ийг нээгээд холбох товчийг дарна уу. Example_scripts/k210/илрүүлэгч хавтаснаас raccoon_detector.py скриптийг нээгээд Start товчийг дарна уу. Та эргэн тойрондоо хайрцаг бүхий камераас шууд дамжуулалтыг харж байх ёстой … за, элбэнх. Та сургалтын жишээг нэмж өгснөөр загварын нарийвчлалыг нэмэгдүүлэх боломжтой, гэхдээ энэ нь үлгэрийн жижиг загвар (1.9 M) бөгөөд жижиг объектыг илрүүлэхэд бэрхшээлтэй байх болно (нарийвчлал багатай тул).

Өмнөх зураг таних талаархи нийтлэлд өгсөн сэтгэгдлүүдийн нэг нь 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 сувагт бүртгүүлээрэй.

Зөвлөмж болгож буй: