添加音频处理组件
音频模型需要一个可通过 AutoFeatureExtractor 入口访问的特征提取器。
对于模型和配置步骤,请先遵循模块化指南。
特征提取器
当模型使用原始音频或音频衍生特征时,添加一个特征提取器。
在模型目录中创建 feature_extraction_<model_name>.py。从 SequenceFeatureExtractor 继承,使新类获得共享的填充、截断、保存和加载行为。
from ...feature_extraction_sequence_utils import SequenceFeatureExtractor
class MyModelFeatureExtractor(SequenceFeatureExtractor):
model_input_names = ["input_features", "attention_mask"]
def __init__(self, feature_size=80, sampling_rate=16000, padding_value=0.0, **kwargs):
super().__init__(feature_size=feature_size, sampling_rate=sampling_rate, padding_value=padding_value, **kwargs)
def __call__(self, raw_speech, sampling_rate=None, **kwargs):
if sampling_rate is not None and sampling_rate != self.sampling_rate:
raise ValueError(f"`sampling_rate` must be {self.sampling_rate}, but got {sampling_rate}.")
# Convert raw_speech to model features here.
...保持构造函数简洁且可序列化。将重现预处理所需的每个值都存储为实例属性,并避免存储仅用于运行时的值,例如打开的文件、设备或解码后的音频数组。
__call__ 方法必须在用户传入 sampling_rate 时验证输入采样率。如果输入采样率与模型预期的采样率不一致,应抛出错误,而不是静默地进行重采样。
通过在转换脚本中实例化特征提取器并调用 save_pretrained(),将特征提取器与检查点一起保存。请勿手动创建或编辑预处理配置文件。
注册类
在文件底部将新类添加到 __all__ 中,然后使用以下命令重新生成 __init__.py:
python utils/check_inits.py --fix_and_overwrite
将新类映射到模型配置,以便 AutoFeatureExtractor 能够加载它。在 src/transformers/models/auto/feature_extraction_auto.py 中的 FEATURE_EXTRACTOR_MAPPING_NAMES 里添加一个条目,参照附近条目的模式。然后验证 AutoFeatureExtractor 下的 FEATURE_EXTRACTOR_MAPPING_NAMES 中是否出现了该模型类型。
FEATURE_EXTRACTOR_MAPPING_NAMES用于 AutoFeatureExtractor
测试
在模型测试目录中为每个音频处理组件添加测试。特征提取器测试通常位于 tests/models/<model_name>/test_feature_extraction_<model_name>.py。
对于继承自 SequenceFeatureExtractor 的特征提取器,请继承 SequenceFeatureExtractionTestMixin。该混入类涵盖了保存和加载行为、填充、截断、张量转换以及常见的特征提取器属性。请提供一个包含 prepare_feat_extract_dict() 和 prepare_inputs_for_common() 的测试器对象,以便混入类能够实例化特征提取器并构建简短的虚拟音频输入。
from ...test_sequence_feature_extraction_common import SequenceFeatureExtractionTestMixin
class MyModelFeatureExtractionTest(SequenceFeatureExtractionTestMixin, unittest.TestCase):
feature_extraction_class = MyModelFeatureExtractor
def setUp(self):
self.feat_extract_tester = MyModelFeatureExtractionTester(self)添加针对混入类(mixin)不了解的模型特定行为的聚焦测试。对于音频特征提取器,这通常意味着检查 __call__ 返回的特征形状,验证传入错误的 sampling_rate 时会引发错误,以及检查任何自定义的归一化或特征计算。
如果模型还包含一个封装了特征提取器的 ProcessorMixin,请添加 tests/models/<model_name>/test_processing_<model_name>.py 并继承自 ProcessorTesterMixin。设置 processor_class,并为那些无法在不提供参数的情况下构建的组件重写 _setup_<component>() 类方法。使用 _setup_test_attributes() 来暴露通用处理器测试所使用的占位符标记。
from ...test_processing_common import ProcessorTesterMixin
class MyModelProcessorTest(ProcessorTesterMixin, unittest.TestCase):
processor_class = MyModelProcessor
@classmethod
def _setup_feature_extractor(cls):
return cls._get_component_class_from_processor("feature_extractor")(sampling_rate=16000)
@classmethod
def _setup_test_attributes(cls, processor):
cls.audio_token = getattr(processor, "audio_token", "")