pms-nvidia-processor 2.10.2__tar.gz → 2.11.0__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 (63) hide show
  1. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/PKG-INFO +1 -1
  2. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/__init__.py +3 -1
  3. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/base/processor.py +3 -2
  4. pms_nvidia_processor-2.11.0/pms_nvidia_processor/processor/tc/config.py +27 -0
  5. pms_nvidia_processor-2.11.0/pms_nvidia_processor/processor/tc/context.py +38 -0
  6. pms_nvidia_processor-2.11.0/pms_nvidia_processor/processor/tc/processor.py +186 -0
  7. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/utility/builder.py +38 -0
  8. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pyproject.toml +2 -2
  9. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/README.md +0 -0
  10. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/base/config.py +0 -0
  11. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/base/dependency.py +0 -0
  12. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/base/logger.py +0 -0
  13. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/cdru_f2/config.py +0 -0
  14. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/cdru_f2/context.py +0 -0
  15. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/cdru_f2/processor.py +0 -0
  16. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/col_en/config.py +0 -0
  17. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/col_en/context.py +0 -0
  18. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/col_en/processor.py +0 -0
  19. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/color_resnet/config.py +0 -0
  20. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/color_resnet/context.py +0 -0
  21. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/color_resnet/processor_post.py +0 -0
  22. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/color_resnet/processor_pre.py +0 -0
  23. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/do_f3/config.py +0 -0
  24. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/do_f3/context.py +0 -0
  25. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/do_f3/processor.py +0 -0
  26. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dpir/config.py +0 -0
  27. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dpir/context.py +0 -0
  28. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dpir/processor.py +0 -0
  29. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dru_asm_sr_f3/config.py +0 -0
  30. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dru_asm_sr_f3/context.py +0 -0
  31. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dru_asm_sr_f3/processor.py +0 -0
  32. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dru_rbpn_deinter_f3_gloss/config.py +0 -0
  33. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dru_rbpn_deinter_f3_gloss/context.py +0 -0
  34. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dru_rbpn_deinter_f3_gloss/processor.py +0 -0
  35. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dru_rbpn_deinter_pc_f2/config.py +0 -0
  36. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dru_rbpn_deinter_pc_f2/context.py +0 -0
  37. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dru_rbpn_deinter_pc_f2/processor.py +0 -0
  38. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dru_rbpn_sr_f3/config.py +0 -0
  39. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dru_rbpn_sr_f3/context.py +0 -0
  40. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dru_rbpn_sr_f3/processor.py +0 -0
  41. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dru_rbpn_sr_f5/config.py +0 -0
  42. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dru_rbpn_sr_f5/context.py +0 -0
  43. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/dru_rbpn_sr_f5/processor.py +0 -0
  44. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/fisf/config.py +0 -0
  45. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/fisf/context.py +0 -0
  46. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/fisf/processor.py +0 -0
  47. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/gg/config.py +0 -0
  48. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/gg/context.py +0 -0
  49. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/processor/gg/processor.py +0 -0
  50. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/utility/batch.py +0 -0
  51. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/utility/caster.py +0 -0
  52. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/utility/normalizer/__init__.py +0 -0
  53. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/utility/normalizer/_factory.py +0 -0
  54. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/utility/normalizer/_multi_normalizer.py +0 -0
  55. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/utility/normalizer/_normalization_param.py +0 -0
  56. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/utility/normalizer/_single_normalizer.py +0 -0
  57. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/utility/patcher/__init__.py +0 -0
  58. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/utility/patcher/_patch_collection.py +0 -0
  59. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/utility/patcher/_patch_position.py +0 -0
  60. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/utility/patcher/_patcher.py +0 -0
  61. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/utility/patcher/_patcher_v2.py +0 -0
  62. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/utility/patcher/_patcher_w.py +0 -0
  63. {pms_nvidia_processor-2.10.2 → pms_nvidia_processor-2.11.0}/pms_nvidia_processor/utility/pip.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pms-nvidia-processor
3
- Version: 2.10.2
3
+ Version: 2.11.0
4
4
  Summary: lib for pms nvidia processors
5
5
  Author: HyeongSeok Kim
6
6
  Author-email: tiryul@gmail.com
@@ -13,6 +13,7 @@ from .processor.gg.processor import GGProcessor
13
13
  from .processor.col_en.processor import COLENProcessor
14
14
  from .processor.cdru_f2.processor import CDRUF2Processor
15
15
  from .processor.do_f3.processor import DOF3Processor
16
+ from .processor.tc.processor import TCProcessor
16
17
 
