基于用户注册信息的关键词检测挑战赛「Datawhale AI 夏令营」

  1. 增加训练轮次
    Baseline只使用训练了10轮数据,一般来说使用更多的训练轮次可以使模型表现更好
bash 复制代码
# 在 baseline里
python train.py --epochs 15
  1. 调整正负样本权重

    原始数据的正负样本不均衡,修改采样的正负样本权重调整模型对于正样本的学习能力

  2. 增加简单噪声增强

    测试集信噪比 -10~5 dB,如果我们训练的都是干净数据(没有加噪声),那么模型对于测试集中加了噪声的数据表现就会比较差(没有学习过带噪的数据)

    最简单的做法:读 wav 后随机 wav += noise,SNR 采样范围对齐测试集 -10~5 dB。

  3. 使用全量训练集

    Baseline只训练了其中5w条数据,使用更多的数据量训练可以使模型学到更广泛的内容,所以可以使用全量50w条数据进行训练

    https://challenge.xfyun.cn/topic/info?type=KDBURI&option=stsj

config.py修改

bash 复制代码
from __future__ import annotations

import os
from dataclasses import dataclass, field

ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))


@dataclass
class AudioConfig:
    sample_rate: int = 16000
    n_fft: int = 400
    hop_length: int = 160
    n_mels: int = 40          
    max_frames: int = 100      


@dataclass
class TrainConfig:
    embed_dim: int = 64
    batch_size: int = 128
    num_workers: int = 8
    epochs: int = 10
    lr: float = 1e-3
    # pos_weight: float = 4.0   # 训练集正负比约 1:4
    pos_weight: float = 5.0   # mayao 2. 调整正负样本权重
    train_subset: int = 500000  
    seed: int = 42
    log_every: int = 100


@dataclass
class Paths:
    root: str = ROOT
    train_zip: str = field(default="")
    train_csv: str = field(default="")
    dev_seen_zip: str = field(default="")
    dev_seen_csv: str = field(default="")
    dev_unseen_zip: str = field(default="")
    dev_unseen_csv: str = field(default="")
    eval_seen_zip: str = field(default="")
    eval_seen_csv: str = field(default="")
    eval_unseen_zip: str = field(default="")
    eval_unseen_csv: str = field(default="")
    ckpt_dir: str = field(default="")

    def __post_init__(self):
        r = self.root
        #self.train_zip = os.path.join(r, "train_subset", "wav.zip")
        #self.train_csv = os.path.join(r, "train_subset", "train_label.csv")
        # 使用全量数据 mayao 4. 使用全量训练集
        self.train_zip = os.path.join(r, "train", "wav.zip")
        self.train_csv = os.path.join(r, "train", "train_label.csv")
        self.dev_seen_zip = os.path.join(r, "dev", "dev_seen", "wav.zip")
        self.dev_seen_csv = os.path.join(r, "dev", "dev_seen", "dev_seen_label.csv")
        self.dev_unseen_zip = os.path.join(r, "dev", "dev_unseen", "wav.zip")
        self.dev_unseen_csv = os.path.join(r, "dev", "dev_unseen", "dev_unseen_label.csv")
        self.eval_seen_zip = os.path.join(r, "eval", "eval_seen", "wav.zip")
        self.eval_seen_csv = os.path.join(r, "evalcsv_without_label", "eval_seen_without_label.csv")
        self.eval_unseen_zip = os.path.join(r, "eval", "eval_unseen", "wav.zip")
        self.eval_unseen_csv = os.path.join(r, "evalcsv_without_label", "eval_unseen_without_label.csv")
        self.ckpt_dir = os.path.join(os.path.dirname(__file__), "checkpoints")


PATHS = Paths()
AUDIO = AudioConfig()
TRAIN = TrainConfig()

data.py修改

bash 复制代码
from __future__ import annotations

import csv
import io
import os
import zipfile
from typing import List

import numpy as np
import soundfile as sf
import torch
import torchaudio
from torch.utils.data import Dataset
import math   

from config import AudioConfig

_ZIP_CACHE: dict = {}


def _get_zip(path: str) -> zipfile.ZipFile:
    key = (os.getpid(), path)
    if key not in _ZIP_CACHE:
        _ZIP_CACHE[key] = zipfile.ZipFile(path, "r")
    return _ZIP_CACHE[key]


def read_wav(zip_path: str, name: str, sr: int,snr_db: float = 20.0) -> np.ndarray:
    data = _get_zip(zip_path).read(name)
    wav, file_sr = sf.read(io.BytesIO(data), dtype="float32", always_2d=False)
    if wav.ndim > 1:
        wav = wav.mean(axis=1)
    if file_sr != sr:
        t = torchaudio.functional.resample(
            torch.from_numpy(wav).unsqueeze(0), file_sr, sr)
        wav = t.squeeze(0).numpy()

    # mayao    3. 增加简单噪声增强
    rng = np.random.default_rng(2026)
    sig_power = float(np.mean(wav ** 2)) + 1e-12
    noise = rng.standard_normal(len(wav)).astype(np.float32)
    noise_power = float(np.mean(noise ** 2)) + 1e-12
    target_noise_power = sig_power / (10 ** (snr_db / 10.0))
    noise = noise * math.sqrt(target_noise_power / noise_power)   
    wav += noise 
    return wav.astype(np.float32)


