Talaan ng mga Nilalaman:

Pagtuklas ng Bagay Sa Mga Papan ng Sipeed MaiX (Kendryte K210): 6 na Hakbang
Pagtuklas ng Bagay Sa Mga Papan ng Sipeed MaiX (Kendryte K210): 6 na Hakbang

Video: Pagtuklas ng Bagay Sa Mga Papan ng Sipeed MaiX (Kendryte K210): 6 na Hakbang

Video: Pagtuklas ng Bagay Sa Mga Papan ng Sipeed MaiX (Kendryte K210): 6 na Hakbang
Video: 3-часовой марафон паранормальных и необъяснимых историй - 3 2024, Hulyo
Anonim
Image
Image

Bilang pagpapatuloy ng aking nakaraang artikulo tungkol sa pagkilala ng imahe sa Sipeed MaiX Boards, nagpasya akong magsulat ng isa pang tutorial, na nakatuon sa pagtuklas ng object. Mayroong ilang mga kagiliw-giliw na hardware na lumitaw kamakailan sa chip ng Kendryte K210, kabilang ang Seeed AI Hat para sa Edge Computing, M5 stack's M5StickV at DFRobot's HuskyLens (bagaman ang isa ay may pagmamay-ari na firmware at mas naka-target para sa kumpletong mga nagsisimula). Dahil sa murang presyo, nag-apela ang Kendryte K210 sa mga tao, na nais na idagdag ang paningin ng computer sa kanilang mga proyekto. Ngunit tulad ng dati sa mga produktong Intsik na hardware, kulang ang suporta sa tech at ito ay isang bagay na sinusubukan kong pagbutihin sa aking mga artikulo at video. Ngunit tandaan, na wala ako sa koponan ng mga developer ng Kendryte o Sipeed at hindi masagot ang lahat ng mga katanungang nauugnay sa kanilang produkto.

Sa pag-iisip na, magsimula tayo! Magsisimula kami sa maikling (at pinadali) pangkalahatang ideya ng kung paano gumagana ang pagkilala sa object ng mga modelo ng CNN.

UPDATE MAY 2020: Nakikita kung paano ang aking artikulo at video sa Pagtuklas ng Bagay sa mga board ng K210 ay napakapopular pa rin at kabilang sa mga nangungunang resulta sa YouTube at Google, nagpasya akong i-update ang artikulo upang isama ang impormasyon tungkol sa aXeleRate, Keras-based framework para sa AI sa Umaunlad ako. Ang aXeleRate, mahalagang, ay batay sa koleksyon ng mga script na ginamit ko para sa pagsasanay sa mga modelo ng pagkilala sa imahe / object ng pagtuklas ng bagay - na pinagsama sa isang solong balangkas at na-optimize para sa daloy ng trabaho sa Google Colab. Mas madaling gamitin at mas napapanahon.

Para sa lumang bersyon ng artikulo, maaari mo pa rin itong makita sa steemit.com.

Hakbang 1: Ipinaliwanag ang Arkitektura ng Modelong Pagtuklas ng Bagay

Ipinaliwanag ang Arkitektura ng Modelong Pagtuklas ng Bagay
Ipinaliwanag ang Arkitektura ng Modelong Pagtuklas ng Bagay
Ipinaliwanag ang Arkitektura ng Modelong Pagtuklas ng Bagay
Ipinaliwanag ang Arkitektura ng Modelong Pagtuklas ng Bagay

Ang mga modelo ng pagkilala sa imahe (o pag-uuri ng imahe) ay kumukuha ng buong imahe bilang isang input at naglalabas ng isang listahan ng mga posibilidad para sa bawat klase na sinusubukan naming kilalanin. Napaka kapaki-pakinabang kung ang bagay na interesado kami ay sumakop sa isang malaking bahagi ng imahe at wala kaming masyadong pakialam tungkol sa lokasyon nito. Ngunit paano kung ang aming proyekto (sabihin, camera ng pagsubaybay sa mukha) ay nangangailangan sa amin hindi lamang upang magkaroon ng kaalaman tungkol sa uri ng bagay sa imahe, kundi pati na rin ang mga coordinate nito. At paano ang tungkol sa proyekto na nangangailangan ng pagtuklas ng maraming mga bagay (halimbawa para sa pagbibilang)?

