v4.5.6

v4.5.6 on suuri koneoppimisjulkaisu. TensorFlow tf -C-moduuli korvattiin uudella, moottoririippumattomalla ml -paketilla, jonka taustalla toimii TensorFlow Lite Micro (TFLM), kuvan→tensorin muunnos siirtyi funktioon image.to_ndarray() ja kaksiytimiset kortit siirtyivät Open-AMP:iin. Mukana on useita rikkovia muutoksia — lue ne alta ennen kuin päivität ML-skriptisi.

Kohokohdat

  • Uusi ml -paketti — vanha tf -moduuli kirjoitettiin uudelleen moottoririippumattomaksi ml -paketiksi (ml.Model, ml.preprocessing, ml.utils, ml.apps); tf säilyy aliaksena.

  • TFLM-taustajärjestelmä — vanhentunut libtf korvattiin upstream-pohjaisella TensorFlow Lite Microlla: noin 20 % nopeampi päättely ja pienemmät kirjastot.

  • Open-AMP kaksiydin — GIGA ja Portenta H7 käyttävät nyt Open-AMP/RPMsg:tä M7/M4-ydinten väliseen viestintään (vanha CM4-mekanismi poistettiin).

  • Sisäänrakennettu Bluetooth — CYW43-Bluetooth-laiteohjelmisto otettiin käyttöön Nicla Visionissa, Portenta H7:ssä ja GIGA:ssa.

  • MicroPython 1.23.0, ulab 6.5.2 (4-ulotteisten ndarray-tukien kanssa).

  • Rikkova: ML-API muuttui huomattavasti ja Haar-kaskadit ovat oletuksena poissa käytöstä useimmilla korteilla — katso rikkovat muutokset.

Uudet ominaisuudet

  • ml -pakettiml.Model, jossa predict() (roi, callback, moni-syötteen lista), tensorikohtaiset shape/dtype/scale/zero-point-attribuutit, ml.preprocessing.Normalization, ml.utils (NMS) ja ml.apps (puhdas-Python MicroSpeech -avainsanatunnistin, jossa listen() ja ei-estävä timeout=-1 -suoratoisto, sekä draw_predictions()).

  • Sisäänrakennettu mallijärjestelmämodels/index.txt -tiedostossa luetellut mallit upotetaan ehdollisesti korttikohtaisesti (FOMO kaikilla ML-korteilla, äänimallit korteilla, joissa on mikrofoni).

  • image.to_ndarray(dtype, buffer=...) — muuntaa kuvan ulab-ndarrayksi (valinnaisesti paikallaan).

  • Image() raakatauluista — uudet shape=-, strides=- ja scale= -avainsana-argumentit rakentavat harmaasävy-/RGB565-kuvia raakapikselilistoista.

  • Antialiasoitu draw_circle().

  • ssl -moduuli jäädytetty laiteohjelmistoon korteilla GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 ja Pico.

  • Audioaudio.init() sai samples= -avainsanan (PDM-näytteitä kanavaa kohden); gain_db toimii nyt DFSDM-mikrofoneilla (esim. Nicla Vision).

  • Debug-protokolla — uusi GET_STATE -komento palauttaa run/text/JPEG-liput, kehyksen geometrian ja tekstin yhdessä paketissa, vähentäen isäntään päin tehtäviä edestakaisia kyselyitä.

  • Open-AMP vuart -esimerkki ydinten väliseen viestintään.

