Dense video captioning

Systems and methods for dense captioning of a video include a multi-layer encoder stack configured to receive information extracted from a plurality of video frames, a proposal decoder coupled to the encoder stack and configured to receive one or more outputs from the encoder stack, a masking unit configured to mask the one or more outputs from the encoder stack according to one or more outputs from the proposal decoder, and a decoder stack coupled to the masking unit and configured to receive the masked one or more outputs from the encoder stack. Generating the dense captioning based on one or more outputs of the decoder stack. In some embodiments, the one or more outputs from the proposal decoder include a differentiable mask. In some embodiments, during training, error in the dense captioning is back propagated to the decoder stack, the encoder stack, and the proposal decoder.

TECHNICAL FIELD

The present disclosure relates generally to the generation of dense captions for video samples.

BACKGROUND

Video has become an important source for humans to perceive visual information and acquire knowledge (e.g., video lectures, making sandwiches, changing tires, and/or the like). Video content consumes high cognitive band width, and is often slow for a human to digest. To efficiently acquire information from video, it is helpful to provide a description of the video content so that it is easier and faster for humans to understand. This is particularly important given the massive amount of video being produced every day.

Accordingly, it would be advantageous to have systems and methods for generating dense captions for video.

DETAILED DESCRIPTION

Dense captioning for video is one way to make video content easier and faster for humans to understand, by describing events in the video with descriptive natural language. For example, a dense video captioning system could review a video showing a dish being cooked, identify events corresponding to the steps for preparing the dish (e.g., preparing ingredients, cooking the dish, etc.), and generate a descriptive caption for each of the events. In another example, a dense video captioning system could automatically generate descriptive captions for video segments that could serve as descriptions for the content of the video so that a viewer could get a general idea of the content of the video without having to watch the video.

FIG. 1is a simplified diagram of a dense video captioning system100according to some embodiments. In some embodiments, dense video captioning system100may be considered dense because it is capable of providing captioning for videos of lengths lasting 10 minutes or more and/or for videos including multiple events, with each of the multiple events corresponding to a separate caption that is to be generated. As shown inFIG. 1, dense video captioning system100receives a multi-frame video at an input embedding module110. Input embedding module110includes several sub-modules for preparing the received video for captioning. The sub-modules include a sub-sampling module (not separately shown), which extracts a subset of the frames from each of the seconds of the video. In some examples, a frame is sub-sampled every half a second so that for a ten-minute video, the sub-sampling module extracts a total of 1200 frames. The sub-module further includes a feature point extraction module (not separately shown) that extracts features from each of the extracted frames. In some example, the extracted features correspond to the 1-D appearance and optical flow features from each of the extracted frames. In some examples, the 1-D appearance features may be extracted using the Flatten-673 layer of the ResNet-200 network. The ResNet-200 network is described in further detail in He, et al. “Deep Residual Learning for Image Recognition,” CVPR, 2016, which is hereby incorporated by reference in its entirety. In some examples, the optical flow features may be extracted from five contiguous frames and encoded using the BN-Inception network with the output taken from the global pool layer. The BN-Inception network is described in further detail in Ioffe, et al. “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift,” ICML, 2015, which is hereby incorporated by reference in its entirety. In some examples, both the ResNet-200 and BN-Inception networks may be pre-trained using the ActivityNet dataset. The ActivityNet dataset is described in further detail in Heilbron, et al. “ActivityNet: A Large-scale Video Benchmark for Human Activity Understanding,” CVPR, 2015, which is hereby incorporated by reference in its entirety. In some examples, the features extracted by the ResNet200 and BN-Inception networks may include 3072 features from each of the frames. In some examples, the extracted features may be further reduced to 1024 features from each of the frames. The extracted features may also have positional encoding added to them so that the relative temporal position of the extracted features from within the video may be preserved. In some examples, the positional encoding may be encoded according to Equation 1, where Pos is the positional encoding, p is the position of the input feature, i is the position of the output feature, and d is the dimension of the output features. In some examples, for an input with length 100 for which a positional encoding with 150 positions, p varies from 0 to 99, i varies from 0 to 149, and d is 150. In some examples, the dimension of the output features for input embedding module is 2048.

In some embodiments, input embedding module110may further include an additional 1-D dropout layer. In some examples, the 1-D dropout layer is a recurrent dropout layer. In some examples, the dropout ratios are set to 0.1.