def load_pairs(csv_path: str, with_label: bool) -> List[dict]:
    rows = []
    with open(csv_path, encoding="utf-8") as f:
        for r in csv.DictReader(f):
            item = {"id": r["id"]}
            if with_label:
                item["label"] = int(r["label"])
            rows.append(item)
    return rows


class LogMel:
    def __init__(self, cfg: AudioConfig):
        self.mel = torchaudio.transforms.MelSpectrogram(
            sample_rate=cfg.sample_rate,
            n_fft=cfg.n_fft,
            hop_length=cfg.hop_length,
            n_mels=cfg.n_mels,
            power=2.0,
        )

    def __call__(self, wav: torch.Tensor) -> torch.Tensor:
        return torch.log(self.mel(wav) + 1e-6)


def pad_spec(spec: torch.Tensor, max_frames: int) -> torch.Tensor:
    """(n_mels, T) -> (1, n_mels, max_frames)"""
    T = spec.shape[-1]
    if T < max_frames:
        spec = torch.nn.functional.pad(spec, (0, max_frames - T))
    else:
        spec = spec[:, :max_frames]
    return spec.unsqueeze(0)


class PairDataset(Dataset):
    def __init__(self, pairs: List[dict], zip_path: str, cfg: AudioConfig,
                 inference: bool = False):
        self.pairs = pairs
        self.zip_path = zip_path
        self.cfg = cfg
        self.inference = inference
        self.logmel = LogMel(cfg)

    def __len__(self):
        return len(self.pairs)

    def _feat(self, wav_name: str) -> torch.Tensor:
        wav = read_wav(self.zip_path, wav_name, self.cfg.sample_rate)
        spec = self.logmel(torch.from_numpy(wav))
        return pad_spec(spec, self.cfg.max_frames)

    def __getitem__(self, idx: int):
        p = self.pairs[idx]
        pid = p["id"]
        e = self._feat(f"wav/{pid}_enroll.wav")
        q = self._feat(f"wav/{pid}_query.wav")
        label = -1 if self.inference else p["label"]
        return e, q, label, pid


def collate(batch):
    es = torch.stack([b[0] for b in batch])
    qs = torch.stack([b[1] for b in batch])
    labels = torch.tensor([b[2] for b in batch], dtype=torch.float32)
    ids = [b[3] for b in batch]
    return es, qs, labels, ids

训练结果

bash 复制代码
root@dsw-2040063-54c995dd6-jn7d5:/mnt/workspace/keyword_detect/baseline# python train.py --epochs 15
train: 500000 / 500000 pairs
model params: 22,978 (0.02M)
  ep1 100/3906 loss=3.4313
  ep1 200/3906 loss=3.0741
  ep1 300/3906 loss=2.9193
  ep1 400/3906 loss=2.7775
  ep1 500/3906 loss=2.6384
  ep1 600/3906 loss=2.5265
  ep1 700/3906 loss=2.4315
  ep1 800/3906 loss=2.3502
  ep1 900/3906 loss=2.2826
  ep1 1000/3906 loss=2.2193
  ep1 1100/3906 loss=2.1591
  ep1 1200/3906 loss=2.1065
  ep1 1300/3906 loss=2.0584
  ep1 1400/3906 loss=2.0144
  ep1 1500/3906 loss=1.9756
  ep1 1600/3906 loss=1.9389
  ep1 1700/3906 loss=1.9051
  ep1 1800/3906 loss=1.8709
  ep1 1900/3906 loss=1.8412
  ep1 2000/3906 loss=1.8150
  ep1 2100/3906 loss=1.7894
  ep1 2200/3906 loss=1.7640
  ep1 2300/3906 loss=1.7406
  ep1 2400/3906 loss=1.7183
  ep1 2500/3906 loss=1.6968
  ep1 2600/3906 loss=1.6777
  ep1 2700/3906 loss=1.6591
  ep1 2800/3906 loss=1.6407
  ep1 2900/3906 loss=1.6231
  ep1 3000/3906 loss=1.6063
  ep1 3100/3906 loss=1.5901
  ep1 3200/3906 loss=1.5747
  ep1 3300/3906 loss=1.5608
  ep1 3400/3906 loss=1.5464
  ep1 3500/3906 loss=1.5323
  ep1 3600/3906 loss=1.5194
  ep1 3700/3906 loss=1.5074
  ep1 3800/3906 loss=1.4958
  ep1 3900/3906 loss=1.4847
