ultralytics-thop 0.0.2__tar.gz → 0.2.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. ultralytics_thop-0.2.3/PKG-INFO +188 -0
  2. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/README.md +8 -8
  3. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/pyproject.toml +9 -9
  4. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/thop/__init__.py +2 -2
  5. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/thop/profile.py +7 -16
  6. ultralytics_thop-0.2.3/ultralytics_thop.egg-info/PKG-INFO +188 -0
  7. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/ultralytics_thop.egg-info/SOURCES.txt +0 -1
  8. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/ultralytics_thop.egg-info/requires.txt +1 -0
  9. ultralytics_thop-0.0.2/PKG-INFO +0 -846
  10. ultralytics_thop-0.0.2/thop/__version__.py +0 -1
  11. ultralytics_thop-0.0.2/ultralytics_thop.egg-info/PKG-INFO +0 -846
  12. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/LICENSE +0 -0
  13. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/setup.cfg +0 -0
  14. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/tests/test_conv2d.py +0 -0
  15. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/tests/test_matmul.py +0 -0
  16. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/tests/test_relu.py +0 -0
  17. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/tests/test_utils.py +0 -0
  18. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/thop/fx_profile.py +0 -0
  19. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/thop/onnx_profile.py +0 -0
  20. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/thop/rnn_hooks.py +0 -0
  21. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/thop/utils.py +0 -0
  22. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/thop/vision/__init__.py +0 -0
  23. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/thop/vision/basic_hooks.py +0 -0
  24. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/thop/vision/calc_func.py +0 -0
  25. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/thop/vision/efficientnet.py +0 -0
  26. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/thop/vision/onnx_counter.py +0 -0
  27. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/ultralytics_thop.egg-info/dependency_links.txt +0 -0
  28. {ultralytics_thop-0.0.2 → ultralytics_thop-0.2.3}/ultralytics_thop.egg-info/top_level.txt +0 -0