The extracted features are then passed to a video encoder stack120. Video encoder stack120is a multi-layer attention-based network as is described in further detail below with respect toFIGS. 2 and 3. The first layer of video encoder stack120receives its input from input embedding module110, each successive layer of video encoder stack120receives its input from the output of the previous layer, and the output of the last layer is passed to a proposal decoder130. The output of each layer of video encoder stack120is further passed to a masking unit140as is described in further detail below. In some examples, video encoder stack120includes two layers, although other numbers of layers are possible including three, four, or more layers.

Proposal decoder130includes a ProcNets network with the sequential prediction module removed. The ProcNets network is described in further detail in Zhou, et al. “Towards Automatic Learning of Procedures from Web Instructional Videos,” AAAI, 2018, which is hereby incorporated by reference in its entirety. The ProcNets network includes a multi-layer temporal convolutional network. In some examples, the ProcNets network includes three 1-D convolutional layers with batch normalization that uses rectified linear unit (ReLU) activation in the hidden layers. In some examples, the ProcNets network is further modified to use a convolutional stride that depends on kernel size according to Equation 2, where s is a scaling factor. In some examples, basing the convolutional stride on the kernel size reduces the number of longer proposals generated by proposal decoder130so that training samples are more balanced and overlap with the ground truth proposals is improved. In some examples, basing the convolutional stride on the kernel size further speeds up the training due to the reduction in the number of longer proposals. In some examples, the temporal convolution kernels in the ProcNets network at set to 1, 2, 3, 4, 5, 7, 9, 11, 15, 21, 29, 41, 57, 71, 111, 161, 211, and 250 and the scaling factor is 50.

Proposal decoder130generates proposals for each of the anchor events in the video that is characterized by an event proposal score (e.g., a probability that the associated event is in the video) Pe∈[0,1] and both a center offset θewithin the video and a length offset θlthat describes the length of the event. The associated anchor for the event is characterized with a length laand a center ca. The center offset θland length offset θlof the event and the laand a center caof the anchor define the start Seand end Eefor the event according to Equation 3.
cp=ca+θcla
lp=laeθl
Sp=cp−0.5lp
Ep=cp+0.5lpEquation 3

Each proposal generated by proposal decoder130is used to generate a proposal mask that is used to mask the outputs from video encoder stack120before providing the outputs from video encoder stack120to a caption decoder stack160. The proposal mask converts the otherwise binary proposal from the ProcNets network into a differentiable event mask M∈Tfor each time step i∈{1, . . . , T} by taking the positional encoding from the anchor and the predicted boundary conditions to provide a continuous and differentiable mask. The differentiable proposal mask is generated according to Equations 1 and 4-6 where g is a continuous function. In some examples, g is parameterized using a multi-layer perceptron network. In some examples, the mask does not need to be learned because proposal decoder130already provides a reasonable boundary prediction so that the gated formulation of Equation 7 may be used to generate the differentiable proposal mask. In practice, the proposal mask is near zero outside the predicted starting Spand ending Eppositions and near one between the predicted starting Spand ending Eppositions.

In some embodiments, because proposal decoder130generates multiple proposals, only those proposals with a highest score Peare used for the generation of captions. In some examples, only the proposals with the ten highest scores Peare used. Each of the proposals generated by proposal decoder130is separately used to mask the outputs from video encoder stack120using masking unit140by point-wise multiplying the outputs from video encoder stack120with the corresponding proposal mask entries. The masked outputs from video encoder stack120are then provided to a caption decoder stack160as is described in further detail below. That is, dense video captioning system100iterates through each of the proposals and generates a caption separately for each.

Dense video captioning system100further includes an output embedding module150. Similar to input embedding module110, output embedding module150receives positional encoding information to provide a temporal context or ordering to the caption text that is generated iteratively by caption decoder stack160and an output layer170. In some examples, the positional encoding used by output embedding module150is generated according to Equation 1. The output from output embedding module150is provided to caption decoder stack160and consists of each of the previously generated output words from the caption (e.g., from previous iterations) shifted by one word and including the positional encoding. In some examples, the set of generated output words is initialized using a starting seed word.

Caption decoder stack160is a multi-layer attention-based network as is described in further detail below with respect toFIGS. 2 and 3. The first layer of caption decoder stack160receives its input from output embedding module150, each successive layer of caption decoder stack160receives its input from the output of the previous layer, and the output of the last layer is passed to output layer170. Each layer of caption decoder stack160further receives the video encoding from a corresponding layer in video encoder stack120that is masked, by masking unit140, according to the current proposal being captioned. In some examples, caption decoder stack160includes two layers, although other numbers of layers are possible including three, four, or more layers. In some examples, video encoder stack120and caption decoder stack160include a same number of layers.

