Djupa artificiella neurala nätverk på inbyggda system - Något att satsa på?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Djupa artificiella neurala nätverk på inbyggda system - Något att satsa på?

Inlägg av DanielM »

Maskinellt lärande verkar vara framtiden. Att låda elektroniken tänka och ta eget beslut från regression och fördelningar samt träd för att kunna klassificera data.

ST har kommit ut med en produkt som heter CubeMX-AI där man kan importera enkla djupa artificiella neurala nätverk på inbyggda system, och det verkar inte heller finnas någon gräns på vilken hårdvara det är. CubeMX-AI tar en färdig modell och sedan optimerar den modellen och gör om allt till C-kod som är effektiv och snabb. Sedan så kan man implementera den på inbyggda system. Även TensorFlow har skapat en produkt som heter TensorFlow Lite som är just anpassad för inbyggda system.

Jag undrar hur relevant detta är för inbyggda system?
Nu ska vi ha i åtanke att det handlar om klassificering av mätdata och ett väldigt bra tränat djupt artificiellt neuralt nätverk har faktiskt en felmarginal på ca 5%. Att låta en sådan kontrollera en tillverkningsprocess innebär att 5% av produkterna kommer vara felgranskade. Det låter inte mycket om det är 100 produkter. Men ska man gå upp till en miljon produkter, så är 5% enormt mycket.

Jag har svårt att se appliceringen för djupa artificiella neurala nätverk hos inbyggda system, när det kommer till utrustning som ska granska och korrigera, dvs automatisering.
Vad tror ni den bästa appliceringen kan vara?

Notera att CubeMX-AI och TensorFlow Lite för inbyggda system, så passar inte detektion. Detektion är alldeles för processorkrävande.
Orsaken varför jag ställer denna fråga har med: https://www.svt.se/nyheter/ekonomi/ki-s ... r-nasta-ar

När det är lågkonjuktur, så är det högkonjuktur för teknologisk utveckling. Det brukar alltid se ut så.
ToPNoTCH
Inlägg: 4847
Blev medlem: 21 december 2009, 17:59:48

Re: Djupa artificiella neurala nätverk på inbyggda system - Något att satsa på?

Inlägg av ToPNoTCH »

Nu ska vi ha i åtanke att det handlar om klassificering av mätdata och ett väldigt bra tränat djupt artificiellt neuralt nätverk har faktiskt en felmarginal på ca 5%.
Detta låter som en generalisering.
Vad har du fått den siffran ifrån ?

Det låter som att du använder ett "medelvärde" som ett "faktiskt värde".
guckrum
Inlägg: 1671
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Djupa artificiella neurala nätverk på inbyggda system - Något att satsa på?

Inlägg av guckrum »

Ett tränat neuralt nät har i allmänhet inte en felmarginal (?)
på 5%. Prestandan beror på vilken data man tränar med,
hur nätet ser ut, hur man tränar, vilken data man testar
med och vilken metrik man använder. Man kan få precis
vilka siffror som helst.

Om det är relevant eller inte för inbyggda system är nog
en sådan fråga som inte har ett entydigt svar. Men det
är ju trevligt att det finns enkla verktyg om man nu vill
testa något. Sedan behöver kanske inte nätet vara djupt,
var nu den gränsen går, för att det skall vara relevant.
Kanske snarare tvärtom. Mindre nät gör sig nog bättre
i inbyggda system, men det beror ju också på hur snabb
inferensen behöver vara.

Det har varit en enorm utveckling runt neuralnät de
senaste tio åren. Om det kommer att gå ännu snabbare
nu i lågkonjunktur är nog både svårt att mäta och sia
om. Klart är att det finns massor av problem som
behöver lösas för att tekniken skall fungera klanderfritt
i större sammanhang.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Djupa artificiella neurala nätverk på inbyggda system - Något att satsa på?

Inlägg av DanielM »

I många detektionsexempel som jag har sett t.ex YOLO, så brukar procent vara numrerat in på varje detektionsruta. Det brukar vara mellan 70-95%.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Djupa artificiella neurala nätverk på inbyggda system - Något att satsa på?

Inlägg av DanielM »

guckrum skrev: 21 december 2022, 18:01:49 Ett tränat neuralt nät har i allmänhet inte en felmarginal (?)
på 5%. Prestandan beror på vilken data man tränar med,
hur nätet ser ut, hur man tränar, vilken data man testar
med och vilken metrik man använder. Man kan få precis
vilka siffror som helst.

Om det är relevant eller inte för inbyggda system är nog
en sådan fråga som inte har ett entydigt svar. Men det
är ju trevligt att det finns enkla verktyg om man nu vill
testa något. Sedan behöver kanske inte nätet vara djupt,
var nu den gränsen går, för att det skall vara relevant.
Kanske snarare tvärtom. Mindre nät gör sig nog bättre
i inbyggda system, men det beror ju också på hur snabb
inferensen behöver vara.