17
18
 
18
19
  __all__: list[str] = [
@@ -29,6 +30,7 @@ __all__: list[str] = [
29
30
  "COLENProcessor",
30
31
  "CDRUF2Processor",
31
32
  "DOF3Processor",
33
+ "TCProcessor",
32
34
  ]
33
35
 
34
- __version__ = "2.10.2"
36
+ __version__ = "2.11.0"
@@ -68,8 +68,9 @@ class NVIDIAProcessorBase(IEngineProcessor[InputTypeT, OutputTypeT], metaclass=A
68
68
  self.session.run()
69
69
 
70
70
  def __del__(self):
71
- if self._session:
72
- del self._session
71
+ session = getattr(self, "_session", None)
72
+ if session:
73
+ del session
73
74
 
74
75
  @property
75
76
  def session(self) -> TRT.TRTSession:
@@ -0,0 +1,27 @@
1
+ from ..base.config import *
2
+
3
+
4
+ class TCConfig:
5
+ NUMBER_OF_FRAMES = 1
6
+ NUMBER_OF_INPUT_CHANNELS: int = 3 * NUMBER_OF_FRAMES
7
+ NUMBER_OF_OUTPUT_CHANNELS: int = 3
8
+ UPSCALE_RATIO: int = 1
9
+ PATCH_SIZE = 512
10
+ MAX_BATCH_SIZE = 8
11
+ MIN_BATCH_SIZE = 1
12
+ OPT_BATCH_SIZE = 4
13
+ INPUT_OVERLAB_LENGTH = 256 # PATCH_SIZE // 2
14
+
15
+ PATCHER_CONFIG = PatcherWIOConfig(
16
+ patch_size=PATCH_SIZE,
17
+ upscale_ratio=UPSCALE_RATIO,
18
+ number_of_input_channels=NUMBER_OF_INPUT_CHANNELS,
19
+ number_of_output_channels=NUMBER_OF_OUTPUT_CHANNELS,
20
+ input_overlab_length=INPUT_OVERLAB_LENGTH,
21
+ )
22
+ TRT_CONFIG = TRTIOConfig(
23
+ patch_size=PATCH_SIZE,
24
+ upscale_ratio=UPSCALE_RATIO,
25
+ number_of_input_channels=NUMBER_OF_INPUT_CHANNELS,
26
+ number_of_output_channels=NUMBER_OF_OUTPUT_CHANNELS,
27
+ )
@@ -0,0 +1,38 @@
1
+ from .config import *
2
+ from ..base.dependency import *
3
+ from ..base.processor import *
4
+ from ...utility import patcher, normalizer
5
+
6
+
7
+ class TCContext:
8
+
9
+ def __init__(
10
+ self,
11
+ input_vector: np.ndarray,
12
+ input_patcher: patcher.PatcherW,
13
+ ) -> None:
14
+ config = TCConfig()
15
+
16
+ self.input_vector = input_vector
17
+ self.input_pathcer = input_patcher
18
+ self.padded_input_image = patcher.pad_vector(
19
+ vector=self.input_vector,
20
+ overlap_length=config.PATCHER_CONFIG.input_overlab_length,
21
+ mode="edge",
22
+ )
23
+ self.input_patches: list[np.ndarray] = self.input_pathcer.slice(
24
+ self.padded_input_image
25
+ )
26
+ self.output_patches: np.ndarray = np.zeros(
27
+ (
28
+ len(self.input_patches),
29
+ config.PATCH_SIZE * config.UPSCALE_RATIO,
30
+ config.PATCH_SIZE * config.UPSCALE_RATIO,
31
+ 3,
32
+ ),
33
+ np.float32,
34
+ )
35
+ self.output_vector: np.ndarray = np.zeros(
36
+ (*self.padded_input_image.shape[:-1], 3),
37
+ np.float32,
38
+ )
@@ -0,0 +1,186 @@
1
+ from .config import *
2
+ from .context import *
3
+ from ..base.dependency import *
4
+ from ..base.processor import *
5
+ from ...utility import patcher, normalizer, batch, caster
6
+
7
+
8
+ def _pre_processing(
9
+ batch_input_images: list[np.ndarray],
10
+ input_buffer: np.ndarray,
11
+ ) -> None:
12
+ b = len(batch_input_images)
13
+
14
+ for batch_idx in range(b):
15
+ image = batch_input_images[batch_idx]
16
+ h, w, c = image.shape
17
+ for channel_idx in range(c):
18
+ input_buffer[batch_idx, channel_idx, :h, :w] = image[:, :, channel_idx]
19
+
20
+
21
+ def _post_processing(
22
+ output_buffer: np.ndarray, # BxCxHxW
23
+ output_image: np.ndarray, # BxHxWxC
24
+ ) -> None:
25
+
26
+ b, h, w, c = output_image.shape
27
+ for i in range(3):
28
+ np.copyto(src=output_buffer[:b, i, :h, :w], dst=output_image[:, :, :, i])
29
+
30
+
31
+ @register
32
+ class TCProcessor(NVIDIAProcessorBase[EngineIOData, EngineIOData]):
33
+
34
+ def __init__(
35
+ self,
36
+ concurrency: int,
37
+ index: int,
38
+ model_path: str,
39
+ device: Literal["auto"] | int = "auto",
40
+ normalization: str = "color-basic",
41
+ ):
42
+ # super
43
+ super().__init__(
44
+ concurrency=concurrency,
45
+ index=index,
46
+ model_path=model_path,
47
+ device=device,
48
+ )
49
+ self.config = TCConfig
50
+ self.normalizer = normalizer.NormalizerFactory.create_multi(normalization)
51
+ self.patcher = None
52
+
53
+ async def inference(
54
+ self,
55
+ batch_input_data: list[np.ndarray],
56
+ batch_output_data: np.ndarray,
57
+ ):
58
+ session = self.session
59
+ batch = len(batch_input_data)
60
+
61
+ _pre_processing(
62
+ batch_input_images=batch_input_data,
63
+ input_buffer=self.input_buffer,
64
+ )
65
+ session.run()
66
+ _post_processing(
67
+ output_buffer=self.output_buffer,
68
+ output_image=batch_output_data,
69
+ )
70
+
71
+ async def _run(self, input_data: EngineIOData) -> EngineIOData:
72
+ max_batch_size = self.io_shapes["input"][0][0]
73
+
74
+ # 여기서 patching
75
+ input_vector = self.caster.cast(input_data.frame)
76
+ [
77
+ self.normalizer.normalize(input_vector[:, :, i * 3 : (i + 1) * 3], 2)
78
+ for i in range(self.config.NUMBER_OF_FRAMES)
79
+ ]
80
+ context = TCContext(input_vector, self.patcher)
81
+
82
+ # batch inference
83
+ for batch_input_patches, batch_output_patches in zip(
84
+ batch.BatchTool.batch_list(context.input_patches, max_batch_size),
85
+ batch.BatchTool.batch_vector(context.output_patches, max_batch_size),
86
+ ):
87
+ await self.inference(
88
+ batch_input_data=batch_input_patches,
89
+ batch_output_data=batch_output_patches,
90
+ )
91
+
92
+ self.patcher.merge(
93
+ patches=context.output_patches,
94
+ output_vector=context.output_vector,
95
+ )
96
+ context.output_vector = patcher.crop_vector(
97
+ context.output_vector, context.input_pathcer._input_overlap_length
98
+ )
99
+
100
+ self.normalizer.denormalize(context.output_vector, 2)
101
+ result = EngineIOData(
102
+ frame_id=input_data.frame_id,
103
+ frame=self.caster.uncast(context.output_vector),
104
+ )
105
+ return result
106
+
107
+ def _ready_processor(self) -> bool:
108
+ return True
109
+
110
+ def _bind_io(self, input_data: EngineIOData):
111
+ self.caster = caster.Caster(input_data.frame)
112
+
113
+ patcher_config = self.config.PATCHER_CONFIG
114
+ trt_config = self.config.TRT_CONFIG
115
+
116
+ input_image: np.ndarray = input_data.frame # type: ignore
117
+ padded_input_image = patcher.pad_vector(
118
+ input_image,
119
+ overlap_length=patcher_config.input_overlab_length,
120
+ )
121
+ output_image: np.ndarray = np.zeros(
122
+ (
123
+ input_image.shape[0] * self.config.UPSCALE_RATIO,
124
+ input_image.shape[1] * self.config.UPSCALE_RATIO,
125
+ self.config.NUMBER_OF_OUTPUT_CHANNELS,
126
+ )
127
+ )
128
+ temp_patcher = patcher.PatcherW(
129
+ **patcher_config.build_patcher_params(
130
+ input_vector=padded_input_image,
131
+ output_vector=output_image,
132
+ )
133
+ )
134
+ n_patches = len(temp_patcher.slice(input_vector=padded_input_image))
135
+
136
+ # set io shape
137
+ self.batch_size = min(n_patches, self.config.MAX_BATCH_SIZE)
138
+ self.io_shapes = {
139
+ "input": (
140
+ [self.batch_size, *trt_config.input_shape],
141
+ np.float32,
142
+ ),
143
+ "output": (
144
+ [self.batch_size, *trt_config.output_shape],
145
+ np.float32,
146
+ ),
147
+ }
148
+
149
+ # init trt engine
150
+ self.initialize_trt_session(
151
+ required_batch_size=self.batch_size,
152
+ io_shape=self.io_shapes,
153
+ )
154
+ self.patcher = patcher.PatcherW(
155
+ **patcher_config.build_patcher_params(
156
+ input_vector=padded_input_image,
157
+ output_vector=output_image,
158
+ )
159
+ )
160
+
161
+ # self.session._trt_proxy._context.push()
162
+
163
+ # set io buffer
164
+ self.input_buffer = self.session._input_bindings[0].host_buffer.reshape(
165
+ self.io_shapes["input"][0]
166
+ )
167
+ self.output_buffer = self.session._output_bindings[0].host_buffer.reshape(
168
+ *self.io_shapes["output"][0]
169
+ )
170
+ self.input_buffer.fill(0)
171
+ self.output_buffer.fill(0)
172
+
173
+ return True
174
+
175
+ def _get_live(self) -> bool:
176
+ return True
177
+
178
+ def _get_concurrency(self) -> int:
179
+ return self._concurrency
180
+
181
+ # def __del__(self):
182
+ # if self._session:
183
+ # self._session._trt_proxy._context.pop()
184
+ # del self._session
185
+ # if self.patcher:
186
+ # del self.patcher
@@ -21,6 +21,7 @@ from ..processor.gg.config import GGConfig
21
21
  from ..processor.col_en.config import ColEnConfig
22
22
  from ..processor.cdru_f2.config import CDRUF2Config
23
23
  from ..processor.do_f3.config import DOF3Config
24
+ from ..processor.tc.config import TCConfig
24
25
 
25
26
  __MODEL_CONFIG_MAP = {
26
27
  "DPIR": DPIRConfig,
@@ -37,6 +38,7 @@ __MODEL_CONFIG_MAP = {
37
38
  "CDRU-F2": CDRUF2Config,
38
39
  "DO-L-F3": DOF3Config,
39
40
  "DO-H-F3": DOF3Config,
41
+ "TC": TCConfig,
40
42
  }
41
43
 
42
44
 
@@ -106,6 +108,42 @@ def create_build_params(
106
108
  },
107
109
  }
108
110
  )
111
+ elif config is TCConfig:
112
+ params.update(
113
+ {
114
+ "build_config_flags": [],
115
+ "shape_profile": {
116
+ "input": {
117
+ "min_shape": [
118
+ config.MIN_BATCH_SIZE,
119
+ *config.TRT_CONFIG.input_shape,
120
+ ],
121
+ "opt_shape": [
122
+ config.OPT_BATCH_SIZE,
123
+ *config.TRT_CONFIG.input_shape,
124
+ ],
125
+ "max_shape": [
126
+ config.MAX_BATCH_SIZE,
127
+ *config.TRT_CONFIG.input_shape,
128
+ ],
129
+ },
130
+ "output": {
131
+ "min_shape": [
132
+ config.MIN_BATCH_SIZE,
133
+ *config.TRT_CONFIG.output_shape,
134
+ ],
135
+ "opt_shape": [
136
+ config.OPT_BATCH_SIZE,
137
+ *config.TRT_CONFIG.output_shape,
138
+ ],
139
+ "max_shape": [
140
+ config.MAX_BATCH_SIZE,
141
+ *config.TRT_CONFIG.output_shape,
142
+ ],
143
+ },
144
+ },
145
+ }
146
+ )
109
147
  elif config is ColorResnetPreConfig:
110
148
  params.update(
111
149
  {
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pms-nvidia-processor"
3
- version = "2.10.2"
3
+ version = "2.11.0"
4
4
  description = "lib for pms nvidia processors"
5
5
  authors = ["HyeongSeok Kim <tiryul@gmail.com>"]
6
6
  readme = "README.md"
@@ -20,7 +20,7 @@ pytest-order = "^1.2.0"
20
20
  pms-model-manager = "^1.3.1"
21
21
  tensorrt = "^10.13"
22
22
  cuda-python = "^13.0"
23
- tensorrt-cu13-libs = "^10.13"
23
+ tensorrt-cu13-libs = "^10.13.2"
24
24
  tensorrt-cu13-bindings = "^10.13"
25
25
 
26
26