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.