Мы в Telegram
Добавить новость
103news.com
Работа
Декабрь
2023

Как обучить модель на видео данных?

0
Всем привет.
Обучал модель на изображениях следующим образом:

class ASDataset(Dataset):
    def __init__(self, client_file: str, imposter_file: str, transforms=None):
        with open(client_file, "r") as f:
            client_files = f.read().splitlines()
        with open(imposter_file, "r") as f:
            imposter_files = f.read().splitlines()
        self.labels = torch.cat((torch.ones(len(client_files)), torch.zeros(len(imposter_files))))
        self.imgs = client_files + imposter_files
        self.transforms = transforms

    def __len__(self):
        return len(self.imgs)

    def __getitem__(self, idx):
        img_name = self.imgs[idx]
        img = Image.open(img_name)
        label = self.labels[idx]
        if self.transforms:
            img = self.transforms(img)
        return img, label

train_dataset = ASDataset(client_file="/kaggle/input/nuaaaa/raw/client_train_raw.txt", imposter_file="/kaggle/input/nuaaaa/raw/imposter_train_raw.txt", transforms=preprocess)
val_dataset = ASDataset(client_file="/kaggle/input/nuaaaa/raw/client_test_raw.txt", imposter_file="/kaggle/input/nuaaaa/raw/imposter_test_raw.txt", transforms=preprocess)
# Create data loaders
train_loader = DataLoader(train_dataset, batch_size=8, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=8, shuffle=False)

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = ResNet18WithAttention().to(device)
criterion = nn.BCEWithLogitsLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.0001)
num_epochs = 20

def train(epoch):
    running_loss = 0.0 
    running_acc = 0.0
    model.train()
    for i, (inputs, labels) in (pbar := tqdm(enumerate(train_loader), total=len(train_loader))):
        pbar.set_postfix(**msg)
        optimizer.zero_grad()
        outputs = model(inputs.to(device))
        loss = criterion(
            outputs, labels.unsqueeze(-1).to(device)
        )
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
        running_acc += get_accuracy(outputs, labels.to(device))
        if not i % 10 and i > 0:
            msg.update({"train_epoch": epoch + 1, "loss": running_loss / i, "acc": (running_acc / i).item()})
            pbar.set_postfix(**msg)
def validate():
    val_loss = 0.0  
    val_acc = 0.0
    model.eval()
    for i, (inputs, labels) in enumerate(val_loader):
        with torch.no_grad():
            outputs = model(inputs.to(device))
        loss = criterion(
            outputs, labels.unsqueeze(-1).to(device)  # Считаем loss
        )
        val_loss += loss.item()
        val_acc += get_accuracy(outputs, labels.to(device))
    val_loss /= len(val_loader)
    val_acc /= len(val_loader)
    scheduler.step()
    msg.update({"val_loss": val_loss, "val_acc": val_acc.item()})
    print(f"val_loss: {val_loss}, val_acc: {val_acc.item()}")
    return val_acc.item()
    
msg = OrderedDict({"train_epoch": None, "loss": None, "acc": None, \
                "val_loss": None, "val_acc": None})
Теперь пробую обучить на видео данных, и как я понял, нужно изменить class ASDataset, но не совсем понимаю, как это сделать. Пробовал вот так, и еще несколько похожих вариантов:
class VideoDataset(Dataset):
    def __init__(self, video_file: str, label: int, transforms=None):
        self.video = cv2.VideoCapture(video_file)
        self.label = label
        self.transforms = transforms

    def __len__(self):
        return int(self.video.get(cv2.CAP_PROP_FRAME_COUNT))

    def __getitem__(self, idx):
        self.video.set(cv2.CAP_PROP_POS_FRAMES, idx)
        success, frame = self.video.read()
        if not success:
            raise ValueError("Failed to read frame")
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)  # Convert to RGB
        if self.transforms:
            frame = self.transforms(frame)
        return frame, self.label
Скажите, пожалуйста, что нужно изменить, чтобы видео данные считывались правильно? Сами данные находятся в папке, в текстовом файле прописаны пути к файлам. Например, для файла imposter_train_raw.txt:
/kaggle/input/dfdcdfdc/DFDCDFDC/dbnygxtwek.mp4
/kaggle/input/dfdcdfdc/DFDCDFDC/dbtbbhakdv.mp4
/kaggle/input/dfdcdfdc/DFDCDFDC/ddepeddixj.mp4
/kaggle/input/dfdcdfdc/DFDCDFDC/dhcndnuwta.mp4
/kaggle/input/dfdcdfdc/DFDCDFDC/dhxctgyoqj.mp4
/kaggle/input/dfdcdfdc/DFDCDFDC/djxdyjopjd.mp4
/kaggle/input/dfdcdfdc/DFDCDFDC/dkuayagnmc.mp4
Все исходники, датасет и прочее скину исполнителю. Оплата по факту исполнения работы (скриншот, скринкаст работы).
Есть ноутбук, который запускал на данных с картинками -
https://www.kaggle.com/code/aleksandrpikul222/note...




Губернаторы России
Москва

Неделя мэра: завод «Москвич», гранты для школ искусств и система городских вокзалов





Москва

Страдания юного Аюша Булчун


Губернаторы России

103news.net – это самые свежие новости из регионов и со всего мира в прямом эфире 24 часа в сутки 7 дней в неделю на всех языках мира без цензуры и предвзятости редактора. Не новости делают нас, а мы – делаем новости. Наши новости опубликованы живыми людьми в формате онлайн. Вы всегда можете добавить свои новости сиюминутно – здесь и прочитать их тут же и – сейчас в России, в Украине и в мире по темам в режиме 24/7 ежесекундно. А теперь ещё - регионы, Крым, Москва и Россия.

Moscow.media
Москва

Неделя мэра: завод «Москвич», гранты для школ искусств и система городских вокзалов



103news.comмеждународная интерактивная информационная сеть (ежеминутные новости с ежедневным интелектуальным архивом). Только у нас — все главные новости дня без политической цензуры. "103 Новости" — абсолютно все точки зрения, трезвая аналитика, цивилизованные споры и обсуждения без взаимных обвинений и оскорблений. Помните, что не у всех точка зрения совпадает с Вашей. Уважайте мнение других, даже если Вы отстаиваете свой взгляд и свою позицию. 103news.com — облегчённая версия старейшего обозревателя новостей 123ru.net.

Мы не навязываем Вам своё видение, мы даём Вам объективный срез событий дня без цензуры и без купюр. Новости, какие они есть — онлайн (с поминутным архивом по всем городам и регионам России, Украины, Белоруссии и Абхазии).

103news.com — живые новости в прямом эфире!

В любую минуту Вы можете добавить свою новость мгновенно — здесь.

Музыкальные новости

Влад Топалов

«Я много раз в жизни ходил по краю»: Влад Топалов откровенно высказался в шоу «Человек-невидимка» на ТВ-3




Спорт в России и мире

Алексей Смирнов – актер, которого, надеюсь, еще не забыли

В ЦСКА рассказали о тяжести травмы голкипера Владислава Торопа

Стартовал финальный этап всероссийского футбольного турнира «Будущее зависит от тебя»

Инсайты, стратегии и нетворкинг для профессионалов: 21 июня пройдет ежегодный форум «Спорт и Бизнес»


ATP

Стало известно, при каком условии Медведев может опуститься на 5-е место рейтинга ATP



Новости Крыма на Sevpoisk.ru


Москва

Собянин: Московскому метрополитену исполнилось 89 лет



Частные объявления в Вашем городе, в Вашем регионе и в России