class_docstr: ConvNeXt model
  
  Args:
      in_chans (int): Number of input image channels. Default: 3
      num_classes (int): Number of classes for classification head. Default: 1000
      depths (tuple(int)): Number of blocks at each stage. Default: (3, 3, 9, 3)
      dims (int): Feature dimension at each stage. Default: (96, 192, 384, 768)
      drop_path_rate (float): Stochastic depth rate. Default: 0.
      layer_scale_init_value (float): Init value for Layer Scale. Default: 1e-6.
      head_init_scale (float): Init scaling value for classifier weights and biases. Default: 1.
class_docstr_tok: ["ConvNeXt","model","Args",":","in_chans","(","int",")",":","Number","of","input","image","channels",".","Default",":","3","num_classes","(","int",")",":","Number","of","classes","for","classification","head",".","Default",":","1000","depths","(","tuple","(","int",")",")",":","Number","of","blocks","at","each","stage",".","Default",":","(","3",",","3",",","9",",","3",")","dims","(","int",")",":","Feature","dimension","at","each","stage",".","Default",":","(","96",",","192",",","384",",","768",")","drop_path_rate","(","float",")",":","Stochastic","depth","rate",".","Default",":","0.","layer_scale_init_value","(","float",")",":","Init","value","for","Layer","Scale",".","Default",":","1e-6",".","head_init_scale","(","float",")",":","Init","scaling","value","for","classifier","weights","and","biases",".","Default",":","1","."]
code: def __init__(
      self,
      in_chans=3,
      num_classes=1000,
      depths=(3, 3, 9, 3),
      dims=(96, 192, 384, 768),
      drop_path_rate=0.0,
      layer_scale_init_value=1e-6,
      head_init_scale=1.0,
  ):
      super().__init__()
  
      self.depths = depths
      self.dims = dims
      self.num_classes = num_classes
  
      self.downsample_layers = (
          nn.ModuleList()
      )  # stem and 3 intermediate downsampling conv layers
      stem = nn.Sequential(
          nn.Conv2d(in_chans, dims[0], kernel_size=4, stride=4),
          LayerNorm(dims[0], eps=1e-6, data_format="channels_first"),
      )
      self.downsample_layers.append(stem)
      for i in range(3):
          downsample_layer = nn.Sequential(
              LayerNorm(
                  dims[i], eps=1e-6, data_format="channels_first"
              ),
              nn.Conv2d(dims[i], dims[i + 1], kernel_size=2, stride=2),
          )
          self.downsample_layers.append(downsample_layer)
  
      self.stages = (
          nn.ModuleList()
      )  # 4 feature resolution stages, each consisting of multiple residual blocks
      dp_rates = [
          x.item()
          for x in torch.linspace(0, drop_path_rate, sum(depths))
      ]
      cur = 0
      for i in range(4):
          stage = nn.Sequential(
              *[
                  Block(
                      dim=dims[i],
                      drop_path=dp_rates[cur + j],
                      layer_scale_init_value=layer_scale_init_value,
                  )
                  for j in range(depths[i])
              ]
          )
          self.stages.append(stage)
          cur += depths[i]
  
      self.norm = nn.LayerNorm(dims[-1], eps=1e-6)  # final norm layer
      self.head = nn.Linear(dims[-1], num_classes)
  
      self.apply(self._init_weights)
      self.head.weight.data.mul_(head_init_scale)
      self.head.bias.data.mul_(head_init_scale)
  
file_path: towhee/towhee/models/convnext/convnext.py
imports: import torch
  from torch import nn
  from towhee.models.convnext.utils import LayerNorm, Block
  from towhee.models.convnext.configs import get_configs
  from towhee.models.utils.weight_init import trunc_normal_
  from towhee.models.utils import create_model
label_desc: Use image node_id 1 to create a new ConvNeXt object from inherited base classes: nn with example: obj = ConvNeXt(in_chans, num_classes, depths, dims, drop_path_rate, layer_scale_init_value, head_init_scale)