@@ -0,0 +1,188 @@
1
+ Metadata-Version: 2.1
2
+ Name: ultralytics-thop
3
+ Version: 0.2.3
4
+ Summary: Ultralytics THOP package for fast computation of PyTorch model FLOPs and parameters.
5
+ Author-email: Ligeng Zhu <ligeng.zhu+github@gmail.com>
6
+ Maintainer: Glenn Jocher
7
+ License: AGPL-3.0
8
+ Project-URL: Bug Reports, https://github.com/ultralytics/thop/issues
9
+ Project-URL: Funding, https://ultralytics.com
10
+ Project-URL: Source, https://github.com/ultralytics/thop/
11
+ Keywords: FLOPs,PyTorch,Model Analysis
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: Education
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.8
19
+ Classifier: Programming Language :: Python :: 3.9
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Topic :: Software Development
24
+ Classifier: Topic :: Scientific/Engineering
25
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
26
+ Classifier: Operating System :: POSIX :: Linux
27
+ Classifier: Operating System :: MacOS
28
+ Classifier: Operating System :: Microsoft :: Windows
29
+ Requires-Python: >=3.8
30
+ Description-Content-Type: text/markdown
31
+ License-File: LICENSE
32
+ Requires-Dist: numpy
33
+ Requires-Dist: torch
34
+
35
+ <br>
36
+ <img src="https://raw.githubusercontent.com/ultralytics/assets/main/logo/Ultralytics_Logotype_Original.svg" width="320">
37
+
38
+ # 🚀 THOP: PyTorch-OpCounter
39
+
40
+ Welcome to the [THOP](https://github.com/ultralytics/thop) repository, your comprehensive solution for profiling PyTorch models by computing the number of Multiply-Accumulate Operations (MACs) and parameters. This tool is essential for deep learning practitioners to evaluate model efficiency and performance.
41
+
42
+ [![GitHub Actions](https://github.com/ultralytics/thop/actions/workflows/format.yml/badge.svg)](https://github.com/ultralytics/thop/actions/workflows/main.yml) [![PyPI version](https://badge.fury.io/py/ultralytics-thop.svg)](https://badge.fury.io/py/ultralytics-thop) <a href="https://ultralytics.com/discord"><img alt="Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
43
+
44
+ ## 📄 Description
45
+
46
+ THOP offers an intuitive API to profile PyTorch models by calculating the number of MACs and parameters. This functionality is crucial for assessing the computational efficiency and memory footprint of deep learning models.
47
+
48
+ ## 📦 Installation
49
+
50
+ You can install THOP via pip:
51
+
52
+ ```bash
53
+ pip install ultralytics-thop
54
+ ```
55
+
56
+ Alternatively, install the latest version directly from GitHub:
57
+
58
+ ```bash
59
+ pip install --upgrade git+https://github.com/ultralytics/thop.git
60
+ ```
61
+
62
+ ## 🛠 How to Use
63
+
64
+ ### Basic Usage
65
+
66
+ To profile a model, you can use the following example:
67
+
68
+ ```python
69
+ from torchvision.models import resnet50
70
+ from thop import profile
71
+ import torch
72
+
73
+ model = resnet50()
74
+ input = torch.randn(1, 3, 224, 224)
75
+ macs, params = profile(model, inputs=(input, ))
76
+ ```
77
+
78
+ ### Define Custom Rules for Third-Party Modules
79
+
80
+ You can define custom rules for unsupported modules:
81
+
82
+ ```python
83
+ import torch.nn as nn
84
+
85
+ class YourModule(nn.Module):
86
+ # your definition
87
+ pass
88
+
89
+ def count_your_model(model, x, y):
90
+ # your rule here
91
+ pass
92
+
93
+ input = torch.randn(1, 3, 224, 224)
94
+ macs, params = profile(model, inputs=(input, ), custom_ops={YourModule: count_your_model})
95
+ ```
96
+
97
+ ### Improve Output Readability
98
+
99
+ Use `thop.clever_format` for a more readable output:
100
+
101
+ ```python
102
+ from thop import clever_format
103
+ macs, params = clever_format([macs, params], "%.3f")
104
+ ```
105
+
106
+ ## 📊 Results of Recent Models
107
+
108
+ The following table presents the parameters and MACs for popular models. These results can be reproduced using the script `benchmark/evaluate_famous_models.py`.
109
+
110
+ <table align="center">
111
+ <tr>
112
+ <td>
113
+
114
+ | Model | Params(M) | MACs(G) |
115
+ | ---------------- | --------- | ------- |
116
+ | alexnet | 61.10 | 0.77 |
117
+ | vgg11 | 132.86 | 7.74 |
118
+ | vgg11_bn | 132.87 | 7.77 |
119
+ | vgg13 | 133.05 | 11.44 |
120
+ | vgg13_bn | 133.05 | 11.49 |
121
+ | vgg16 | 138.36 | 15.61 |
122
+ | vgg16_bn | 138.37 | 15.66 |
123
+ | vgg19 | 143.67 | 19.77 |
124
+ | vgg19_bn | 143.68 | 19.83 |
125
+ | resnet18 | 11.69 | 1.82 |
126
+ | resnet34 | 21.80 | 3.68 |
127
+ | resnet50 | 25.56 | 4.14 |
128
+ | resnet101 | 44.55 | 7.87 |
129
+ | resnet152 | 60.19 | 11.61 |
130
+ | wide_resnet101_2 | 126.89 | 22.84 |
131
+ | wide_resnet50_2 | 68.88 | 11.46 |
132
+
133
+ </td>
134
+ <td>
135
+
136
+ | Model | Params(M) | MACs(G) |
137
+ | ------------------ | --------- | ------- |
138
+ | resnext50_32x4d | 25.03 | 4.29 |
139
+ | resnext101_32x8d | 88.79 | 16.54 |
140
+ | densenet121 | 7.98 | 2.90 |
141
+ | densenet161 | 28.68 | 7.85 |
142
+ | densenet169 | 14.15 | 3.44 |
143
+ | densenet201 | 20.01 | 4.39 |
144
+ | squeezenet1_0 | 1.25 | 0.82 |
145
+ | squeezenet1_1 | 1.24 | 0.35 |
146
+ | mnasnet0_5 | 2.22 | 0.14 |
147
+ | mnasnet0_75 | 3.17 | 0.24 |
148
+ | mnasnet1_0 | 4.38 | 0.34 |
149
+ | mnasnet1_3 | 6.28 | 0.53 |
150
+ | mobilenet_v2 | 3.50 | 0.33 |
151
+ | shufflenet_v2_x0_5 | 1.37 | 0.05 |
152
+ | shufflenet_v2_x1_0 | 2.28 | 0.15 |
153
+ | shufflenet_v2_x1_5 | 3.50 | 0.31 |
154
+ | shufflenet_v2_x2_0 | 7.39 | 0.60 |
155
+ | inception_v3 | 27.16 | 5.75 |
156
+
157
+ </td>
158
+ </tr>
159
+ </table>
160
+
161
+ ## 💡 Contribute
162
+
163
+ We welcome community contributions to enhance THOP. Please check our [Contributing Guide](https://docs.ultralytics.com/help/contributing) for more details. Your feedback and suggestions are highly appreciated!
164
+
165
+ ## 📄 License
166
+
167
+ THOP is licensed under the AGPL-3.0 License. For more information, see the [LICENSE](https://github.com/ultralytics/thop/blob/master/LICENSE) file.
168
+
169
+ ## 📮 Contact
170
+
171
+ For bugs or feature requests, please open an issue on [GitHub Issues](https://github.com/ultralytics/thop/issues). Join our community on [Discord](https://ultralytics.com/discord) for discussions and support.
172
+
173
+ <br>
174
+ <div align="center">
175
+ <a href="https://github.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-github.png" width="3%" alt="Ultralytics GitHub"></a>
176
+ <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
177
+ <a href="https://www.linkedin.com/company/ultralytics/"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-linkedin.png" width="3%" alt="Ultralytics LinkedIn"></a>
178
+ <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
179
+ <a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="3%" alt="Ultralytics Twitter"></a>
180
+ <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
181
+ <a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
182
+ <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
183
+ <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="Ultralytics TikTok"></a>
184
+ <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
185
+ <a href="https://www.instagram.com/ultralytics/"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-instagram.png" width="3%" alt="Ultralytics Instagram"></a>
186
+ <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
187
+ <a href="https://ultralytics.com/discord"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="3%" alt="Ultralytics Discord"></a>
188
+ </div>
@@ -5,7 +5,7 @@
5
5
 
6
6
  Welcome to the [THOP](https://github.com/ultralytics/thop) repository, your comprehensive solution for profiling PyTorch models by computing the number of Multiply-Accumulate Operations (MACs) and parameters. This tool is essential for deep learning practitioners to evaluate model efficiency and performance.
7
7
 
8
- [![GitHub Actions](https://github.com/ultralytics/thop/actions/workflows/format.yml/badge.svg)](https://github.com/ultralytics/thop/actions/workflows/main.yml) [![PyPI version](https://badge.fury.io/py/ultralytics-.svg)](https://badge.fury.io/py/ultralytics-thop) <a href="https://ultralytics.com/discord"><img alt="Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
8
+ [![GitHub Actions](https://github.com/ultralytics/thop/actions/workflows/format.yml/badge.svg)](https://github.com/ultralytics/thop/actions/workflows/main.yml) [![PyPI version](https://badge.fury.io/py/ultralytics-thop.svg)](https://badge.fury.io/py/ultralytics-thop) <a href="https://ultralytics.com/discord"><img alt="Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
9
9
 
10
10
  ## 📄 Description
11
11
 
@@ -138,17 +138,17 @@ For bugs or feature requests, please open an issue on [GitHub Issues](https://gi
138
138
 
139
139
  <br>
140
140
  <div align="center">
141
- <a href="https://github.com/ultralytics/thop"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-github.png" width="3%" alt="THOP GitHub"></a>
141
+ <a href="https://github.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-github.png" width="3%" alt="Ultralytics GitHub"></a>
142
142
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
143
- <a href="https://www.linkedin.com/company/pytorch/"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-linkedin.png" width="3%" alt="PyTorch LinkedIn"></a>
143
+ <a href="https://www.linkedin.com/company/ultralytics/"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-linkedin.png" width="3%" alt="Ultralytics LinkedIn"></a>
144
144
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
145
- <a href="https://twitter.com/pytorch"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="3%" alt="PyTorch Twitter"></a>
145
+ <a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="3%" alt="Ultralytics Twitter"></a>
146
146
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
147
- <a href="https://youtube.com/pytorch?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="PyTorch YouTube"></a>
147
+ <a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
148
148
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
149
- <a href="https://www.tiktok.com/@pytorch"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="PyTorch TikTok"></a>
149
+ <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="Ultralytics TikTok"></a>
150
150
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
151
- <a href="https://www.instagram.com/pytorch/"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-instagram.png" width="3%" alt="PyTorch Instagram"></a>
151
+ <a href="https://www.instagram.com/ultralytics/"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-instagram.png" width="3%" alt="Ultralytics Instagram"></a>
152
152
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
153
- <a href="https://discord.com/invite/pytorch"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="3%" alt="PyTorch Discord"></a>
153
+ <a href="https://ultralytics.com/discord"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="3%" alt="Ultralytics Discord"></a>
154
154
  </div>
@@ -25,17 +25,17 @@ build-backend = "setuptools.build_meta"
25
25
 
26
26
  [project]
27
27
  name = "ultralytics-thop"
28
- version = "0.0.2" # Placeholder version, needs to be dynamically set
29
- description = "A tool to count the FLOPs of PyTorch model."
28
+ dynamic = ["version"]
29
+ description = "Ultralytics THOP package for fast computation of PyTorch model FLOPs and parameters."
30
30
  readme = "README.md"
31
31
  requires-python = ">=3.8"
32
- license = { file = "LICENSE" }
32
+ license = { "text" = "AGPL-3.0" }
33
33
  keywords = ["FLOPs", "PyTorch", "Model Analysis"] # Optional
34
34
  authors = [
35
35
  { name = "Ligeng Zhu", email = "ligeng.zhu+github@gmail.com" }
36
36
  ]
37
37
  maintainers = [
38
- { name = "Ligeng Zhu", email = "ligeng.zhu+github@gmail.com" }
38
+ { name = "Glenn Jocher" },
39
39
  ]
40
40
  classifiers = [
41
41
  "Development Status :: 4 - Beta",
@@ -57,14 +57,14 @@ classifiers = [
57
57
  "Operating System :: Microsoft :: Windows",
58
58
  ]
59
59
  dependencies = [
60
+ "numpy",
60
61
  "torch",
61
62
  ]
62
63
 
63
64
  [project.urls]
64
- "Homepage" = "https://github.com/ultralytics/thop"
65
-
66
- [tool.setuptools]
67
- package-data = { "thop" = ["__version__.py"] }
65
+ "Bug Reports" = "https://github.com/ultralytics/thop/issues"
66
+ "Funding" = "https://ultralytics.com"
67
+ "Source" = "https://github.com/ultralytics/thop/"
68
68
 
69
69
  [tool.setuptools.dynamic]
70
- version = { attr = "thop.__version__.VERSION" }
70
+ version = { attr = "thop.__version__" }
@@ -1,8 +1,8 @@
1
- # from .onnx_profile import OnnxProfile
1
+ __version__ = "0.2.3"
2
+
2
3
  import torch
3
4
 
4
5
  from .profile import profile, profile_origin
5
6
  from .utils import clever_format
6
7
 
7
8
  default_dtype = torch.float64
8
- from .__version__ import __version__
@@ -1,5 +1,3 @@
1
- from distutils.version import LooseVersion
2
-
3
1
  from thop.rnn_hooks import *
4
2
  from thop.vision.basic_hooks import *
5
3
 
@@ -7,11 +5,6 @@ from thop.vision.basic_hooks import *
7
5
  # logger.setLevel(logging.INFO)
8
6
  from .utils import prGreen, prRed, prYellow
9
7
 
10
- if LooseVersion(torch.__version__) < LooseVersion("1.0.0"):
11
- logging.warning(
12
- "You are using an old version PyTorch {version}, which THOP does NOT support.".format(version=torch.__version__)
13
- )
14
-
15
8
  default_dtype = torch.float64
16
9
 
17
10
  register_hooks = {
@@ -59,11 +52,9 @@ register_hooks = {
59
52
  nn.LSTM: count_lstm,
60
53
  nn.Sequential: zero_ops,
61
54
  nn.PixelShuffle: zero_ops,
55
+ nn.SyncBatchNorm: count_normalization,
62
56
  }
63
57
 
64
- if LooseVersion(torch.__version__) >= LooseVersion("1.1.0"):
65
- register_hooks.update({nn.SyncBatchNorm: count_normalization})
66
-
67
58
 
68
59
  def profile_origin(model, inputs, custom_ops=None, verbose=True, report_missing=False):
69
60
  """Profiles a PyTorch model's operations and parameters by applying custom or default hooks and returns total
@@ -98,14 +89,14 @@ def profile_origin(model, inputs, custom_ops=None, verbose=True, report_missing=
98
89
  if m_type in custom_ops: # if defined both op maps, use custom_ops to overwrite.
99
90
  fn = custom_ops[m_type]
100
91
  if m_type not in types_collection and verbose:
101
- print("[INFO] Customize rule %s() %s." % (fn.__qualname__, m_type))
92
+ print(f"[INFO] Customize rule {fn.__qualname__}() {m_type}.")
102
93
  elif m_type in register_hooks:
103
94
  fn = register_hooks[m_type]
104
95
  if m_type not in types_collection and verbose:
105
- print("[INFO] Register %s() for %s." % (fn.__qualname__, m_type))
96
+ print(f"[INFO] Register {fn.__qualname__}() for {m_type}.")
106
97
  else:
107
98
  if m_type not in types_collection and report_missing:
108
- prRed("[WARN] Cannot find rule for %s. Treat it as zero Macs and zero Params." % m_type)
99
+ prRed(f"[WARN] Cannot find rule for {m_type}. Treat it as zero Macs and zero Params.")
109
100
 
110
101
  if fn is not None:
111
102
  handler = m.register_forward_hook(fn)
@@ -179,14 +170,14 @@ def profile(
179
170
  # if defined both op maps, use custom_ops to overwrite.
180
171
  fn = custom_ops[m_type]
181
172
  if m_type not in types_collection and verbose:
182
- print("[INFO] Customize rule %s() %s." % (fn.__qualname__, m_type))
173
+ print(f"[INFO] Customize rule {fn.__qualname__}() {m_type}.")
183
174
  elif m_type in register_hooks:
184
175
  fn = register_hooks[m_type]
185
176
  if m_type not in types_collection and verbose:
186
- print("[INFO] Register %s() for %s." % (fn.__qualname__, m_type))
177
+ print(f"[INFO] Register {fn.__qualname__}() for {m_type}.")
187
178
  else:
188
179
  if m_type not in types_collection and report_missing:
189
- prRed("[WARN] Cannot find rule for %s. Treat it as zero Macs and zero Params." % m_type)
180
+ prRed(f"[WARN] Cannot find rule for {m_type}. Treat it as zero Macs and zero Params.")
190
181
 
191
182
  if fn is not None:
192
183
  handler_collection[m] = (
@@ -0,0 +1,188 @@
1
+ Metadata-Version: 2.1
2
+ Name: ultralytics-thop
3
+ Version: 0.2.3
4
+ Summary: Ultralytics THOP package for fast computation of PyTorch model FLOPs and parameters.
5
+ Author-email: Ligeng Zhu <ligeng.zhu+github@gmail.com>
6
+ Maintainer: Glenn Jocher
7
+ License: AGPL-3.0
8
+ Project-URL: Bug Reports, https://github.com/ultralytics/thop/issues
9
+ Project-URL: Funding, https://ultralytics.com
10
+ Project-URL: Source, https://github.com/ultralytics/thop/
11
+ Keywords: FLOPs,PyTorch,Model Analysis
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: Education
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.8
19
+ Classifier: Programming Language :: Python :: 3.9
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Topic :: Software Development
24
+ Classifier: Topic :: Scientific/Engineering
25
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
26
+ Classifier: Operating System :: POSIX :: Linux
27
+ Classifier: Operating System :: MacOS
28
+ Classifier: Operating System :: Microsoft :: Windows
29
+ Requires-Python: >=3.8
30
+ Description-Content-Type: text/markdown
31
+ License-File: LICENSE
32
+ Requires-Dist: numpy
33
+ Requires-Dist: torch
34
+
35
+ <br>
36
+ <img src="https://raw.githubusercontent.com/ultralytics/assets/main/logo/Ultralytics_Logotype_Original.svg" width="320">
37
+
38
+ # 🚀 THOP: PyTorch-OpCounter
39
+
40
+ Welcome to the [THOP](https://github.com/ultralytics/thop) repository, your comprehensive solution for profiling PyTorch models by computing the number of Multiply-Accumulate Operations (MACs) and parameters. This tool is essential for deep learning practitioners to evaluate model efficiency and performance.
41
+
42
+ [![GitHub Actions](https://github.com/ultralytics/thop/actions/workflows/format.yml/badge.svg)](https://github.com/ultralytics/thop/actions/workflows/main.yml) [![PyPI version](https://badge.fury.io/py/ultralytics-thop.svg)](https://badge.fury.io/py/ultralytics-thop) <a href="https://ultralytics.com/discord"><img alt="Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
43
+
44
+ ## 📄 Description
45
+
46
+ THOP offers an intuitive API to profile PyTorch models by calculating the number of MACs and parameters. This functionality is crucial for assessing the computational efficiency and memory footprint of deep learning models.
47
+
48
+ ## 📦 Installation
49
+
50
+ You can install THOP via pip:
51
+
52
+ ```bash
53
+ pip install ultralytics-thop
54
+ ```
55
+
56
+ Alternatively, install the latest version directly from GitHub:
57
+
58
+ ```bash
59
+ pip install --upgrade git+https://github.com/ultralytics/thop.git
60
+ ```
61
+
62
+ ## 🛠 How to Use
63
+
64
+ ### Basic Usage
65
+
66
+ To profile a model, you can use the following example:
67
+
68
+ ```python
69
+ from torchvision.models import resnet50
70
+ from thop import profile
71
+ import torch
72
+
73
+ model = resnet50()
74
+ input = torch.randn(1, 3, 224, 224)
75
+ macs, params = profile(model, inputs=(input, ))
76
+ ```
77
+
78
+ ### Define Custom Rules for Third-Party Modules
79
+
80
+ You can define custom rules for unsupported modules:
81
+
82
+ ```python
83
+ import torch.nn as nn
84
+
85
+ class YourModule(nn.Module):
86
+ # your definition
87
+ pass
88
+
89
+ def count_your_model(model, x, y):
90
+ # your rule here
91
+ pass
92
+
93
+ input = torch.randn(1, 3, 224, 224)
94
+ macs, params = profile(model, inputs=(input, ), custom_ops={YourModule: count_your_model})
95
+ ```
96
+
97
+ ### Improve Output Readability
98
+
99
+ Use `thop.clever_format` for a more readable output:
100
+
101
+ ```python
102
+ from thop import clever_format
103
+ macs, params = clever_format([macs, params], "%.3f")
104
+ ```
105
+
106
+ ## 📊 Results of Recent Models
107
+
108
+ The following table presents the parameters and MACs for popular models. These results can be reproduced using the script `benchmark/evaluate_famous_models.py`.
109
+
110
+ <table align="center">
111
+ <tr>
112
+ <td>
113
+
114
+ | Model | Params(M) | MACs(G) |
115
+ | ---------------- | --------- | ------- |
116
+ | alexnet | 61.10 | 0.77 |
117
+ | vgg11 | 132.86 | 7.74 |
118
+ | vgg11_bn | 132.87 | 7.77 |
119
+ | vgg13 | 133.05 | 11.44 |
120
+ | vgg13_bn | 133.05 | 11.49 |
121
+ | vgg16 | 138.36 | 15.61 |
122
+ | vgg16_bn | 138.37 | 15.66 |
123
+ | vgg19 | 143.67 | 19.77 |
124
+ | vgg19_bn | 143.68 | 19.83 |
125
+ | resnet18 | 11.69 | 1.82 |
126
+ | resnet34 | 21.80 | 3.68 |
127
+ | resnet50 | 25.56 | 4.14 |
128
+ | resnet101 | 44.55 | 7.87 |
129
+ | resnet152 | 60.19 | 11.61 |
130
+ | wide_resnet101_2 | 126.89 | 22.84 |
131
+ | wide_resnet50_2 | 68.88 | 11.46 |
132
+
133
+ </td>
134
+ <td>
135
+
136
+ | Model | Params(M) | MACs(G) |
137
+ | ------------------ | --------- | ------- |
138
+ | resnext50_32x4d | 25.03 | 4.29 |
139
+ | resnext101_32x8d | 88.79 | 16.54 |
140
+ | densenet121 | 7.98 | 2.90 |
141
+ | densenet161 | 28.68 | 7.85 |
142
+ | densenet169 | 14.15 | 3.44 |
143
+ | densenet201 | 20.01 | 4.39 |
144
+ | squeezenet1_0 | 1.25 | 0.82 |
145
+ | squeezenet1_1 | 1.24 | 0.35 |
146
+ | mnasnet0_5 | 2.22 | 0.14 |
147
+ | mnasnet0_75 | 3.17 | 0.24 |
148
+ | mnasnet1_0 | 4.38 | 0.34 |
149
+ | mnasnet1_3 | 6.28 | 0.53 |
150
+ | mobilenet_v2 | 3.50 | 0.33 |
151
+ | shufflenet_v2_x0_5 | 1.37 | 0.05 |
152
+ | shufflenet_v2_x1_0 | 2.28 | 0.15 |
153
+ | shufflenet_v2_x1_5 | 3.50 | 0.31 |
154
+ | shufflenet_v2_x2_0 | 7.39 | 0.60 |
155
+ | inception_v3 | 27.16 | 5.75 |
156
+
157
+ </td>
158
+ </tr>
159
+ </table>
160
+
161
+ ## 💡 Contribute
162
+
163
+ We welcome community contributions to enhance THOP. Please check our [Contributing Guide](https://docs.ultralytics.com/help/contributing) for more details. Your feedback and suggestions are highly appreciated!
164
+
165
+ ## 📄 License
166
+
167
+ THOP is licensed under the AGPL-3.0 License. For more information, see the [LICENSE](https://github.com/ultralytics/thop/blob/master/LICENSE) file.
168
+
169
+ ## 📮 Contact
170
+
171
+ For bugs or feature requests, please open an issue on [GitHub Issues](https://github.com/ultralytics/thop/issues). Join our community on [Discord](https://ultralytics.com/discord) for discussions and support.
172
+
173
+ <br>
174
+ <div align="center">
175
+ <a href="https://github.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-github.png" width="3%" alt="Ultralytics GitHub"></a>
176
+ <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
177
+ <a href="https://www.linkedin.com/company/ultralytics/"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-linkedin.png" width="3%" alt="Ultralytics LinkedIn"></a>
178
+ <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
179
+ <a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="3%" alt="Ultralytics Twitter"></a>
180
+ <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
181
+ <a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
182
+ <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
183
+ <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="Ultralytics TikTok"></a>
184
+ <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
185
+ <a href="https://www.instagram.com/ultralytics/"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-instagram.png" width="3%" alt="Ultralytics Instagram"></a>
186
+ <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
187
+ <a href="https://ultralytics.com/discord"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="3%" alt="Ultralytics Discord"></a>
188
+ </div>
@@ -6,7 +6,6 @@ tests/test_matmul.py
6
6
  tests/test_relu.py
7
7
  tests/test_utils.py
8
8
  thop/__init__.py
9
- thop/__version__.py
10
9
  thop/fx_profile.py
11
10
  thop/onnx_profile.py
12
11
  thop/profile.py