pythonyoloyolov8efficientnet

'YOLO' object has no attribute 'YOLOv8'


# Veri kümenizin yolunu ayarlayın
data_dir = '/content/datasets/u-granada-g-detect-2'

# Sınıf etiketlerini yükleyin
class_names = ['knife', 'gun']

# Eğitim ve doğrulama veri kümelerini oluşturun
train_images = []
train_targets = []
val_images = []
val_targets = []

for phase in ['train', 'valid']:
    image_dir = os.path.join(data_dir, phase, 'images')
    label_dir = os.path.join(data_dir, phase, 'labels')

    for image_path in tqdm(os.listdir(image_dir)):
        image = cv2.imread(os.path.join(image_dir, image_path))
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

        label_path = os.path.join(label_dir, image_path.replace('.jpg', '.txt'))
        with open(label_path, 'r') as f:
            labels = []
            for line in f:
                bbox = [float(x) for x in line.split()]
                labels.append([int(bbox[0]), int(bbox[1]), int(bbox[2]), int(bbox[3]), 1 if bbox[4] == 0 else 0])

        train_images.append(image)
        train_targets.append(labels)

        if phase == 'val':
            val_images.append(image)
            val_targets.append(labels)

# Yeniden boyutlandırma işlemi
resized_train_images = [cv2.resize(img, (224, 224)) for img in train_images]
resized_val_images = [cv2.resize(img, (224, 224)) for img in val_images]

# NumPy dizisine dönüştürme
train_images = np.array(resized_train_images)
val_images = np.array(resized_val_images)

# Normalleştirme işlemi
train_images = train_images / 255.0
val_images = val_images / 255.0

# EfficientNet B4 modelini yükleyin
efficientnet = EfficientNet.from_name('efficientnet-b4')

# YOLOv8n modelini oluşturun
yolo_model = model.YOLOv8(cfg='yolov8x.yaml')

# Modeli EfficientNet B4 omurgası ile değiştirin
yolo_model.model.backbone = efficientnet

# Eğitim ve doğrulama veri kümelerini ayarlayın
train_dataset = torch.utils.data.Dataset(train_images, train_targets)
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=16, shuffle=True)
val_dataset = torch.utils.data.Dataset(val_images, val_targets)
val_loader = torch.utils.data.DataLoader(val_dataset, batch_size=16, shuffle=False)

# Eğitim ayarlarını belirleyin
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(yolo_model.parameters(), lr=0.001)

# Modeli eğitin
for epoch in range(100):
    # Her epoch için eğitim ve doğrulama aşamaları
    for images, targets in tqdm(train_loader):
        images = images.to(device)
        targets = [target.to(device) for target in targets]

        # Tahminleri hesaplayın ve kaybı hesaplayın
        outputs = yolo_model(images)
        loss = criterion(outputs[0], targets[0])

        # Geri yayılım ve parametreleri güncelleyin
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

    # Doğrulama setinde performansı değerlendirin
    with torch.no_grad():
        total_correct = 0
        total_samples = 0
        for images, targets in tqdm(val_loader):
            images = images.to(device)
        targets = [target.to(device) for target in targets]

        # Tahminleri hesaplayın
        outputs = yolo_model(images)
        predictions = torch.argmax(outputs[0], dim=1)

        # Doğru tahminleri sayın
        for i, (prediction, target) in enumerate(zip(predictions, targets)):
            total_samples += 1
            if prediction == target:
                total_correct += 1

        # Doğrulama doğruluğunu hesaplayın
        accuracy = total_correct / total_samples
        print(f'Epoch {epoch + 1}: Val Accuracy: {accuracy:.4f}')

# Eğitim tamamlandıktan sonra modeli kaydedin
torch.save(yolo_model, 'yolov8_knife_gun_detector.pth')

print('Model successfully trained and saved!')

How can i fix this error?

AttributeError                            Traceback (most recent call last)
<ipython-input-19-500f42116361> in <cell line: 5>()
      3 
      4 # YOLOv8n modelini oluşturun
----> 5 yolo_model = model.YOLOv8(cfg='yolov8x.yaml')
      6 
      7 # Modeli EfficientNet B4 omurgası ile değiştirin

/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py in __getattr__(self, name)
   1686             if name in modules:
   1687                 return modules[name]
-> 1688         raise AttributeError(f"'{type(self).__name__}' object has no attribute '{name}'")
   1689 
   1690     def __setattr__(self, name: str, value: Union[Tensor, 'Module']) -> None:

AttributeError: 'YOLO' object has no attribute 'YOLOv8'

Solution

  • It's nothing more than a syntax error. The code should be the following on the faulty line :

    yolo_model = model.YOLO(cfg='yolov8x.yaml')
    

    Instead of your

    yolo_model = model.YOLOv8(cfg='yolov8x.yaml')