Каким образом можно обучить ИИ распознавать лицо?

Дело в том, что мне нужен вариант без готовых библиотек по типу TensorFlow, Keras и подобные, только вспомогательные по типу numpy, pandas. Я ищу много информации по поводу обучения ИИ, но практически в каждом вариант есть уже готовая модель. Я не прошу вас написать мне код, я прошу, чтобы вы подсказали мне методы или алгоритмы по каким я бы смог обучить ИИ этому, и по возможности статьи для этого. Благодарю.

UPD:Кратко о моем проекте - мне нужен этот ИИ для проекта о распозновании эмоции на лице человека. По этому мне сначало нужен ИИ для распознавания лица, чтобы второй ИИ распознавания эмоций работал только с фотографией лица


Ответы (2 шт):

Автор решения: passant

Нельзя написать систему распознавания лица "без готовых библиотек" не разобравшись предварительно

  • как вообще обучаются нейросети и более глубоко - а как работают методы машинного обучения. Ну, на пару семестров тут хвати чего изучать. Впрочем, можно взять любую книгу по машинному обучению - и подробно штудировать.
  • как на изображении выделяется некий объект (не лицо, а именно объект). А для этого освоить кучу специальных методов обработки изображений, их особенности, сильные и слабые стороны. Еще как минимум семестр.
  • как написать те процедуры, которые находятся "под капотом" у TF и реализовать их самостоятельно, причем так, чтобы они не падали при первой же ошибки. Ну,зная какой коллектив работал над TF и даже поделив это число на 10 (поскольку будете реализовывать только часть этого пакета) все равно энтузиазма должно существенно поубавиться, ибо эта задача на пару лет. Сомнительный "пэт-проект", если честно.
  • Но допустим, вы все это осилите. А теперь внимание вопрос. Чтобы обучить нейросеть распознаванию лиц надо ей скормить пару десятков тысяч (!) изображений, причем размеченных заранее. Вы уже решили, где вы этот датасет возьмете? И как будете тестировать свои результаты?

Я это к чему виду. Надеяться самостоятельно реализовать распознавание лиц, но без вспомогательных средств - причем неважно, будет это TF, OpenCV,PyTorch etc. - можно только, если абсолютно ничего не понимаешь ни в распознавании, ни в нейросетях, ни в программировании. Подсказки тут не помогут - только последовательное и серьезное изучение темы. Увы. Стоит-ли тратить свой самый главный ресурс - время на заведомо нереализуемую задачу? Решение принимайте сами.

→ Ссылка
Автор решения: ППУПУПУПУ

Тебе нужно иметь Датасет с изображениями, а также аннотацию (label.txt) вот код для обучения модели. import os import torch from torch.utils.data import Dataset, DataLoader import torchvision.transforms as transforms from PIL import Image

class FaceDataset(Dataset):
    def __init__(self, label_file, img_dir, transforms=None):
        self.img_dir = img_dir
        self.transforms = transforms
        self.data = []

        with open(label_file, "r") as f:
            lines = f.readlines()
        
        current_file = None
        boxes = []
        
        for line in lines:
            line = line.strip()
            if line.startswith("#"):
                if current_file and boxes:
                    self.data.append((current_file, boxes))
                current_file = line[2:]
                boxes = []
            else:
                bbox = list(map(int, line.split()))
                boxes.append(bbox)
        
        if current_file and boxes:
            self.data.append((current_file, boxes))

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

    def __getitem__(self, idx):
        file_name, boxes = self.data[idx]
        img_path = os.path.join(self.img_dir, file_name)
        image = Image.open(img_path).convert("RGB")

        boxes = torch.tensor(boxes, dtype=torch.float32)
        labels = torch.ones((len(boxes),), dtype=torch.int64)

        target = {"boxes": boxes, "labels": labels}

        if self.transforms:
            image = self.transforms(image)

        return image, target

import torchvision
from torchvision.models.detection.faster_rcnn import FastRCNNPredictor
from torchvision.models.detection.backbone_utils import resnet_fpn_backbone

def get_custom_model(num_classes):
    backbone = resnet_fpn_backbone('resnet50', pretrained=False)
    
    model = torchvision.models.detection.FasterRCNN(backbone, num_classes=num_classes)

    return model

import torch.optim as optim

num_classes = 2
num_epochs = 20
batch_size = 4
lr = 0.005

dataset = FaceDataset("label.txt", "path")
dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True, collate_fn=lambda x: tuple(zip(*x)))

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = get_custom_model(num_classes).to(device)

optimizer = optim.Adam(model.parameters(), lr=lr)

def train_one_epoch(model, dataloader, optimizer):
    model.train()
    epoch_loss = 0
    
    for images, targets in dataloader:
        images = [img.to(device) for img in images]
        targets = [{k: v.to(device) for k, v in t.items()} for t in targets]

        optimizer.zero_grad()
        loss_dict = model(images, targets)
        loss = sum(loss for loss in loss_dict.values())

        loss.backward()
        optimizer.step()
        epoch_loss += loss.item()
    
    return epoch_loss / len(dataloader)

for epoch in range(num_epochs):
    loss = train_one_epoch(model, dataloader, optimizer)
    print(f"Epoch {epoch+1}/{num_epochs}, Loss: {loss}")

torch.save(model.state_dict(), "face_detector.pth")
→ Ссылка