[epoch 1] seen=0.5938 unseen=0.4958 mean=0.5448 (253s)
  saved -> /mnt/workspace/keyword_detect/baseline/checkpoints/best.pt
  ep2 100/3906 loss=1.0316
  ep2 200/3906 loss=1.0259
  ep2 300/3906 loss=1.0276
  ep2 400/3906 loss=1.0287
  ep2 500/3906 loss=1.0210
  ep2 600/3906 loss=1.0222
  ep2 700/3906 loss=1.0214
  ep2 800/3906 loss=1.0185
  ep2 900/3906 loss=1.0155
  ep2 1000/3906 loss=1.0143
  ep2 1100/3906 loss=1.0138
  ep2 1200/3906 loss=1.0116
  ep2 1300/3906 loss=1.0104
  ep2 1400/3906 loss=1.0072
  ep2 1500/3906 loss=1.0075
  ep2 1600/3906 loss=1.0053
  ep2 1700/3906 loss=1.0059
  ep2 1800/3906 loss=1.0037
  ep2 1900/3906 loss=1.0027
  ep2 2000/3906 loss=1.0002
  ep2 2100/3906 loss=1.0002
  ep2 2200/3906 loss=0.9991
  ep2 2300/3906 loss=0.9971
  ep2 2400/3906 loss=0.9949
  ep2 2500/3906 loss=0.9927
  ep2 2600/3906 loss=0.9917
  ep2 2700/3906 loss=0.9904
  ep2 2800/3906 loss=0.9900
  ep2 2900/3906 loss=0.9886
  ep2 3000/3906 loss=0.9874
  ep2 3100/3906 loss=0.9866
  ep2 3200/3906 loss=0.9860
  ep2 3300/3906 loss=0.9851
  ep2 3400/3906 loss=0.9842
  ep2 3500/3906 loss=0.9830
  ep2 3600/3906 loss=0.9816
  ep2 3700/3906 loss=0.9804
  ep2 3800/3906 loss=0.9798
  ep2 3900/3906 loss=0.9782
[epoch 2] seen=0.5977 unseen=0.4892 mean=0.5435 (259s)
  ep3 100/3906 loss=0.9307
  ep3 200/3906 loss=0.9363
  ep3 300/3906 loss=0.9348
  ep3 400/3906 loss=0.9347
  ep3 500/3906 loss=0.9347
  ep3 600/3906 loss=0.9365
  ep3 700/3906 loss=0.9385
  ep3 800/3906 loss=0.9377
  ep3 900/3906 loss=0.9363
  ep3 1000/3906 loss=0.9371
  ep3 1100/3906 loss=0.9381
  ep3 1200/3906 loss=0.9378
  ep3 1300/3906 loss=0.9368
  ep3 1400/3906 loss=0.9352
  ep3 1500/3906 loss=0.9343
  ep3 1600/3906 loss=0.9333
  ep3 1700/3906 loss=0.9323
  ep3 1800/3906 loss=0.9310
  ep3 1900/3906 loss=0.9315
  ep3 2000/3906 loss=0.9310
  ep3 2100/3906 loss=0.9312
  ep3 2200/3906 loss=0.9300
  ep3 2300/3906 loss=0.9294
  ep3 2400/3906 loss=0.9297
  ep3 2500/3906 loss=0.9290
  ep3 2600/3906 loss=0.9288
  ep3 2700/3906 loss=0.9285
  ep3 2800/3906 loss=0.9276
  ep3 2900/3906 loss=0.9270
  ep3 3000/3906 loss=0.9259
  ep3 3100/3906 loss=0.9251
  ep3 3200/3906 loss=0.9242
  ep3 3300/3906 loss=0.9233
  ep3 3400/3906 loss=0.9228
  ep3 3500/3906 loss=0.9228
  ep3 3600/3906 loss=0.9226
  ep3 3700/3906 loss=0.9218
  ep3 3800/3906 loss=0.9212
  ep3 3900/3906 loss=0.9205
[epoch 3] seen=0.6095 unseen=0.4880 mean=0.5487 (254s)
  saved -> /mnt/workspace/keyword_detect/baseline/checkpoints/best.pt
  ep4 100/3906 loss=0.8952
  ep4 200/3906 loss=0.8971
  ep4 300/3906 loss=0.8947
  ep4 400/3906 loss=0.8946
  ep4 500/3906 loss=0.8884
  ep4 600/3906 loss=0.8870
  ep4 700/3906 loss=0.8903
  ep4 800/3906 loss=0.8864
  ep4 900/3906 loss=0.8848
  ep4 1000/3906 loss=0.8838
  ep4 1100/3906 loss=0.8826
  ep4 1200/3906 loss=0.8824
  ep4 1300/3906 loss=0.8819
  ep4 1400/3906 loss=0.8800
  ep4 1500/3906 loss=0.8801
  ep4 1600/3906 loss=0.8796
  ep4 1700/3906 loss=0.8802
  ep4 1800/3906 loss=0.8802
  ep4 1900/3906 loss=0.8798
  ep4 2000/3906 loss=0.8795
  ep4 2100/3906 loss=0.8790
  ep4 2200/3906 loss=0.8780
  ep4 2300/3906 loss=0.8784
  ep4 2400/3906 loss=0.8775
  ep4 2500/3906 loss=0.8780
  ep4 2600/3906 loss=0.8761
  ep4 2700/3906 loss=0.8756
  ep4 2800/3906 loss=0.8751
  ep4 2900/3906 loss=0.8741
  ep4 3000/3906 loss=0.8735
  ep4 3100/3906 loss=0.8727
  ep4 3200/3906 loss=0.8717
  ep4 3300/3906 loss=0.8714
  ep4 3400/3906 loss=0.8711
  ep4 3500/3906 loss=0.8702
  ep4 3600/3906 loss=0.8695
  ep4 3700/3906 loss=0.8687
  ep4 3800/3906 loss=0.8687
  ep4 3900/3906 loss=0.8686
