Talaan ng mga Nilalaman:

Pagkilala sa Imahe Sa Mga K210 Board at Arduino IDE / Micropython: 6 na Hakbang (na may Mga Larawan)
Pagkilala sa Imahe Sa Mga K210 Board at Arduino IDE / Micropython: 6 na Hakbang (na may Mga Larawan)

Video: Pagkilala sa Imahe Sa Mga K210 Board at Arduino IDE / Micropython: 6 na Hakbang (na may Mga Larawan)

Video: Pagkilala sa Imahe Sa Mga K210 Board at Arduino IDE / Micropython: 6 na Hakbang (na may Mga Larawan)
Video: Magnus Haven - Imahe (Official Music Video) 2024, Hunyo
Anonim
Image
Image

Nagsulat na ako ng isang artikulo tungkol sa kung paano patakbuhin ang mga demo ng OpenMV sa Sipeed Maix Bit at gumawa din ng isang video ng demo ng pagtuklas ng object sa board na ito. Isa sa maraming mga katanungan na tinanong ng mga tao ay - paano ko makikilala ang isang bagay na hindi sinanay ang neural network? Sa madaling salita kung paano gumawa ng iyong sariling klasipikasyon ng imahe at patakbuhin ito gamit ang pagpapabilis ng hardware.

Ito ay isang naiintindihan na katanungan, dahil para sa iyong proyekto malamang na hindi mo kailangang makilala ang ilang mga pangkalahatang bagay, tulad ng mga pusa at aso at eroplano. Nais mong makilala ang isang bagay na tukoy, halimbawa, isang lahi ng aso para sa awtomatikong pintong alagang hayop na iyon, o isang species ng halaman para sa pag-uuri, o anumang iba pang mga lumalabas na application na maaari mong isipin!

Nakuha kita! Sa artikulong ito ay magtuturo ako sa iyo kung paano lumikha ng iyong sariling pasadyang pag-uri ng imahe na may pag-aaral ng paglipat sa Keras, i-convert ang sinanay na modelo sa.kmodel format at patakbuhin ito sa Sipeed board (maaaring maging anumang board, Bit / Dock o Go) gamit ang Micropython o Arduino IDE. At ang iyong imahinasyon lamang ang magiging limitasyon sa mga gawaing maaari mong gawin sa kaalamang ito.

UPDATE MAY 2020: Nakikita kung paano ang aking artikulo at video sa Pagkilala sa Imahe 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: CNN at Pag-aaral ng Paglipat: Ilang Teorya

CNN at Pag-aaral ng Paglipat: Ilang Teorya
CNN at Pag-aaral ng Paglipat: Ilang Teorya

Ang Convolutional Neural Networks o CNN ay isang klase ng malalim na neural network, na karaniwang inilalapat sa pag-aralan ang visual na koleksyon ng imahe. Mayroong maraming panitikan sa internet sa paksa at magbibigay ako ng ilang mga link sa huling bahagi ng artikulo. Sa maikli, maaari mong isipin ang CNN bilang isang serye ng mga filter, na inilapat sa imahe, bawat filter na naghahanap ng isang tukoy na tampok sa imahe - sa mas mababang mga convolutional layer ang mga tampok ay karaniwang mga linya at simpleng mga hugis at sa mas mataas na mga layer ang mga tampok ay maaaring maging mas tiyak, hal mga bahagi ng katawan, tiyak na mga texture, bahagi ng mga hayop o halaman, atbp. Ang pagkakaroon ng ilang mga hanay ng mga tampok ay maaaring magbigay sa amin ng isang bakas sa kung ano ang maaaring maging object sa imahe. Whiskers, dalawang mata at isang itim na ilong? Dapat ay pusa! Mga berdeng dahon, isang puno ng puno? Parang puno!

Inaasahan kong makuha mo ang ideya tungkol sa nagtatrabaho prinsipyo ng CNN ngayon. Karaniwan ang isang malalim na neural network ay nangangailangan ng libu-libong mga imahe at oras ng oras ng pagsasanay (nakasalalay sa hardware na ginagamit mo para sa pagsasanay) upang "bumuo" ng mga filter na kapaki-pakinabang para makilala ang mga uri ng mga bagay na nais mo. Ngunit may isang shortcut.