Narito kapag madaling magamit ang Mga Modelong Pagtuklas ng Bagay. Sa artikulong ito gagamitin namin ang YOLO (minsan ka lang tumingin) ang arkitektura at ituon ang paliwanag sa panloob na mekanika ng partikular na arkitekturang ito.

Sinusubukan naming matukoy kung anong mga bagay ang naroroon sa larawan at kung ano ang kanilang mga coordinate. Dahil ang pag-aaral ng makina ay hindi mahika at hindi "isang pag-iisip na makina", ngunit isang algorithm lamang na gumagamit ng mga istatistika upang ma-optimize ang pagpapaandar (neural network) upang mas mahusay na malutas ang isang partikular na problema. Kailangan nating paraphrase ang problemang ito upang gawin itong mas "ma-optimize". Ang isang walang muwang na diskarte dito ay magkakaroon ng pag-minimize ng algorithm ng pagkawala (pagkakaiba) sa pagitan ng hula nito at tamang mga coordinate ng bagay. Magagawa iyon nang maayos, hangga't mayroon lamang kaming isang bagay sa imahe. Para sa maraming mga object kumukuha kami ng ibang diskarte - idinagdag namin ang grid at hinuhulaan ang aming network ng pagkakaroon (o kawalan) ng (mga) bagay sa bawat grid. Magaling ang tunog, ngunit nag-iiwan pa rin ng labis na kawalan ng katiyakan para sa network - kung paano i-output ang hula at kung ano ang gagawin kapag maraming mga bagay na may gitna sa loob ng isang grid cell? Kailangan naming magdagdag ng isa pang pagpipigil - tinatawag na mga angkla. Ang mga anchor ay paunang laki (lapad, taas) na ang ilan sa mga ito (ang pinakamalapit sa laki ng bagay) ay baguhin ang laki sa laki ng object - gamit ang ilang mga output mula sa neural network (huling tampok na mapa).

Kaya, narito ang isang nangungunang antas ng pagtingin sa kung ano ang nangyayari kapag ang YOLO architecture neural network ay gumaganap ng isang pagtuklas ng bagay sa imahe. Ayon sa mga tampok na nakita ng network ng tampok na taga-bunot, para sa bawat grid cell isang set ng mga hula ang ginawa, na kasama ang mga anchor na offset, posibilidad ng angkla at klase ng angkla. Pagkatapos ay itinapon namin ang mga hula na may mababang posibilidad at voila!

Hakbang 2: Ihanda ang Kapaligiran

Ihanda ang Kapaligiran
Ihanda ang Kapaligiran

Ang aXeleRate ay batay sa kahanga-hangang proyekto ng penny4860, SVHN yolo-v2 digit detector. aXeleRate dadalhin ang pagpapatupad na ito ng YOLO detector sa Keras sa isang susunod na antas at ginagamit ang maginhawang sistema ng pagsasaayos upang maisagawa ang pagsasanay at pag-convert ng pagkilala sa imahe / pagtuklas ng object at mga network ng paghihiwalay ng imahe na may iba't ibang mga backend.

Sa ay dalawang paraan upang magamit ang aXeleRate: lokal na tumatakbo sa Ubuntu machine o sa Google Colab. Para sa pagtakbo sa Google Colab, tingnan ang halimbawang ito:

PASCAL-VOC Object Detection Colab Notebook

Ang pagsasanay ng iyong modelo nang lokal at pag-export ito upang magamit sa pagpabilis ng hardware ay mas madali din ngayon. Masidhing inirerekumenda kong i-install mo ang lahat ng kinakailangang mga dependency sa kapaligiran ng Anaconda upang mapanatili ang iyong proyekto na ihiwalay sa iba at maiwasan ang mga hidwaan.

I-download ang installer dito.

Matapos makumpleto ang pag-install, lumikha ng isang bagong kapaligiran:

conda lumikha -n yolo python = 3.7