[epoch 4] seen=0.6201 unseen=0.4929 mean=0.5565 (254s)
  saved -> /mnt/workspace/keyword_detect/baseline/checkpoints/best.pt
  ep5 100/3906 loss=0.8516
  ep5 200/3906 loss=0.8368
  ep5 300/3906 loss=0.8389
  ep5 400/3906 loss=0.8420
  ep5 500/3906 loss=0.8394
  ep5 600/3906 loss=0.8401
  ep5 700/3906 loss=0.8395
  ep5 800/3906 loss=0.8374
  ep5 900/3906 loss=0.8363
  ep5 1000/3906 loss=0.8367
  ep5 1100/3906 loss=0.8365
  ep5 1200/3906 loss=0.8347
  ep5 1300/3906 loss=0.8347
  ep5 1400/3906 loss=0.8338
  ep5 1500/3906 loss=0.8333
  ep5 1600/3906 loss=0.8327
  ep5 1700/3906 loss=0.8330
  ep5 1800/3906 loss=0.8322
  ep5 1900/3906 loss=0.8318
  ep5 2000/3906 loss=0.8313
  ep5 2100/3906 loss=0.8315
  ep5 2200/3906 loss=0.8304
  ep5 2300/3906 loss=0.8294
  ep5 2400/3906 loss=0.8287
  ep5 2500/3906 loss=0.8286
  ep5 2600/3906 loss=0.8279
  ep5 2700/3906 loss=0.8279
  ep5 2800/3906 loss=0.8271
  ep5 2900/3906 loss=0.8266
  ep5 3000/3906 loss=0.8258
  ep5 3100/3906 loss=0.8255
  ep5 3200/3906 loss=0.8249
  ep5 3300/3906 loss=0.8249
  ep5 3400/3906 loss=0.8245
  ep5 3500/3906 loss=0.8242
  ep5 3600/3906 loss=0.8236
  ep5 3700/3906 loss=0.8231
  ep5 3800/3906 loss=0.8232
  ep5 3900/3906 loss=0.8229
[epoch 5] seen=0.6199 unseen=0.4924 mean=0.5562 (254s)
  ep6 100/3906 loss=0.7949
  ep6 200/3906 loss=0.8011
  ep6 300/3906 loss=0.7969
  ep6 400/3906 loss=0.7962
  ep6 500/3906 loss=0.7919
  ep6 600/3906 loss=0.7938
  ep6 700/3906 loss=0.7903
  ep6 800/3906 loss=0.7902
  ep6 900/3906 loss=0.7898
  ep6 1000/3906 loss=0.7893
  ep6 1100/3906 loss=0.7929
  ep6 1200/3906 loss=0.7929
  ep6 1300/3906 loss=0.7931
  ep6 1400/3906 loss=0.7935
  ep6 1500/3906 loss=0.7928
  ep6 1600/3906 loss=0.7934
  ep6 1700/3906 loss=0.7935
  ep6 1800/3906 loss=0.7930
  ep6 1900/3906 loss=0.7924
  ep6 2000/3906 loss=0.7929
  ep6 2100/3906 loss=0.7934
  ep6 2200/3906 loss=0.7928
  ep6 2300/3906 loss=0.7928
  ep6 2400/3906 loss=0.7920
  ep6 2500/3906 loss=0.7920
  ep6 2600/3906 loss=0.7913
  ep6 2700/3906 loss=0.7911
  ep6 2800/3906 loss=0.7912
  ep6 2900/3906 loss=0.7917
  ep6 3000/3906 loss=0.7912
  ep6 3100/3906 loss=0.7904
  ep6 3200/3906 loss=0.7906
  ep6 3300/3906 loss=0.7898
  ep6 3400/3906 loss=0.7895
  ep6 3500/3906 loss=0.7889
  ep6 3600/3906 loss=0.7892
  ep6 3700/3906 loss=0.7887
  ep6 3800/3906 loss=0.7885
  ep6 3900/3906 loss=0.7880
