feat: first commit
This commit is contained in:
168
research_notes.md
Normal file
168
research_notes.md
Normal file
@@ -0,0 +1,168 @@
|
||||
# YAMNet深度学习猫咪翻译器研究笔记
|
||||
|
||||
## YAMNet模型架构与特点
|
||||
|
||||
### 基本架构
|
||||
- YAMNet是一个预训练的深度神经网络,基于MobileNetV1深度可分离卷积架构
|
||||
- 能够预测来自AudioSet语料库的521种不同音频事件
|
||||
- 适合在移动设备上运行的轻量级模型
|
||||
|
||||
### 输入输出规格
|
||||
- 输入:任意长度的单声道16kHz音频波形,范围为[-1.0, +1.0]的1D浮点张量
|
||||
- 输出:
|
||||
1. 类别得分:521个AudioSet类别的预测概率
|
||||
2. 嵌入向量:1024维的特征向量(用于迁移学习)
|
||||
3. 对数梅尔频谱图:音频的时频表示
|
||||
|
||||
### 内部处理流程
|
||||
- 将音频信号分割为"帧",每帧0.96秒长
|
||||
- 每0.48秒提取一个帧(帧之间有50%重叠)
|
||||
- 将原始音频转换为对数梅尔频谱图
|
||||
- 通过MobileNetV1网络提取特征
|
||||
- 输出类别预测和嵌入向量
|
||||
|
||||
## 迁移学习策略
|
||||
|
||||
### 基本原理
|
||||
- 利用YAMNet作为高级特征提取器
|
||||
- 使用YAMNet的1024维嵌入向量作为新模型的输入
|
||||
- 添加新的分类层,专门用于猫叫声意图识别
|
||||
- 只需训练新添加的分类层,无需重新训练整个网络
|
||||
|
||||
### 实现方法
|
||||
1. 加载预训练的YAMNet模型
|
||||
2. 移除YAMNet的最后一层分类层
|
||||
3. 添加新的Dense层用于猫叫声意图分类
|
||||
4. 使用少量标记数据训练新的分类层
|
||||
|
||||
### 代码示例
|
||||
```python
|
||||
# 加载预训练的YAMNet模型
|
||||
yamnet_model = hub.load('https://tfhub.dev/google/yamnet/1')
|
||||
|
||||
# 创建新的分类模型
|
||||
class CatIntentModel(tf.keras.Model):
|
||||
def __init__(self, num_classes):
|
||||
super(CatIntentModel, self).__init__()
|
||||
self.dense1 = tf.keras.layers.Dense(512, activation='relu')
|
||||
self.dropout = tf.keras.layers.Dropout(0.3)
|
||||
self.dense2 = tf.keras.layers.Dense(num_classes, activation='softmax')
|
||||
|
||||
def call(self, inputs):
|
||||
x = self.dense1(inputs)
|
||||
x = self.dropout(x)
|
||||
return self.dense2(x)
|
||||
```
|
||||
|
||||
## 双层模型架构设计
|
||||
|
||||
### 第一层:猫叫声检测模型
|
||||
- 目标:从环境音频中识别出猫的叫声
|
||||
- 输入:原始音频波形
|
||||
- 处理:使用YAMNet提取特征并进行二分类(猫叫声 vs 非猫叫声)
|
||||
- 输出:猫叫声检测结果和置信度
|
||||
|
||||
### 第二层:意图分类模型
|
||||
- 目标:分析猫叫声并识别其意图和情绪
|
||||
- 输入:被第一层识别为猫叫声的音频片段
|
||||
- 处理:使用YAMNet提取特征,然后通过自定义分类层进行意图分类
|
||||
- 输出:意图类别(如"开心"、"生气"、"饥饿"等)和置信度
|
||||
|
||||
### 模型流程
|
||||
1. 音频输入 → 预处理 → 分段
|
||||
2. 对每个音频段使用第一层模型检测是否为猫叫声
|
||||
3. 对检测为猫叫声的段使用第二层模型进行意图分类
|
||||
4. 汇总结果并输出最终预测
|
||||
|
||||
## 对数梅尔频谱图特征提取
|
||||
|
||||
### 基本原理
|
||||
- 对数梅尔频谱图是一种时频表示,模拟人类听觉系统对声音的感知
|
||||
- 相比MFCC,保留了更多的时频细节,适合深度学习模型
|
||||
|
||||
### 提取步骤
|
||||
1. 对音频信号进行分帧和加窗
|
||||
2. 计算每帧的短时傅里叶变换(STFT)
|
||||
3. 将线性频谱映射到梅尔刻度
|
||||
4. 取对数转换,增强低能量区域的表示
|
||||
|
||||
### 代码示例
|
||||
```python
|
||||
def extract_log_mel_spectrogram(audio_data, sample_rate=16000, n_mels=128):
|
||||
# 计算梅尔频谱图
|
||||
mel_spec = librosa.feature.melspectrogram(
|
||||
y=audio_data,
|
||||
sr=sample_rate,
|
||||
n_fft=1024,
|
||||
hop_length=512,
|
||||
n_mels=n_mels
|
||||
)
|
||||
|
||||
# 转换为对数刻度
|
||||
log_mel_spec = librosa.power_to_db(mel_spec, ref=np.max)
|
||||
|
||||
return log_mel_spec
|
||||
```
|
||||
|
||||
## 持续学习与用户反馈机制
|
||||
|
||||
### 基本原理
|
||||
- 每只猫都有独特的声音特征,没有通用的"猫语言"
|
||||
- 通过用户反馈不断改进特定猫咪的模型
|
||||
- 随着数据积累,模型准确度不断提高
|
||||
|
||||
### 实现方法
|
||||
1. 用户为自己猫咪的叫声添加标签
|
||||
2. 当应用无法准确识别时,用户可以纠正翻译
|
||||
3. 使用新标记的数据增量训练模型
|
||||
4. 定期重新训练模型,整合新的用户反馈
|
||||
|
||||
### 数据管理
|
||||
- 为每只猫建立独立的数据集和模型
|
||||
- 存储用户标记的音频特征和标签
|
||||
- 实现数据导入导出功能,便于备份和恢复
|
||||
|
||||
## TensorFlow Lite移动端部署
|
||||
|
||||
### 转换流程
|
||||
1. 训练完成TensorFlow模型
|
||||
2. 使用TFLite转换器将模型转换为TFLite格式
|
||||
3. 优化模型大小和推理速度
|
||||
4. 部署到移动设备
|
||||
|
||||
### 代码示例
|
||||
```python
|
||||
def convert_to_tflite(model_path, output_path):
|
||||
# 加载模型
|
||||
model = tf.keras.models.load_model(model_path)
|
||||
|
||||
# 转换为TFLite
|
||||
converter = tf.lite.TFLiteConverter.from_keras_model(model)
|
||||
tflite_model = converter.convert()
|
||||
|
||||
# 保存TFLite模型
|
||||
with open(output_path, 'wb') as f:
|
||||
f.write(tflite_model)
|
||||
```
|
||||
|
||||
## 技术挑战与解决方案
|
||||
|
||||
### 1. 训练数据不足
|
||||
- 解决方案:使用迁移学习,只需要少量标记数据
|
||||
- 实现数据增强技术,如添加噪声、时间拉伸、音高变化等
|
||||
|
||||
### 2. 实时处理延迟
|
||||
- 解决方案:优化音频缓冲区大小
|
||||
- 实现并行处理管道
|
||||
- 使用TFLite优化推理速度
|
||||
|
||||
### 3. 个性化与通用性平衡
|
||||
- 解决方案:双层模型架构,第一层通用猫叫声检测,第二层个性化意图识别
|
||||
- 允许用户选择使用通用模型或个性化模型
|
||||
|
||||
## 参考资料
|
||||
1. TensorFlow YAMNet官方教程: https://www.tensorflow.org/tutorials/audio/transfer_learning_audio
|
||||
2. YAMNet TensorFlow Hub模型: https://tfhub.dev/google/yamnet/1
|
||||
3. AudioSet数据集: https://research.google.com/audioset/
|
||||
4. MobileNetV1论文: https://arxiv.org/abs/1704.04861
|
||||
5. TensorFlow Lite音频分类: https://ai.google.dev/edge/litert/libraries/modify/audio_classification
|
||||
Reference in New Issue
Block a user