Det har varit en enorm utveckling runt neuralnät de
senaste tio åren. Om det kommer att gå ännu snabbare
nu i lågkonjunktur är nog både svårt att mäta och sia
om. Klart är att det finns massor av problem som
behöver lösas för att tekniken skall fungera klanderfritt
i större sammanhang.
Du verkar vara insatt i informationen kring dessa nätverk.
Hur ställer du dig till vanlig klassisk bildanalys t.ex. PCA eller LDA för att göra klassificeringar?

Jag har använt mig av PCA + LDA samt k-nearest för att avgöra bildanalyser. Det har fungerat väldigt bra. Men detta bygger inte på regression som neurala nätverk gör. LDA och PCA bygger på på dimensionsreducering.
guckrum
Inlägg: 1671
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Djupa artificiella neurala nätverk på inbyggda system - Något att satsa på?

Inlägg av guckrum »

För YOLO är det ju nätets egen uppfattning om hur bra det hittar och klassar ett objekt, vilket det naturligtvis inte har en aning om.

YOLO är skrivet i ren C från början, ingen anledning att gå över ån efter vatten, så att säga:-)
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Djupa artificiella neurala nätverk på inbyggda system - Något att satsa på?

Inlägg av DanielM »

YOLO är bara CNN-nätverk med pooling.
Däremot finns det olika versioner av YOLO. V2, V3, V4, V5, V6, V7 tror jag dom är på nu.

Problemet med all dess teknik är att man behöver en riktigt bra dator för att utföra detta.
guckrum
Inlägg: 1671
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Djupa artificiella neurala nätverk på inbyggda system - Något att satsa på?

Inlägg av guckrum »

Jag tycker inte att klassisk bildanalys är förlegat. Man kan
göra riktigt kraftfulla grejer med det, och på köpet slipper
man en massa osäkerheter och problem som neuralnät för
med sig. Jag såg för ett tag sedan en kille som gjorde
någon medicinsk bildanalys med hjälp av vanliga hessianer,
och det spöade motsvarande neuralnät ordentligt. Det är
aldrig fel med domänkunskap och att veta vad man håller
på med.

Sedan blir jag lite osäker på nomenklaturen. PCA funkar bra
för linjär dimesionsreduktion, och k-means är en
klustringsalgoritm. Man kan absolut kombinera dessa för att
klassa bilder, men jag har lite svårt att se hur den spatiala
informationen utnyttjas i ett sådant fall. Men det finns säkert
något bra knep.

Neuralnät kan man ha till en massa olika saker. Regression,
som väl betyder att man genererar en mer eller mindre
kontinuerlig output i avsikt att estimera en funktion, är ett
exempel. YOLO är å andra sidan ett exempel på en
klassningsalgoritm på grund av hur den tränas och det
sista softmax-lagret. Klassning, som i att den väljer ett
värde ur en diskret mängd. Right?
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Djupa artificiella neurala nätverk på inbyggda system - Något att satsa på?

Inlägg av DanielM »

guckrum skrev: 21 december 2022, 21:57:16 Jag tycker inte att klassisk bildanalys är förlegat. Man kan
göra riktigt kraftfulla grejer med det, och på köpet slipper
man en massa osäkerheter och problem som neuralnät för
med sig. Jag såg för ett tag sedan en kille som gjorde
någon medicinsk bildanalys med hjälp av vanliga hessianer,
och det spöade motsvarande neuralnät ordentligt. Det är
aldrig fel med domänkunskap och att veta vad man håller
på med.
Exakt. Neurala nätverk har mycket osäkerheter då man ej kan garantera stabilitet hos dessa.
Sedan blir jag lite osäker på nomenklaturen. PCA funkar bra
för linjär dimesionsreduktion, och k-means är en
klustringsalgoritm. Man kan absolut kombinera dessa för att
klassa bilder, men jag har lite svårt att se hur den spatiala
informationen utnyttjas i ett sådant fall. Men det finns säkert
något bra knep.
Eigenfaces så kan dessa användas. Men Eigenfaces är något 90-tals.
Utvecklingen av bildigenkänning på 90-talet heter LDA - Linear Discriminant Analysis och ska vara en förbättring av Eigenfaces.
Jag har själv kört med LDA och det har visat sig riktigt bra. Hög noggrannhet. Nackdelen är att man kan inte ha så många klasser och alla klasser måste se nästan lika, dvs måste vara typ av samma objekt t.ex. ansikten.

Jag har testat MNIST på LDA och det har inte fungerat bra.
Neuralnät kan man ha till en massa olika saker. Regression,
som väl betyder att man genererar en mer eller mindre
kontinuerlig output i avsikt att estimera en funktion, är ett
exempel. YOLO är å andra sidan ett exempel på en
klassningsalgoritm på grund av hur den tränas och det
sista softmax-lagret. Klassning, som i att den väljer ett
värde ur en diskret mängd. Right?
Jag tror att YOLO är att man analyserar en bild flera gånger, fast på olika ställen i bilden. Sedan räknar man på sannolikheten vilken ruta som fick mest antal poäng per klass.
guckrum
Inlägg: 1671
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Djupa artificiella neurala nätverk på inbyggda system - Något att satsa på?

Inlägg av guckrum »

