mirror of
https://github.com/THU-MIG/yolov10.git
synced 2025-05-23 13:34:23 +08:00
96 lines
3.2 KiB
Python
96 lines
3.2 KiB
Python
from ultralytics import YOLOv10
|
|
import torch
|
|
from PIL import Image
|
|
from torchvision import transforms
|
|
|
|
# Define the device
|
|
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
|
|
|
|
# model = YOLOv10.from_pretrained('jameslahm/yolov10{n/s/m/b/l/x}')
|
|
# model = YOLOv10.from_pretrained('jameslahm/yolov10n')
|
|
# or
|
|
# wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10{n/s/m/b/l/x}.pt
|
|
# wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10n.pt
|
|
# model = YOLOv10('yolov10{n/s/m/b/l/x}.pt')
|
|
model = YOLOv10('yolov10n.pt').to(device)
|
|
|
|
# Load the image
|
|
# path = '/home/nielseni6/PythonScripts/Github/yolov10/images/fat-dog.jpg'
|
|
path = '/home/nielseni6/PythonScripts/Github/yolov10/images/The-Cardinal-Bird.jpg'
|
|
image = Image.open(path)
|
|
|
|
# Define the transformation to resize the image, convert it to a tensor, and normalize it
|
|
transform = transforms.Compose([
|
|
transforms.Resize((640, 640)),
|
|
transforms.ToTensor(),
|
|
# transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
|
|
])
|
|
|
|
# Apply the transformation
|
|
image_tensor = transform(image)
|
|
|
|
# Add a batch dimension
|
|
image_tensor = image_tensor.unsqueeze(0).to(device)
|
|
image_tensor = image_tensor.requires_grad_(True)
|
|
|
|
|
|
# Predict for a specific image
|
|
# results = model.predict(image_tensor, save=True)
|
|
# model.requires_grad_(True)
|
|
|
|
|
|
# for p in model.parameters():
|
|
# p.requires_grad = True
|
|
results = model.predict(image_tensor, save=True)
|
|
|
|
# Display the results
|
|
for result in results:
|
|
print(result)
|
|
|
|
# pred = results[0].boxes[0].conf
|
|
|
|
# # Hook to store the activations
|
|
# activations = {}
|
|
|
|
# def get_activation(name):
|
|
# def hook(model, input, output):
|
|
# activations[name] = output
|
|
# return hook
|
|
|
|
# # Register hooks for each layer you want to inspect
|
|
# for name, layer in model.model.named_modules():
|
|
# layer.register_forward_hook(get_activation(name))
|
|
|
|
# # Run the model to get activations
|
|
# results = model.predict(image_tensor, save=True, visualize=True)
|
|
|
|
# # # Print the activations
|
|
# # for name, activation in activations.items():
|
|
# # print(f"Activation from layer {name}: {activation}")
|
|
|
|
# # List activation names separately
|
|
# print("\nActivation layer names:")
|
|
# for name in activations.keys():
|
|
# print(name)
|
|
# # pred.backward()
|
|
|
|
# # Assuming 'model.23' is the layer of interest for bbox prediction and confidence
|
|
# activation = activations['model.23']['one2one'][0]
|
|
# act_23 = activations['model.23.cv3.2']
|
|
# act_dfl = activations['model.23.dfl.conv']
|
|
# act_conv = activations['model.0.conv']
|
|
# act_act = activations['model.0.act']
|
|
|
|
# # with torch.autograd.set_detect_anomaly(True):
|
|
# # pred.backward()
|
|
# grad = torch.autograd.grad(act_23, im, grad_outputs=torch.ones_like(act_23), create_graph=True, retain_graph=True)[0]
|
|
# # grad = torch.autograd.grad(pred, im, grad_outputs=torch.ones_like(pred), create_graph=True)[0]
|
|
# grad = torch.autograd.grad(activations['model.23']['one2one'][1][0],
|
|
# activations['model.23.one2one_cv3.2'],
|
|
# grad_outputs=torch.ones_like(activations['model.23']['one2one'][1][0]),
|
|
# create_graph=True, retain_graph=True)[0]
|
|
|
|
# # Print the results
|
|
# print(results)
|
|
|
|
# model.val(data='coco.yaml', batch=256) |