Output layer170includes a linearization network followed by a softmax layer. Collectively the linearization network and softmax layer linearize the output from the last layer of caption decoder stack160and then compress the outputs to the range of [0,1] in order to add the next word in the caption text consistent with the previous iterations of the generated caption text. The softmax transfer function is described in Equation 8, which describes generation of the jth of the output values for a vector z.

According to some embodiments, video encoder stack120, caption decoder stack160, and output layer170are collectively referred to as a transformer. Transformer architectures are described in further detail in Vaswani, et al. “Attention is All You Need,” NIPS, 2017, which is hereby incorporated by reference in its entirety.

Using a differentiable proposal mask in proposal decoder130provide advantages over conventional approaches that use just the binary proposal mask. For example, the differentiable proposal mask allows for the back propagation of error during training from caption decoder stack160to not just video encoder stack120(so that captioning errors are usable to train the video encoding), but also the back propagation of error during training from caption decoder stack160to proposal decoder130(so that captioning errors are also usable to train the proposal decoding). This provides for end-to-end training in dense video captioning system100that is not possible in previous dense video captioning system, which used only the error between the generated proposal and the ground truth proposals in the training data.

FIG. 2is a simplified diagram of an attention network200suitable for use in video encoder stack120and caption decoder stack160according to some embodiments. As shown inFIG. 2, attention network200receives a query q∈dq, a key k∈dk, and a value v∈dv. Each of the q, k, and v are subject to respective weights WQ210, WK220, and WV230according to Equations 9-11. The weights WQ210, WK220, and WV230are altered during training using back propagation.
Q=qWQ∈dqEquation 9
K=kWK∈dkEquation 10
V=vWV∈dvEquation 11

The resulting Q, K, and V vectors are passed through an attention transfer function240, which generates a dot product of Q and K, which is then applied to V according to Equation 12.

An addition and normalization module250is then used to combine the query q with the output from attention transfer function to provide a residual connection that improves the rate of learning by attention network200. Addition and normalization module250implements Equation 13 where μ and σ are the mean and standard deviation, respectively, of the input vector and giis gain parameter for scaling the layer normalization. The output from addition and normalization module250is the output of attention network200.

Attention network200is often used in two variant forms. The first variant form is a multi-head attention layer where multiple attention networks consistent with attention network200are implemented in parallel, which each of the “heads” in the multi-head attention network having its own weights WQ210, WK220, and WV230, which are initialized to different values and thus train to learn different encodings. The outputs from each of the heads are then concatenated together to form the output of the multi-head attention layer. The second variant form is a self-attention layer that is a multi-head attention layer where the q, k, and v inputs are the same for head of the attention network200in each of the heads.

FIG. 3is a simplified diagram of a layer300of a masked transformer for encoding according to some embodiments. As shown inFIG. 3, layer300includes an encoding layer310, a masking unit320, and a decoding layer330.

Encoding layer310receives layer input (e.g., from an input network for a first layer in an encoding stack or from layer output of a next lowest layer for all other layers of the encoding stack) and provides it to all three (q, k, and v) inputs of a multi-head attention layer311, thus multi-head attention layer311is configured as a self-attention network. Each head of multi-head attention layer311is consistent with attention network200. In some examples, multi-head attention layer311includes eight heads, however, other numbers of heads such as two to seven or more than eight are possible. The output of multi-head attention layer311is provided to a feed forward network312with both the input and output of feed forward network312being provided to an addition and normalization module313, which generates the layer output for encoding layer310. In some examples, feed forward network312is a two-layer perceptron network, which implements Equation 14 where γ is the input to feed forward network312and Miand biare the weights and biases respectively of each of the layers in the perceptron network. In some examples, addition and normalization module313is substantially similar to addition and normalization module250. In some examples, encoding layer310is consistent with a layer from video encoding stack120.
FF(γ)=max(0,γM1+b1)M2+b2Equation 14

The layer outputs from encoding layer310are then masked according to a differentiable mask generated for the current proposal using masking unit320. In some examples, masking unit320is consistent with masking unit140.