Jag har själv kört med LDA och det har visat sig riktigt bra.
Hög noggrannhet. Nackdelen är att man kan inte ha så många
klasser och alla klasser måste se nästan lika, dvs måste vara
typ av samma objekt t.ex. ansikten.
Jo, jag minns eigenfaces, har för mig att det var en del om det
i Linköping på den tiden. Och det är det jag menar, man måste
göra antaganden om hur bilden ser ut. Det generaliserar inte.
Inte alls som ett faltande neuralnät som applicerar samma
kärnor överallt i bilden så att det kan hitta en viss struktur
oavsett var den befinner sig i bilden.
Jag tror att YOLO är att man analyserar en bild flera gånger,
fast på olika ställen i bilden. Sedan räknar man på sannolikheten
vilken ruta som fick mest antal poäng per klass.
Ja, man faltar och sedan utförs en mass IoU-operationer
(Intersection over Unions) på alla boxar för att hitta de som är bäst.
Metriken för det kan man kalla sannolikhet, men det är egentligen
felaktigt, eftersom nätet inte vet någonting om sannolikheter. Men
ett större värde betyder i alla fall att nätet tycker att detektionen är
bättre. Sen kan det vara helt fel i alla fall. Om man visar den en
bild på ett hästhuvud framifrån kan öronen klassas som fåglar,
till exempel. Underhållande, men också lite tråkigt.

Problemen med djupa nät när det kommer till "inbyggda system"
är dels att det tar väldigt långt tid att exekvera, och dels att det
krävs mycket minne, både för vikter och aktiveringar. Men det
motsäger inte att det inte skulle vara en bra idé att köra lite
mindre nät (kanske för andra applikationer då).
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Djupa artificiella neurala nätverk på inbyggda system - Något att satsa på?

Inlägg av DanielM »

Vad tror du om detta för inbyggda system?
Om man tar en bild som har dimensionen m*n

Bild 1
Bild1.png
Bild 2
Bild2.png
Om jag analyserar dessa bilder med SVD och väljer nx = 2 kolumner från U och V samt 2 stycken singulära värden. Sedan återskapar jag bilderna.
Bild 1 Återskapad.png
Bild 2 Återskapad.png

Kod: Markera allt


function retval = analysera_bilder_svd()
  % Stäng alla figurer
  close all

  % Analysera bilder SVD - 8 bit
  bild1 = uint8(rgb2gray(imread('Bild1.png')));
  bild2 = uint8(rgb2gray(imread('Bild2.png')));

  % Plotta bilderna
  imshow(bild1)
  title('Bild 1');
  figure(2)
  imshow(bild2)
  title('Bild 2')

  % Gör om detta med SVD
  [U1, S1, V1] = svd(bild1, 'econ');
  [U2, S2, V2] = svd(bild2, 'econ');

  % Kolla singulera värden
  figure(3)
  stem(1:length(S1), diag(S1));
  title('Singulära värden för bild 1');
  figure(4)
  stem(1:length(S2), diag(S2));
  title('Singulära värden för bild 2');

  % Reducering
  nx = inputdlg('Välj en reducering');
  nx = str2num(cell2mat(nx));

  % Återskapa bilden
  bild1 = uint8(U1(:, 1:nx)*S1(1:nx, 1:nx)*V1(:, 1:nx)');
  figure(5)
  imshow(bild1)
  title('Återskapad bild1')
  figure(6)
  bild2 = uint8(U2(:, 1:nx)*S2(1:nx, 1:nx)*V2(:, 1:nx)');
  imshow(bild2)
  title('Återskapad bild2')
end
Grejen är att om jag hade valt nx = 10 så hade bild 2 sett ut så här.
Bild 2 Återskapad.png
Hemligheten är att jag delar upp bilderna i egenvektorer och singulära egenvärden. Sedan väljer jag antal egenvektorer och singulära värden för att återskapa bilderna.
Okej...vad ska jag ha detta till kan du säkert fråga dig.

Jo, tänk att du får en bild X. Du delar upp bilden och sedan väljer du bara två kolumner från U, eller V.

Kod: Markera allt

% Plotta två kolumner från U1 och U2
figure(7)
plot(U1(:, 1), U1(:, 2))
title('Egenvektorer för bild 1')
figure(8)
plot(U2(:, 1), U2(:, 2))
title('Egenvektorer för bild 2')
Egenvektorer.png
Tänk dig att använda algoritmen In-polygon för att avgöra om dessa punkter befinner sig in i ett visst mönster på en 2D-plot.
Då skulle man kunna klassificera dessa bilder?
https://en.wikipedia.org/wiki/Point_in_polygon

Om bilden är kvadratisk, så kan man använda SVD Jacobi One Sided algoritmen för den kräver bara en rektangulär matris A för \([U, S, V] = SVD(A)\)

Tänk dig att analysera med 3 axlar?

Kod: Markera allt

% Plotta tre kolumner från U1 och U2
figure(9)
scatter3(U1(:, 1), U1(:, 2), U1(:, 3))
title('Egenvektorer för bild 1')
figure(10)
scatter3(U2(:, 1), U2(:, 2), U2(:, 3))
title('Egenvektorer för bild 2')
Egenvektorer.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Skriv svar