[epoch 6] seen=0.6319 unseen=0.4868 mean=0.5594 (257s)
  saved -> /mnt/workspace/keyword_detect/baseline/checkpoints/best.pt
  ep7 100/3906 loss=0.7811
  ep7 200/3906 loss=0.7778
  ep7 300/3906 loss=0.7750
  ep7 400/3906 loss=0.7692
  ep7 500/3906 loss=0.7656
  ep7 600/3906 loss=0.7659
  ep7 700/3906 loss=0.7671
  ep7 800/3906 loss=0.7690
  ep7 900/3906 loss=0.7672
  ep7 1000/3906 loss=0.7663
  ep7 1100/3906 loss=0.7658
  ep7 1200/3906 loss=0.7658
  ep7 1300/3906 loss=0.7671
  ep7 1400/3906 loss=0.7664
  ep7 1500/3906 loss=0.7663
  ep7 1600/3906 loss=0.7658
  ep7 1700/3906 loss=0.7645
  ep7 1800/3906 loss=0.7649
  ep7 1900/3906 loss=0.7643
  ep7 2000/3906 loss=0.7643
  ep7 2100/3906 loss=0.7638
  ep7 2200/3906 loss=0.7642
  ep7 2300/3906 loss=0.7640
  ep7 2400/3906 loss=0.7641
  ep7 2500/3906 loss=0.7635
  ep7 2600/3906 loss=0.7642
  ep7 2700/3906 loss=0.7642
  ep7 2800/3906 loss=0.7643
  ep7 2900/3906 loss=0.7642
  ep7 3000/3906 loss=0.7638
  ep7 3100/3906 loss=0.7637
  ep7 3200/3906 loss=0.7636
  ep7 3300/3906 loss=0.7638
  ep7 3400/3906 loss=0.7630
  ep7 3500/3906 loss=0.7618
  ep7 3600/3906 loss=0.7613
  ep7 3700/3906 loss=0.7609
  ep7 3800/3906 loss=0.7608
  ep7 3900/3906 loss=0.7611
[epoch 7] seen=0.6267 unseen=0.4949 mean=0.5608 (259s)
  saved -> /mnt/workspace/keyword_detect/baseline/checkpoints/best.pt
  ep8 100/3906 loss=0.7411
  ep8 200/3906 loss=0.7435
  ep8 300/3906 loss=0.7410
  ep8 400/3906 loss=0.7390
  ep8 500/3906 loss=0.7372
  ep8 600/3906 loss=0.7405
  ep8 700/3906 loss=0.7398
  ep8 800/3906 loss=0.7403
  ep8 900/3906 loss=0.7417
  ep8 1000/3906 loss=0.7442
  ep8 1100/3906 loss=0.7454
  ep8 1200/3906 loss=0.7439
  ep8 1300/3906 loss=0.7433
  ep8 1400/3906 loss=0.7423
  ep8 1500/3906 loss=0.7410
  ep8 1600/3906 loss=0.7405
  ep8 1700/3906 loss=0.7400
  ep8 1800/3906 loss=0.7396
  ep8 1900/3906 loss=0.7391
  ep8 2000/3906 loss=0.7395
  ep8 2100/3906 loss=0.7393
  ep8 2200/3906 loss=0.7394
  ep8 2300/3906 loss=0.7396
  ep8 2400/3906 loss=0.7394
  ep8 2500/3906 loss=0.7396
  ep8 2600/3906 loss=0.7394
  ep8 2700/3906 loss=0.7387
  ep8 2800/3906 loss=0.7386
  ep8 2900/3906 loss=0.7386
  ep8 3000/3906 loss=0.7384
  ep8 3100/3906 loss=0.7373
  ep8 3200/3906 loss=0.7366
  ep8 3300/3906 loss=0.7363
  ep8 3400/3906 loss=0.7365
  ep8 3500/3906 loss=0.7362
  ep8 3600/3906 loss=0.7361
  ep8 3700/3906 loss=0.7358
  ep8 3800/3906 loss=0.7358
  ep8 3900/3906 loss=0.7349
[epoch 8] seen=0.6293 unseen=0.4983 mean=0.5638 (262s)
  saved -> /mnt/workspace/keyword_detect/baseline/checkpoints/best.pt
  ep9 100/3906 loss=0.7062
  ep9 200/3906 loss=0.7218
  ep9 300/3906 loss=0.7292
  ep9 400/3906 loss=0.7275
  ep9 500/3906 loss=0.7295
  ep9 600/3906 loss=0.7307
  ep9 700/3906 loss=0.7292
  ep9 800/3906 loss=0.7271
  ep9 900/3906 loss=0.7254
  ep9 1000/3906 loss=0.7245
  ep9 1100/3906 loss=0.7224
  ep9 1200/3906 loss=0.7229
  ep9 1300/3906 loss=0.7226
  ep9 1400/3906 loss=0.7226
  ep9 1500/3906 loss=0.7224
  ep9 1600/3906 loss=0.7218
  ep9 1700/3906 loss=0.7207
  ep9 1800/3906 loss=0.7191
  ep9 1900/3906 loss=0.7193
  ep9 2000/3906 loss=0.7199
  ep9 2100/3906 loss=0.7196
  ep9 2200/3906 loss=0.7187
  ep9 2300/3906 loss=0.7183
  ep9 2400/3906 loss=0.7179
  ep9 2500/3906 loss=0.7179
  ep9 2600/3906 loss=0.7177
  ep9 2700/3906 loss=0.7174
  ep9 2800/3906 loss=0.7165
  ep9 2900/3906 loss=0.7164
  ep9 3000/3906 loss=0.7157
  ep9 3100/3906 loss=0.7154
  ep9 3200/3906 loss=0.7148
  ep9 3300/3906 loss=0.7145
  ep9 3400/3906 loss=0.7143
  ep9 3500/3906 loss=0.7139
  ep9 3600/3906 loss=0.7140
  ep9 3700/3906 loss=0.7140
  ep9 3800/3906 loss=0.7137
  ep9 3900/3906 loss=0.7136