Ang isang modelo na sinanay upang makilala ang maraming iba't ibang mga karaniwang bagay (pusa, aso, kagamitan sa bahay, transportasyon, atbp) ay mayroon nang maraming mga kapaki-pakinabang na filter na "binuo", kaya hindi namin ito kailangan upang malaman ang pagkilala sa mga pangunahing hugis at bahagi ng mga bagay muli. Maaari lamang naming sanayin muli ang huling ilang mga layer ng network upang makilala ang mga tukoy na klase ng mga bagay, na mahalaga para sa amin. Tinatawag itong "transfer learning". Kailangan mo ng mas kaunting mas kaunting data ng pagsasanay at kalkulahin ang oras sa pag-aaral ng paglilipat, dahil pagsasanay ka lamang sa huling ilang mga layer ng network, na binubuo marahil ng ilang daang mga neuron.

Tunog kahanga-hanga, tama? Tingnan natin kung paano ipatupad ito.

Hakbang 2: Ihanda ang Iyong Kapaligiran

Ihanda ang Iyong Kapaligiran
Ihanda ang Iyong Kapaligiran

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:

Pag-uuri ng imahe ng Colab Notebook

Ang pagsasanay sa iyong modelo nang lokal at pag-export ito upang magamit sa pagpabilis ng hardware ay mas madali din ngayon.

Ang aking kapaligiran sa pagtatrabaho ay ang Ubuntu 16.04, 64bit. Maaari mong gamitin ang Virtual machine upang patakbuhin ang imaheng Ubuntu dahil hindi kami gagamit ng GPU para sa pagsasanay. Sa ilang mga pagbabago maaari mo ring patakbuhin ang script ng pagsasanay sa Windows, ngunit para sa pagbabago ng modelo kakailanganin mong gamitin ang Linux system. Kaya, lalong kanais-nais na kapaligiran para sa iyo upang maipatupad ang tutorial na ito ay ang Ubuntu 16.04, na tumatakbo nang natural o sa virtual machine.

Magsimula tayo sa pamamagitan ng pag-install ng Miniconda, na tagapamahala ng kapaligiran para sa Python. Lilikha kami ng nakahiwalay na kapaligiran, kaya hindi namin sinasadyang mabago ang anuman sa iyong system na kapaligiran ng Python.

I-download ang installer dito

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

conda lumikha -n ml python = 3.7

Paganahin natin ang bagong kapaligiran

conda buhayin ml

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.

Hakbang 3: I-install ang AXeleRate at Patakbuhin ang Mga Pagsubok

I-install ang AXeleRate at Patakbuhin ang Mga Pagsubok
I-install ang AXeleRate at Patakbuhin ang Mga Pagsubok

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

pip install git +

Upang mag-download ng mga halimbawang tumatakbo:

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 4: Sanayin muli ang Model, I-convert ang Keras Model sa.kmodel

Muling sanayin ang Model, I-convert ang Keras Model sa.kmodel
Muling sanayin ang Model, I-convert ang Keras Model sa.kmodel

Para sa halimbawa ng laruang ito ay pagsasanay namin ang modelo upang makilala sina Santa Claus at Arduino Uno. Malinaw na maaari kang pumili ng iba pang mga klase. Mag-download ng dataset mula rito. Lumikha ng isang kopya ng classifier.json file sa config folder, pagkatapos ay baguhin ito nang naaayon, katulad ng config file sa screenshot - tiyakin na ang landas sa mga folder ng pagsasanay at pagpapatunay ay tama!

Patakbuhin ang sumusunod na utos mula sa aXeleRate folder:

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

Magsisimula na ang pagsasanay. Kung ang katumpakan ng pagpapatunay (ang aming sukatan sa pagpapatunay) ay hindi nagpapabuti para sa 20 epochs, ang pagsasanay ay hihinto nang maaga. Sa tuwing nagpapabuti ang katumpakan ng pagpapatunay, ang modelo ay nai-save 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.

