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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.