code: 
  
  
  
  
  
  
  import argparse
  import json
  from pathlib import Path
  
  import requests
  import torch
  from huggingface_hub import hf_hub_download
  from PIL import Image
  
  from transformers import ConvNextConfig, ConvNextForImageClassification, ConvNextImageProcessor
  from transformers.utils import logging
  
  
  logging.set_verbosity_info()
  __snake_case							      =						logging.get_logger(__name__)
  
  
  def 						_A     (       SCREAMING_SNAKE_CASE__						:			Any ):
      UpperCamelCase :Any										=     ConvNextConfig()
  
      if "tiny" in checkpoint_url:
          UpperCamelCase :int										=     [3, 3, 9, 3]
          UpperCamelCase :List[Any]										=     [96, 192, 384, 768]
      if "small" in checkpoint_url:
          UpperCamelCase :Optional[Any]										=     [3, 3, 27, 3]
          UpperCamelCase :Optional[int]										=     [96, 192, 384, 768]
      if "base" in checkpoint_url:
          UpperCamelCase :List[Any]										=     [3, 3, 27, 3]
          UpperCamelCase :str										=     [128, 256, 512, 1024]
      if "large" in checkpoint_url:
          UpperCamelCase :Optional[int]										=     [3, 3, 27, 3]
          UpperCamelCase :Tuple										=     [192, 384, 768, 1536]
      if "xlarge" in checkpoint_url:
          UpperCamelCase :List[str]										=     [3, 3, 27, 3]
          UpperCamelCase :Any										=     [256, 512, 1024, 2048]
  
      if "1k" in checkpoint_url:
          UpperCamelCase :Any										=     1000
          UpperCamelCase :Optional[Any]										=     '''imagenet-1k-id2label.json'''
          UpperCamelCase :Union[str, Any]										=     (1, 1000)
      else:
          UpperCamelCase :Any										=     21841
          UpperCamelCase :Tuple										=     '''imagenet-22k-id2label.json'''
          UpperCamelCase :Any										=     (1, 21841)
  
      UpperCamelCase :Tuple										=     '''huggingface/label-files'''
      UpperCamelCase :List[Any]										=     num_labels
      UpperCamelCase :Optional[int]										=     json.load(open(hf_hub_download(SCREAMING_SNAKE_CASE__  ,						SCREAMING_SNAKE_CASE__  ,						repo_type='''dataset''' )  ,						'''r''' ) )
      UpperCamelCase :List[Any]										=     {int(SCREAMING_SNAKE_CASE__ ): v for k, v in idalabel.items()}
      if "1k" not in checkpoint_url:
          # this dataset contains 21843 labels but the model only has 21841
          # we delete the classes as mentioned in https://github.com/google-research/big_transfer/issues/18
          del idalabel[9205]
          del idalabel[15027]
      UpperCamelCase :Union[str, Any]										=     idalabel
      UpperCamelCase :Any										=     {v: k for k, v in idalabel.items()}
      UpperCamelCase :int										=     hidden_sizes
      UpperCamelCase :int										=     depths
  
      return config, expected_shape
  
  
  def 						_A     (       SCREAMING_SNAKE_CASE__						:			List[str] ):
      if "downsample_layers.0.0" in name:
          UpperCamelCase :List[Any]										=     name.replace('''downsample_layers.0.0'''  ,						'''embeddings.patch_embeddings''' )
      if "downsample_layers.0.1" in name:
          UpperCamelCase :Union[str, Any]										=     name.replace('''downsample_layers.0.1'''  ,						'''embeddings.norm''' )  # we rename to layernorm later on
      if "downsample_layers.1.0" in name:
          UpperCamelCase :Tuple										=     name.replace('''downsample_layers.1.0'''  ,						'''stages.1.downsampling_layer.0''' )
      if "downsample_layers.1.1" in name:
          UpperCamelCase :Tuple										=     name.replace('''downsample_layers.1.1'''  ,						'''stages.1.downsampling_layer.1''' )
      if "downsample_layers.2.0" in name:
          UpperCamelCase :Optional[Any]										=     name.replace('''downsample_layers.2.0'''  ,						'''stages.2.downsampling_layer.0''' )
      if "downsample_layers.2.1" in name:
          UpperCamelCase :Optional[Any]										=     name.replace('''downsample_layers.2.1'''  ,						'''stages.2.downsampling_layer.1''' )
      if "downsample_layers.3.0" in name:
          UpperCamelCase :str										=     name.replace('''downsample_layers.3.0'''  ,						'''stages.3.downsampling_layer.0''' )
      if "downsample_layers.3.1" in name:
          UpperCamelCase :Optional[Any]										=     name.replace('''downsample_layers.3.1'''  ,						'''stages.3.downsampling_layer.1''' )
      if "stages" in name and "downsampling_layer" not in name:
          # stages.0.0. for instance should be renamed to stages.0.layers.0.
          UpperCamelCase :List[str]										=     name[: len('''stages.0''' )] + '''.layers''' + name[len('''stages.0''' ) :]
      if "stages" in name:
          UpperCamelCase :Any										=     name.replace('''stages'''  ,						'''encoder.stages''' )
      if "norm" in name:
          UpperCamelCase :str										=     name.replace('''norm'''  ,						'''layernorm''' )
      if "gamma" in name:
          UpperCamelCase :List[str]										=     name.replace('''gamma'''  ,						'''layer_scale_parameter''' )
      if "head" in name:
          UpperCamelCase :int										=     name.replace('''head'''  ,						'''classifier''' )
  
      return name
  
  
  def 						_A     (       ):
      UpperCamelCase :List[Any]										=     '''http://images.cocodataset.org/val2017/000000039769.jpg'''
      UpperCamelCase :str										=     Image.open(requests.get(SCREAMING_SNAKE_CASE__  ,						stream=SCREAMING_SNAKE_CASE__ ).raw )
      return im
  
  
  @torch.no_grad()
  def 						_A     (       SCREAMING_SNAKE_CASE__						:			Tuple  ,						SCREAMING_SNAKE_CASE__						:			Dict ):
      UpperCamelCase							,     UpperCamelCase :List[str]										=     get_convnext_config(SCREAMING_SNAKE_CASE__ )
      # load original state_dict from URL
      UpperCamelCase :List[str]										=     torch.hub.load_state_dict_from_url(SCREAMING_SNAKE_CASE__ )['''model''']
      # rename keys
      for key in state_dict.copy().keys():
          UpperCamelCase :Optional[int]										=     state_dict.pop(SCREAMING_SNAKE_CASE__ )
          UpperCamelCase :int										=     val
      # add prefix to all keys expect classifier head
      for key in state_dict.copy().keys():
          UpperCamelCase :Optional[Any]										=     state_dict.pop(SCREAMING_SNAKE_CASE__ )
          if not key.startswith('''classifier''' ):
              UpperCamelCase :Tuple										=     '''convnext.''' + key
          UpperCamelCase :str										=     val
  
      # load HuggingFace model
      UpperCamelCase :Optional[Any]										=     ConvNextForImageClassification(SCREAMING_SNAKE_CASE__ )
      model.load_state_dict(SCREAMING_SNAKE_CASE__ )
      model.eval()
  
      # Check outputs on an image, prepared by ConvNextImageProcessor
      UpperCamelCase :Optional[Any]										=     224 if '''224''' in checkpoint_url else 384
      UpperCamelCase :List[Any]										=     ConvNextImageProcessor(size=SCREAMING_SNAKE_CASE__ )
      UpperCamelCase :List[str]										=     image_processor(images=prepare_img()  ,						return_tensors='''pt''' ).pixel_values
  
      UpperCamelCase :Optional[Any]										=     model(SCREAMING_SNAKE_CASE__ ).logits
  
      # note: the logits below were obtained without center cropping
      if checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_tiny_1k_224_ema.pth":
          UpperCamelCase :Tuple										=     torch.tensor([-0.12_10, -0.66_05, 0.19_18] )
      elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_small_1k_224_ema.pth":
          UpperCamelCase :str										=     torch.tensor([-0.44_73, -0.18_47, -0.63_65] )
      elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_1k_224_ema.pth":
          UpperCamelCase :Any										=     torch.tensor([0.45_25, 0.75_39, 0.03_08] )
      elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_1k_384.pth":
          UpperCamelCase :List[Any]										=     torch.tensor([0.35_61, 0.63_50, -0.03_84] )
      elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_1k_224_ema.pth":
          UpperCamelCase :str										=     torch.tensor([0.41_74, -0.09_89, 0.14_89] )
      elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_1k_384.pth":
          UpperCamelCase :Union[str, Any]										=     torch.tensor([0.25_13, -0.13_49, -0.16_13] )
      elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_224.pth":
          UpperCamelCase :Dict										=     torch.tensor([1.29_80, 0.36_31, -0.11_98] )
      elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_22k_224.pth":
          UpperCamelCase :int										=     torch.tensor([1.29_63, 0.12_27, 0.17_23] )
      elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_224.pth":
          UpperCamelCase :List[Any]										=     torch.tensor([1.79_56, 0.83_90, 0.28_20] )
      elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_1k_224.pth":
          UpperCamelCase :int										=     torch.tensor([-0.28_22, -0.05_02, -0.08_78] )
      elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_1k_384.pth":
          UpperCamelCase :Optional[Any]										=     torch.tensor([-0.56_72, -0.07_30, -0.43_48] )
      elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_22k_1k_224.pth":
          UpperCamelCase :int										=     torch.tensor([0.26_81, 0.23_65, 0.62_46] )
      elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_22k_1k_384.pth":
          UpperCamelCase :Tuple										=     torch.tensor([-0.26_42, 0.39_31, 0.51_16] )
      elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_1k_224_ema.pth":
          UpperCamelCase :Tuple										=     torch.tensor([-0.66_77, -0.18_73, -0.83_79] )
      elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_1k_384_ema.pth":
          UpperCamelCase :Optional[Any]										=     torch.tensor([-0.77_49, -0.29_67, -0.64_44] )
      else:
          raise ValueError(F'''Unknown URL: {checkpoint_url}''' )
  
      assert torch.allclose(logits[0, :3]  ,						SCREAMING_SNAKE_CASE__  ,						atol=1e-3 )
      assert logits.shape == expected_shape
  
      Path(SCREAMING_SNAKE_CASE__ ).mkdir(exist_ok=SCREAMING_SNAKE_CASE__ )
      print(F'''Saving model to {pytorch_dump_folder_path}''' )
      model.save_pretrained(SCREAMING_SNAKE_CASE__ )
      print(F'''Saving image processor to {pytorch_dump_folder_path}''' )
      image_processor.save_pretrained(SCREAMING_SNAKE_CASE__ )
  
      print('''Pushing model to the hub...''' )
      UpperCamelCase :Tuple										=     '''convnext'''
      if "tiny" in checkpoint_url:
          model_name += "-tiny"
      elif "small" in checkpoint_url:
          model_name += "-small"
      elif "base" in checkpoint_url:
          model_name += "-base"
      elif "xlarge" in checkpoint_url:
          model_name += "-xlarge"
      elif "large" in checkpoint_url:
          model_name += "-large"
      if "224" in checkpoint_url:
          model_name += "-224"
      elif "384" in checkpoint_url:
          model_name += "-384"
      if "22k" in checkpoint_url and "1k" not in checkpoint_url:
          model_name += "-22k"
      if "22k" in checkpoint_url and "1k" in checkpoint_url:
          model_name += "-22k-1k"
  
      model.push_to_hub(
          repo_path_or_name=Path(SCREAMING_SNAKE_CASE__  ,						SCREAMING_SNAKE_CASE__ )  ,						organization='''nielsr'''  ,						commit_message='''Add model'''  ,						)
  
  
  if __name__ == "__main__":
   __snake_case							      =						argparse.ArgumentParser()
   # Required parameters
   parser.add_argument(
       """--checkpoint_url""",
       default="""https://dl.fbaipublicfiles.com/convnext/convnext_tiny_1k_224_ema.pth""",
       type=str,
       help="""URL of the original ConvNeXT checkpoint you'd like to convert.""",
   )
   parser.add_argument(
       """--pytorch_dump_folder_path""",
       default=None,
       type=str,
       required=True,
       help="""Path to the output PyTorch model directory.""",
   )
  
   __snake_case							      =						parser.parse_args()
   convert_convnext_checkpoint(args.checkpoint_url, args.pytorch_dump_folder_path)
  
  
  
  
  
  
