Skocz do zawartości

STM32 X-Cube-AI kategoryzacja różnych ruchów


radek04

Pomocna odpowiedź

Cześć.

Robię projekt rozpoznawania jednego z kilku ruchów za pomocą akcelerometru, żyroskopu, STM32F467ZG i pakietu X-CUBE-AI.

Opieram się na artykule @Elvis Sztuczna inteligencja na STM32, czyli przykład użycia X-CUBE-AI, ale mam kłopot z jego rozszerzeniem. Próbowałem różnych sposobów, ale nie mogę zrobić sieci, która zamiast wartości binarnej (ruch - brak ruchu) zwróci mi prawdopodobieństwa każdego z 6 wyjść (na razie chciałbym tyle różnych ruchów rozpoznawać).

Mam książkę, którą poleca Elvis ("Deep Learning" autorstwa Chollet'a), ale brak doświadczenia z SSN, czy nawet językiem Python mocno mnie ogranicza.

Chciałbym też, żeby zamiast jednego wejścia będącego prostą funkcją odczytów z czujników (suma kwadratów odczytów z akcelerometru),

f = open('data1.csv','r')

values = []
results = []

for line in f:
    fields = line.strip().split(',')
    if len(fields) == 4:
        x = float(fields[0])
        y = float(fields[1])
        z = float(fields[2])
        values.append([math.sqrt(x**2 + y**2 + z**2)])
        results.append(float(fields[3]))
f.close()

układ bezpośrednio korzystał ze wszystkich 6 (3ACC i 3 GYRO).

Tutaj fragment kodu Elvisa z STM'a:

void MX_X_CUBE_AI_Process(void)
{
    /* USER CODE BEGIN 1 */
	  float nn_input[AI_FORBOT_AI_IN_1_SIZE];
	  float nn_output[AI_FORBOT_AI_OUT_1_SIZE];

	  aiRun(nn_input, nn_output);

    /* USER CODE END 1 */
}
	  static uint32_t next_ms = 1000;

	  static float nn_input[AI_FORBOT_AI_IN_1_SIZE];
	  float nn_output[AI_FORBOT_AI_OUT_1_SIZE];

	  while (HAL_GetTick() < next_ms) {}
	  next_ms += READ_DELAY_MS;

	  lsm6_value_t acc;
	  acc = lsm6_read_acc();
	  for (int i = 0; i < AI_FORBOT_AI_IN_1_SIZE - 1; i++)
		  nn_input[i] = nn_input[i + 1];
	  nn_input[AI_FORBOT_AI_IN_1_SIZE - 1] = sqrt(acc.x * acc.x + acc.y * acc.y + acc.z * acc.z);

	  aiRun(nn_input, nn_output);

	  if (nn_output[0] >= 0.5f)
		  HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
	  else
		  HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);

Pomożecie mi zmienić kod Python'a i STM'a, bym mógł go użyć do swoich potrzeb? Naprawdę długo szukałem sposobu i próbowałem wielu rozwiązań, ale albo nie działa mi sieć neuronowa, albo nie kompiluje się projekt w SW4STM32.

Edytowano przez radek04
Link do komentarza
Share on other sites

(edytowany)

Chyba wyjście z większą liczbą kategorii mi działa, ale wejścia nie mogę ogarnąć.

Próbuję z "append":

values.append([float(fields[0])], [float(fields[1])], [float(fields[2])])
values.append(float(fields[0]), float(fields[1]), float(fields[2]))
values.append([float(fields[0]), float(fields[1]), float(fields[2])])

ale zawsze coś jest nie tak.

Problemem jest chyba dopasowanie wielkości tablic.

Edytowano przez radek04
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.