Decoding layer330receives layer input (e.g., from an input network for a first layer in a decoding stack or from layer output of a next lowest layer for all other layers of the decoding stack) and provides it to all three (q, k, and v) inputs of a multi-head attention layer331, thus multi-head attention layer331is configured as a self-attention network. Each head of multi-head attention layer331is consistent with attention network200. In some examples, multi-head attention layer331includes eight heads, however, other numbers of heads such as two to seven or more than eight are possible. The output of multi-head attention layer311is provided as the q input to another multi-head attention layer332and the k and v inputs of multi-head attention layer332are provided with the masked encoding from masking unit320. Each head of multi-head attention layer321is consistent with attention network200. In some examples, multi-head attention layer332includes eight heads, however, other numbers of heads such as two to seven or more than eight are possible. The output of multi-head attention layer332is provided to a feed forward network333with both the input and output of feed forward network333being provided to an addition and normalization module334, which generates the layer output for encoding layer310. In some examples, feed forward network333and addition and normalization module334are substantially similar to feed forward network312and addition and normalization module313, respectively. In some examples, decoding layer330is consistent with a layer from caption decoder stack160.

In some embodiments, because multi-head attention layer311in in each of the layers of video encoder stack120is configured as a self-attentions layer, there is just a single layer of encoding that has access across the entire span of the input video data as well as the encodings from the intermediary layers. Thus, video encoder stack120is better able to learn potential dependencies between frames of the video that are more temporally distant without suffering from the slow learning of recurrent networks typically used to process video.

FIG. 4is a simplified diagram of a method400of training dense video captioning system100according to some embodiments. One or more of the processes410-480of method400may be implemented, at least in part, in the form of executable code stored on non-transitory, tangible, machine-readable media that when run by one or more processors may cause the one or more processors to perform one or more of the processes410-480. According to some embodiments, method400may be repeatedly used as part of a larger supervised training process where a large number of training videos are each presented in turn to dense video captioning system100with training occurring according to method400. In some examples, each of the videos may be presented multiple times during the training with each presentation of the set of videos corresponding to a training epoch.

At a process410, a video is received. In some examples, the video is stored in file form on a storage media accessible to dense video captioning system100. Also included with the video are ground truth proposals for the events depicted in the video and ground truth captions for each of the events for which a ground truth proposal is provided.

At a process420, the video is sub-sampled. In some examples, the sub-sampling includes extracted one frame from the video every half a second. In some examples, the sub-sampling reduces the volume of the video data so that the model sizes of the networks in dense video captioning system100may be kept reasonable.

At a process430, image features are extracted from each of the sub-sampled video frames. In some examples, the modified ResNet-200 and BN-Inception networks of input embedding module110are used to extract the image features. In some examples, 1024 image features are extracted from each frame. The extracted image features and then combined with a positional encoding by input embedding module110to preserve temporal information associated with the extracted image features.

At a process440, the extracted image features are encoded. In some examples, the encoding is performed by video encoder stack120with the extracted image features being fed forward through the layers of video encoder stack120according to the current weights and parameters in each of the layers of video encoder stack120. In some examples, each of the layers in video encoder stack120is consistent with encoding layer310.

At a process450, event proposals are generated. In some examples, the encoded image features from the last layer of video encoder stack120are provided to proposal decoder130. Proposal decoder130generates a candidate set of event proposals by feeding forward the encoded image features from the last layer of video encoder stack120through the modified ProcNets network. Each of the candidate event proposals is associated with a proposal score Pe, which reflects its strength as a possible event within the video.

At a process460, the proposals from the set of candidate proposals with the highest proposal scores are selected for further processing. In some examples, the candidate proposals with the ten highest scores are selected. In some examples, the candidate proposals may be sorted according to the proposal score Peto identify the highest scoring of the candidate proposals. In some examples, proposal decoder130may generate only the highest scoring proposals.

At a process470, each of the set of candidate proposals selected during process460is iterated through and a candidate caption is generated for each of the selected proposals using a process480.

FIG. 5is a simplified diagram of a process480for generating a caption from a proposal according to some embodiments. As shown inFIG. 5, process480includes sub-processes510-570. One or more of the sub-processes510-570may be implemented, at least in part, in the form of executable code stored on non-transitory, tangible, machine-readable media that when run by one or more processors may cause the one or more processors to perform one or more of the sub-processes510-570. In some examples, the proposal being processed by process480is the selected proposal that is the subject of the current iteration of process470.