style_context: 
  
  
  
  
  
  
  # as due to their complexity multi-gpu tests could impact other tests, and to aid debug we have those in a separate module.
  
  import os
  import sys
  
  from transformers.testing_utils import TestCasePlus, execute_subprocess_async, get_gpu_count, require_torch_gpu, slow
  
  from .utils import load_json
  
  
  
  
  
  
  
  class     UpperCAmelCase_		(      lowercase				):
  
  
  
        """simple docstring"""
        @classmethod
        def 					UpperCAmelCase		(       cls				)       ->   List[Any]:
            return cls
  
  
  
  
        @slow
        @require_torch_gpu
        def 					UpperCAmelCase		(       self				)       ->   int:
            UpperCamelCase :int										=     self.get_auto_remove_tmp_dir()
            UpperCamelCase :List[str]										=     F'''
              --model_name Helsinki-NLP/opus-mt-en-ro
              --save_dir {output_dir}
              --data_dir {self.test_file_dir_str}/test_data/wmt_en_ro
              --num_beams 2
              --task translation
          '''.split()
  
            # we want this test to run even if there is only one GPU, but if there are more we use them all
            UpperCamelCase :List[str]										=     get_gpu_count()
            UpperCamelCase :Optional[Any]										=     F'''
              -m torch.distributed.launch
              --nproc_per_node={n_gpu}
              {self.test_file_dir}/run_distributed_eval.py
          '''.split()
            UpperCamelCase :List[Any]										=     [sys.executable] + distributed_args + args
            execute_subprocess_async(SCREAMING_SNAKE_CASE_					,       env=self.get_env()				)
  
            UpperCamelCase :Tuple										=     os.path.join(SCREAMING_SNAKE_CASE_					,       '''test_bleu.json'''				)
            UpperCamelCase :str										=     load_json(SCREAMING_SNAKE_CASE_				)
            # print(metrics)
            self.assertGreaterEqual(metrics['''bleu''']					,       25				)
  
  
  
  
  
  