Muut muutokset ja parannukset

  • MicroPython päivitetty versioon 1.23.0; ulab versioon 6.5.2, joka tukee 4-ulotteisia ndarray-rakenteita.

  • Nopeampi päättely — ML-taustajärjestelmä säilyttää pysyvän tilan/muistin kutsujen välillä (~20 % nopeampi, tukee LSTM-tyyppisiä malleja).

  • get_similarity() toteutettiin uudelleen draw_image -taustajärjestelmän päälle (laajempi muoto-/operaatiotuki).

  • morph() ja mean() -suodatinperhe siirtyivät avainsana-argumenttien jäsentämiseen; mask= hyväksyy nyt muokattavissa olevan kuvan.

  • Muistirakenne uudistettu — DMA-alueet kohdistettu kahden potenssiin, uudelleenjärjesteltävät GC-lohkot, useita kekoja; vähemmän varhaista keon pirstoutumista vähämuistisilla korteilla; RT1060 saa lisää GC-kekoa.

  • WiFi (CYW43) alustetaan nyt pois pehmeässä uudelleenkäynnistyksessä; SPI-TV-näyttö tyhjentää välimuistista vain kehyspuskurin alueen sulavampien päivitysten saamiseksi.

Korjatut viat

Kamera ja sensorit:

  • Korjattu tahaton CPU-välimuistin mitätöinti kehyspuskuri-/sensoripolulla STM32:lla ja i.MX RT:llä, mikä saattoi vioittaa kuvadataa.

  • Korjattu MLX90640/MLX90641-lämpö-I2C-luvut i.MX RT -korteilla (suuret siirrot pilkotaan nyt osiin).

Koneoppiminen:

  • Korjattu ml.Model load_to_fb -käsittely, syötteen bytearray -koon määritys, ndarray ndim -tarkistukset ja Normalization -kuvamuodon/-muodon validointi.

Kuva / järjestelmä:

  • Lisätty puuttuva image.BLACK_BACKGROUND -piirtovihjevakio ja kuva-/tensoripuskurin pituuden tarkistus.

  • Korjattu FIR- ja audio-GC-juuriosoittimet, jotka saattoivat antaa kerääjän vapauttaa käytössä olevia puskureita.

  • Servo Shield -esimerkki käyttää nyt SoftI2C -luokkaa, joten se toimii OpenMV RT -korteilla.

Laitteisto- ja korttituki

  • Arduino GIGA — HM01B0 / HM0360 -sensorituki; Open-AMP kaksiydin.

  • Bluetooth — CYW43 BT -laiteohjelmisto korteilla Nicla Vision, Portenta H7 ja GIGA.

  • Portenta H7 — Open-AMP M7/M4 RPMsg.

  • OpenMV RT1060 — lisää GC-kekolohkoja (enemmän Python-muistia).

Rikkovat API-muutokset

Käyttäjälle näkyvät API-rikkomukset versioiden v4.5.5 ja v4.5.6 välillä. Laajuus: Python-C-moduulit hakemistossa modules/ ja Python-kirjastot hakemistossa scripts/libraries/.

Jokainen muutos on merkitty vaikutuksensa mukaan:

  • major — useimmat sitä käyttäneet skriptit tarvitsevat muokkauksia.

  • minor — kapea API; vaikuttaa vain sitä käyttäneisiin skripteihin.

  • behavior — sama API, eri tulokset; tarkista viritetyt skriptit uudelleen.

  • tooling — vaikuttaa kaksiydin-/korttimekanismeihin, ei Python-API:in.

Muutokset on ryhmitelty vaikutuksen mukaan tässä järjestyksessä. Jos haluat vain siirtää koodisi, hyppää lopussa olevaan siirtotarkistuslistaan. Jokainen commit-hash linkittää diffiinsä GitHubissa.

tf -moduuli korvattu ml -paketilla (major)

TensorFlow tf -C-moduuli kirjoitettiin uudelleen moottoririippumattomaksi ml -paketiksi (tf säilytetään taaksepäin yhteensopivana aliaksena, mutta uuden koodin tulisi käyttää ml:ää). Moduulitason funktiot tf.load, tf.load_builtin_model sekä detect()/segment()/luokittelumetodit poistettiin — rakenna ml.Model ja kutsu predict(). ml.Model(path) palauttaa nyt pelkän mallin (ei (labels, model) -tuplea); luokkanimet ovat model.labels -attribuutti. predict() palauttaa nyt ulab ndarray-rakenteita (ei float-tupleja), tukee moni-syötteisiä malleja (anna lista), ja NMS siirtyi moduuliin ml.utils; syötteen normalisointi siirtyi luokkaan ml.preprocessing.Normalization. Vanha ml.py on nyt ml.apps.