At a sub-process510, a differentiable mask is generated for the selected proposal. In some examples, the differentiable mask is used to convert the proposal into a fully differentiable form so that proposal decoder130may be trained based on back propagation of error from caption decoding stack as is discussed further below. In some examples, the differentiable mask may be generated from the selected proposal according to Equations 1 and 4-6. According to some embodiments and depending upon the training approach, the differentiable mask is generated according to the selected proposal as output from proposal decoder130or alternatively from the corresponding ground truth proposal.

At a sub-process520, the encoded image features are masked using the differentiable mask generated during sub-process510. By masking the encoded image features with the differentiable mask, only those encoded image features associated with the interval that corresponds to the selected proposal are included in the caption decoding. In some examples, the masking is performed by masking unit320so that encoded image features from each of the layers in video encoder stack are masked before being provided to corresponding layers of caption decoder stack160.

At a sub-process530, the caption decoder is seeded. The caption decoder is seeded by providing a fixed special token that indicates a start of a caption. In some examples, the fixed special token indicating the start of a caption may correspond to a tag, such as “”.

At a sub-process540, the caption decoder is cyclically iterated. For each iteration of the caption decoder, the current candidate string of words for the caption are embedded with positional encoding information using output embedding module150in order to preserve the ordering of the words in the caption. The candidate string of words for the caption along with the positional encoding information are then fed forward through the layers of caption decoder stack160according to the current weights and parameters in each of the layers of caption decoder stack160. At each layer of caption decoder stack160, the partially decoded caption is combined with the masked and encoded image features from the corresponding layer of video encoder stack. The output of the final layer of caption decoder stack160is then provided to output layer170, which generates the next iteration of the caption, which is fed back as the input to the next iteration of the caption decoder. In some examples, the iteration continues until the caption decoder converges to a complete caption where a fixed special token indicating an end to the caption is generated and added to the caption. In some examples, the fixed special token indicating the end of the caption may correspond to a tag, such as “”. In some examples, the iterations continue until a configurable maximum number of words are added to the caption.

At a sub-process550, the caption is generated. After the final iteration of the caption decoder by sub-process540, the finalized caption may be generated by converting the encoding of the caption used by the caption decoder to natural language words. In some examples, the fixed special token added by process530to seed the caption and/or the fixed special token added by process540at the end of the caption are additionally removed.

At a sub-process560, an error between the generated caption and the ground truth caption for the video received during process410and the selected proposal being used by the current iteration of process470is determined. In some examples, the error may be determined from differences between the encoding for the caption generated by sub-process540and the encoding of the ground truth caption for the corresponding video and proposal. In some examples, the error may be determined according to Equation 15, where Peis the predicted current event, {circumflex over (P)}eis the ground truth for the current event, {circumflex over (θ)}cand {circumflex over (θ)}lare the ground truth center and length of the current event, BCE is the binary cross-entropy function, CE is the cross entropy function, ŷtis the value of the t-th word in the ground truth caption, λ1-λ4are the coefficients for balancing the various error components, and Smoothl1is described in Girshick, “Fast R-CNN,”Proceedings of the2015IEEE International Conference on Computer Vision, at 1440-1448, which is incorporated by reference herein in its entirety.

At a sub-process570, the error is back propagated to the caption decoder, the video encoder, and the proposal decoder. The error is back propagated through output layer170to each of the layers in caption decoder stack160. The error is then further back propagated from each of the layers in caption decoder stack160to proposal decoder130and to the corresponding layers in video encoder stack120. The error may be back propagated from caption decoder stack160to proposal decoder130because a differential mask is used for the proposal. The error may then be further back propagated through proposal decoder130and then from proposal decoder through each of the layers in video encoder stack120. The video encoder stack120further back propagates the error from the layers of caption decoder stack160.

As discussed above and further emphasized here,FIGS. 4 and 5are merely examples which should not unduly limit the scope of the claims. One of ordinary skill in the art would recognize many variations, alternatives, and modifications. According to some embodiments, the error between the event proposals generated by process450and the ground truth proposals for the video may also be back propagated to provide additional training for proposal decoder130and/or video encoder stack120.

According to some embodiments, method400may be modified to generate captions for videos using the trained dense video captioning system100. In some examples, a video, including a video without accompanying ground truth proposals or ground truth captions, to be captioned may be processed according to processes410-480and sub-processes510-550to generate captions for the video.

FIG. 6is a simplified diagram of a computing device600according to some embodiments. As shown inFIG. 6, computing device600includes a processor620coupled to memory620. Operation of computing device600is controlled by processor620. And although computing device600is shown with only one processor620, it is understood that processor620may be representative of one or more central processing units, multi-core processors, microprocessors, microcontrollers, digital signal processors, field programmable gate arrays (FPGAs), application specific integrated circuits (ASICs), graphics processing units (GPUs) and/or the like in computing device600. Computing device600may be implemented as a stand-alone subsystem, as a board added to a computing device, and/or as a virtual machine.

Processor620and/or memory630may be arranged in any suitable physical arrangement. In some embodiments, processor620and/or memory630may be implemented on a same board, in a same package (e.g., system-in-package), on a same chip (e.g., system-on-chip), and/or the like. In some embodiments, processor620and/or memory630may include distributed, virtualized, and/or containerized computing resources. Consistent with such embodiments, processor620and/or memory630may be located in one or more data centers and/or cloud computing facilities.

As shown, memory630includes a dense video captioning module640that may be used to implement and/or emulate dense video captioning system100. Dense video captioning module640may also handle the iterative training and/or evaluation of dense video captioning system100according to training method400ofFIG. 4. Dense video captioning module640may also handle the generation of captions from videos. In some examples, memory630may include non-transitory, tangible, machine readable media that includes executable code that when run by one or more processors (e.g., processor620) may cause the one or more processors to perform the processes of method400. And although dense video captioning module640is depicted as a software module, dense video captioning module640may be implemented using hardware, software, and/or a combination of hardware and software. As shown, computing device600receives a video segment650, which is provided to dense video captioning module640which generates one or more captions.660.

Dense video captioning system100and training method400, by using the differentiable proposal masks and subsequent end-to-end training, are able to generate better event proposal and better captioning results than other dense video captioning approaches that do not use the transformer of dense video captioning system100or the end-to-end training.

FIGS. 7 and 8are tables and charts improved performance for event proposal recall according to some embodiments. As shown inFIGS. 7 and 8, dense video captioning system100and training method400(“Transformer”) outperform the standard ProcNets prop model, a similarly configured Bi-directional Long Short-Term Memory (“Bi-LSTM”) network, and a Deep Actions Proposal (“DAPs-event”) approach on the average recall metric, especially for videos with smaller average numbers of proposals, for videos from the ActivityNet dataset.

FIGS. 9-11are simplified diagrams of improved performance for caption generation according to some embodiments. As shown inFIG. 9, dense video captioning system100and training method400outperform the similarly configured Bi-LSTM network for videos and captions from the ActivityNet dataset according to both the BLEU and METEOR metrics.FIG. 10shows similar outperformance dense video captioning system100and training method400of Bi-LSTM for videos from the YouCookIt dataset for training based on feed forward of both the ground truth (“GT”) and learned proposals to mask the encoded video features during training.FIG. 11shows significant outperformance by dense video captioning system100and training method400of Bi-LSTM for videos from the ActivityNet dataset having events of at least 50 seconds in length.

FIG. 12is an example of dense video captioning according to some embodiments.FIG. 12shows representative frames1210from a video of cooking to be captioned. Also shown are the time intervals1221-1225that correspond to the five events included in the video. For each of the events, a ground truth caption1230is also shown, which corresponds to the ground truth caption that could be used if the depicted video is used as a training example during method400. The captions1240for each of the five events that are generated by dense video captioning system100as trained by method400are also shown along with the captions1250generated by the similarly configured Bi-LSTM network. As can be seen, dense video captioning system100as trained by method400generates better captions than the similarly configured Bi-LSTM network.

This description and the accompanying drawings that illustrate inventive aspects, embodiments, implementations, or applications should not be taken as limiting. Various mechanical, compositional, structural, electrical, and operational changes may be made without departing from the spirit and scope of this description and the claims. In some instances, well-known circuits, structures, or techniques have not been shown or described in detail in order not to obscure the embodiments of this disclosure. Like numbers in two or more figures represent the same or similar elements.

Although illustrative embodiments have been shown and described, a wide range of modification, change and substitution is contemplated in the foregoing disclosure and in some instances, some features of the embodiments may be employed without a corresponding use of other features. One of ordinary skill in the art would recognize many variations, alternatives, and modifications. Thus, the breadth and scope of the present application should not be limited by any of the embodiments described herein, but should be defined only in accordance with the following and later-submitted claims and their equivalents.