[epoch 9] seen=0.6318 unseen=0.4908 mean=0.5613 (254s)
  ep10 100/3906 loss=0.7043
  ep10 200/3906 loss=0.7037
  ep10 300/3906 loss=0.7075
  ep10 400/3906 loss=0.7088
  ep10 500/3906 loss=0.7110
  ep10 600/3906 loss=0.7093
  ep10 700/3906 loss=0.7063
  ep10 800/3906 loss=0.7036
  ep10 900/3906 loss=0.7051
  ep10 1000/3906 loss=0.7046
  ep10 1100/3906 loss=0.7022
  ep10 1200/3906 loss=0.7019
  ep10 1300/3906 loss=0.7015
  ep10 1400/3906 loss=0.7017
  ep10 1500/3906 loss=0.7009
  ep10 1600/3906 loss=0.7005
  ep10 1700/3906 loss=0.7003
  ep10 1800/3906 loss=0.6999
  ep10 1900/3906 loss=0.6995
  ep10 2000/3906 loss=0.6985
  ep10 2100/3906 loss=0.6977
  ep10 2200/3906 loss=0.6980
  ep10 2300/3906 loss=0.6975
  ep10 2400/3906 loss=0.6979
  ep10 2500/3906 loss=0.6976
  ep10 2600/3906 loss=0.6974
  ep10 2700/3906 loss=0.6965
  ep10 2800/3906 loss=0.6965
  ep10 2900/3906 loss=0.6959
  ep10 3000/3906 loss=0.6960
  ep10 3100/3906 loss=0.6960
  ep10 3200/3906 loss=0.6960
  ep10 3300/3906 loss=0.6954
  ep10 3400/3906 loss=0.6949
  ep10 3500/3906 loss=0.6945
  ep10 3600/3906 loss=0.6942
  ep10 3700/3906 loss=0.6941
  ep10 3800/3906 loss=0.6940
  ep10 3900/3906 loss=0.6939
[epoch 10] seen=0.6288 unseen=0.4969 mean=0.5628 (257s)
  ep11 100/3906 loss=0.6980
  ep11 200/3906 loss=0.6841
  ep11 300/3906 loss=0.6857
  ep11 400/3906 loss=0.6823
  ep11 500/3906 loss=0.6798
  ep11 600/3906 loss=0.6805
  ep11 700/3906 loss=0.6774
  ep11 800/3906 loss=0.6771
  ep11 900/3906 loss=0.6784
  ep11 1000/3906 loss=0.6779
  ep11 1100/3906 loss=0.6778
  ep11 1200/3906 loss=0.6775
  ep11 1300/3906 loss=0.6767
  ep11 1400/3906 loss=0.6782
  ep11 1500/3906 loss=0.6773
  ep11 1600/3906 loss=0.6774
  ep11 1700/3906 loss=0.6783
  ep11 1800/3906 loss=0.6789
  ep11 1900/3906 loss=0.6785
  ep11 2000/3906 loss=0.6776
  ep11 2100/3906 loss=0.6767
  ep11 2200/3906 loss=0.6767
  ep11 2300/3906 loss=0.6764
  ep11 2400/3906 loss=0.6762
  ep11 2500/3906 loss=0.6761
  ep11 2600/3906 loss=0.6760
  ep11 2700/3906 loss=0.6762
  ep11 2800/3906 loss=0.6765
  ep11 2900/3906 loss=0.6767
  ep11 3000/3906 loss=0.6770
  ep11 3100/3906 loss=0.6770
  ep11 3200/3906 loss=0.6771
  ep11 3300/3906 loss=0.6776
  ep11 3400/3906 loss=0.6767
  ep11 3500/3906 loss=0.6768
  ep11 3600/3906 loss=0.6764
  ep11 3700/3906 loss=0.6765
  ep11 3800/3906 loss=0.6760
  ep11 3900/3906 loss=0.6766