Hakbang 5: Patakbuhin ang Modelo sa Sipeed Maix Bit

Patakbuhin ang Model sa Sipeed Maix Bit
Patakbuhin ang Model sa Sipeed Maix Bit
Patakbuhin ang Model sa Sipeed Maix Bit
Patakbuhin ang Model sa Sipeed Maix Bit
Patakbuhin ang Model sa Sipeed Maix Bit
Patakbuhin ang Model sa Sipeed Maix Bit

Mayroong dalawang mga paraan upang patakbuhin ang modelo na mayroon ka ngayon sa Sipeed Maix hardware: micropython firmware at Arduino IDE. Ang micropython hardware ay mas madaling gamitin, ngunit sumasakop ito ng makabuluhang bahagi ng magagamit na memorya, kaya't may mas kaunting puwang naiwan para sa modelo. Ang Arduino IDE ay karaniwang C code, na kung saan ay mas mahusay at may mas maliit na memory footprint. Ang aking modelo ay 1.9Mb lamang, kaya gumagana ang parehong mga pagpipilian para dito. Maaari kang gumamit ng mga modelo na kasing laki ng 2.9 Mb sa Micropython, para sa anumang mas malaki kailangan mong isaalang-alang ang paggamit ng Arduino IDE.

Mag-download ng OpenMV IDE mula rito at kaunting micropython firmware mula rito.

Sunugin ang firmware gamit ang kflash_gui tool. Maaari mo ring piliing sunugin ang sinanay na modelo upang mag-flash din, tulad ng ipinakita sa screenshot. O kopyahin ito sa SD card (sa kasong iyon kopyahin.kmodel sa ugat ng isang SD card at ipasok ang SD card sa Sipeed Maix Bit)

Buksan ang OpenMV IDE at pindutin ang pindutan ng kumonekta. Buksan ang santa_uno.py script mula sa example_scripts folder at pindutin ang Start button. Dapat ay nakakakita ka ng isang live stream mula sa camera at kung magbubukas ka ng Serial Terminal ikaw ang nangungunang resulta ng pagkilala sa imahe sa marka ng kumpiyansa!

Para sa paggamit sa Arduino IDE, kailangan mo munang sundin ang pamamaraan para sa pagdaragdag ng mga board ng Sipeed sa Arduino IDE, na naidodokumento dito. Ang iyong bersyon ng Arduino IDE ay kailangang hindi bababa sa 1.8.12. Matapos mong idagdag ang mga board, buksan ang mobilenet_v1_transfer_learning.ino sketch at i-upload ito sa Sipeed Maix Bit. Palitan ang pangalan ng modelo sa SD card sa "modelo" (o gumawa ng isang kopya gamit ang pangalang ito). Maaari mong baguhin ang mga pangalan ng tatak sa names.cpp. Ipapakita nito ang live na stream ng camera sa screen ng Sipeed Maix kasama ang nangungunang resulta ng pagkilala sa imahe.

Hakbang 6: Mga Konklusyon

Narito ang ilang higit pang mga materyal na basahin sa paksa ng CNNs at ilipat ang pag-aaral:

Paglipat ng Pag-aaral gamit ang Mobilenet at Keras Isang mahusay na paliwanag sa Pag-aaral ng paglipat, ang tutorial na ito ay gumagamit ng isang nabagong bersyon ng code mula sa artikulong iyon.

Ang mga pusa at aso at convolutional neural network ay nagpapaliwanag ng mga pangunahing kaalaman sa likod ng mga CNN at nakikita ang ilan sa mga filter. Sa mga pusa!

Sanayin, I-convert, Patakbuhin ang MobileNet sa Sipeed MaixPy at MaixDuino! Isang tutorial mula sa koponan ng Sipeed kung paano sanayin ang Mobilenet 1000 na mga klase mula sa simula (walang pagkatuto ng paglipat). Maaari mong i-download ang kanilang pre-sanay na modelo at subukan ito!

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.

Inirerekumendang: