xref: /aosp_15_r20/external/executorch/examples/cadence/models/wav2vec2.py (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1*523fa7a6SAndroid Build Coastguard Worker# Copyright (c) Meta Platforms, Inc. and affiliates.
2*523fa7a6SAndroid Build Coastguard Worker# All rights reserved.
3*523fa7a6SAndroid Build Coastguard Worker#
4*523fa7a6SAndroid Build Coastguard Worker# This source code is licensed under the BSD-style license found in the
5*523fa7a6SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree.
6*523fa7a6SAndroid Build Coastguard Worker
7*523fa7a6SAndroid Build Coastguard Worker# Example script for exporting simple models to flatbuffer
8*523fa7a6SAndroid Build Coastguard Worker
9*523fa7a6SAndroid Build Coastguard Workerimport logging
10*523fa7a6SAndroid Build Coastguard Worker
11*523fa7a6SAndroid Build Coastguard Workerfrom executorch.backends.cadence.aot.ops_registrations import *  # noqa
12*523fa7a6SAndroid Build Coastguard Worker
13*523fa7a6SAndroid Build Coastguard Workerimport torch
14*523fa7a6SAndroid Build Coastguard Worker
15*523fa7a6SAndroid Build Coastguard Workerfrom executorch.backends.cadence.aot.export_example import export_model
16*523fa7a6SAndroid Build Coastguard Workerfrom torchaudio.models.wav2vec2.model import wav2vec2_model, Wav2Vec2Model
17*523fa7a6SAndroid Build Coastguard Worker
18*523fa7a6SAndroid Build Coastguard WorkerFORMAT = "[%(levelname)s %(asctime)s %(filename)s:%(lineno)s] %(message)s"
19*523fa7a6SAndroid Build Coastguard Workerlogging.basicConfig(level=logging.INFO, format=FORMAT)
20*523fa7a6SAndroid Build Coastguard Worker
21*523fa7a6SAndroid Build Coastguard Worker
22*523fa7a6SAndroid Build Coastguard Workerdef main() -> None:
23*523fa7a6SAndroid Build Coastguard Worker    # The wrapper is needed to avoid issues with the optional second arguments
24*523fa7a6SAndroid Build Coastguard Worker    # of Wav2Vec2Models.
25*523fa7a6SAndroid Build Coastguard Worker    class Wav2Vec2ModelWrapper(torch.nn.Module):
26*523fa7a6SAndroid Build Coastguard Worker        def __init__(self, model: Wav2Vec2Model):
27*523fa7a6SAndroid Build Coastguard Worker            super().__init__()
28*523fa7a6SAndroid Build Coastguard Worker            self.model = model
29*523fa7a6SAndroid Build Coastguard Worker
30*523fa7a6SAndroid Build Coastguard Worker        def forward(self, x):
31*523fa7a6SAndroid Build Coastguard Worker            out, _ = self.model(x)
32*523fa7a6SAndroid Build Coastguard Worker            return out
33*523fa7a6SAndroid Build Coastguard Worker
34*523fa7a6SAndroid Build Coastguard Worker    _model = wav2vec2_model(
35*523fa7a6SAndroid Build Coastguard Worker        extractor_mode="layer_norm",
36*523fa7a6SAndroid Build Coastguard Worker        extractor_conv_layer_config=None,
37*523fa7a6SAndroid Build Coastguard Worker        extractor_conv_bias=False,
38*523fa7a6SAndroid Build Coastguard Worker        encoder_embed_dim=768,
39*523fa7a6SAndroid Build Coastguard Worker        encoder_projection_dropout=0.1,
40*523fa7a6SAndroid Build Coastguard Worker        encoder_pos_conv_kernel=128,
41*523fa7a6SAndroid Build Coastguard Worker        encoder_pos_conv_groups=16,
42*523fa7a6SAndroid Build Coastguard Worker        encoder_num_layers=12,
43*523fa7a6SAndroid Build Coastguard Worker        encoder_num_heads=12,
44*523fa7a6SAndroid Build Coastguard Worker        encoder_attention_dropout=0.1,
45*523fa7a6SAndroid Build Coastguard Worker        encoder_ff_interm_features=3072,
46*523fa7a6SAndroid Build Coastguard Worker        encoder_ff_interm_dropout=0.0,
47*523fa7a6SAndroid Build Coastguard Worker        encoder_dropout=0.1,
48*523fa7a6SAndroid Build Coastguard Worker        encoder_layer_norm_first=False,
49*523fa7a6SAndroid Build Coastguard Worker        encoder_layer_drop=0.1,
50*523fa7a6SAndroid Build Coastguard Worker        aux_num_out=None,
51*523fa7a6SAndroid Build Coastguard Worker    )
52*523fa7a6SAndroid Build Coastguard Worker    _model.eval()
53*523fa7a6SAndroid Build Coastguard Worker
54*523fa7a6SAndroid Build Coastguard Worker    model = Wav2Vec2ModelWrapper(_model)
55*523fa7a6SAndroid Build Coastguard Worker    model.eval()
56*523fa7a6SAndroid Build Coastguard Worker
57*523fa7a6SAndroid Build Coastguard Worker    # test input
58*523fa7a6SAndroid Build Coastguard Worker    audio_len = 1680
59*523fa7a6SAndroid Build Coastguard Worker    example_inputs = (torch.rand(1, audio_len),)
60*523fa7a6SAndroid Build Coastguard Worker
61*523fa7a6SAndroid Build Coastguard Worker    export_model(model, example_inputs)
62*523fa7a6SAndroid Build Coastguard Worker
63*523fa7a6SAndroid Build Coastguard Worker
64*523fa7a6SAndroid Build Coastguard Workerif __name__ == "__main__":
65*523fa7a6SAndroid Build Coastguard Worker    main()
66