Paganahin natin ang bagong kapaligiran

conda buhayin yolo

Ang isang unlapi bago ang iyong bash shell ay lilitaw na may pangalan ng kapaligiran, na nagpapahiwatig na nagtatrabaho ka ngayon sa kapaligiran na iyon.

Mag-install ng aXeleRate sa iyong lokal na makina gamit ang

pip install git +

At pagkatapos ay patakbuhin ito upang mag-download ng mga script na kakailanganin mo para sa pagsasanay at hinuha:

git clone

Maaari kang magpatakbo ng mabilis na mga pagsubok sa mga pagsubok_training.py sa aXeleRate folder. Tatakbo ang pagsasanay at hinuha para sa bawat uri ng modelo, i-save at i-convert ang mga may kasanayang modelo. Dahil pagsasanay lamang ito para sa 5 mga panahon at ang dataset ay napakaliit, hindi ka makakakuha ng mga kapaki-pakinabang na modelo, ngunit ang script na ito ay inilaan lamang para sa pag-check ng kawalan ng mga error.

Hakbang 3: Sanayin ang isang Model ng Pagtuklas ng Bagay Sa Keras

Sanayin ang isang Modelong Pagtuklas ng Bagay Sa Keras
Sanayin ang isang Modelong Pagtuklas ng Bagay Sa Keras

Ngayon ay maaari naming patakbuhin ang isang iskrip sa pagsasanay na may file ng pagsasaayos. Dahil ang pagpapatupad ng Keras ng YOLO object detector ay medyo kumplikado, sa halip na ipaliwanag ang bawat nauugnay na piraso ng code, ipapaliwanag ko kung paano i-configure ang pagsasanay at ilalarawan din ang mga nauugnay na module, kung sakaling nais mong gumawa ng ilang mga pagbabago sa kanila mismo.

Magsimula tayo sa isang halimbawa ng laruan at sanayin ang isang racoon detector. Mayroong isang config file sa loob ng / config folder, raccoon_detector.json. Pinipili namin ang MobileNet7_5 bilang arkitektura (kung saan ang 7_5 ay alpha parameter ng orihinal na pagpapatupad ng Mobilenet, kinokontrol ang lapad ng network) at 224x224 bilang laki ng pag-input. Tingnan natin ang pinakamahalagang mga parameter sa config:

Ang uri ay frontend ng modelo - Ang Classifier, Detector o SegnetArchitecture ay backend ng modelo (tampok na taga-extractor)

- Buong Yolo - Tiny Yolo - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - SqueezeNet - VGG16 - ResNet50

Para sa karagdagang impormasyon sa mga anchor, mangyaring basahin dito

Ang mga label ay mga label na naroroon sa iyong dataset. MAHALAGA: Mangyaring, ilista ang lahat ng mga label na naroroon sa dataset.

tinutukoy ng object_scale kung magkano upang maparusahan ang maling paghula ng kumpiyansa ng mga tagahula ng bagay

tinutukoy ng no_object_scale kung magkano upang maparusahan ang maling paghula ng kumpiyansa ng mga hindi hinuhulaan na object

tinutukoy ng coord_scale kung magkano upang maparusahan ang maling posisyon at mga hula sa laki (x, y, w, h)

Tinutukoy ng class_scale kung magkano upang maparusahan ang maling hula ng klase

pagpapalaki - pagpapalaki ng imahe, pagbabago ng laki, paglilipat at paglabo ng imahe upang maiwasang mag-overfitting at magkaroon ng higit na pagkakaiba-iba sa dataset.

train_times, validation_times - kung gaano karaming beses upang ulitin ang dataset. Kapaki-pakinabang kung mayroon kang pagpapalaki

pinagana

first_trainable_layer - pinapayagan kang mag-freeze ng ilang mga layer kung gumagamit ka ng isang paunang sanay na tampok na network

Ngayon ay kailangan naming i-download ang dataset, na ibinahagi ko sa aking Google Drive (orihinal na dataset), na isang racoon detection dataset, na naglalaman ng 150 na mga anotadong larawan.

Tiyaking baguhin ang mga linya sa file ng pagsasaayos (train_image_folder, train_annot_folder) nang naaayon at pagkatapos ay simulan ang pagsasanay sa sumusunod na utos:

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

Binabasa ng train.py ang pagsasaayos mula sa.json file at sinasanay ang modelo na may script na axelerate / network / yolo / yolo_frontend.py. Ang yolo / backend / loss.py ay kung saan ipinatupad ang pasadyang pagpapaandar ng pagkawala at ang yolo / backend / network.py ay kung saan nilikha ang modelo (input, tampok na taga-extract at mga layer ng pagtuklas na pinagsama). ang axelerate / network / common_utils / fit.py ay ang script na nagpapatupad ng proseso ng pagsasanay at ang axelerate / network / common_utils / feature.py ay naglalaman ng mga extractor ng tampok. Kung balak mong gumamit ng may kasanayang modelo sa K210 chip at Micropython firmware, dahil sa mga limitasyon sa memorya maaari kang pumili sa pagitan ng MobileNet (2_5, 5_0 at 7_5) at TinyYolo, ngunit nahanap ko na ang MobileNet ay nagbibigay ng mas mahusay na kawastuhan ng pagtuklas.

Dahil ito ay isang halimbawa ng laruan at naglalaman lamang ng 150 mga imahe ng mga raccoon, ang proseso ng pagsasanay ay dapat na medyo mabilis, kahit na walang GPU, kahit na ang kawastuhan ay malayo sa bituin. Para sa proyektong nauugnay sa trabaho, sinanay ko ang isang detektor ng palatandaan ng trapiko at isang detektor ng bilang, ang parehong mga dataset ay may kasamang higit sa isang libong mga halimbawa ng pagsasanay.

Hakbang 4: I-convert ito sa.kmodel Format

I-convert Ito sa.kmodel Format
I-convert Ito sa.kmodel Format

Sa aXeleRate, ang modelo ng conversion ay awtomatikong ginanap - marahil ito ang pinakamalaking pagkakaiba mula sa lumang bersyon ng mga script ng pagsasanay! Dagdag nito makukuha mo ang mga modelo ng mga file at graph ng pagsasanay na na-save nang maayos sa folder ng proyekto. Gayundin nalaman ko na ang kawastuhan ng pagtatalaga minsan nabibigo upang magbigay ng pagtatantya sa modelo ng tunay na pagiging perpekto para sa pagtuklas ng bagay at ito ang dahilan kung bakit nagdagdag ako ng mAP bilang isang sukatan ng pagpapatunay para sa mga modelo ng pagtuklas ng bagay. Maaari kang magbasa nang higit pa tungkol sa mAP dito.

Kung ang mapa, nangangahulugang average na katumpakan (aming sukatan sa pagpapatunay) ay hindi nagpapabuti para sa 20 epochs, ang pagsasanay ay hihinto nang maaga. Sa tuwing nagpapabuti ang mAP, nai-save ang modelo sa folder ng proyekto. Matapos ang pagsasanay, tapos na ang awtomatikong pag-convert ng aXeleRate ng pinakamahusay na modelo sa tinukoy na mga format - maaari kang pumili, "tflite", "k210" o "edgetpu" hanggang ngayon.

Ngayon sa huling hakbang, talagang pinapatakbo ang aming modelo sa Sipeed hardware!

Hakbang 5: Patakbuhin ang Micropython Firmware

Patakbuhin sa Micropython Firmware
Patakbuhin sa Micropython Firmware

Posibleng magpatakbo ng hinuha sa aming modelo ng pagtuklas ng object na may C code, ngunit alang-alang sa kaginhawahan gagamitin namin ang Micropython firmware at MaixPy IDE sa halip.

I-download ang MaixPy IDE mula rito at micropython firmware mula rito. Maaari mong gamitin ang python script kflash.py upang sunugin ang firmware o mag-download ng hiwalay na tool ng flash ng GUI dito.

