2025/9/9の研究ログ
注意: ずっと作業していたのはssh先でも,ローカルの以前作業していた場所でもなく,新しくクローンしたリポジトリ
どう考えてもBEATsにメルスペクトログラムを渡して加工した方が早い
preprocess()で作成されるfbankとスケールを揃えれば良いのでは
ただ,従来手法はMixupをBETAsに入力する際に行っていない?
要確認
ひとまずBEATsにMixupで利用されたデータを与えるようにするか
そもそもどこで音声を入手しているのか辿ると,バッチから要素を別々に受け取っているらしい
audio変数に入っているみたい
Mixupはバッチ内の音声を使ってデータ拡張を行うのだろうか?
もしそうならaudioだけBEATsに与えれば良いのでは?
今分かっていないのは
batch_numはfeaturesのshapeを取っているが,これはなぜ?
apply_mixup()で用いるfeaturesはバッチから得られた音声をメルスペクトログラムにしたもの
つまり複数の音声のメルスペクトログラムが含まれている
そのshapeを取るからバッチの中に含まれる音声の数を取得するということ?
current_mask = torch.zeros(batch_num).to(features).bool()
start_indexやらは扱う音声データが全体のうちかバッチの中でどこにいるのかを表すのだと思う
audioだけどうやって与える?
detect()に追加すれば勝手に呼べるのだろうか?
detect()内でself.sed_studentを引数として扱っているが,どうやってfoward()は呼ばれている?
sed_studentの宣言だけで呼ばれているのか?
code: beats.py
def detect(self, mel_feats, model, embeddings=None, audio=None, **kwargs):
return model(self.scaler(self.take_log(mel_feats)), embeddings=embeddings, audio=audio, **kwargs)
audioを渡すように書き換える
audioをCRNN.pyのforward()に追加
audioをsed....pyのdetect()に追加
code: detect.py
def detect(self, mel_feats, model, embeddings=None, audio=None, **kwargs):
if embeddings is None:
return model(self.scaler(self.take_log(mel_feats)), **kwargs)
else:
return model(
self.scaler(self.take_log(mel_feats)), embeddings=embeddings, audio=audio, **kwargs
)
ひとまず書き換えは完了
これで動くのだろうか?
設定を書き換えて実行しよう
動いたが,おそらく既存の記述が残っている
期待通りには動いてない
修正が必要だ
どこを修正する?
CRNN.py中の以下
CNNとBEATsの特徴量を結合
RNNに与える
CRNN.py
if self.use_embeddings:以下
forward()の引数: 変更済み
特徴抽出: 変更済み
sed_trainer_pretrained.py
embeddingsを取得する箇所をaudioに変えろとある
detect()関連
面倒だから一旦このまま
yaml: configの一部を変更
use_embeddings: False
pretrained/e2e: True
end to endで学習するということ
埋め込みを事前計算しないオプション
関連の記述を見つけ,調整が必要か確認したい
if self.hparams["pretrained"]["e2e"]:
sed...の
SEDTask4.init
SEDTask4._unpack_batch
SEDTask4.validation_step / test_step
init以外が邪魔だったのでコメントアウト
train_pretrained.py
get_embeddings_name
pretrained/freezedの分岐
freezedも重要そう
一通り書き換えたのでもう一度
と思ったがまたエラー
一通りと思ったのは勘違いで,まだ終わってなかった
一度CRNN.pyともう一つをリモートから削除した
後でscpで送ろう
unpackで返す数が合わなくなったのはembeddingsを使わなくなったから
その分コードを修正する必要がある
該当部分とdetect()で使う部分を削除
apply_mixup()も修正
embeddingsを一通り削除
引数のembeddingsのデフォルト値をNoneに設定
後はCRNN.pyの方を直す
x = cnn_inputを追加
これで一度試そう
collate.pyのエラー
まさかと思ってみたら,sed*.pyのcollateを継承したコードが消えてる
クローンしたコードをそのまま使っていたみたい
collate部分を修正して動かそう
mixupの返り値にembeddingsが含まれているのを考えていなかったので,受け取れるように修正
動くかな?
mixupのreturnの順序が不整合だったため,embeddingsを削除して対応
ひとまず1epochがきちんと動いた!
後は精度を確認すればok
前回同様,300回回す
起きたら精度が出てると思われるので,きちんと動作しているか,精度が上がっているか見よう > 2025/9/10 結果
めちゃくちゃスコアが下がっている
なぜだ...
特徴量結合をどこかでミスっているのか,はたまた事前学習済みモデルの方で何かミスがあるのか
明日検討しよう
code: log
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┓
┃ Runningstage.testing metric ┃ DataLoader 0 ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┩
│ test/student/collar_f1_macro… │ 0.3083355128765106 │
│ test/student/collar_f1_macro… │ 0.3083355193861184 │
│ test/student/intersection_f1… │ 0.5259494762101853 │
│ test/student/intersection_f1… │ 0.5259494762101853 │
│ test/student/loss_strong │ 0.1499786078929901 │
│ test/student/psds1/psds_eval │ 0.26215822531700333 │
│ test/student/psds1/sed_score… │ 0.2691546910134641 │
│ test/student/psds2/psds_eval │ 0.42563709427517543 │
│ test/student/psds2/sed_score… │ 0.43627227455711437 │
│ test/student/segment_f1_macr… │ 0.5106785090472531 │
│ test/student/segment_mauc/se… │ 0.9389628798074036 │
│ test/student/segment_mpauc/s… │ 0.56131370812761 │
│ test/teacher/collar_f1_macro… │ 0.31569433212280273 │
│ test/teacher/collar_f1_macro… │ 0.3157726990662475 │
│ test/teacher/intersection_f1… │ 0.5572046819297063 │
│ test/teacher/intersection_f1… │ 0.5572046819297063 │
│ test/teacher/loss_strong │ 0.15445198118686676 │
│ test/teacher/psds1/psds_eval │ 0.27176557958522823 │
│ test/teacher/psds1/sed_score… │ 0.2781995543885648 │
│ test/teacher/psds2/psds_eval │ 0.452697047883745 │
│ test/teacher/psds2/sed_score… │ 0.46430523260772666 │
│ test/teacher/segment_f1_macr… │ 0.5276748531541192 │
│ test/teacher/segment_mauc/se… │ 0.9476393439043655 │
│ test/teacher/segment_mpauc/s… │ 0.6084510087085491 │
└─────────────────────────────── ┴─────────────────────────────── ┘
real 130m26.996s
user 334m22.245s
前回の結果
code: pre.log
┃ Runningstage.testing metric ┃ DataLoader 0 ┃
│ test/student/collar_f1_macro_thres05/sed_eval │ 0.4548394978046417 │
│ test/student/collar_f1_macro_thres05/sed_scores_eval │ 0.4549152963473933 │
│ test/student/intersection_f1_macro_thres05/psds_eval │ 0.7386054869414647 │
│ test/student/intersection_f1_macro_thres05/sed_scores_eval │ 0.7386054869414647 │
│ test/student/loss_strong │ 0.1244150847196579 │
│ test/student/psds1/psds_eval │ 0.4401515868436907 │
│ test/student/psds1/sed_scores_eval │ 0.44632465402887855 │
│ test/student/psds2/psds_eval │ 0.6884470241590002 │
│ test/student/psds2/sed_scores_eval │ 0.6995978979596535 │
│ test/student/segment_f1_macro_thresopt/sed_scores_eval │ 0.6240155575449106 │
│ test/student/segment_mauc/sed_scores_eval │ 0.9624967732763706 │
│ test/student/segment_mpauc/sed_scores_eval │ 0.7143524353052881 │
│ test/teacher/collar_f1_macro_thres05/sed_eval │ 0.48384976387023926 │
│ test/teacher/collar_f1_macro_thres05/sed_scores_eval │ 0.4839258723349687 │
│ test/teacher/intersection_f1_macro_thres05/psds_eval │ 0.7671829955795137 │
│ test/teacher/intersection_f1_macro_thres05/sed_scores_eval │ 0.7671829955795137 │
│ test/teacher/loss_strong │ 0.12096952646970749 │
│ test/teacher/psds1/psds_eval │ 0.4603634167480284 │
│ test/teacher/psds1/sed_scores_eval │ 0.4656060367075264 │
│ test/teacher/psds2/psds_eval │ 0.7216657373656931 │
│ test/teacher/psds2/sed_scores_eval │ 0.7343572267738425 │
│ test/teacher/segment_f1_macro_thresopt/sed_scores_eval │ 0.6478528434013735 │
│ test/teacher/segment_mauc/sed_scores_eval │ 0.9639618486046458 │
│ test/teacher/segment_mpauc/sed_scores_eval │ 0.7292151627387906