Video upscaling using dynamic machine learning models during playback
Dynamic machine learning models are used to upscale video on mobile devices, addressing the issue of video degradation by selecting the best model based on frame-specific factors, resulting in improved video quality and reduced power consumption.
Patent Information
- Application Number
- PCT/CN2023/114942
- Authority / Receiving Office
- WO · WO
- Patent Type
- Applications
- Current Assignee / Owner
- Filing Date
- 2023-08-25
- Publication Date
- 2025-03-06
AI Technical Summary
Conventional video upscaling techniques on mobile devices often result in degradation of video quality due to noise and visual artifacts, especially when trying to upscale lower-quality videos to higher resolutions.
The use of dynamic machine learning models during video playback allows for the identification of the most suitable machine learning model for each frame based on factors like motion, battery power, and luminance, enabling efficient upscaling while minimizing power consumption.
This approach effectively enhances video quality by selecting the appropriate machine learning model for each frame, reducing visual artifacts and power consumption, thereby providing a better user experience on mobile devices.
Smart Images

Figure CN2023114942_06032025_PF_FP_ABST
Abstract
Description
VIDEO UPSCALING USING DYNAMIC MACHINE LEARNING MODELS DURING PLAYBACKFIELD
[0001] The present disclosure generally relates to mobile devices and other devices including multimedia functions. For example, aspects of the present disclosure relate to systems and techniques for video upscaling using dynamic machine learning models during playback.BACKGROUND
[0002] Multimedia systems are widely deployed to provide various types of multimedia communication content such as voice, video, packet data, messaging, broadcast, and so on. These multimedia systems may be capable of processing, storage, generation, manipulation, and rendition of multimedia information. Examples of multimedia systems include mobile devices, game devices, entertainment systems, information systems, virtual reality systems, model and simulation systems, and so on. These systems may employ a combination of hardware and software technologies to support the processing, storage, generation, manipulation, and rendition of multimedia information, for example, client devices, capture devices, storage devices, communication networks, computer systems, and display devices.SUMMARY
[0003] In some examples, systems, and techniques are described for multimedia functions. For example, the systems and techniques can be used for video upscaling using dynamic machine learning models during video playback
[0004] According to at least one example, a method is provided for decoding video. The method includes: identifying, based on information associated with a first frame of a video, a first machine learning model from a plurality of machine learning models for upscaling a frame of the video, wherein each machine learning model of the plurality of machine learning models is trained using a first dataset and a first loss; and upscaling the first frame from a first resolution to a second resolution using the first machine learning model.
[0005] In another example, an apparatus for decoding video is provided that includes at least one memory and at least one processor coupled to the at least one memory. The at least one processor is configured to: identify, based on information associated with a first frame of a video, a first machine learning model from a plurality of machine learning models for upscaling a frame of the video, wherein each machine learning model of the plurality of machine learning models is trained using a first dataset and a first loss; and upscale the first frame from a first resolution to a second resolution using the first machine learning model.
[0006] In another example, a non-transitory computer-readable medium is provided that has stored thereon instructions that, when executed by one or more processors, cause the one or more processors to: identifying, based on information associated with a first frame of a video, a first machine learning model from a plurality of machine learning models for upscaling a frame of the video, wherein each machine learning model of the plurality of machine learning models is trained using a first dataset and a first loss; and upscale the first frame from a first resolution to a second resolution using the first machine learning model.
[0007] In another example, an apparatus for decoding video is provided. The apparatus includes: identifying, based on information associated with a first frame of a video, a first machine learning model from a plurality of machine learning models for upscaling a frame of the video, wherein each machine learning model of the plurality of machine learning models is trained using a first dataset and a first loss; and means for upscaling the first frame from a first resolution to a second resolution using the first machine learning model.
[0008] According to at least one example, a method is provided for training a machine learning model for decoding video. The method includes: configuring a first machine learning model and a second machine learning model, wherein the second machine learning model is configured to include more hyperparameters than the first machine learning model; training the first machine learning model based on a first dataset to have a first loss; training the second machine learning model based on the first dataset to have a second loss that is within a tolerance range of the first loss; quantizing the first machine learning model to execute on a first processing core; and quantizing the second machine learning model to execute on a second processing core.
[0009] In another example, an apparatus for training a machine learning model for decoding video is provided that includes at least one memory and at least one processor coupled to the at least one memory. The at least one processor is configured to: configure a first machine learning model and a second machine learning model, wherein the second machine learning model is configured to include more hyperparameters than the first machine learning model; train the first machine learning model based on a first dataset to have a first loss; train the second machine learning model based on the first dataset to have a second loss that is within a tolerance range of the first loss; quantize the first machine learning model to execute on a first processing core; and quantize the second machine learning model to execute on a second processing core.
[0010] In another example, a non-transitory computer-readable medium is provided that has stored thereon instructions that, when executed by one or more processors, cause the one or more processors to: configure a first machine learning model and a second machine learning model, wherein the second machine learning model is configured to include more hyperparameters than the first machine learning model; train the first machine learning model based on a first dataset to have a first loss; train the second machine learning model based on the first dataset to have a second loss that is within a tolerance range of the first loss; quantize the first machine learning model to execute on a first processing core; and quantize the second machine learning model to execute on a second processing core.
[0011] In another example, an apparatus for training a machine learning model for decoding video is provided. The apparatus includes: means for configuring a first machine learning model and a second machine learning model, wherein the second machine learning model is configured to include more hyperparameters than the first machine learning model; means for training the first machine learning model based on a first dataset to have a first loss; means for training the second machine learning model based on the first dataset to have a second loss that is within a tolerance range of the first loss; means for quantizing the first machine learning model to execute on a first processing core; and means for quantizing the second machine learning model to execute on a second processing core.
[0012] In some aspects, one or more the apparatuses or devices described herein is, is part of, and / or includes a wearable device, an extended reality (XR) device (e.g., a virtual reality (VR) device, an augmented reality (AR) device, or a mixed reality (MR) device, such as an XR head-mounted device (HMD) device or XR glasses) , a wireless communication device such as a mobile device (e.g., a mobile telephone and / or mobile handset and / or so-called “smartphone” or another mobile device) , a vehicle or a computing device or system of a vehicle, a camera, a personal computer, a laptop computer, a server computer, another device, or a combination thereof. In some aspects, the apparatus includes a camera or multiple cameras for capturing one or more images. In some aspects, the apparatus further includes a display for displaying one or more images, notifications, and / or other displayable data. In some aspects, the apparatuses described above can include one or more sensors (e.g., one or more inertial measurement units (IMUs) , such as one or more gyroscopes, one or more gyrometers or gyroscopes, one or more accelerometers, any combination thereof, and / or other sensors) .
[0013] This summary is not intended to identify key or essential features of the claimed subject matter, nor is it intended to be used in isolation to determine the scope of the claimed subject matter. The subject matter should be understood by reference to appropriate portions of the entire specification of this patent, any or all drawings, and each claim.
[0014] Other objects and advantages associated with the aspects disclosed herein will be apparent to those skilled in the art based on the accompanying drawings and detailed description.BRIEF DESCRIPTION OF THE DRAWINGS
[0015] Examples of various implementations are described in detail below with reference to the following figures:
[0016] FIG. 1. is a block diagram of an example system on chip (SoC) in accordance with some aspects of the disclosure;
[0017] FIG. 2 is a conceptual diagram of a video decoder for upscaling video using a super resolution (SR) machine learning (ML) model in accordance with some aspects of the disclosure;
[0018] FIG. 3 is a flowchart illustrating a rule-based approach for selecting an SR ML model for upscaling video in accordance with some aspects of the disclosure;
[0019] FIG. 4 illustrates a conceptual diagram of a convolution neural network (CNN) configured for upscaling images using SR techniques in accordance with some aspects of the disclosure;
[0020] FIG. 5 is a conceptual illustration of a motion vector that is output by a hardware video decoder in accordance with some aspects of the disclosure;
[0021] FIG. 6 is a flowchart illustrating an example method for selecting an SR ML model for upscaling video in accordance with aspects of the present disclosure.
[0022] FIG. 7 is a flowchart illustrating an example method 700 for training ML models in accordance with aspects of the present disclosure.
[0023] FIG. 8 is an illustrative example of a deep learning neural network that can be used to implement the machine learning-based alignment prediction, in accordance with aspects of the present disclosure.
[0024] FIG. 9 is an illustrative example of a CNN, in accordance with aspects of the present disclosure.
[0025] FIG. 10 is a diagram illustrating an example of a system for implementing certain aspects described herein.DETAILED DESCRIPTION
[0026] Certain aspects and embodiments of this disclosure are provided below. Some of these aspects and embodiments may be applied independently and some of them may be applied in combination as would be apparent to those of skill in the art. In the following description, for the purposes of explanation, specific details are set forth in order to provide a thorough understanding of embodiments of the application. However, it will be apparent that various embodiments may be practiced without these specific details. The figures and description are not intended to be restrictive.
[0027] The ensuing description provides example embodiments only, and is not intended to limit the scope, applicability, or configuration of the disclosure. Rather, the ensuing description of the exemplary embodiments will provide those skilled in the art with an enabling description for implementing an exemplary embodiment. It should be understood that various changes may be made in the function and arrangement of elements without departing from the spirit and scope of the application as set forth in the appended claims.
[0028] Mobile devices have become a common part of modern life, serving as versatile tools for communication, entertainment, and productivity. As wireless communication data rates have increased with time, video playback and recording functions are prominent functions of mobile devices. Examples of video playback functions include media streaming (e.g., streaming video) , video calls, social media, conventional news media, and entertainment consumption. For instance, on-line video streaming is present in many applications. Visual quality of media content (e.g., video streaming) is an important factor for both end users and device vendors. Another important aspect of consuming media content on a mobile device is the screen resolution and the quality of the display of the mobile device. For example, current mobile phones may have displays with a resolution of 1080 x 1920, 1440 x 2560, and 2048 x 2732. Higher resolution displays provide users with more detailed and lifelike visuals, enhancing everything from text readability to image and video quality.
[0029] Poor video quality can be a concern for end users and device vendors. For instance, video may be recorded at a lower quality or streamed to the mobile device at a lower quality than the mobile device is capable of displaying. In one example, the visual quality and encoded bit rate of on-line live video streaming content are not good as compared to released / produced movie / video clips. In another example an older video recording captured by a user’s mobile device may have a lower resolution than a resolution of the display of the mobile device.
[0030] Upscaling techniques can be used to increase a resolution of lower-quality video. However, upscaling of the video using conventional techniques (e.g., bicubic and bilinear techniques) can result in degradation (e.g., noise and other visual artifacts) of the video, which reduces the user experience when viewing the video. Such degradation can be evident in reduced clarity, blurred details, and pixelation, which collectively detract from the overall viewing experience. Such an issue can be particularly pronounced when users attempt to watch high-definition content on displays that lack the pixel density to accurately represent the finer nuances of the video. The trade-off between high-resolution content and the limitations of the device’s display resolution underscores the importance of optimizing video formats and quality for various mobile devices, ensuring that users can enjoy an optimal viewing experience regardless of the device they are using.
[0031] Super resolution (SR) is a machine learning (ML) technology that leverages advanced ML algorithms to enhance the resolution and quality of digital images or videos. For example, by analyzing and extrapolating patterns from low-resolution source content, SR algorithms predict and generate higher-resolution versions of the content, resulting in improved clarity, finer details, and enhanced visual fidelity. However, the use of SR consumes a significant amount of power on mobile devices.
[0032] Systems, apparatuses, processes (also referred to as methods) , and computer-readable media (collectively referred to as “systems and techniques” ) are described herein that provide dynamic SR models that provide high quality video in varying contexts, while balancing power consumption concerns. For example, the systems and techniques can provide a plurality of ML models that can be used to upscale one or more frames of a video. The ML models can include neural network models having different characteristics, such as different numbers of channels (and thus parameters, such as weights) , different quantization types (e.g., integer quantization such as INT8, INT16, etc., floating point representations such as FP32, FP 64, etc., and / other types of quantization) , and / or other characteristics. An ML model can be selected from the plurality of ML models for upscaling one or more frames of a video or a set of frames of the video based on information associated with frame (s) of the video, such as motion information in the frame (s) , frame rate of the video, and / or other information.
[0033] In some aspects, a computing device can identify, based on information associated with a first frame of a video, a first machine learning model from a plurality of ML models for upscaling one or more frames of the video. In some cases, the method can select a machine learning model to upscale the frame (s) in consideration of various factors that can reduce power consumption. In one example, frames that have motion can be processed using a less complex ML model. For instance, visual artifacts from upscaling may not be as apparent when movement in a scene captured in one or more frames is high. In another example, frames that have low motion can be processed using a more complex ML model. For instance, visual artifacts from upscaling may be more visually perceivable by a user when a scene captured in one or more frames is static or movement is slow. Other information or factors that can be used for selecting an ML model from the plurality of ML models include the battery power of the mobile device, luminance information, frame rate, any combination thereof, and / or other information or factors. In some aspects, after selecting the ML model, the ML model can be used to upscale the frame (s) from a first resolution to a second resolution.
[0034] Additional aspects of the present disclosure are described in more detail below.
[0035] FIG. 1. is a block diagram of an example system on chip (SoC) 100 in accordance with some aspects of the disclosure. In some aspects, an SoC 100 is a semiconductor device that is manufactured and configured to include various components to integrate functions within the SoC to reduce delays associated with external interfaces and other impediments. For example, high-bandwidth video functions such as augmented and virtual reality may exceed the bandwidth of a double data rate (DDR) bus.
[0036] In one aspect, the SoC 100 may include at least one central processing unit (CPU) 110 or a processing core configured to execute software instructions. In some aspects, the CPU 110 comprises a plurality of processing cores that may be configured to execute the functionality in parallel, and the processing cores may have different configurations. For example, the CPU 110 may include a plurality of performance cores for low-latency functions and a plurality of efficiency cores that consume less power than the performance cores.
[0037] The SoC 100 may also include one or more accelerated processing units (APU) 120 that are configured to perform specific functions, such as floating-point math. Non-limiting examples of APU functions include a digital signal processor (DSP) for floating point mathematical operations, a networking processing unit, and other devices. The network processing unit (NPU) may be programmable using the programming protocol-independent packet processors (P4) language, which is a domain-specific programming language for network devices for processing packets. For example, a network processing unit may be implemented in a SoC of a network hardware device. In some aspects, a network processing unit in the APU may have a distributed P4 NPU architecture that may execute at line rate for small packets with complex processing, and may also include optimized and shared NPU fungible tables.
[0038] In some aspects, the SoC 100 may also include programmable logic devices such as a neural network processing unit (NNPU) 130. The NNPU 1130 may be integral to the APU 120 in some cases. In this case, the NNPU 130 is illustrated as separate from the APU 120 due to the bandwidth limitations of the bus. For example, memory operations of the NNPU 130 may be slowed based on sharing a bus interface based on other components. The NNPU 130 may be configured to prioritize matrix and floating-point operations that are associated with neural network operations. For example, the training of a neural network requires many operations across, in some cases, billions of different parameters to identify a local minima and reduce the loss.
[0039] In some aspects, the SoC 100 may also include a volatile memory such as a random access memory (RAM) 140 that is shared between the various components (e.g., CPU 110, APU 120, NNPU 130, etc. ) . As an example, a graphics processing unit (GPU) (e.g., implemented in the APU 120) , the CPU 110, and the NNPU 130 may share access to the RAM 140.
[0040] The SoC 100 may also include a secure enclave 150 such as a trusted platform module (TPM) or a trusted anchor module (TAM) that is configured to secure the SoC 100 and identify any malicious issues. The secure enclave may include encryption generation functionality, a true random number generator, a secure storage medium, and so forth. In some cases, the SoC 100 may also be configured to interface with a security sub-system (not shown) , such as a security module that is configured to securely store information that is not made available to the SoC 100. In one aspect, the security sub-system may securely store biometric information to enable various functions such as biometric authentication, etc.
[0041] The SoC 100 also includes a fabric 160 that is configured to facilitate interfacing the components of the SoC 100 internally and externally. As an example, the fabric 160 may include functionality to allocate the RAM 140 between the various shared components within the SoC 100. The SoC 100 may interconnect the various components using a bus to enable access to the various components, such as enabling the CPU 110 to address a portion of the RAM 140. In some aspects, the fabric 160 may also interface with external components such as a security sub-system, various bus interfaces (e.g., Peripheral Component Interconnect Express (PCI-e) , thunderbolt, universal serial bus, a communication circuit for wireless communication, an Ethernet networking module, and so forth) .
[0042] In some cases, the SoC may also include a video decoder 170 for decoding one or more formats of video (e.g., H. 264, H. 265, etc. ) . In this case, the video decoder 170 is configured to receive a video file and perform various functions to decompress, decode, and generate a plurality of video frames to be output from the SoC 100. The video decoder 170 is a hardware circuit and may implement video decoding associated with one or more video formats (e.g., H. 264, H. 265, etc) and converts each compressed frame of the video into an uncompressed frame with minimal loss. As compared to software-based decoding, hardware decoding requires less power consumption and memory requirements because of the additional operations to decode instructions, various memory operations for storing frames and pixels, and so forth. For example, the video decoder 170 may not need to store a decoded frame in memory and may include a hardware buffer for storing decoded frames and outputting the frames at the correct time without requiring the hardware processor to perform any additional operations.
[0043] In some aspects, the video decoder 170 is configured to receive the video file, which includes an independent frame (I-frame) and a progress frame (P-frame) . The I-frame is independent of any previous or subsequent frames, and a p-frame depends on a previous frame and may render a current frame based on the decoded previous frame and the p-frame. The P-frame may also be referred to as a differential frame that identifies differences between the previous frame and the current frame. The video decoder 170 is configured to generate a motion vector for each frame as part of the decoding process. The motion vector identifies motion associated with pixels between two sequential frames. In some aspects of the disclosure, the motion vector may also be referred to as the optical flow between two different frames. The video decoder 170 may store the motion vector in a buffer and allow external access to the motion vector for software-assisted or hardware-assisted rendering functions.
[0044] FIG. 2 is a conceptual diagram of video decoding system 200 for upscaling video using one or more SR ML models in accordance with some aspects of the disclosure. The video decoding system 200 includes a video decoding core 210 (e.g., the video decoder 170) , a processor core 220, a DSP core 230, a GPU core 240, and an NNPU core 250. In some aspects, the video decoding core 210, the processor core 220, the DSP core 230, the GPU core 240, and the NNPU core 250 are integral to a SoC (e.g., the SoC 100) within a mobile device.
[0045] The video decoding core 210 receives a compressed video and decodes the compressed video into a stream of frames 212. The video decoding core 210 is more efficient at decompressing video because operations are performed in hardware. The video decoding core 210 may also output a motion vector 214. In other examples, a motion vector 214 can be computed using optical flow methods in other devices (e.g., the processor core 220) . As described above, the output resolution of a display component coupled to the video decoding system 200 may be higher than the original resolution of the image. To that end, the video decoding system 200 may be configured to upscale the frames 212 from a first resolution to a second, higher resolution that corresponds to a resolution of a display component coupled to the video decoding system 200.
[0046] After decoding the frames, the frames 212 and the motion vector 214 may be provided to a processor core 220 for subsequent processing prior to output. The processor core 220 is configured to execute an upscaling engine 222 and select an ML model for upscaling the frames 212. In some aspects, the upscaling engine 222 selects an ML model based on different factors or information associated with the frames 212, such as power consumption (e.g., battery power remaining) , motion in the video, variable frame rate, and other information. For example, the upscaling engine may implement a rule-based approach, such as method in the flowchart shown in FIG. 3, to select an ML model from a plurality of ML models.
[0047] In some cases, the ML model may be quantized to a specific processing core. For example, the GPU core 240 may implement an 8-bit efficiency pipeline for floating point calculation and an ML model can be trained for this specific GPU core 240. An ML model may be trained for a specific device based on differences in the devices (e.g., the DSP core 230, the GPU core 240, and the NNPU core 250) . An ML model comprises a large number of trained instructions and weights that compute an output based on an input. The ML model may also include additional framework aspects. For example, an ML model executed on a GPU core 240 may include instructions and / or application programming interfaces (APIs) associated with a compute unified device architecture (CUDA) . An operation of configuring (e.g., optimizing) an ML model for a target device is referred to as quantization and configures the weights based on the target device. For instance, the activations (e.g., outputs) and parameters (e.g., weights) of a neural network ML model can be represented using floating point or integer values. In one example, in the case of an 8-bit floating point pipeline that has high efficiency, the activations and weights of the ML model may be quantized to 8-bit floating point values, referred to as FP8. In another example, the activations and weights of the ML model may be quantized to 8-bit integer values, referred to as INT8. Other examples of representations include INT16 (16-bit integer values) , FP16 (16-bit floating point values) , FP32 (32-bit floating point values) , among others. In some cases, an ML model can also be trained in a device-agnostic manner and interfaced via a framework or an interpreter (e.g., Python) .
[0048] In one example, the processor core 220 may be configured to execute at least one ML model 224 that is configured to upscale the frames 212. The processor core 220 may be inefficient for performing these operations due to the additional instructions necessary to load the ML model 224 and process the frames 212. In general, it can be beneficial to offload the ML operations to various more specific processing cores, such as the DSP core 230, the GPU core 240, and / or the NNPU core 250.
[0049] The upscaling engine 222 may select the DSP core 230 to upscale the frames 212 based on at least one ML model 232 trained and quantized for the DSP core 230. The DSP core 230 is a specialized microprocessor designed to efficiently perform digital signal processing tasks. For example, the DSP core 230 is configured to process signals such as audio, video, and sensor data. DSPs can excel at executing mathematical operations like filtering, modulation, demodulation, and other tasks commonly found in communication systems, audio processing, and control systems. DSPs often include specialized hardware and instructions to accelerate signal processing algorithms and include a scheduling system configured for real-time applications.
[0050] In some aspects, the upscaling engine 222 may select the GPU core 240 to execute at least one ML model 242, which is an electronic circuit designed to accelerate the rendering and manipulation of images, videos, and graphics-related tasks. The GPU core 240 is formed by a number of processing cores that can handle complex mathematical computations in parallel. The GPU core 240 is also highly efficient and effective for tasks that can be parallelized. In some cases, the GPU core 240 may be preferred for executing the ML model based on power considerations due to the lower power consumption of the GPU core 240.
[0051] The upscaling engine 222 may select the NNPU core 250 to execute at least one ML model 252. The NNPU core 250, is a specialized hardware component designed to accelerate the execution of artificial neural networks. An NNPU core 250 has an architecture that is optimized to efficiently perform the matrix multiplications and activation functions associated with operations in neural networks. The NNPU core 250 can significantly speed up the training and inference processes of various neural networks and may use for real-time applications such as image recognition, natural language processing, and other ML and / or artificial intelligence (AI) tasks.
[0052] The NNPU core 250 may be preferred for larger, more complex neural network models. For example, the NNPU core 250 may be preferred for a convolution neural network (CNN) model that has 8, 32, or 64 channels. In some aspects, a channel in a two-dimensional (2D) convolution refers to a separate component or feature of the input data. Each channel includes specific information or parameters (e.g., weights in a convolutional kernel or filter) , and can provide particular output features (or activation) . Each channel corresponds to different features or patterns (e.g., weights in a convolutional kernel or filter) that the convolutional layer can learn from the input data. For example, in a 2D CNN, a convolutional kernel (which may also be referred to as a filter or a weight) slides across different positions in an input image or feature map, performs element-wise multiplications, and sums each multiplication result to produce an output value for each position. The convolutional operation is performed independently for each channel and convolutions may be combined to create final output features or activations (e.g., a tensor output) . For example, a 2D neural network convolution (torch. nn. Conv2D) in PyTorch receives a number of input channels, a number of output channels produced by the convolution, kernel size, stride, padding, dilation, groups, bias, padding mode, and device type. The number of output channels is the number of kernels produced by the convolution.
[0053] In some cases, the NNPU core 250 may be more efficient for ML models having more channels based on a larger number of matrix calculations. In some cases, the GPU core 240 may be more efficient for ML models having fewer (e.g., 4) channels.
[0054] In some cases, the architecture of the various ML Models (e.g., ML models 224, 232, 242, and 252) may be similar, for example, having the same configuration (e.g., a CNN with 23 layers) . The parameters of the ML models may be different, which results in ML models having different computation and accuracy. For example, the ML model 242 that is executed by the GPU core 240 may be a CNN with 4 channels, and the ML model 252 that is executed by the NNPU core 250 may be a similar CNN model with 64 channels. In this case, the ML model 242 will require fewer computations than the ML model 252, but the visual fidelity of the video output from ML model 252 will be of higher quality as compared to the video output from the ML model 242. Each ML model is trained using the same training dataset, the same validation dataset, and the same verification dataset for an error that is within a tolerance range. In this case, each ML model is configured to have substantially identical performance so that switching between different ML models is as seamless as possible and prevents visual artifacts.
[0055] In one example, the GPU core 240 may be configured to execute a CNN model with 4 channels, and the NNPU core 250 may be configured to execute a CNN model with 16, 32, or 64 channels. The number of channels corresponds to the number of kernels used in the convolution process and increases the computation power required. Each of the DSP core 230, the GPU core 240, and the NNPU core 250 are configured to output upscaled video frames 260, which are provided to a display device for outputting to the user.
[0056] FIG. 3 is a flowchart illustrating a method 300 of a rule-based approach for selecting an SR ML model to upscale video in accordance with some aspects of the disclosure. In one aspect, the processor core 220 may be integral in a mobile device (e.g., a mobile phone, a laptop, etc. ) and may execute the upscaling engine 222 to perform a logic, rule-based approach to selecting an ML model based on the method 300. Alternatively or additionally, other implementations of the method 300 may be included, as well as additional modifications to the method 300. For example, the method 300 may include a temporal filter to prevent the method 300 from selecting a different ML model in the next frame. A hysteresis function may also be implemented to prevent switching between ML models too quickly.
[0057] In the aspect illustrated in FIG. 3, the processor core 220 is configured to select between four different CNN models. The first ML model is a 4-channel CNN model, which has the lowest power consumption, a second ML model is a CNN having 16 channels, a third ML model is a CNN including 32 channels, and a fourth ML model is a CNN having 64 channels. Other aspects are possible, for example, one or more of the CNN models may include a residual network connection (e.g., RESNET) . Other CNN models may exclude the residual network connection. Each of the ML models is trained using identical data and trained to have a substantially identical loss. For example, the ML models are trained to have a loss within a small tolerance range to enable substantially identical video performance.
[0058] In some aspects, at block 302, the processor core 220 determines whether battery power is greater than a minimum threshold. In this case, the minimum threshold corresponds to a low battery level, which can include various analyses of the battery health such as discharge rate, etc. For example, the minimum threshold can also be an estimated time until the battery is unable to power the device. If the battery power is lower than the minimum threshold (e.g., estimated battery percentage, estimated operation time remaining in the battery, etc. ) , the processor core 220 is configured to proceed to block 304. If the battery power is not lower than the minimum threshold, the processor core 220 is configured to proceed to block 306.
[0059] At block 304, the processor core 220 is configured to select an ML model based on the power constraints. For example, the processor core 220 may select the ML model that consumes the least amount of power, which would be the 4-channel CNN model. In some cases, the 4-channel CNN model is configured to operate on a first device (e.g., the GPU core 240) . After selecting the ML model at block 304, the processor core 220 proceeds to block 318.
[0060] At block 306, the processor core 220 is configured to determine if the video playback is paused on the current frame. If the video playback is paused, the processor core 220 is configured to proceed to block 308. If the video playback is not paused, the processor core 220 is configured to proceed to block 310.
[0061] At block 308, the processor core 220 selects the ML model having the highest video decoding quality. For example, the processor core 220 selects the fourth ML model having 64 layers. The fourth ML model is selected because the video is paused and no further frames will be processed, and the frame may be displayed for a longer duration and upsampling issues will be more difficult to identify. After selecting the ML model at block 308, the processor core 220 proceeds to block 318.
[0062] At block 310, the processor core 220 analyzes the motion vectors from motion information (e.g., the motion vector 214) to determine an amount of motion and analyzes luminance metadata associated with a portion of the video. In some cases, the motion information can be a numerical representation identifying various parameters, such as the number of pixels, the displacement of each pixel, and so forth. The luminance metadata may be associated with metadata with high dynamic range (HDR) video (e.g., HDR10+) . For example, HDR video includes luminance metadata that is encoded into the frames to provide additional luminance data. The luminance metadata may be associated with a particular range of frames and provides information inline to enable the video to be processed at normal dynamic range and high dynamic range in hardware and software video decoders. The luminance metadata can provide information pertaining to a displayed scene and / or the next scene, such as when the video cuts between a scene that is generally dark and a brighter scene. In some aspects, the processor core 220 may select between different ML models based on the motion within the current frame. The presence of luminance metadata may allow the processor core 220 to identify bright scenes and dark scenes to further determine how to select the ML model.
[0063] At block 312, the processor core 220 determines whether the compressed video is a constant frame rate (e.g., 60 Hz, 30 Hz) or a variable frame rate (e.g., between 30 Hz and 60 Hz depending on the amount of motion) . If the video has a constant frame rate, the processor core proceeds to block 314. If the video has a variable frame rate, the processor core 220 proceeds to block 316.
[0064] At block 314, the processor core 220 is configured to select an ML model based on motion information and the luminance information. For example, if the motion information corresponds to a large amount of movement, the processor core 220 selects an ML model with fewer CNN channels (e.g., the first ML model has 4 channels or 4 kernels per 2D convolution) . For example, because motion is faster, the details of the frame as displayed on an output device are less significant and the processor core 220 may select the first ML model for power savings. In one example, the GPU core 240 is configured to execute the first ML model to upscale the video.
[0065] If the motion information corresponds to a small amount of movement, the processor core 220 selects an ML model with more CNN channels (e.g., the fourth ML model having 64 layers or 64 kernels per convolution) . In this case, because there is less motion, the scene is constant and a higher quality CNN (e.g., the first CNN model is selected to upscale the video) produces fewer visual artifacts, such as at the edges of objects within the frame. At block 314, the processor core 220 is configured to select between any of the ML models by balancing visual fidelity based on the motion. After selecting the ML model at block 314, the processor core 220 proceeds to block 318.
[0066] At block 318, the processor core 220 is configured to select an ML model based on motion information, the current frame rate of the variable rate video, and the luminance information. For example, for a frame displayed at a lower frame rate (e.g., 30 fps) , the fourth ML model may be selected because the frame will be displayed for a longer duration. On the other hand, for a frame displayed at a higher frame rate (e.g., 60 fps) , the first ML model may be selected because the frame will be displayed for a shorter duration. In some aspects, the processor core 220 may use additional information, such as the luminance information and the motion information, to supplement the ML model selection. In other cases, the motion vector information may not be used. In such cases, portions of the method 300 may be omitted, such as the identification of motion within the vector information. After selecting the ML model at block 316, the processor core 220 proceeds to block 318.
[0067] At block 318, the processor core 220 is configured to provide the frame to processing device associated with the selected ML model. In some cases, an older mobile device may not include an NNPU core 250 and the DSP core 230 or the GPU core 240 may perform the upscaling using the selected model. In another example, the GPU core 240 may perform upscaling using the first ML model (e.g., 4 channels) and the NNPU core 250 may perform upscaling using the second ML model, the third ML model, or the fourth ML model. Although four ML models are described, other configurations of ML models are within the scope and spirit of this disclosure.
[0068] FIG. 4 illustrates a conceptual diagram of a CNN 400 configured for upscaling images using SR techniques in accordance with some aspects of the disclosure.
[0069] The CNN 400 accepts an input image 402 and includes convolution layer 404 that applies a filter to the input image 402. The filters convolve across the image, detecting various features like edges, textures, and patterns by performing element-wise multiplications and aggregations.
[0070] The CNN 400 also includes a residual block 406 (e.g., ResBlock) to mitigate the vanishing gradient problem and enable the training of deeper networks. The residual block 406 introduces a shortcut connection 408 that bypasses one or more convolutional layers, allowing the network to learn residual functions. For example, the shortcut connection 408 bypasses another residual block 410 and convolution layer 412. By adding (using an addition operation 414) the output of the shortcut connection 408 to the output of the convolutional layer 412, the CNN 400 captures the residual information that needs to be learned and enables the propagation of gradients during training.
[0071] The CNN 400 also includes an upscale layer 416 that is trained on images to upscale features from a first size to a second size. After the upscale layer 416, another convolution layer 418 further convolves the image. Although not shown, the CNN 400 may also include pooling layers to downsample the feature maps obtained from the convolutional layers, reducing the spatial dimensions while retaining the essential information. Pooling creates translation-invariant representations and ensures the CNN 400 is robust to variations in object position. The CNN 400 may also include connected layers employed at the end of the network, connecting all the neurons to each other like a traditional neural network. The CNN 400 implements weights and biases that are learned during training to optimize the feature extraction process to upscale features.
[0072] FIG. 5 is a conceptual illustration of a motion vector that is output by a hardware video decoder in accordance with some aspects of the disclosure. In some cases, each vector represents movement of a pixel or a unit of pixels between two sequential frames. For example, the motion vector can be used by the processor core 220 for identifying an amount of motion between the frames.
[0073] FIG. 6 is a flowchart illustrating an example method 600 for upscaling images using various ML models in accordance with aspects of the present disclosure. The method 600 can be performed by a computing device having an image sensor, such as a mobile wireless communication device, a vehicle (e.g., an autonomous or semi-autonomous vehicle, a wireless-enabled vehicle, and / or other type of vehicle) or computing device or system of the vehicle, a robot device or system (e.g., for residential or manufacturing purposes) , a camera, an XR device, or another computing device. In one illustrative example, a computing system (e.g., computing system 1000) can be configured to perform all or part of the method 600. In one illustrative example, the SoC 100 can be configured to perform all or part of the method 600. For instance, the computing system 1000 may include the components of the SoC 100 and can be configured to perform all or part of the method 600. I
[0074] Although the example method 600 depicts a particular sequence of operations, the sequence may be altered without departing from the scope of the present disclosure. For example, some of the operations depicted may be performed in parallel or in a different sequence that does not materially affect the function of the method 600. In other examples, different components of an example device or system that implements the method 600 may perform functions at substantially the same time or in a specific sequence.
[0075] At block 602, a computing system (e.g., the computing system 1000) may identify, based on information associated with a first frame of a video, a first machine learning model from a plurality of machine learning models for upscaling a frame of the video. In some aspects, each machine learning model of the plurality of machine learning models is trained using a first dataset and a first loss.
[0076] In one aspect, the information associated with the first frame includes motion information. Hardware video decoders may generate the motion information as part of the decoding process and may enable other components of the system to interface with the video decoders. For example, a processing core of the SoC may be able to access the hardware decoder to retrieve the motion vector information. The computing system (e.g., the processing core of the SoC) may analyze the first frame to identify an amount of motion in the first frame relative to a second frame. In this case the second frame being prior to the first frame in the video. The computing system may select the first machine learning model to upscale the first frame based on the amount of motion in the first frame relative to the second frame. In one aspect, the amount of motion is based on motion vector information generated by a video decoding device and may be used to identify which machine learning model is optimal in consideration of video fidelity and power consumption.
[0077] In one aspect, the computing system may select the first machine learning model based on the amount of motion being greater than a threshold amount of motion. For example, the computing system may select a machine learning model with low fidelity when there is a large amount of motion. The first machine learning model is configured to generate a lower quality upscaled frame than a second machine learning model when the amount of motion is greater than the threshold amount of motion. The first machine learning model has fewer weights than at least one other machine learning model of the plurality of machine learning models. In another example, the computing system may select a machine learning model with higher fidelity when there is a smaller amount of motion. In this example, the first machine learning model is configured to generate a higher quality upscaled frame than a second machine learning model when the amount of motion is less than the threshold amount of motion.
[0078] In some aspects, a motion vector information of a third frame after the first frame in the video is not analyzed, wherein the third frame follows the first frame during a temporal filtering delay. In this case, when the computing system switches between upscaling using different machine learning models, the computing system applies a hysteresis function to prevent sudden transitions. The hysteresis function may also apply to selection as well, such as requiring a minimum number of frames having an amount of motion before switching machine learning models.
[0079] The computing system may select the first machine learning model to upscale the first frame based on playback of the video being paused at the first frame. The first machine learning model generates a higher quality upscaled frame than a second machine learning model. For example, when a video frame is paused, the frame that is displayed for the duration of the pause is decoded using a higher fidelity machine learning model.
[0080] In some aspects, the information associated with the first frame includes a frame rate of the video. For example, the video may be encoded with a variable frame rate that changes based on the scene. The computing system may select the first machine learning model to upscale the first frame based on the frame rate of the video.
[0081] The computing system may also select the first machine learning model to upscale the first frame based on amount of battery power remaining in the computing device. For example, when the low battery is ascertained to have a limited charge, the computing system may select a machine learning model that is power efficient. The computing system can also choose a machine learning model based on the processing core efficiency. For example, a GPU may be more power efficient as compared to a NNPU in some cases.
[0082] The video may also include metadata linked to luminance information. For example, HDR video includes metadata that identifies luminance information within a scene for a duration of time. In this aspect, the computing system may, in response to detecting first metadata associated with a duration of time in the video, select the first machine learning model to upscale frames for the duration based on luminance information in the first metadata. The computing system may further select a second machine learning model to upscale a second frame based on a second metadata associated with a second duration of time in the video based on luminance information in the second metadata.
[0083] At block 604, the computing system may upscale the first frame from a first resolution to a second resolution using the first machine learning model. In one example, the second resolution corresponds to a resolution of a display of the computing device.
[0084] In some cases, the first machine learning model is configured to execute on a first processing core, and wherein a second machine learning model is configured to execute on a second processing core. The first machine learning model comprises a different quantization type than at least one other machine learning model of the plurality of machine learning models. In one aspect, a first quantization type of the first machine learning model includes integer quantization and a quantization type of a second machine learning model of the plurality of machine learning models includes floating point quantization.
[0085] The computing device comprises a mobile device. For example, the computing device may be an SoC of the mobile device.
[0086] FIG. 7 is a flowchart illustrating an example method 700 for training ML models in accordance with aspects of the present disclosure. The method 700 can be performed by a computing device having an image sensor, such as a mobile wireless communication device, a vehicle (e.g., an autonomous or semi-autonomous vehicle, a wireless-enabled vehicle, and / or other type of vehicle) or computing device or system of the vehicle, a CV robot function (e.g., manufacturing) , a camera, an XR device, or another computing device. In one illustrative example, a computing system (e.g., computing system 1000) can be configured to perform all or part of the method 700. In one illustrative example, the SoC 100 can be configured to perform all or part of the method 700. For instance, the computing system 1000 may include the components of the SoC 100 and can be configured to perform all or part of the method 700.
[0087] Although the example method 700 depicts a particular sequence of operations, the sequence may be altered without departing from the scope of the present disclosure. For example, some of the operations depicted may be performed in parallel or in a different sequence that does not materially affect the function of the method 700. In other examples, different components of an example device or system that implements the method 700 may perform functions at substantially the same time or in a specific sequence.
[0088] At block 702, a computing system (e.g., the computing system 1000) may configure a first machine learning model and a second machine learning model, wherein the second machine learning model is configured to include more hyperparameters than the first machine learning model. In some aspects, the second machine learning model is configured to include more hyperparameters than the first machine learning model. For example, the first machine learning model may include more channels than the second machine learning model. The quantity of channels may affect the quality of the machine learning model but also can increase the number of calculations, which increases power consumption of the machine learning model.
[0089] At block 704, the computing system may train the first machine learning model based on a first dataset to have a first loss. In some aspects, the first machine learning is trained first to optimize the SR function independently of other training models and set a target performance for other machine learning models. For example, the first machine learning model may be trained based on a noise parameter.
[0090] At block 706, the computing system may train the second machine learning model based on the first dataset to have a second loss that is within a tolerance range of the first loss. In this case, the second machine learning model is trained using the same dataset as the first machine learning model to have similar performance, but using different weights. The loss should be within the tolerance range for one or more parameters. For example, in the case of being trained based on a noise parameter, the second machine learning model is trained to target the training of the first machine learning model to approximate its performance.
[0091] At block 708, the computing system may quantize the first machine learning model to execute on a first processing core. For example, the first machine learning model may be quantized for an NNPU of an SoC. Non-limiting examples of other processing cores includes a DSP, a GPU, and a processing core.
[0092] At block 710, the computing system may quantize the second machine learning model to execute on a second processing core. For example, the second machine learning model may be quantized for an GPU of an SoC. In some cases, the second machine learning models may be quantized for other processing cores including a DSP, GPU, etc.
[0093] In some examples, the methods described herein (e.g., method 300, method 600, the method 700, and / or other method described herein) may be performed by a computing device or apparatus. In one example, the method 700 can be performed by a computing device (e.g., the SoC 100 in FIG. 1) having a computing architecture of the computing system 1000 shown in FIG. 10.
[0094] The method 600 and the method 700 is illustrated as a logical flow diagram, the operation of which represents a sequence of operations that can be implemented in hardware, computer instructions, or a combination thereof. In the context of computer instructions, the operations represent computer-executable instructions stored on one or more computer-readable storage media that, when executed by one or more processors, perform the recited operations. Generally, computer-executable instructions include routines, programs, objects, components, data structures, and the like that perform particular functions or implement particular data types. The order in which the operations are described is not intended to be construed as a limitation, and any number of the described operations can be combined in any order and / or in parallel to implement the methods.
[0095] The method 600, the method 700, and / or other method or process described herein may be performed under the control of one or more computer systems configured with executable instructions and may be implemented as code (e.g., executable instructions, one or more computer programs, or one or more applications) executing collectively on one or more processors, by hardware, or combinations thereof. As noted above, the code may be stored on a computer-readable or machine-readable storage medium, for example, in the form of a computer program comprising a plurality of instructions executable by one or more processors. The computer-readable or machine-readable storage medium may be non-transitory.
[0096] As noted above, various aspects of the present disclosure can use machine learning models or systems. FIG. 8 is an illustrative example of a deep learning neural network 800 that can be used to implement the machine learning based alignment prediction described above. An input layer 820 includes input data. In one illustrative example, the input layer 820 can include data representing the pixels of an input video frame. The neural network 800 includes multiple hidden layers 822a, 822b, through 822n. The hidden layers 822a, 822b, through 822n include “n” number of hidden layers, where “n” is an integer greater than or equal to one. The number of hidden layers can be made to include as many layers as needed for the given application. The neural network 800 further includes an output layer 824 that provides an output resulting from the processing performed by the hidden layers 822a, 822b, through 822n. In one illustrative example, the output layer 824 can provide a classification for an object in an input video frame. The classification can include a class identifying the type of activity (e.g., looking up, looking down, closing eyes, yawning, etc. ) .
[0097] The neural network 800 is a multi-layer neural network of interconnected nodes. Each node can represent a piece of information. Information associated with the nodes is shared among the different layers and each layer retains information as information is processed. In some cases, the neural network 800 can include a feed-forward network, in which case there are no feedback connections where outputs of the network are fed back into itself. In some cases, the neural network 800 can include a recurrent neural network, which can have loops that allow information to be carried across nodes while reading in input.
[0098] Information can be exchanged between nodes through node-to-node interconnections between the various layers. Nodes of the input layer 820 can activate a set of nodes in the first hidden layer 822a. For example, as shown, each of the input nodes of the input layer 820 is connected to each of the nodes of the first hidden layer 822a. The nodes of the first hidden layer 822a can transform the information of each input node by applying activation functions to the input node information. The information derived from the transformation can then be passed to and can activate the nodes of the next hidden layer 822b, which can perform their own designated functions. Example functions include convolutional, up-sampling, data transformation, and / or any other suitable functions. The output of the hidden layer 822b can then activate nodes of the next hidden layer, and so on. The output of the last hidden layer 822n can activate one or more nodes of the output layer 824, at which an output is provided. In some cases, while nodes (e.g., node 826) in the neural network 800 are shown as having multiple output lines, a node has a single output and all lines shown as being output from a node represent the same output value.
[0099] In some cases, each node or interconnection between nodes can have a weight that is a set of parameters derived from the training of the neural network 800. Once the neural network 800 is trained, it can be referred to as a trained neural network, which can be used to classify one or more activities. For example, an interconnection between nodes can represent a piece of information learned about the interconnected nodes. The interconnection can have a tunable numeric weight that can be tuned (e.g., based on a training dataset) , allowing the neural network 800 to be adaptive to inputs and able to learn as more and more data is processed.
[0100] The neural network 800 is pre-trained to process the features from the data in the input layer 820 using the different hidden layers 822a, 822b, through 822n in order to provide the output through the output layer 824. In an example in which the neural network 800 is used to identify features and / or objects in images, the neural network 800 can be trained using training data that includes both images and labels, as described above. For instance, training images can be input into the network, with each training frame having a label indicating the features in the images (for a feature extraction machine learning system) or a label indicating classes of an activity in each frame. In one example using object classification for illustrative purposes, a training frame can include an image of a number 2, in which case the label for the image can be [0 0 1 0 0 0 0 0 0 0] .
[0101] In some cases, the neural network 800 can adjust the weights of the nodes using a training process called backpropagation. As noted above, a backpropagation process can include a forward pass, a loss function, a backward pass, and a weight update. The forward pass, loss function, backward pass, and parameter update is performed for one training iteration. The process can be repeated for a certain number of iterations for each set of training images until the neural network 800 is trained well enough so that the weights of the layers are accurately tuned.
[0102] For the example of identifying features and / or objects in images, the forward pass can include passing a training image through the neural network 800. The weights are initially randomized before the neural network 800 is trained. As an illustrative example, a frame can include an array of numbers representing the pixels of the image. Each number in the array can include a value from 0 to 255 describing the pixel intensity at that position in the array. In one example, the array can include a 28 x 28 x 3 array of numbers with 28 rows and 28 columns of pixels and 3 color components (such as red, green, and blue, or luma and two chroma components, or the like) .
[0103] As noted above, for a first training iteration for the neural network 800, the output will likely include values that do not give preference to any particular class due to the weights being randomly selected at initialization. For example, if the output is a vector with probabilities that the object includes different classes, the probability value for each of the different classes may be equal or at least very similar (e.g., for ten possible classes, each class may have a probability value of 0.1) . With the initial weights, the neural network 800 is unable to determine low level features and thus cannot make an accurate determination of what the classification of the object might be. A loss function can be used to analyze error in the output. Any suitable loss function definition can be used, such as a Cross-Entropy loss. Another example of a loss function includes the mean squared error (MSE) , defined as The loss can be set to be equal to the value of Etotal.
[0104] The loss (or error) will be high for the first training images since the actual values will be much different than the predicted output. The goal of training is to minimize the amount of loss so that the predicted output is the same as the training label. The neural network 800 can perform a backward pass by determining which inputs (weights) most contributed to the loss of the network, and can adjust the weights so that the loss decreases and is eventually minimized. A derivative of the loss with respect to the weights (denoted as dL / dW, where W are the weights at a particular layer) can be computed to determine the weights that contributed most to the loss of the network. After the derivative is computed, a weight update can be performed by updating all the weights of the filters. For example, the weights can be updated so that they change in the opposite direction of the gradient. The weight update can be denoted as where w denotes a weight, wi denotes the initial weight, and η denotes a learning rate. The learning rate can be set to any suitable value, with a high learning rate including larger weight updates and a lower value indicating smaller weight updates.
[0105] The neural network 800 can include any suitable deep network. One example includes a convolutional neural network (CNN) , which includes an input layer and an output layer, with multiple hidden layers between the input and out layers. The hidden layers of a CNN include a series of convolutional, nonlinear, pooling (for downsampling) , and fully connected layers. The neural network 800 can include any other deep network other than a CNN, such as an autoencoder, a deep belief nets (DBNs) , a Recurrent Neural Networks (RNNs) , among others.
[0106] FIG. 9 is an illustrative example of a CNN 900. The input layer 920 of the CNN 900 includes data representing an image or frame. For example, the data can include an array of numbers representing the pixels of the image, with each number in the array including a value from 0 to 255 describing the pixel intensity at that position in the array. Using the previous example from above, the array can include a 28 x 28 x 3 array of numbers with 28 rows and 28 columns of pixels and 3 color components (e.g., red, green, and blue, or luma and two chroma components, or the like) . The image can be passed through a convolutional hidden layer 922a, an optional non-linear activation layer, a pooling hidden layer 922b, and fully connected hidden layers 922c to get an output at the output layer 924. While only one of each hidden layer is shown in FIG. 9, one of ordinary skill will appreciate that multiple convolutional hidden layers, non-linear layers, pooling hidden layers, and / or fully connected layers can be included in the CNN 900. As previously described, the output can indicate a single class of an object or can include a probability of classes that best describe the object in the image.
[0107] The first layer of the CNN 900 is the convolutional hidden layer 922a. The convolutional hidden layer 922a analyzes the image data of the input layer 920. Each node of the convolutional hidden layer 922a is connected to a region of nodes (pixels) of the input image called a receptive field. The convolutional hidden layer 922a can be considered as one or more filters (each filter corresponding to a different activation or feature map) , with each convolutional iteration of a filter being a node or neuron of the convolutional hidden layer 922a. For example, the region of the input image that a filter covers at each convolutional iteration would be the receptive field for the filter. In one illustrative example, if the input image includes a 28×28 array, and each filter (and corresponding receptive field) is a 5×5 array, then there will be 24×24 nodes in the convolutional hidden layer 922a. Each connection between a node and a receptive field for that node learns a weight and, in some cases, an overall bias such that each node learns to analyze its particular local receptive field in the input image. Each node of the hidden layer 922a will have the same weights and bias (called a shared weight and a shared bias) . For example, the filter has an array of weights (numbers) and the same depth as the input. A filter will have a depth of 3 for the video frame example (according to three color components of the input image) . An illustrative example size of the filter array is 5 x 5 x 3, corresponding to a size of the receptive field of a node.
[0108] The convolutional nature of the convolutional hidden layer 922a is due to each node of the convolutional layer being applied to its corresponding receptive field. For example, a filter of the convolutional hidden layer 922a can begin in the top-left corner of the input image array and can convolve around the input image. As noted above, each convolutional iteration of the filter can be considered a node or neuron of the convolutional hidden layer 922a. At each convolutional iteration, the values of the filter are multiplied with a corresponding number of the original pixel values of the image (e.g., the 5x5 filter array is multiplied by a 5x5 array of input pixel values at the top-left corner of the input image array) . The multiplications from each convolutional iteration can be summed together to obtain a total sum for that iteration or node. The process is next continued at a next location in the input image according to the receptive field of a next node in the convolutional hidden layer 922a. For example, a filter can be moved by a step amount (referred to as a stride) to the next receptive field. The stride can be set to 1 or other suitable amount. For example, if the stride is set to 1, the filter will be moved to the right by 1 pixel at each convolutional iteration. Processing the filter at each unique location of the input volume produces a number representing the filter results for that location, resulting in a total sum value being determined for each node of the convolutional hidden layer 922a.
[0109] The mapping from the input layer to the convolutional hidden layer 922a is referred to as an activation map (or feature map) . The activation map includes a value for each node representing the filter results at each locations of the input volume. The activation map can include an array that includes the various total sum values resulting from each iteration of the filter on the input volume. For example, the activation map will include a 24 x 24 array if a 5 x 5 filter is applied to each pixel (a stride of 1) of a 28 x 28 input image. The convolutional hidden layer 922a can include several activation maps in order to identify multiple features in an image. The example shown in FIG. 9 includes three activation maps. Using three activation maps, the convolutional hidden layer 922a can detect three different kinds of features, with each feature being detectable across the entire image.
[0110] In some examples, a non-linear hidden layer can be applied after the convolutional hidden layer 922a. The non-linear layer can be used to introduce non-linearity to a system that has been computing linear operations. One illustrative example of a non-linear layer is a rectified linear unit (ReLU) layer. A ReLU layer can apply the function f (x) = max (0, x) to all of the values in the input volume, which changes all the negative activations to 0. The ReLU can thus increase the non-linear properties of the CNN 900 without affecting the receptive fields of the convolutional hidden layer 922a.
[0111] The pooling hidden layer 922b can be applied after the convolutional hidden layer 922a (and after the non-linear hidden layer when used) . The pooling hidden layer 922b is used to simplify the information in the output from the convolutional hidden layer 922a. For example, the pooling hidden layer 922b can take each activation map output from the convolutional hidden layer 922a and generates a condensed activation map (or feature map) using a pooling function. Max-pooling is one example of a function performed by a pooling hidden layer. Other forms of pooling functions be used by the pooling hidden layer 922a, such as average pooling, L2-norm pooling, or other suitable pooling functions. A pooling function (e.g., a max-pooling filter, an L2-norm filter, or other suitable pooling filter) is applied to each activation map included in the convolutional hidden layer 922a. In the example shown in FIG. 9, three pooling filters are used for the three activation maps in the convolutional hidden layer 922a.
[0112] In some examples, max-pooling can be used by applying a max-pooling filter (e.g., having a size of 2x2) with a stride (e.g., equal to a dimension of the filter, such as a stride of 2) to an activation map output from the convolutional hidden layer 922a. The output from a max-pooling filter includes the maximum number in every sub-region that the filter convolves around. Using a 2x2 filter as an example, each unit in the pooling layer can summarize a region of 2×2 nodes in the previous layer (with each node being a value in the activation map) . For example, four values (nodes) in an activation map will be analyzed by a 2x2 max-pooling filter at each iteration of the filter, with the maximum value from the four values being output as the “max” value. If such a max-pooling filter is applied to an activation filter from the convolutional hidden layer 922a having a dimension of 24x24 nodes, the output from the pooling hidden layer 922b will be an array of 18x12 nodes.
[0113] In some examples, an L2-norm pooling filter could also be used. The L2-norm pooling filter includes computing the square root of the sum of the squares of the values in the 2×2 region (or other suitable region) of an activation map (instead of computing the maximum values as is done in max-pooling) , and using the computed values as an output.
[0114] Intuitively, the pooling function (e.g., max-pooling, L2-norm pooling, or other pooling function) determines whether a given feature is found anywhere in a region of the image, and discards the exact positional information. This can be done without affecting results of the feature detection because, once a feature has been found, the exact location of the feature is not as important as its approximate location relative to other features. Max-pooling (as well as other pooling methods) offer the benefit that there are many fewer pooled features, thus reducing the number of parameters needed in later layers of the CNN 900.
[0115] The final layer of connections in the network is a fully-connected layer that connects every node from the pooling hidden layer 922b to every one of the output nodes in the output layer 924. Using the example above, the input layer includes 28 x 28 nodes encoding the pixel intensities of the input image, the convolutional hidden layer 922a includes 3×24×24 hidden feature nodes based on application of a 5×5 local receptive field (for the filters) to three activation maps, and the pooling hidden layer 922b includes a layer of 3×12×12 hidden feature nodes based on application of max-pooling filter to 2×2 regions across each of the three feature maps. Extending this example, the output layer 924 can include ten output nodes. In such an example, every node of the 3x12x12 pooling hidden layer 922b is connected to every node of the output layer 924.
[0116] The fully connected layer 922c can obtain the output of the previous pooling hidden layer 922b (which should represent the activation maps of high-level features) and determines the features that most correlate to a particular class. For example, the fully connected layer 922c layer can determine the high-level features that most strongly correlate to a particular class, and can include weights (nodes) for the high-level features. A product can be computed between the weights of the fully connected layer 922c and the pooling hidden layer 922b to obtain probabilities for the different classes. For example, if the CNN 900 is being used to predict that an object in a video frame is a person, high values will be present in the activation maps that represent high-level features of people (e.g., two legs are present, a face is present at the top of the object, two eyes are present at the top left and top right of the face, a nose is present in the middle of the face, a mouth is present at the bottom of the face, and / or other features common for a person) .
[0117] In some examples, the output from the output layer 924 can include an M-dimensional vector (in the prior example, M=10) . M indicates the number of classes that the CNN 900 has to choose from when classifying the object in the image. Other example outputs can also be provided. Each number in the M-dimensional vector can represent the probability the object is of a certain class. In one illustrative example, if a 10-dimensional output vector represents ten different classes of objects is [0 0 0.05 0.8 0 0.15 0 0 0 0] , the vector indicates that there is a 5%probability that the image is the third class of object (e.g., a dog) , an 80%probability that the image is the fourth class of object (e.g., a human) , and a 15%probability that the image is the sixth class of object (e.g., a kangaroo) . The probability for a class can be considered a confidence level that the object is part of that class.
[0118] FIG. 10 is a diagram illustrating an example of a system for implementing certain aspects of the present technology. In particular, FIG. 10 illustrates an example of computing system 1000, which can be for example any computing device making up internal computing system, a remote computing system, a camera, or any component thereof in which the components of the system are in communication with each other using connection 1005. Connection 1005 can be a physical connection using a bus, or a direct connection into processor 1010, such as in a chipset architecture. Connection 1005 can also be a virtual connection, networked connection, or logical connection.
[0119] In some aspects, computing system 1000 is a distributed system in which the functions described in this disclosure can be distributed within a datacenter, multiple data centers, a peer network, etc. In some aspects, one or more of the described system components represents many such components each performing some or all of the function for which the component is described. In some aspects, the components can be physical or virtual devices.
[0120] Example computing system 1000 includes at least one processing unit (CPU or processor) 1010 and connection 1005 that couples various system components including system memory 1015, such as ROM 1020 and RAM 1025 to processor 1010. Computing system 1000 can include a cache 1012 of high-speed memory connected directly with, in close proximity to, or integrated as part of processor 1010.
[0121] Processor 1010 can include any general purpose processor and a hardware service or software service, such as services 1032, 1034, and 1036 stored in storage device 1030, configured to control processor 1010 as well as a special-purpose processor where software instructions are incorporated into the actual processor design. Processor 1010 may essentially be a completely self-contained computing system, containing multiple cores or processors, a bus, memory controller, cache, etc. A multi-core processor may be symmetric or asymmetric.
[0122] To enable user interaction, computing system 1000 includes an input device 1045, which can represent any number of input mechanisms, such as a microphone for speech, a touch-sensitive screen for gesture or graphical input, keyboard, mouse, motion input, speech, etc. Computing system 1000 can also include output device 1035, which can be one or more of a number of output mechanisms. In some instances, multimodal systems can enable a user to provide multiple types of input / output to communicate with computing system 1000. Computing system 1000 can include communications interface 1040, which can generally govern and manage the user input and system output. The communication interface may perform or facilitate receipt and / or transmission wired or wireless communications using wired and / or wireless transceivers, including those making use of an audio jack / plug, a microphone jack / plug, a universal serial bus (USB) port / plug, an port / plug, an Ethernet port / plug, a fiber optic port / plug, a proprietary wired port / plug, a wireless signal transfer, a BLE wireless signal transfer, an wireless signal transfer, an RFID wireless signal transfer, near-field communications (NFC) wireless signal transfer, dedicated short range communication (DSRC) wireless signal transfer, 802.11 WiFi wireless signal transfer, WLAN signal transfer, Visible Light Communication (VLC) , Worldwide Interoperability for Microwave Access (WiMAX) , IR communication wireless signal transfer, Public Switched Telephone Network (PSTN) signal transfer, Integrated Services Digital Network (ISDN) signal transfer, 3G / 4G / 5G / LTE cellular data network wireless signal transfer, ad-hoc network signal transfer, radio wave signal transfer, microwave signal transfer, infrared signal transfer, visible light signal transfer, ultraviolet light signal transfer, wireless signal transfer along the electromagnetic spectrum, or some combination thereof. The communications interface 1040 may also include one or more Global Navigation Satellite System (GNSS) receivers or transceivers that are used to determine a location of the computing system 1000 based on receipt of one or more signals from one or more satellites associated with one or more GNSS systems. GNSS systems include, but are not limited to, the US-based GPS, the Russia-based Global Navigation Satellite System (GLONASS) , the China-based BeiDou Navigation Satellite System (BDS) , and the Europe-based Galileo GNSS. There is no restriction on operating on any particular hardware arrangement, and therefore the basic features here may easily be substituted for improved hardware or firmware arrangements as they are developed.
[0123] Storage device 1030 can be a non-volatile and / or non-transitory and / or computer-readable memory device and can be a hard disk or other types of computer readable media which can store data that are accessible by a computer, such as magnetic cassettes, flash memory cards, solid state memory devices, digital versatile disks, cartridges, a floppy disk, a flexible disk, a hard disk, magnetic tape, a magnetic strip / stripe, any other magnetic storage medium, flash memory, memristor memory, any other solid-state memory, a compact disc read only memory (CD-ROM) optical disc, a rewritable compact disc (CD) optical disc, digital video disk (DVD) optical disc, a blu-ray disc (BDD) optical disc, a holographic optical disk, another optical medium, a secure digital (SD) card, a micro secure digital (microSD) card, a Memory card, a smartcard chip, a EMV chip, a subscriber identity module (SIM) card, a mini / micro / nano / pico SIM card, another integrated circuit (IC) chip / card, RAM, static RAM (SRAM) , dynamic RAM (DRAM) , ROM, programmable read-only memory (PROM) , erasable programmable read-only memory (EPROM) , electrically erasable programmable read-only memory (EEPROM) , flash EPROM (FLASHEPROM) , cache memory (L1 / L2 / L3 / L4 / L5 / L#) , resistive random-access memory (RRAM / ReRAM) , phase change memory (PCM) , spin transfer torque RAM (STT-RAM) , another memory chip or cartridge, and / or a combination thereof.
[0124] The storage device 1030 can include software services, servers, services, etc., that when the code that defines such software is executed by the processor 1010, it causes the system to perform a function. In some aspects, a hardware service that performs a particular function can include the software component stored in a computer-readable medium in connection with the necessary hardware components, such as processor 1010, connection 1005, output device 1035, etc., to carry out the function. The term “computer-readable medium” includes, but is not limited to, portable or non-portable storage devices, optical storage devices, and various other mediums capable of storing, containing, or carrying instruction (s) and / or data. A computer-readable medium may include a non-transitory medium in which data can be stored and that does not include carrier waves and / or transitory electronic signals propagating wirelessly or over wired connections. Examples of a non-transitory medium may include, but are not limited to, a magnetic disk or tape, optical storage media such as CD or DVD, flash memory, memory or memory devices. A computer-readable medium may have stored thereon code and / or machine-executable instructions that may represent a procedure, a function, a subprogram, a program, a routine, a subroutine, a module, a software package, a class, or any combination of instructions, data structures, or program statements. A code segment may be coupled to another code segment or a hardware circuit by passing and / or receiving information, data, arguments, parameters, or memory contents. Information, arguments, parameters, data, etc. may be passed, forwarded, or transmitted via any suitable means including memory sharing, message passing, token passing, network transmission, or the like.
[0125] In some examples, the methods described herein (e.g., method 700, and / or other process described herein) may be performed by a computing device or apparatus. In one example, the method 700 can be performed by a computing device (e.g., the SoC 100 in FIG. 1) having a computing architecture of the computing system 1000 shown in FIG. 10.
[0126] In some cases, the computing device or apparatus may include various components, such as one or more input devices, one or more output devices, one or more processors, one or more microprocessors, one or more microcomputers, one or more cameras, one or more sensors, and / or other component (s) that are configured to carry out the steps of methods described herein. In some examples, the computing device may include a display, one or more network interfaces configured to communicate and / or receive the data, any combination thereof, and / or other component (s) . The one or more network interfaces can be configured to communicate and / or receive wired and / or wireless data, including data according to the 3G, 4G, 5G, and / or other cellular standard, data according to the Wi-Fi (802.11x) standards, data according to the BluetoothTM standard, data according to the IP standard, and / or other types of data.
[0127] The components of the computing device can be implemented in circuitry. For example, the components can include and / or can be implemented using electronic circuits or other electronic hardware, which can include one or more programmable electronic circuits (e.g., microprocessors, GPUs, DSPs, CPUs, and / or other suitable electronic circuits) , and / or can include and / or be implemented using computer software, firmware, or any combination thereof, to perform the various operations described herein.
[0128] In some aspects the computer-readable storage devices, mediums, and memories can include a cable or wireless signal containing a bit stream and the like. However, when mentioned, non-transitory computer-readable storage media expressly exclude media such as energy, carrier signals, electromagnetic waves, and signals per se.
[0129] Specific details are provided in the description above to provide a thorough understanding of the aspects and examples provided herein. However, it will be understood by one of ordinary skill in the art that the aspects may be practiced without these specific details. For clarity of explanation, in some instances the present technology may be presented as including individual functional blocks including functional blocks comprising devices, device components, steps or routines in a method embodied in software, or combinations of hardware and software. Additional components may be used other than those shown in the figures and / or described herein. For example, circuits, systems, networks, processes, and other components may be shown as components in block diagram form in order not to obscure the aspects in unnecessary detail. In other instances, well-known circuits, processes, algorithms, structures, and techniques may be shown without unnecessary detail in order to avoid obscuring the aspects.
[0130] Individual aspects may be described above as a process or method which is depicted as a flowchart, a flow diagram, a data flow diagram, a structure diagram, or a block diagram. Although a flowchart may describe the operations as a sequential process, many of the operations can be performed in parallel or concurrently. In addition, the order of the operations may be re- arranged. A process is terminated when its operations are completed but may have additional steps not included in a figure. A process may correspond to a method, a function, a procedure, a subroutine, a subprogram, etc. When a process corresponds to a function, its termination can correspond to a return of the function to the calling function or the main function.
[0131] Processes and methods according to the above-described examples can be implemented using computer-executable instructions that are stored or otherwise available from computer-readable media. Such instructions can include, for example, instructions and data which cause or otherwise configure a general purpose computer, special purpose computer, or a processing device to perform a certain function or group of functions. Portions of computer resources used can be accessible over a network. The computer executable instructions may be, for example, binaries, intermediate format instructions such as assembly language, firmware, source code, etc. Examples of computer-readable media that may be used to store instructions, information used, and / or information created during methods according to described examples include magnetic or optical disks, flash memory, USB devices provided with non-volatile memory, networked storage devices, and so on.
[0132] Devices implementing processes and methods according to these disclosures can include hardware, software, firmware, middleware, microcode, hardware description languages, or any combination thereof, and can take any of a variety of form factors. When implemented in software, firmware, middleware, or microcode, the program code or code segments to perform the necessary tasks (e.g., a computer-program product) may be stored in a computer-readable or machine-readable medium. A processor (s) may perform the necessary tasks. Typical examples of form factors include laptops, smart phones, mobile phones, tablet devices or other small form factor personal computers, personal digital assistants, rackmount devices, standalone devices, and so on. Functionality described herein also can be embodied in peripherals or add-in cards. Such functionality can also be implemented on a circuit board among different chips or different processes executing in a single device, by way of further example.
[0133] The instructions, media for conveying such instructions, computing resources for executing them, and other structures for supporting such computing resources are example means for providing the functions described in the disclosure.
[0134] In the foregoing description, aspects of the application are described with reference to specific aspects thereof, but those skilled in the art will recognize that the application is not limited thereto. Thus, while illustrative aspects of the application have been described in detail herein, it is to be understood that the inventive concepts may be otherwise variously embodied and employed, and that the appended claims are intended to be construed to include such variations, except as limited by the prior art. Various features and aspects of the above-described application may be used individually or jointly. Further, aspects can be utilized in any number of environments and applications beyond those described herein without departing from the broader spirit and scope of the specification. The specification and drawings are, accordingly, to be regarded as illustrative rather than restrictive. For the purposes of illustration, methods were described in a particular order. It should be appreciated that in alternate aspects, the methods may be performed in a different order than that described.
[0135] One of ordinary skill will appreciate that the less than ( “<” ) and greater than ( “>” ) symbols or terminology used herein can be replaced with less than or equal to ( “≤” ) and greater than or equal to ( “≥” ) symbols, respectively, without departing from the scope of this description.
[0136] Where components are described as being “configured to” perform certain operations, such configuration can be accomplished, for example, by designing electronic circuits or other hardware to perform the operation, by programming programmable electronic circuits (e.g., microprocessors, or other suitable electronic circuits) to perform the operation, or any combination thereof.
[0137] The phrase “coupled to” refers to any component that is physically connected to another component either directly or indirectly, and / or any component that is in communication with another component (e.g., connected to the other component over a wired or wireless connection, and / or other suitable communication interface) either directly or indirectly.
[0138] Claim language or other language reciting “at least one of” a set and / or “one or more” of a set indicates that one member of the set or multiple members of the set (in any combination) satisfy the claim. For example, claim language reciting “at least one of A and B” or “at least one of A or B” means A, B, or A and B. In another example, claim language reciting “at least one of A, B, and C” or “at least one of A, B, or C” means A, B, C, or A and B, or A and C, or B and C, or A and B and C. The language “at least one of” a set and / or “one or more” of a set does not limit the set to the items listed in the set. For example, claim language reciting “at least one of A and B” or “at least one of A or B” can mean A, B, or A and B, and can additionally include items not listed in the set of A and B.
[0139] The various illustrative logical blocks, modules, circuits, and algorithm steps described in connection with the aspects disclosed herein may be implemented as electronic hardware, computer software, firmware, or combinations thereof. To clearly illustrate this interchangeability of hardware and software, various illustrative components, blocks, modules, circuits, and steps have been described above generally in terms of their functionality. Whether such functionality is implemented as hardware or software depends upon the particular application and design constraints imposed on the overall system. Skilled artisans may implement the described functionality in varying ways for each particular application, but such implementation decisions should not be interpreted as causing a departure from the scope of the present application.
[0140] The techniques described herein may also be implemented in electronic hardware, computer software, firmware, or any combination thereof. Such techniques may be implemented in any of a variety of devices such as general purposes computers, wireless communication device handsets, or integrated circuit devices having multiple uses including application in wireless communication device handsets and other devices. Any features described as modules or components may be implemented together in an integrated logic device or separately as discrete but interoperable logic devices. If implemented in software, the techniques may be realized at least in part by a computer-readable data storage medium comprising program code including instructions that, when executed, performs one or more of the methods described above. The computer-readable data storage medium may form part of a computer program product, which may include packaging materials. The computer-readable medium may comprise memory or data storage media, such as RAM such as synchronous dynamic random access memory (SDRAM) , ROM, non-volatile random access memory (NVRAM) , EEPROM, flash memory, magnetic or optical data storage media, and the like. The techniques additionally, or alternatively, may be realized at least in part by a computer-readable communication medium that carries or communicates program code in the form of instructions or data structures and that can be accessed, read, and / or executed by a computer, such as propagated signals or waves.
[0141] The program code may be executed by a processor, which may include one or more processors, such as one or more DSPs, general purpose microprocessors, an application specific integrated circuits (ASICs) , field programmable logic arrays (FPGAs) , or other equivalent integrated or discrete logic circuitry. Such a processor may be configured to perform any of the techniques described in this disclosure. A general purpose processor may be a microprocessor; but in the alternative, the processor may be any conventional processor, controller, microcontroller, or state machine. A processor may also be implemented as a combination of computing devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration. Accordingly, the term “processor, ” as used herein may refer to any of the foregoing structure, any combination of the foregoing structure, or any other structure or apparatus suitable for implementation of the techniques described herein.
[0142] Illustrative Aspects of the present disclosure include:
[0143] Aspect 1. A method of decoding video at a computing device, the method comprising: identifying, based on information associated with a first frame of a video, a first machine learning model from a plurality of machine learning models for upscaling a frame of the video, wherein each machine learning model of the plurality of machine learning models is trained using a first dataset and a first loss; and upscaling the first frame from a first resolution to a second resolution using the first machine learning model.
[0144] Aspect 2. The method of Aspect 1, wherein the second resolution corresponds to a resolution of a display of the computing device.
[0145] Aspect 3. The method of any of Aspects 1 to 2, wherein the information associated with the first frame includes motion information.
[0146] Aspect 4. The method of any of Aspects 1 to 3, further comprising: analyzing the first frame to identify an amount of motion in the first frame relative to a second frame, the second frame being prior to the first frame in the video; and selecting the first machine learning model to upscale the first frame based on the amount of motion in the first frame relative to the second frame.
[0147] Aspect 5. The method of any of Aspects 1 to 4, wherein the amount of motion is based on motion vector information generated by a video decoding device.
[0148] Aspect 6. The method of any of Aspects 1 to 5, further comprising selecting the first machine learning model based on the amount of motion being greater than a threshold amount of motion.
[0149] Aspect 7. The method of any of Aspects 1 to 6, wherein the first machine learning model is configured to generate a lower quality upscaled frame than a second machine learning model when the amount of motion is greater than the threshold amount of motion.
[0150] Aspect 8. The method of any of Aspects 1 to 7, wherein the first machine learning model is configured to generate a higher quality upscaled frame than a second machine learning model when the amount of motion is less than the threshold amount of motion.
[0151] Aspect 9. The method of any of Aspects 1 to 8, wherein a motion vector information of a third frame after the first frame in the video is not analyzed, wherein the third frame follows the first frame during a temporal filtering delay.
[0152] Aspect 10. The method of any of Aspects 1 to 9, further comprising: selecting the first machine learning model to upscale the first frame based on playback of the video being paused at the first frame, wherein the first machine learning model generates a higher quality upscaled frame than a second machine learning model.
[0153] Aspect 11. The method of any of Aspects 1 to 10, wherein the information associated with the first frame includes a frame rate of the video, the method further comprising: selecting the first machine learning model to upscale the first frame based on the frame rate of the video.
[0154] Aspect 12. The method of any of Aspects 1 to 11, further comprising: selecting the first machine learning model to upscale the first frame based on amount of battery power remaining in the computing device.
[0155] Aspect 13. The method of any of Aspects 1 to 12, further comprising: in response to detecting first metadata associated with a duration of time in the video, selecting the first machine learning model to upscale frames for the duration based on luminance information in the first metadata
[0156] Aspect 14. The method of any of Aspects 1 to 13, further comprising: selecting a second machine learning model to upscale a second frame based on a second metadata associated with a second duration of time in the video based on luminance information in the second metadata
[0157] Aspect 15. The method of any of Aspects 1 to 14, wherein the first machine learning model is configured to execute on a first processing core, and wherein a second machine learning model is configured to execute on a second processing core.
[0158] Aspect 16. The method of any of Aspects 1 to 15, wherein the first machine learning model has fewer weights than at least one other machine learning model of the plurality of machine learning models.
[0159] Aspect 17. The method of any of Aspects 1 to 16, wherein the first machine learning model comprises a different quantization type than at least one other machine learning model of the plurality of machine learning models.
[0160] Aspect 18. The method of any of Aspects 1 to 17, wherein a first quantization type of the first machine learning model includes integer quantization and a quantization type of a second machine learning model of the plurality of machine learning models includes floating point quantization.
[0161] Aspect 19. The method of any of Aspects 1 to 18, wherein the computing device comprises a mobile device.
[0162] Aspect 20. A method of training machine learning models for decoding video, the method comprising: configuring a first machine learning model and a second machine learning model, wherein the second machine learning model is configured to include more hyperparameters than the first machine learning model; training the first machine learning model based on a first dataset to have a first loss; training the second machine learning model based on the first dataset to have a second loss that is within a tolerance range of the first loss; quantizing the first machine learning model to execute on a first processing core; and quantizing the second machine learning model to execute on a second processing core.
[0163] Aspect 21. An apparatus for decoding video includes at least one memory (e.g., implemented in circuitry) and at least one processor coupled to the at least one memory. The at least one processor is configured to: : identify, based on information associated with a first frame of a video, a first machine learning model from a plurality of machine learning models for upscaling a frame of the video, wherein each machine learning model of the plurality of machine learning models is trained using a first dataset and a first loss; and upscale the first frame from a first resolution to a second resolution using the first machine learning model.
[0164] Aspect 22. The apparatus of Aspect 21, wherein the second resolution corresponds to a resolution of a display of the apparatus.
[0165] Aspect 23. The apparatus of any of Aspects 21 to 22, wherein the information associated with the first frame includes motion information.
[0166] Aspect 24. The apparatus of any of Aspects 21 to 23, wherein the at least one processor is configured to: analyze the first frame to identify an amount of motion in the first frame relative to a second frame, the second frame being prior to the first frame in the video; and select the first machine learning model to upscale the first frame based on the amount of motion in the first frame relative to the second frame.
[0167] Aspect 25. The apparatus of any of Aspects 21 to 24, wherein the amount of motion is based on motion vector information generated by a video decoding device.
[0168] Aspect 26. The apparatus of any of Aspects 21 to 25, wherein the at least one processor is configured to: select the first machine learning model based on the amount of motion being greater than a threshold amount of motion.
[0169] Aspect 27. The apparatus of any of Aspects 21 to 26, wherein the first machine learning model is configured to generate a lower quality upscaled frame than a second machine learning model when the amount of motion is greater than the threshold amount of motion.
[0170] Aspect 28. The apparatus of any of Aspects 21 to 27, wherein the first machine learning model is configured to generate a higher quality upscaled frame than a second machine learning model when the amount of motion is less than the threshold amount of motion.
[0171] Aspect 29. The apparatus of any of Aspects 21 to 28, wherein a motion vector information of a third frame after the first frame in the video is not analyzed, wherein the third frame follows the first frame during a temporal filtering delay.
[0172] Aspect 30. The apparatus of any of Aspects 21 to 29, wherein the at least one processor is configured to: select the first machine learning model to upscale the first frame based on playback of the video being paused at the first frame, wherein the first machine learning model generates a higher quality upscaled frame than a second machine learning model.
[0173] Aspect 31. The apparatus of any of Aspects 21 to 30, wherein the information associated with the first frame includes a frame rate of the video, and wherein the at least one processor is configured to: select the first machine learning model to upscale the first frame based on the frame rate of the video.
[0174] Aspect 32. The apparatus of any of Aspects 21 to 31, wherein the at least one processor is configured to: select the first machine learning model to upscale the first frame based on amount of battery power remaining in the apparatus.
[0175] Aspect 33. The apparatus of any of Aspects 21 to 32, wherein the at least one processor is configured to: in response to detecting first metadata associated with a duration of time in the video, select the first machine learning model to upscale frames for the duration based on luminance information in the first metadata.
[0176] Aspect 34. The apparatus of any of Aspects 21 to 33, wherein the at least one processor is configured to: select a second machine learning model to upscale a second frame based on a second metadata associated with a second duration of time in the video based on luminance information in the second metadata.
[0177] Aspect 35. The apparatus of any of Aspects 21 to 34, wherein the first machine learning model is configured to execute on a first processing core, and wherein a second machine learning model is configured to execute on a second processing core.
[0178] Aspect 36. The apparatus of any of Aspects 21 to 35, wherein the first machine learning model has fewer weights than at least one other machine learning model of the plurality of machine learning models.
[0179] Aspect 37. The apparatus of any of Aspects 21 to 36, wherein the first machine learning model comprises a different quantization type than at least one other machine learning model of the plurality of machine learning models.
[0180] Aspect 38. The apparatus of any of Aspects 21 to 37, wherein a first quantization type of the first machine learning model includes integer quantization and a quantization type of a second machine learning model of the plurality of machine learning models includes floating point quantization.
[0181] Aspect 39. The apparatus of any of Aspects 21 to 38, wherein the apparatus comprises a mobile device.
[0182] Aspect 40. An apparatus for training machine learning models for decoding video includes at least one memory (e.g., implemented in circuitry) and at least one processor coupled to the at least one memory. The at least one processor is configured to: configure a first machine learning model and a second machine learning model, wherein the second machine learning model is configured to include more hyperparameters than the first machine learning model; train the first machine learning model based on a first dataset to have a first loss; train the second machine learning model based on the first dataset to have a second loss that is within a tolerance range of the first loss; quantize the first machine learning model to execute on a first processing core; and quantize the second machine learning model to execute on a second processing core.
[0183] Aspect 41. A non-transitory computer-readable storage medium comprising instructions stored thereon which, when executed by at least one processor, causes the at least one processor to perform operations according to any of Aspects 1 to 19.
[0184] Aspect 42. An apparatus for wireless communications comprising one or more means for performing operations according to Aspect 20.
[0185] Aspect 43. A non-transitory computer-readable storage medium comprising instructions stored thereon which, when executed by at least one processor, causes the at least one processor to perform operations according to any of Aspects 1 to 19.
[0186] Aspect 44. An apparatus for wireless communications comprising one or more means for performing operations according to Aspect 40.
Claims
1.A method of decoding video at a computing device, the method comprising:identifying, based on information associated with a first frame of a video, a first machine learning model from a plurality of machine learning models for upscaling a frame of the video, wherein each machine learning model of the plurality of machine learning models is trained using a first dataset and a first loss; andupscaling the first frame from a first resolution to a second resolution using the first machine learning model.2.The method of claim 1, wherein the second resolution corresponds to a resolution of a display of the computing device.3.The method of claim 1, wherein the information associated with the first frame includes motion information.4.The method of claim 3, further comprising:analyzing the first frame to identify an amount of motion in the first frame relative to a second frame, the second frame being prior to the first frame in the video; andselecting the first machine learning model to upscale the first frame based on the amount of motion in the first frame relative to the second frame.5.The method of claim 4, wherein the amount of motion is based on motion vector information generated by a video decoding device.6.The method of claim 4, further comprising selecting the first machine learning model based on the amount of motion being greater than a threshold amount of motion.7.The method of claim 6, wherein the first machine learning model is configured to generate a lower quality upscaled frame than a second machine learning model when the amount of motion is greater than the threshold amount of motion.8.The method of claim 6, wherein the first machine learning model is configured to generate a higher quality upscaled frame than a second machine learning model when the amount of motion is less than the threshold amount of motion.9.The method of claim 4, wherein a motion vector information of a third frame after the first frame in the video is not analyzed, wherein the third frame follows the first frame during a temporal filtering delay.10.The method of claim 1, further comprising:selecting the first machine learning model to upscale the first frame based on playback of the video being paused at the first frame, wherein the first machine learning model generates a higher quality upscaled frame than a second machine learning model.11.The method of claim 1, wherein the information associated with the first frame includes a frame rate of the video, the method further comprising:selecting the first machine learning model to upscale the first frame based on the frame rate of the video.12.The method of claim 1, further comprising:selecting the first machine learning model to upscale the first frame based on amount of battery power remaining in the computing device.13.The method of claim 1, further comprising:in response to detecting first metadata associated with a duration of time in the video, selecting the first machine learning model to upscale frames for the duration based on luminance information in the first metadata.14.The method of claim 13, further comprising:selecting a second machine learning model to upscale a second frame based on a second metadata associated with a second duration of time in the video based on luminance information in the second metadata.15.The method of claim 1, wherein the first machine learning model is configured to execute on a first processing core, and wherein a second machine learning model is configured to execute on a second processing core.16.The method of claim 1, wherein the first machine learning model has fewer weights than at least one other machine learning model of the plurality of machine learning models.17.The method of claim 1, wherein the first machine learning model comprises a different quantization type than at least one other machine learning model of the plurality of machine learning models.18.The method of claim 17, wherein a first quantization type of the first machine learning model includes integer quantization and a quantization type of a second machine learning model of the plurality of machine learning models includes floating point quantization.19.The method of claim 1, wherein the computing device comprises a mobile device.20.A method of training machine learning models for decoding video, the method comprising:configuring a first machine learning model and a second machine learning model, wherein the second machine learning model is configured to include more hyperparameters than the first machine learning model;training the first machine learning model based on a first dataset to have a first loss;training the second machine learning model based on the first dataset to have a second loss that is within a tolerance range of the first loss;quantizing the first machine learning model to execute on a first processing core; andquantizing the second machine learning model to execute on a second processing core.21.An apparatus for decoding video, comprising:at least one memory configured to store instructions;at least one processor coupled to the at least one memory and configured to:identify, based on information associated with a first frame of a video, a first machine learning model from a plurality of machine learning models for upscaling a frame of the video, wherein each machine learning model of the plurality of machine learning models is trained using a first dataset and a first loss; andupscale the first frame from a first resolution to a second resolution using the first machine learning model.22.The apparatus of claim 21, wherein the second resolution corresponds to a resolution of a display of the apparatus.23.The apparatus of claim 21, wherein the information associated with the first frame includes motion information.24.The apparatus of claim 23, wherein the at least one processor is configured to:analyze the first frame to identify an amount of motion in the first frame relative to a second frame, the second frame being prior to the first frame in the video; andselect the first machine learning model to upscale the first frame based on the amount of motion in the first frame relative to the second frame.25.The apparatus of claim 24, wherein the amount of motion is based on motion vector information generated by a video decoding device.26.The apparatus of claim 24, wherein the at least one processor is configured to select the first machine learning model based on the amount of motion being greater than a threshold amount of motion.27.The apparatus of claim 26, wherein the first machine learning model is configured to generate a lower quality upscaled frame than a second machine learning model when the amount of motion is greater than the threshold amount of motion.28.The apparatus of claim 26, wherein the first machine learning model is configured to generate a higher quality upscaled frame than a second machine learning model when the amount of motion is less than the threshold amount of motion.29.The apparatus of claim 24, wherein a motion vector information of a third frame after the first frame in the video is not analyzed, wherein the third frame follows the first frame during a temporal filtering delay.30.The apparatus of claim 21, wherein the at least one processor is configured to:select the first machine learning model to upscale the first frame based on playback of the video being paused at the first frame, wherein the first machine learning model generates a higher quality upscaled frame than a second machine learning model.31.The apparatus of claim 21, wherein the information associated with the first frame includes a frame rate of the video, and wherein the at least one processor is configured to:select the first machine learning model to upscale the first frame based on the frame rate of the video.32.The apparatus of claim 21, wherein the at least one processor is configured to:select the first machine learning model to upscale the first frame based on amount of battery power remaining in the apparatus.33.The apparatus of claim 21, wherein the at least one processor is configured to:in response to detecting first metadata associated with a duration of time in the video, select the first machine learning model to upscale frames for the duration based on luminance information in the first metadata.34.The apparatus of claim 33, wherein the at least one processor is configured to:select a second machine learning model to upscale a second frame based on a second metadata associated with a second duration of time in the video based on luminance information in the second metadata.35.The apparatus of claim 21, wherein the first machine learning model is configured to execute on a first processing core, and wherein a second machine learning model is configured to execute on a second processing core.36.The apparatus of claim 21, wherein the first machine learning model has fewer weights than at least one other machine learning model of the plurality of machine learning models.37.The apparatus of claim 21, wherein the first machine learning model comprises a different quantization type than at least one other machine learning model of the plurality of machine learning models.38.The apparatus of claim 37, wherein a first quantization type of the first machine learning model includes integer quantization and a quantization type of a second machine learning model of the plurality of machine learning models includes floating point quantization.39.The apparatus of claim 21, wherein the apparatus comprises a mobile device.40.An apparatus for training machine learning models for decoding video, comprising:at least one memory;at least one processor coupled to the at least one memory and configured to:configure a first machine learning model and a second machine learning model, wherein the second machine learning model is configured to include more hyperparameters than the first machine learning model;train the first machine learning model based on a first dataset to have a first loss;train the second machine learning model based on the first dataset to have a second loss that is within a tolerance range of the first loss;quantize the first machine learning model to execute on a first processing core; and quantize the second machine learning model to execute on a second processing core.
Citation Information
Patent Citations
Super-resolution reconstruction method and device for video stream
CN111489292A
Video up-sampling using one or more neural networks
CN114365123A
Method of generating metadata, image processing method, electronic device, and program product
CN116503242A
Neural network-based image processing
US10467729B1
Apparatus and method for generating super resolution image using orientation adaptive parallel neural networks
US20210049741A1