Kopyahin ang model.kmodel sa ugat ng isang SD card at ipasok ang SD card sa Sipeed Maix Bit (o iba pang K210 aparato). Bilang kahalili maaari mong sunugin ang.kmodel sa flash memory ng aparato. Ang aking halimbawa ng script na binabasa.kmodel mula sa memorya ng flash. Kung gumagamit ka ng SD card, mangyaring baguhin ang linyang ito

gawain = kpu.load (0x200000)

sa

gawain = kpu.load ("/ sd / model.kmodel")

Buksan ang MaixPy IDE at pindutin ang pindutang kumonekta. Buksan ang raccoon_detector.py script mula sa example_scripts / k210 / folder ng detector at pindutin ang Start button. Dapat ay nakikita mo ang isang live na stream mula sa camera na may mga nakagagapos na mga kahon sa paligid … mabuti, mga rakun. Maaari mong dagdagan ang kawastuhan ng modelo sa pamamagitan ng pagbibigay ng higit pang mga halimbawa ng pagsasanay, ngunit tandaan na ito ay isang maliit na modelo ng engkanto (1.9 M) at magkakaroon ito ng mga problema sa pagtuklas ng maliliit na bagay (dahil sa mababang resolusyon).

Ang isa sa mga katanungang natanggap ko sa mga komento sa aking nakaraang artikulo sa pagkilala sa imahe ay kung paano ipadala ang mga resulta ng pagtuklas sa paglipas ng UART / I2C sa iba pang aparato na konektado sa mga board ng pag-unlad ng Sipeed. Sa aking repository ng github makakakita ka ng isa pang halimbawa ng script, raccoon_detector_uart.py, na (nahulaan mo ito) ay nakakakita ng mga raccoon at nagpapadala ng mga coordinate ng mga hangganan na kahon sa UART. Tandaan, ang mga pin na ginamit para sa komunikasyon ng UART ay magkakaiba ng iba't ibang mga board, ito ay isang bagay na kailangan mong suriin ang iyong sarili sa dokumentasyon.

Hakbang 6: Buod

Ang Kendryte K210 ay isang solidong chip para sa computer vision, kakayahang umangkop, kahit na may limitadong memorya na magagamit. Sa ngayon, sa aking mga tutorial natakpan namin ang paggamit nito para sa pagkilala sa mga pasadyang bagay, pagtuklas ng mga pasadyang bagay at pagpapatakbo ng ilang mga gawain sa paningin ng computer na batay sa OpenMV. Alam ko para sa isang katotohanan na angkop din ito para sa pagkilala sa mukha at sa ilang pag-tink ay dapat posible na gawin ang pagtuklas ng pose at paghihiwalay ng imahe (maaari mong gamitin ang aXeleRate upang sanayin ang modelo ng paghihiwalay na semantiko, ngunit hindi ko pa naipatupad ang hinuha sa K210). Huwag mag-atubiling tingnan ang mga isyu sa aXeleRate repository at gumawa ng isang PR kung sa palagay mo may ilang mga pagpapabuti na maaari mong ibigay!

Narito ang ilang mga artikulong ginamit ko sa pagsusulat ng tutorial na ito, tingnan kung nais mong malaman ang higit pa tungkol sa pagtuklas ng bagay sa mga neural network:

Mga humahadlang na kahon ng detektor ng bagay: pag-unawa sa YOLO, Minsan Ka Lang Napatingin

Pag-unawa sa YOLO (higit pang matematika)

Magiliw na gabay sa kung paano gumagana ang YOLO Object Localization sa Keras (Bahagi 2)

Real-time na Pagtuklas ng Bagay na may YOLO, YOLOv2 at ngayon YOLOv3

Inaasahan kong magagamit mo ang kaalamang mayroon ka ngayon upang makabuo ng ilang mga kahanga-hangang proyekto na may paningin sa makina! Maaari kang bumili ng mga board ng Sipeed dito, kasama sila sa pinakamurang mga pagpipilian na magagamit para sa ML sa mga naka-embed na system.

Idagdag ako sa LinkedIn kung mayroon kang anumang mga katanungan at mag-subscribe sa aking YouTube channel upang ma-notify tungkol sa higit pang mga kagiliw-giliw na proyekto na kinasasangkutan ng machine learning at robotics.

Inirerekumendang: