ultralytics / ultralytics

NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite
https://docs.ultralytics.com
GNU Affero General Public License v3.0
23.75k stars 4.74k forks source link

modified model #11663

Open Enryuwashere opened 1 week ago

Enryuwashere commented 1 week ago

Search before asking

Question

Hello, Im new in computer vision and I was able to train the model successfully and I want to learn to modify the model but Im facing some errors. I tried to change the backbone of the model yolov8 by using resnet50 and here inside the yolov8.yaml "# Ultralytics YOLO 🚀, AGPL-3.0 license

YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect

Parameters

nc: 80 # number of classes scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'

[depth, width, max_channels]

n: [0.33, 0.25, 1024]

s: [0.33, 0.50, 1024]

m: [0.67, 0.75, 768]

l: [1.00, 1.00, 512] # YOLOv8l summary: 406 layers, 49291520 parameters, 49291504 gradients, 152.0 GFLOPs x: [1.00, 1.25, 512]

YOLOv8.0n backbone

backbone:

[from, repeats, module, args]

YOLOv8.0n head

head:

File ~.conda\envs\YOLOv8\lib\site-packages\ultralytics\yolo\engine\model.py:105, in YOLO.init(self, model, task) 103 model, suffix = Path(model).with_suffix('.pt'), '.pt' # add suffix, i.e. yolov8n -> yolov8n.pt 104 if suffix == '.yaml': --> 105 self._new(model, task) 106 else: 107 self._load(model, task)

File ~.conda\envs\YOLOv8\lib\site-packages\ultralytics\yolo\engine\model.py:138, in YOLO._new(self, cfg, task, verbose) 136 self.cfg = cfg 137 self.task = task or guess_model_task(cfg_dict) --> 138 self.model = TASK_MAP[self.task][0](cfg_dict, verbose=verbose and RANK == -1) # build model 139 self.overrides['model'] = self.cfg 141 # Below added to allow export from yamls

File ~.conda\envs\YOLOv8\lib\site-packages\ultralytics\nn\tasks.py:189, in DetectionModel.init(self, cfg, ch, nc, verbose) 187 LOGGER.info(f"Overriding model.yaml nc={self.yaml['nc']} with nc={nc}") 188 self.yaml['nc'] = nc # override yaml value --> 189 self.model, self.save = parse_model(deepcopy(self.yaml), ch=ch, verbose=verbose) # model, savelist 190 self.names = {i: f'{i}' for i in range(self.yaml['nc'])} # default names dict 191 self.inplace = self.yaml.get('inplace', True)

File ~.conda\envs\YOLOv8\lib\site-packages\ultralytics\nn\tasks.py:491, in parse_model(d, ch, verbose) 489 layers, save, c2 = [], [], ch[-1] # layers, savelist, ch out 490 for i, (f, n, m, args) in enumerate(d['backbone'] + d['head']): # from, number, module, args --> 491 m = getattr(torch.nn, m[3:]) if 'nn.' in m else globals()[m] # get module 492 for j, a in enumerate(args): 493 if isinstance(a, str):

KeyError: 'ResNetLayer'"

can someone help me to solve this error? Thank you

Additional

No response

glenn-jocher commented 1 week ago

Hi there!

It looks like you're running into an issue because the ResNetLayer module isn't recognized within your YOLOv8 configuration. This could be happening if the ResNetLayer isn't defined in your current environment or isn't properly imported in the script where you're trying to load the model.

Here are a couple of suggestions to troubleshoot and resolve this issue:

  1. Check Module Name: Ensure that 'ResNetLayer' is the correct name of the module you're trying to use. If it's a custom layer, double-check that it's properly defined and imported into the script where you initialize YOLO.

  2. Verify Environment: Make sure that all necessary packages and custom modules are correctly installed in your working environment. If ResNetLayer is part of an external library, it needs to be installed and accessible.

  3. Alternative Import Method: If ResNetLayer is defined in a file that isn't automatically imported, you may need to manually import it. For example:

    from custom_layers import ResNetLayer  # Adjust the import statement as per your setup

If you can share more about where ResNetLayer is sourced from, I can provide more precise guidance! 👍

Enryuwashere commented 1 week ago

Thank you for your replies! I try to run the modified model from here #7270 , so I changed the layer inside the yolov8.yaml based on that model.

glenn-jocher commented 1 week ago

Hello!

Great to hear you're exploring by modifying the model! To ensure the ResNetLayer is recognized, please make sure the layer is correctly defined and imported within the scripts you're working with. If this is a custom layer, verify its implementation and dependencies.

If the layer is part of a framework or external library, ensure that it's installed correctly and your import statements are set up right. Please share any specific errors you're encountering if issues persist. We're here to help! 😊

Happy coding!

Enryuwashere commented 1 week ago

Im not familiar with the steps to modify the model, can you help me to summarize what steps that I need to do for modifying the model? I thought by changing the yolov8.yaml's file is enough

glenn-jocher commented 1 week ago

Hey there! 🌟 Modifying the model primarily involves adjustments in the YAML configuration file, much like you've tried. However, it's also crucial to ensure that all components referenced in the YAML, such as new layers or module changes, are properly defined within the Python execution environment.

If you introduce new custom layers or modules (as seen with changes like 'ResNetLayer'), make sure these are correctly implemented and available in your environment. An example could be defining or importing a new layer:

from my_custom_layers import ResNetLayer

Modify your yolov8.yaml to reflect these custom or adjusted elements, then retrain or run your model to see the changes in action. Let us know if you encounter any specific issues!