[epoch 11] seen=0.6397 unseen=0.4926 mean=0.5661 (260s)
  saved -> /mnt/workspace/keyword_detect/baseline/checkpoints/best.pt
  ep12 100/3906 loss=0.6601
  ep12 200/3906 loss=0.6569
  ep12 300/3906 loss=0.6586
  ep12 400/3906 loss=0.6617
  ep12 500/3906 loss=0.6610
  ep12 600/3906 loss=0.6604
  ep12 700/3906 loss=0.6615
  ep12 800/3906 loss=0.6609
  ep12 900/3906 loss=0.6607
  ep12 1000/3906 loss=0.6628
  ep12 1100/3906 loss=0.6622
  ep12 1200/3906 loss=0.6621
  ep12 1300/3906 loss=0.6622
  ep12 1400/3906 loss=0.6623
  ep12 1500/3906 loss=0.6630
  ep12 1600/3906 loss=0.6629
  ep12 1700/3906 loss=0.6642
  ep12 1800/3906 loss=0.6647
  ep12 1900/3906 loss=0.6637
  ep12 2000/3906 loss=0.6645
  ep12 2100/3906 loss=0.6640
  ep12 2200/3906 loss=0.6636
  ep12 2300/3906 loss=0.6632
  ep12 2400/3906 loss=0.6630
  ep12 2500/3906 loss=0.6638
  ep12 2600/3906 loss=0.6637
  ep12 2700/3906 loss=0.6631
  ep12 2800/3906 loss=0.6631
  ep12 2900/3906 loss=0.6633
  ep12 3000/3906 loss=0.6627
  ep12 3100/3906 loss=0.6627
  ep12 3200/3906 loss=0.6631
  ep12 3300/3906 loss=0.6628
  ep12 3400/3906 loss=0.6625
  ep12 3500/3906 loss=0.6626
  ep12 3600/3906 loss=0.6630
  ep12 3700/3906 loss=0.6623
  ep12 3800/3906 loss=0.6619
  ep12 3900/3906 loss=0.6622
[epoch 12] seen=0.6268 unseen=0.4966 mean=0.5617 (260s)
  ep13 100/3906 loss=0.6423
  ep13 200/3906 loss=0.6454
  ep13 300/3906 loss=0.6444
  ep13 400/3906 loss=0.6503
  ep13 500/3906 loss=0.6489
  ep13 600/3906 loss=0.6497
  ep13 700/3906 loss=0.6499
  ep13 800/3906 loss=0.6508
  ep13 900/3906 loss=0.6514
  ep13 1000/3906 loss=0.6527
  ep13 1100/3906 loss=0.6523
  ep13 1200/3906 loss=0.6535
  ep13 1300/3906 loss=0.6527
  ep13 1400/3906 loss=0.6526
  ep13 1500/3906 loss=0.6524
  ep13 1600/3906 loss=0.6534
  ep13 1700/3906 loss=0.6528
  ep13 1800/3906 loss=0.6526
  ep13 1900/3906 loss=0.6521
  ep13 2000/3906 loss=0.6513
  ep13 2100/3906 loss=0.6527
  ep13 2200/3906 loss=0.6520
  ep13 2300/3906 loss=0.6518
  ep13 2400/3906 loss=0.6512
  ep13 2500/3906 loss=0.6506
  ep13 2600/3906 loss=0.6503
  ep13 2700/3906 loss=0.6502
  ep13 2800/3906 loss=0.6499
  ep13 2900/3906 loss=0.6498
  ep13 3000/3906 loss=0.6497
  ep13 3100/3906 loss=0.6491
  ep13 3200/3906 loss=0.6486
  ep13 3300/3906 loss=0.6485
  ep13 3400/3906 loss=0.6488
  ep13 3500/3906 loss=0.6487
  ep13 3600/3906 loss=0.6488
  ep13 3700/3906 loss=0.6486
  ep13 3800/3906 loss=0.6483
  ep13 3900/3906 loss=0.6480
[epoch 13] seen=0.6240 unseen=0.4965 mean=0.5602 (253s)
  ep14 100/3906 loss=0.6388
  ep14 200/3906 loss=0.6324
  ep14 300/3906 loss=0.6323
  ep14 400/3906 loss=0.6324
  ep14 500/3906 loss=0.6302
  ep14 600/3906 loss=0.6307
  ep14 700/3906 loss=0.6340
  ep14 800/3906 loss=0.6352
  ep14 900/3906 loss=0.6344
  ep14 1000/3906 loss=0.6346
  ep14 1100/3906 loss=0.6367
  ep14 1200/3906 loss=0.6380
  ep14 1300/3906 loss=0.6381
  ep14 1400/3906 loss=0.6381
  ep14 1500/3906 loss=0.6381
  ep14 1600/3906 loss=0.6364
  ep14 1700/3906 loss=0.6362
  ep14 1800/3906 loss=0.6369
  ep14 1900/3906 loss=0.6373
  ep14 2000/3906 loss=0.6372
  ep14 2100/3906 loss=0.6372
  ep14 2200/3906 loss=0.6363
  ep14 2300/3906 loss=0.6368
  ep14 2400/3906 loss=0.6363
  ep14 2500/3906 loss=0.6363
  ep14 2600/3906 loss=0.6365
  ep14 2700/3906 loss=0.6368
  ep14 2800/3906 loss=0.6371
  ep14 2900/3906 loss=0.6365
  ep14 3000/3906 loss=0.6364
  ep14 3100/3906 loss=0.6359
  ep14 3200/3906 loss=0.6358
  ep14 3300/3906 loss=0.6362
  ep14 3400/3906 loss=0.6362
  ep14 3500/3906 loss=0.6361
  ep14 3600/3906 loss=0.6364
  ep14 3700/3906 loss=0.6362
  ep14 3800/3906 loss=0.6362
  ep14 3900/3906 loss=0.6361
