# 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'
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')