Я пытаюсь создать модель распознавания действий на языке жестов, у меня есть кадры, которые я преобразовал в ключевые точки ориентиров с помощью Mediapipe, и они находятся в формате .npy, обучение достигает 90 %, но моя проверка достигает 10 %, 20 %, 50%, 20%, 25% и т. д.
Мой набор данных состоит из 502 классов и более 2 миллионов изображений.
Ниже моя модель
from tensorflow.keras.utils import Sequence
import tensorflow as tf
import numpy as np
import os
tf.config.run_functions_eagerly(True)
class KeypointsDataGenerator(Sequence):
def __init__(self, dataset_dir, batch_size=32, shuffle=True, num_frames=30, num_keypoints=1662):
self.dataset_dir = dataset_dir
self.batch_size = batch_size
self.shuffle = shuffle
self.num_frames = num_frames
self.num_keypoints = num_keypoints
self.samples, self.labels = self._load_dataset()
self.min_val, self.max_val = self._find_min_max_values()
self.on_epoch_end()
def _load_dataset(self):
samples = []
labels = {}
label_idx = 0
for label_dir in sorted(os.listdir(self.dataset_dir)):
print(f'Processing label: {label_dir}')
label_path = os.path.join(self.dataset_dir, label_dir)
for sample_file in sorted(os.listdir(label_path)):
sample_path = os.path.join(label_path, sample_file)
if os.path.isfile(sample_path) and sample_path.endswith('.npy'):
samples.append(sample_path)
labels[sample_path] = label_idx
label_idx += 1
return samples, labels
def __len__(self):
return int(np.floor(len(self.samples) / self.batch_size))
def __getitem__(self, index):
batch_samples = self.samples[index * self.batch_size:(index + 1) * self.batch_size]
X, y = self._generate_data(batch_samples)
return X, y
def _find_min_max_values(self):
min_vals = []
max_vals = []
for sample_path in self.samples:
print(f'Processing sample: {sample_path}')
keypoints = np.load(sample_path)
min_vals.append(np.min(keypoints))
max_vals.append(np.max(keypoints))
return np.min(min_vals), np.max(max_vals)
def _generate_data(self, batch_samples):
X = np.zeros((self.batch_size, self.num_frames, self.num_keypoints))
y = np.zeros((self.batch_size), dtype=int)
for i, sample_path in enumerate(batch_samples):
keypoints = np.load(sample_path)
keypoints = keypoints.reshape(self.num_frames, self.num_keypoints)
keypoints = (keypoints - self.min_val) / (self.max_val - self.min_val) # Apply Min-Max scaling
X[i,] = keypoints
y[i] = self.labels[sample_path]
return X, tf.keras.utils.to_categorical(y, num_classes=502)
def on_epoch_end(self):
if self.shuffle:
np.random.shuffle(self.samples)
Я попробовал снизить процент отсева, но все тот же, сделал модель все менее и более сложной, я попробовал другую скорость обучения, но все равно ничего не помогло.
Я пытаюсь создать модель распознавания действий на языке жестов, у меня есть кадры, которые я преобразовал в ключевые точки ориентиров с помощью Mediapipe, и они находятся в формате .npy, обучение достигает 90 %, но моя проверка достигает 10 %, 20 %, 50%, 20%, 25% и т. д. Мой набор данных состоит из 502 классов и более 2 миллионов изображений. Ниже моя модель [code]from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense, Dropout, BatchNormalization from tensorflow.keras.regularizers import l2 from tensorflow.keras.optimizers import Adam
def enhanced_cnn_lstm_model(num_frames=30, num_keypoints=1662, num_classes=502): model = Sequential()
for label_dir in tqdm(os.listdir(dataset_directory)): gesture_path = os.path.join(dataset_directory, label_dir) features_label_dir = os.path.join(features_root_directory, label_dir) os.makedirs(features_label_dir, exist_ok=True) for sample_dir in os.listdir(gesture_path): sample_path = os.path.join(gesture_path, sample_dir) features_list = []
for frame in sorted(os.listdir(sample_path)): image_path = os.path.join(sample_path, frame) image = cv2.imread(image_path) if image is not None: image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) features = extract_features(image_rgb, mp_hands, mp_pose, mp_face_mesh) if features.size > 0: features_list.append(features)
mp_hands.close() mp_pose.close() mp_face_mesh.close() [/code] Я попробовал генератор данных с помощью normailztion, но точность обучения застряла на уровне 0,2% [code]from tensorflow.keras.utils import Sequence import tensorflow as tf import numpy as np import os
def _generate_data(self, batch_samples): X = np.zeros((self.batch_size, self.num_frames, self.num_keypoints)) y = np.zeros((self.batch_size), dtype=int) for i, sample_path in enumerate(batch_samples): keypoints = np.load(sample_path) keypoints = keypoints.reshape(self.num_frames, self.num_keypoints) keypoints = (keypoints - self.min_val) / (self.max_val - self.min_val) # Apply Min-Max scaling X[i,] = keypoints y[i] = self.labels[sample_path] return X, tf.keras.utils.to_categorical(y, num_classes=502)
def on_epoch_end(self): if self.shuffle: np.random.shuffle(self.samples) [/code] Я попробовал снизить процент отсева, но все тот же, сделал модель все менее и более сложной, я попробовал другую скорость обучения, но все равно ничего не помогло.
Я создаваю модель Seedencetransformer ('All-Minilm-L6-V2'), используя словарь (JSON) с названием Category_Descriptions в качестве набора данных.
Ниже приведен Структура данных Category_descriptions :
{
CategoryA : {
CategorySearch : Description...
Я создаваю модель Seedencetransformer ('All-Minilm-L6-V2'), используя словарь (JSON) с названием Category_Descriptions в качестве набора данных.
Ниже приведен Структура данных Category_descriptions :
{
CategoryA : {
CategorySearch : Description...
Я пытаюсь выполнить семантическую сегментацию изображений на спутниковых снимках высокого разрешения (25 см) для классификации земного покрова. Я уже пытался использовать предварительно обученную модель U-Net с магистралью ResNet34, но столкнулся с...
Мне нужно сгладить 16-битные значения (показания АЦП микроконтроллера STM32). Используемая функция должна быть быстрой и выполнять только целочисленные вычисления (она запускается в обработчике прерываний). Хотя экспоненциальное скользящее среднее...
Мне нужно сгладить 16-битные значения (показания АЦП микроконтроллера STM32). Используемая функция должна быть быстрой и выполнять только целочисленные вычисления (она запускается в обработчике прерываний). Хотя экспоненциальное скользящее среднее...