converter::python make them thread safe with GIL
[platform/upstream/nnstreamer.git] / CHANGES
1 2.2.0 -> 2.3.0
2         - 2.3.0 is a devel version for 2.4.0 release. Unstable and experimental features are welcomed in this version.
3
4 2.1.1 -> 2.2.0
5         - This is NNStreamer 2.2.0 Tizen 7.0 M2 release.
6
7         - NNStreamer-Edge.
8                 - Edge-AI (Among-Device AI) implementation is moved to nnstreamer-edge so that non-nnstreamer/gstreamer systems can connect to nnstreamer pipelines.
9                 - NNStreamer-Edge provides inter-pipeline stream connections with various protocols transparently.
10                 - NNStreamer-Edge does not depend on gstreamer/nnstreamer; thus, non-gstreamer systems may connect to nnstreamer/gstreamer pipelines via nnstreamer-edge.
11                 - The "MQTT-Hybrid" protocol for high bandwidth communication w/ mqtt features included.
12
13         - ML-Service API phase 2 is completed and released via api.git
14
15         - New Subplugins
16                 - tensor_filter / DeepViewRT (NXP)
17                 - tensor_filter / MXNet
18                 - tensor_filter / tensorflow2-lite-custom (allow to designate user-supplied tf2-lite binaries)
19
20         - Major features
21                 - tensor-query-client, tensor-query-serversrc/sink use nnstreamer-edge. Protocols are handled at nnstreamer-edge and it now support aitt as one of its backends.
22                 - Float16 (FP16) tensor stream support.
23                 - Rank limit of tensor stream increased: 4 --> 8 (experimental. with known issues)
24                 - Error messages, exception handling, and documentations are improved for application / pipeline writers.
25
26         - Minor features
27                 - Added several workarounds for glitches of Qualcomm-SNPE's libraries.
28                 - Support additional .ini file for subplugin configuration. Required by clients who want to separate permissions for controlling user-installable subplugins and system-installable core files.
29                 - Ability to run multiple instances of unit tests in a single machine.
30                 - Add gcc >= 11 support
31                 - Fixed multithreading error in tensor_filter::python
32                 - Python2 dropped. Only Python3 is supported.
33                 - Refactored to increase SAM score (architecture quality assessment).
34                 - Query, GRPC: added minor features requested by users.
35                 - A lot of test cases and fixes introduced.
36                 - Ubuntu 22.04 published.
37                 - Python >= 3.10 support.
38                 - Tensor-decoder::bounding-box. ssd-mobilenet v3 support
39
40         - Experimental features
41                 - edgesrc, edgesink. stream pub/sub elements based on nnstreamer-edge
42
43         - Known issues
44                 - Multithreading errors in tensor_decoder::python and tensor_converter::python
45                 - FP16 in x64/x86 is not tested. (tested in armv7l/aarch64 only)
46                 - Rank > 4 support is not activated by default. Dimension properties of GSTCAP is not fully backward compatible (to be fixed).
47
48 2.1.0 -> 2.1.1
49         - Tizen 7.0 M1 RCx preparation and NNStreamer Mini Summit 2022-04 release.
50
51         - NNStreamer-Edge refactoring (module for Among-Device AI (a.k.a. Edge-AI))
52                 - Ongoing effort of nnstreamer-edge separation from nnstreamer.
53                 - In the future, nnstreamer-edge will provide among-device AI functions and nnstreamer will provide gstreamer plugins for such functions. Non-gstreamer systems may connect to nnstreamer-edge based pipelines without gstreamer as clients.
54                 - NNStreamer-Edge will be using AITT as its default backend, leaving protocol issues to AITT.
55                 - In the future, nnstreamer-edge will be compatible with non-Linux ultra-lightweight systems (e.g., Tizen-RT)
56
57         - ML-Service API preparation is going on at api.git.
58
59         - Major features
60                 - MQTT timestamping w/ NTP. (later will be migrated to nnstreamer-edge & aitt)
61                 - Query (later will be migrated to nnstreamer-edge & aitt): robustness support, mqtt-hybrid protocol, performance fixes for multi-clients.
62                 - More coverage for SNPE support: quantized model support, SNPE dimension bug workaround, fixes from/for production team.
63                 - Flexible tensor support w/ decoder, converter, flatbuffer.
64
65         - Minor features
66                 - MQTT unittest basis, generic stream support, android support, timeout handling, ... (and many!)
67                 - Utility functions exported for plugin writers.
68                 - Tensorflow-lite delegation refactored for generality: may use XNNPACK more easily.
69                 - Tensorflow-lite multi-lib support.
70                 - PyTorch: support complex output tensor formats.
71                 - NNStreamer multi-lib support.
72                 - Decoder: boundingbox-yolov5
73                 - Filter: TRIx-Engine support. (NPUs of Samsung 2022 TV)
74                 - Docker support refactored and cleaned up.
75
76         - Fixes
77                 - ARMNN build errors.
78                 - Android errors
79                 - Build errors with recent compiler updates. (gcc 11)
80                 - Fixes upstreamed from productions
81                 - Errors w/ library updates: Lua >= 5.3, GLib >= 2.68
82                 - Regression fixes: openvino, edgetpu, tensorrt
83                 - Memory leaks in C++ subplugin infra.
84
85         - Known issues: PPA/Launchpad build broken!
86
87
88 2.0.0 -> 2.1.0
89         - 2.1.0 is a devel version for 2.2.0 release, which is planned to be the LTS release of 2022.
90
91 1.7.2 -> 2.0.0
92         - NNStreamer for Edge-AI
93                 - MQTT Pub/Sub streams can be synchronized with timestamp values
94                 - MQTT-Hybrid Pub/Sub protocol (send high-bandwidth data streams with HLS) is not included in 2.0. This feature will be enabled with 2.1+ releases.
95                 - Query (workload offloading) with TCP is included as an experimental feature. Query will be updated to use MQTT-Hybrid in future 2.1+ releases.
96
97         - Stream data type redefined (backward compatible)
98                 - Flex-tensor and Sparse-tensor as a format of "other/tensors".
99                 - "other/tensor" is obsoleted (but will be kept supported for a while). Use "other/tensors,num_tensors=1" for single tensor stream.
100                 - The conventional tensor stream is "Static-tensor", which is the default format of "other/tensors".
101                 - Many elements of nnstreamer (including tensor-transform) support "Flex-tensor" as well as "Static-tensor".
102                 - The MIME type is "other/tensors,format={static, flexible, sparse}". If not specified, format is static.
103
104         - Major features
105                 - Flexbuf supported as subplugins of converter and decoder.
106                 - LUA scripts supports as custom filters. (tensor-filter)
107                 - Debian pdebuild support (tested with Sid).
108
109         - Minor features
110                 - Decoder/Bounding-boxes: more options for more diverse neural net settings.
111                 - SNAP+TF-Lite support.
112
113         - Fixes
114                 - Tensor-filter: Python test fail, TVM bugs, code complexity, error messages, C++ exception handling
115                 - Tensor-crop: region setting, timestamp handling
116                 - Tizen/Family-Hub support.
117                 - Yocto, MacOS build errors.
118                 - ARMNN version updates.
119
120 1.7.1 -> 1.7.2
121         - NNStreamer for Edge-AI project started.
122                 - Main features of 1.8.0 release and its immediate successors will be "Edge-AI", which allows distributed on-device AI inferences.
123
124                 - The new stream type, "Flex-Tensor", is introduced. Dimensions and types of tensor stream may vary per frame without cap-renegotiations.
125                         - Many nnstreamer's tensor-* elements support Flex-Tensor.
126                         - You may use tensor-converter to convert between flex-tensor and (static) tensor.
127                 - MQTT-SINK and MQTT-SRC elements are added for edge-AI systems with MQTT pub/sub streams.
128                         - MQTT streams support "ANY" capabilities.
129                         - Assuming that clocks of nodes are synchronized by NTP or other mechanisms, pipeline users may send timestamp related info via MQTT streams for multi-source synchronization.
130                 - Tensor-crop, a new nnstreamer-gstreamer element.
131                         - Basic feature only (cropping a tensor stream with information of another tensor stream)
132
133         - Major features
134                 - GSTPipeline to PBTXT parser. You can use PBTXT-pipeline visualization tools with the parsed results.
135                 - FlexBuffers support.
136                 - TVM support
137
138                 - Tensor-IF with custom (user code plugged at run-time) conditions
139                 - Tensorflow-lite delegation designation is generalized.
140                 - Tensorflow2-lite XNNPACK delegation
141                 - NNTrainer-inference can be attached as a filter along with both API sets.
142                 - CAPI: updated documentation, added new enums for recent nnstreamer features, ...
143                 - API interface and implementation is separated to another git repository for better architecture.
144                 - Tensor-converter and Tensor-decoder support custom ops.
145         - Minor features
146                 - Filter subplugin priority with ini file configuration.
147                 - Decoder/Bounding-Box improved: output tensor mapping, clamp bounding box locations, labeling issues, more options.
148                 - Decoder/Pose-Estimation improved: proper labeling.
149                 - Testcases added for gRPC, Android, Tensor-rate, ...
150                 - Refactoring (reduce complexity, remove duplicity, build options, ...)
151                 - Android build & release upgraded.
152                 - Converter usability upgrade: property to list subplugins, subplugin naming/install rules.
153                 - Pytorch: exception handling, Android build
154                 - gRPC: per-IDL packaging, interface updates, common-code revise, async mode, ...
155                 - Support Tensorflow 2.4 API (TF has broken backward compatibility again)
156                 - Tensor-transform: may operate on chosen tensor or channel only.
157                 - Tensor-transform: new option for normalization, "dc-average", is added.
158         - Fixes
159                 - Android resource leak.
160                 - CAPI timing, header issues, seg-faults, memory leaks, ...
161                 - MacOS build errors.
162                 - TensorRT dependency bugs
163                 - Edge-TPU compatibility issues.
164                 - Unit test fixes (memory leaks, resource leaks, skip disabled features, ...)
165                 - Fixed reported issues (security, memory leaks, query-caps, ...)
166         - Extra
167                 - Support for Python 2.x is dropped.
168                 - Automated doc-page generation with Hotdoc.
169                 - Android build now includes GST-Shark for performance profiling.
170
171 1.7.0 -> 1.7.1
172         - Major features
173                 - Tensor-IF, a new element. It allows to create conditional branches based on tensor values.
174                 - Join, a new element. It merges output sinks from src pads of different elements with the same GST-Cap.
175                 - Tensor-rate, a new element. It allows throttling by generating QoS messages.
176                 - TensorRT support
177                 - TF1-lite and TF2-lite coexistance
178                 - TFx-lite NNAPI, GPU Delegation
179
180         - Minor features
181                 - hw-accel options for tensor-filters are refactored
182                 - python3-embed enabled if python3 >= 3.8
183                 - Subplugin initialization optimization.
184                 - Docker scripts for Ubuntu developers.
185
186         - Fixes
187                 - flatbuf dependency related with tensorflow-lite.
188                 - tensor-decoder configures framerate.
189                 - Dynamic dimension related API issues fixed.
190                 - MacOS, Yocto compatibility issues fixed. (A few Yocto known issues are still remaining.)
191                 - License mismatches resolved.
192                 - A few Test cases fixed.
193                 - Packaging issues fixed and style cleaned-up.
194
195         - Extra
196                 - A lot of interesting sample applications are added.
197
198 1.6.0 -> 1.7.0
199         - 1.7.0 is a devel version for 1.8.0 release, which is planned to be released synchronously with Tizen 6.5 releases.
200
201 1.5.3 -> 1.6.0
202         - This is an official release for Tizen (6.0-M2) and Android developers. 1.6.y will be an LTS released with hotfixes in the future. We will move on to 1.7.0 after this release.
203
204         - Tizen
205                 - Minor API and documentation updates
206                 - APIs for custom filters
207                 - C API latency optimization
208
209         - Android
210                 - Java API latency optimization
211                 - nnfw (ONE) runtime support, custom-easy support.
212                 - Size optimization for products.
213
214         - Major features
215                 - Plug-and-play sub-plugins for converters
216                 - Flatbuf --> NNStreamer converter
217                 - Protobuf --> NNStreamer converter
218                 - NNStreamer --> Flatbuf decoder
219                 - NNStreamer-Check utility for nnstreamer developers.
220                 - Decoders accept dynamic configurations.
221                 - Converters may emit multi-tensor streams.
222                 - NNShark subproject being integrated.
223                 - Tensorflow-lite 2 support
224
225         - Minor features
226                 - Decoder subplugins w/ NEON support (depth/deeplab)
227                 - Unregister for custom-easy
228                 - Version fetching mechanisms.
229                 - More profiling capabilities.
230                 - Edge-AI examples and tests.
231                 - NNFW support for latest versions and more tensor types.
232                 - Product-wise size and build-time optimization.
233                 - Memory operation optimization.
234                 - More exception handling routines.
235                 - NEON and other CPU optimization techniques determined in run-time.
236
237         - Fixes
238                 - Each instance of a custom filter or subplugin now have independent properties.
239                 - Decoder (image-seg), performance profiling property of filter
240                 - Transform negotiation errors, auto-fw filter, repo-sink, memory leaks
241                 - Build-deps cleaned up, Code-style check setup for C++,
242                 - Edge-TPU & Movidius subplugins tested and fixed.
243                 - Packaging issues, permission issues of sensor-src (Tizen)
244                 - Caffe2/Pytorch w/ Protobuf issues. Per-arch build and test issues.
245                 - EOS handling with APIs.
246                 - 0 SVACE and 0 Coverity issues.
247
248 1.5.2 -> 1.5.3
249         - Mediapipe's graphs (NNStreamer pipeline equivalent) may be embedded as an element in NNStreamer pipeline
250         - Qualcomm SNPE is supported (tensor-filter subplugin)
251         - Verisilicon Vivante is supported (tensor-filter subplugin)
252         - NNStreamer --> Protobuf decoder added.
253         - New tensor-filter subplugin API "v1" released. (with v0 backward compatibility)
254         - Tensor-filter now accepts C++ classes as a subplugin. Edge-TPU subplugin is re-written as an example.
255
256         - Meson script re-worked.
257         - Semantics of hardware-acceleration options for tensor-filter re-worked.
258         - API/Android: nnfw-runtime (neurun) and SNPE support
259         - API/Android: usability update.
260         - API/Android: less invokation latency. (more optimization coming in next versions)
261         - API/C: bugfixes, architectural upgrade, latency reduction.
262         - tensor-filter has latency and throughput performance monitors.
263         - tensor-sink is by default "sync=false". If appsink or tensor_sink in NNStreamer Pipeline API's pipeline has sync=true, emit warning messages.
264         - Architectural updates: lower CC, less duplication, removed dependency cycles, less complicated #if statements and blocks.
265         - Test suite updates: timeout handling, arm-arch error fixes, more test cases (supplying more negative cases), floating-point handling. and a lot more fixes and performance (latency) optimizations.
266         - Build script updates: cleaned up dependencies and applied "feature" meson feature.
267         - No more essential class in assert() for optimized binaries.
268         - Much less assertions. Apply error-handling instead.
269         - Daily build & test activated and published.
270         - Rules & policy updated to comply with LF/AI.
271         - Memory leaks removed: from demux, split, and a few more components.
272
273         - Known bug: edge-TPU subplugin is not working in Tizen devices recently.
274
275 1.5.1 -> 1.5.2
276         - Use gmodule instead of dlfcn for wider compatibility.
277         - Get/Set properties for tensor-filters & C-API.
278         - Support C++ class as tensor-filter subplugin. (experimental. C++ filter API is not yet fixed).
279         - Highly configurable Android build. (for smaller app binaries).
280         - Tensor-Filter auto framework detection mode (C-API support).
281         - Linux Foundation AI compliance & Github ORG migration.
282         - Upgraded Tensor-Filter API (C).
283         - Applied portable logging mechanism.
284         - Removed assertion failure for Tizen sensor errors.
285
286         - Fixed issues found by static analyzers>
287         - More error/exception handling for robustness.
288         - Shows negative test case statistics.
289         - OpenCV compatibility fixes.
290
291 1.5.0 -> 1.5.1
292         - Filter subplugin APIs updated. Both V0 (minor changes to the conventional) and V1 (refactored API set) are supported.
293         - Fixed major issue: now, each instance of a filter subplugin may have different property values.
294         - Tizen 6.0 API ACR preparations.
295         - Allow to build Single-API-only Android build for minimal ML-API usage.
296         - Compatibility fix for GStreamer 1.16; Gst 1.16 has additional audit that blacklists behaviors of older NNStreamer.
297         - Met Linux Foundation / AI requirements. (policy files)
298         - Compatibility fix for LLVM/Clang and macOS.
299
300         - Verisilicon-Vivante: Vivante is supported with private proprietary plugin. There was a minor infrastructural updates to assist it. We will work on opening this code; we may need assistance from Verisilicon. (they need to open source a few headers for general public to build Vivante-subplugin.)
301         - TensorFlow-lite: recently added data types of Tensorflow-lite is supported.
302         - OpenVINO/Caffe2/Tensorflow/NNFW/NCSDK2/ARMNN/Python: refactored hardware acceleration options.
303
304         - Fixed issues found by static analyzers.
305         - Added unit tests to widen coverages and to test exception cases.
306
307 1.4.0 -> 1.5.0
308         - 1.5.0 is a devel version for 1.6.0 release.
309
310 1.3.1 -> 1.4.0
311         - Stable release with API changes.
312         - *Tensor-filter subplugin API has been updated.*
313         - Stability fixes & added unit test cases.
314         - C-API updates.
315
316 1.3.0 -> 1.3.1
317         - 1.3.1 is a devel version for 1.4.0 release.
318         - Support C++ class custom filters. (C++ class as a NN model)
319         - A tensor-filter instance may have multiple model files easily.
320         - Updated env-var handling logic for non-Tizen devices.
321         - Unit test: higher visibility & behavior correctness fixes.
322         - Auto-generated test cases for tensor-filter sub-plugins (extensions).
323         - Android/Java support with more convinient methods.
324         - Support gcc9.
325         - Support openVino as a tensor-filter, allowing to accelerate with Intel NCS/Myriad.
326         - Support NCSDK as a tensor-filter.
327         - Support ARMNN as a tensor-filter. (support TF-Lite and Caffe models)
328         - Reduce asserts and add error handling routines.
329         - Support Androdi/SNAP as a tensor-filter.
330         - Support hardware accelerators & 8-bit quantization for NNFW-Runtime & stabilize NNFW-Runtime support with test cases.
331         - Support Edge-TPU and its runtime as a tensor-filter.
332         - Filter subplugins refactored to have a single source file. (.cc)
333         - Support model reload.
334         - A lot of fixes for bugs found by Coverity, SVACE, and other static analysis tools.
335
336 1.2.0 -> 1.3.0:
337         - 1.3.0 is a devel version for 1.4.0 release.
338         - From 1.2.0, 1.even.x is a release and 1.odd.x is a devel version.
339         - When 1.3.x is "done", it will be release as 1.4.0 and move on to 1.5.0.
340
341 1.0.0 -> 1.2.0:
342         - Tizen Sensor Framework Integration. (tensor_src_tizensensor)
343         - Single C-API latency shortened by bypassing GST pipeline constructions.
344         - NNFW-Runtime Integration (tensor_filter::nnfw)
345                 - NNFW: https://git.tizen.org/cgit/platform/core/ml/nnfw/
346                 - Integrated & tested along with ARMCL.
347         - C++ classes are suggested. (WIP)
348         - Converter accepts external subplugins. (tensor_converter::*)
349         - Custom-Easy mode (tensor_filter::custom_easy) for future "lambda func" support.
350         - Support Tizen ncsdk2.
351         - Types for path configurations are no more hardcoded.
352         - Overall architecture improved/refactored. (Lowered CC, DC, and so on)
353         - Fixes from 1.0.1 (Tizen 5.5 M2's stable/commercialization branch)
354         - Documentation updates and bugfixes.
355
356 0.3.0 -> 1.0.0:
357         - Tizen Public C-API (Single & Pipeline) Reviewed and Confirmed!
358         - Tizen Public C#-API (Single) Reviewed and Confirmed!
359         - Tested with Tizen Studio.
360         - Official API test suites released via Tizen.
361         - Android Java-API released via JCenter for Android Studio users.
362         - Passed Quality Assurance. (code quality, stability, security, compliance, and so on)
363                 - Fixed a lot of minor bugs in the course.
364         - Support macOS.
365         - Fixed regressions related with ROS and Yocto support.
366
367 0.2.0 -> 0.3.0:
368         - Tizen Public C-API Single/Pipeline RC1 Fixed for 5.5 M2
369         - Tizen Public C-API RC2 features included. (pipeline whitelist, aliasing)
370         - Tizen Public C#-API Single/Pipeline RC1.
371         - Android Java-API and build infrastructure. Ready for JCenter release.
372         - Tensorflow-lite / NNAPI tested & fixed.
373         - Tensorflow 1.13 compatibility fix. (1.09 kept supported)
374         - Caffe2/PyTorch support.
375         - Movidius support.
376         - This is effectively 1.0-RC1.
377
378 0.1.2 -> 0.2.0:
379         - A lot of security issues and bugs fixed. (for Tizen 5.5 M1 release)
380         - Tizen Public C-API Pipeline for 5.5 M1.
381         - Tizen Public C-API SingleShot Prototype.
382         - Yocto/Openembedded layer released.
383         - ROS sink/src.
384         - IIO support.
385         - Android source draft.
386         - Python custom filter.
387         - Android sample application released.
388         - Tensorflow-lite / NNAPI support.
389
390 0.1.1 -> 0.1.2:
391         - Tizen Public C-API Draft Prototype.
392         - Yocto/Openembedded Layer Tested.
393         - ROS sink/src supported and partially tested.
394         - IIO support draft.
395         - Custom filter codegen.
396         - Capability to cut the dependencies on audio/video plugins for minimal memory footprint.
397         - More clear error messages when the pipeline cannot be initiated.
398         - Increased unit test coverages with additional unit test cases.
399         - Minor feature adds on elements.
400         - A series of bug fixes.
401
402 0.1.0 -> 0.1.1:
403         - Full "Plug & Play" capability of subplugins. (tensor_filter, tensor_filter::custom, tensor_decoder)
404                 - Fully configurable subplugin locations.
405                 - Capability to build subplungins wihtout the dependencies on nnstreamer sources.
406         - Revert Tensorflow input-memcpy-less-ness for multi-tensor support. (Will support memcpy-less-ness later)
407         - Support "String" type of tensors.
408         - API sets updated. (still not "stable")
409         - Code location refactored.
410         - Yocto/Openembedded Layer Registered (not tested): "meta-neural-network".
411         - No more additional shared libraries.
412         - Better error handling and messages for a few plugins.
413         - Android support. (N / arm64)
414
415 0.0.3 -> 0.1.0:
416         - Build system migration cmake --> meson.
417         - Support Tensorflow without input/output tensor memcpy.
418         - other/tensor stream format updated
419                 - From 0.1.0, a single property, "dimension", describes the whole dimension instead of "dim1", "dim2", ...
420                 - Objective 1: in the future, we may support tensors with more than 4 dimensions without updating the protocol.
421                 - Objective 2: it was just too ugly.
422         - Example applications migrated to other git repo to make this repo ready for upstreaming in the future and to ensure buildability for third party developers.
423         - Support run-time attaching subplugins. (filter and decoder)
424         - Support "ini" and envvar configurations for subplugin locations.
425         - Dynamic external recurrences.
426         - Added Subplugin API sets. (draft. do not expect backward compatibility)
427         - Several bug fixes including memory leaks, incorrect logs, type checks and others.
428
429 0.0.2 -> 0.0.3:
430         - Support external recurrencies with tensor_repo (more test cases are to be released later)
431         - Support multi-operators with a single instance of tensor_transform (with a few limitations on the supported orders of operators)
432         - Support split
433         - Support bounding-box decoding (tensor_decoder)
434         - Support subplugins for tensor_decoder
435         - Internal APIs for dynamic configurations and subplugins. tensor_filter and tensor_decoder will be updated to use such configurations in the later releases.
436         - Tensorflow support is in-progress, although it's postponed to later releases. (Still, tensorflow-lite is the only framework officially supported)
437         - Pipeviz support. (tensor_converter/filter/decoder)
438         - Tested with MTCNN. (each "part" is separated as an instance of tensor_filter)
439         - Meson build introduced.
440         - Released via build.tizen.org. (Tizen Devel. x64/x86/arm32/arm64) and launchpad.net (Ubuntu/PPA. x64/x86/arm32/arm64)
441         - Static build for Android. (Not tested. No example. An example Android application is to be released later)
442         - Timestamp handling / Synchronization support.
443         - AWS App Testing Enabled. (testing nnstreamer application with virtual camera devices in AWS)
444         - arm64 support added.
445
446 0.0.1 -> 0.0.2:
447         - Support multi-tensors (other/tensors) along with mux, demux.
448         - Support audio, test, binary-octet streams. (tensor converter)
449         - Support image-classification decoding. (tensor_decoder)
450         - Support merge.
451         - More subfeatures for transform.
452         - Support frame-merging by time. (tensor_aggregator)
453         - More test cases w/ TAOS_CI integration.
454         - Applied to and tested w/ real products.