Commitit: c7228cbb4, 6c212409c, 3e37f46db, 9a186f4e2, 70b89f474, 3f8491cb0, 4506682c2, 8b38f3837

image.unpack() poistettu — käytä to_ndarray() (major)

Lyhytaikainen image.unpack() poistettiin; muunna kuva tensoriksi funktiolla image.to_ndarray(dtype, buffer=...) sen sijaan, ja sovella scale/mean/stdev-normalisointia luokalla ml.preprocessing.Normalization vanhan sisäänrakennetun kuvanskaalauspolun sijaan.

Commitit: 9848eed12, de0d46fa6

Image() raakataulun scale -argumentti (minor)

Kun Image rakennetaan raakapikselitaulusta, scale -argumentti ottaa nyt (min, max) -alueen (scale, add) -arvojen sijaan.

Commit: 7b79fb4c7

Haar-kaskadit oletuksena poissa käytöstä useimmilla korteilla (behavior)

Flash-muistitilan vapauttamiseksi Haar-kaskadipohjainen kasvojentunnistus (find_features() / image.HaarCascade()) on nyt oletuksena poissa käytöstä korteilla Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO ja OpenMV Pure Thermal. Näillä korteilla Haar-kaskadeja käyttävien skriptien on käännettävä laiteohjelmisto uudelleen ominaisuus käytössä.

Commit: 6ce27c910

Skriptin keskeytys ja tensorin skaalaus (behavior)

USB-debuggeri keskeyttää nyt käynnissä olevan skriptin MicroPythonin VM-abort-ominaisuudella pakotetun PendSV-hypyn sijaan (siistimpää, mutta keskeytyskohta on erilainen). SCALE_S128_127 -syöteskaalaus korjattiin kuvaamaan 0–255 alueelle −128–127 ilman virheellistä vahvistusta — vanhaan (virheelliseen) skaalaukseen nojaavat mallit tuottavat eri tuloksia.

Commitit: e758a0f95, a4d97c572

CM4-apuprosessori korvattu Open-AMP:lla (tooling)

Vanhentunut CM4-apuprosessorin laiteohjelmistomekanismi korteilla GIGA / Nicla Vision / Portenta H7 poistettiin ja korvattiin Open-AMP/RPMsg:llä. Kaksiydinkoodi on siirrettävä Open-AMP-malliin (vuart-esimerkki on tarjolla).

Commitit: 3cc57fea4, 93f2d4c41

Siirtotarkistuslista

Siisti siirto versioon v4.5.6 vaatii tyypillisesti seuraavan työn:

  1. Siirrä ML-koodi pakettiin ml: rakenna ml.Model(path), kutsu predict(), lue model.labels, odota ndarray -tulosteita ja siirrä normalisointi luokkaan ml.preprocessing.Normalization ja NMS moduuliin ml.utils (ml-paketin muutos).

  2. Korvaa image.unpack() funktiolla image.to_ndarray() (unpack-poisto).

  3. Päivitä mahdolliset Image() raakataulun scale -argumentit (min, max) -alueeksi (Image-skaalauksen muutos).

  4. Jos käytät Haar-kaskadeja vaikutuksen kohteena olevalla kortilla, käännä uudelleen ominaisuus käytössä (Haar-kaskadin muutos).

  5. Validoi uudelleen mallit, jotka riippuivat SCALE_S128_127 -arvosta (skaalausmuutos).

  6. Siirrä kaksiydinkoodi Open-AMP:iin (CM4-muutos).