[epoch 14] seen=0.6420 unseen=0.4974 mean=0.5697 (258s)
  saved -> /mnt/workspace/keyword_detect/baseline/checkpoints/best.pt
  ep15 100/3906 loss=0.6385
  ep15 200/3906 loss=0.6302
  ep15 300/3906 loss=0.6330
  ep15 400/3906 loss=0.6305
  ep15 500/3906 loss=0.6267
  ep15 600/3906 loss=0.6258
  ep15 700/3906 loss=0.6261
  ep15 800/3906 loss=0.6264
  ep15 900/3906 loss=0.6269
  ep15 1000/3906 loss=0.6274
  ep15 1100/3906 loss=0.6280
  ep15 1200/3906 loss=0.6294
  ep15 1300/3906 loss=0.6300
  ep15 1400/3906 loss=0.6305
  ep15 1500/3906 loss=0.6290
  ep15 1600/3906 loss=0.6298
  ep15 1700/3906 loss=0.6284
  ep15 1800/3906 loss=0.6293
  ep15 1900/3906 loss=0.6275
  ep15 2000/3906 loss=0.6278
  ep15 2100/3906 loss=0.6281
  ep15 2200/3906 loss=0.6284
  ep15 2300/3906 loss=0.6280
  ep15 2400/3906 loss=0.6274
  ep15 2500/3906 loss=0.6279
  ep15 2600/3906 loss=0.6280
  ep15 2700/3906 loss=0.6269
  ep15 2800/3906 loss=0.6262
  ep15 2900/3906 loss=0.6261
  ep15 3000/3906 loss=0.6259
  ep15 3100/3906 loss=0.6257
  ep15 3200/3906 loss=0.6255
  ep15 3300/3906 loss=0.6252
  ep15 3400/3906 loss=0.6254
  ep15 3500/3906 loss=0.6253
  ep15 3600/3906 loss=0.6251
  ep15 3700/3906 loss=0.6254
  ep15 3800/3906 loss=0.6250
  ep15 3900/3906 loss=0.6251
[epoch 15] seen=0.6273 unseen=0.4914 mean=0.5593 (253s)
done. best dev mean AUC = 0.5697
root@dsw-2040063-54c995dd6-jn7d5:/mnt/workspace/keyword_detect/baseline# ^C
root@dsw-2040063-54c995dd6-jn7d5:/mnt/workspace/keyword_detect/baseline# 

推理结果

bash 复制代码
root@dsw-2040063-54c995dd6-jn7d5:/mnt/workspace/keyword_detect/baseline# python infer.py
loaded /mnt/workspace/keyword_detect/baseline/checkpoints/best.pt (dev mean AUC=0.569717)
total: 100000 rows
wrote /mnt/workspace/keyword_detect/baseline/submission.csv

执行完成

提交结果

相关推荐
A hao2 小时前
高对比度在XR虚拟背景中的作用
大数据·图像处理·人工智能·xr·广告
小二·2 小时前
2026年AI Agent框架横评:OpenClaw vs LangGraph vs CrewAI vs Superpowers,选型指南
人工智能
tyqtyq222 小时前
旅行打包清单 App — HarmonyOS AI 应用开发技术博客
人工智能·学习·华为·生活·harmonyos
guo_xiao_xiao_2 小时前
YOLOv11道路桥梁裂缝与坑洼目标检测数据集
人工智能·yolo·目标检测
邵宇然3 小时前
Rust Unsafe 代码规范:不安全块要小到能被审查
人工智能
Haoxuekeji3 小时前
山东 AI 智能批改校园电子阅卷企业
大数据·人工智能·深度学习·安全·ai
c238563 小时前
第二篇:《测试指挥官:可视化单题自测框架(含 assert 实操)》
java·数据库·c++·算法·安全性测试
视觉AI4 小时前
VS Code Remote-SSH 连接Jetson踩坑完整解决记录(网段不通+主机密钥变更双重故障)
运维·网络·人工智能·windows·ssh·边缘计算
科技发布4 小时前
拓氪科技一站式品牌营销平台使用手册 舆情风险预警管理教程
人工智能·科技