音频识别在海洋工程中的应用-ShipsEar(混噪)数据集
收藏资源简介:
# ShipsEar(混噪)数据集 **ShipsEarNoiseMixed** —— 西班牙西北部近岸实测船舶辐射噪声(ShipsEar 原始录音)+ 两种噪声、四个信噪比等级的混噪子集,面向水声目标识别(UATR)与低信噪比鲁棒性评测。 | 项目 | 内容 | | --- | --- | | 数据来源 | 西班牙维戈大学(Universidade de Vigo)ShipsEar 数据库 | | 数据规模 | 90 条原始录音(约 3.15 h)+ 1,999 个 5 s 片段 × 9 个版本(干净 ×1、混噪 ×8) | | 音频格式 | 原始:44.1 / 52.734 kHz、16 / 24 bit 单声道 PCM;片段:16 kHz、32 bit float 单声道 | | 任务类型 | 音频分类(4 类)、低信噪比鲁棒性评测 | | 标注方式 | 按原始录音所属船舶类别(文件夹名即标签),片段标签继承自所属录音 | | 文件总量 | 约 6.4 GB | | 许可协议 | MIT License(原始 ShipsEar 数据版权归 Universidade de Vigo 所有,详见下文) | | 原论文 | http://dx.doi.org/10.1016/j.apacoust.2016.06.008 --- ## 数据集描述 ### 数据集简介 ShipsEar 由西班牙维戈大学在西班牙西北部(Ría de Vigo 及其邻近海域)采集,使用水下听音器记录过往船舶的辐射噪声,共 90 条录音,涵盖 11 种船舶类型以及海洋环境噪声。按船舶类型划分为 A、B、C、D 四个目标类别,另以 E 类表示实测海洋环境噪声(风、雨、浪、海流等)。 本数据集在保留 ShipsEar 原始录音(未切割)的同时,额外提供一套**统一预处理 + 混噪**的片段版本,用于水声目标识别模型在低信噪比条件下的训练与评测: - 所有目标录音统一重采样至 **16 kHz**,按**不重叠 5 s** 切片,共得到 **1,999** 个片段; - 在干净片段上分别叠加两类噪声——**加性高斯白噪声(GaussN)** 与 **同数据集 E 类实测海洋环境噪声(SelfN)**; - 每个噪声类型生成 **+5、0、−5、−10 dB** 四个信噪比版本,每个版本均包含 1,999 个片段; - 混噪流程、信噪比定义与归一化方式详见下文「数据集生成的相关信息」。 该数据集适用于:水声目标识别基线复现、噪声鲁棒性与低信噪比性能评估、数据增强/去噪/域适应方法验证。 ### 数据集支持的任务 | 任务 | 说明 | | --- | --- | | 音频分类(Audio Classification) | 4 类船舶目标(A/B/C/D)单标签分类 | | 低信噪比鲁棒性评测 | 在 +5 / 0 / −5 / −10 dB 下比较模型性能衰减 | | 噪声类型泛化 | 高斯噪声训练 → 实测噪声测试(及反向)的跨噪声泛化 | | 数据增强 / 语音增强 | 以干净片段为标签、混噪片段为输入的有监督增强 | --- ## 数据集的格式和结构 ### 目录结构 ```text ShipsEarNoiseMixed/ ├── Original ShipsEar Dataset/ # 原始录音(未切割,90 条) │ ├── A/ # 17 条:渔船、拖网船、贻贝养殖船、拖船、挖泥船 │ ├── B/ # 19 条:摩托艇、引航船、帆船 │ ├── C/ # 30 条:客渡船 │ ├── D/ # 12 条:远洋邮轮、滚装船 │ └── E/ # 12 条:海洋环境噪声(风、雨、浪、海流) ├── GaussN/ # 高斯白噪声混噪片段(4 个 SNR) │ ├── Gaussian_SNR_5dB.zip # 1,999 个 wav │ ├── Gaussian_SNR_0dB.zip │ ├── Gaussian_SNR_neg5dB.zip │ └── Gaussian_SNR_neg10dB.zip ├── SelfN/ # 实测海洋环境噪声(E 类)混噪片段(4 个 SNR) │ ├── SNR_5dB.zip # 1,999 个 wav │ ├── SNR_0dB.zip │ ├── SNR_neg5dB.zip │ └── SNR_neg10dB.zip ├── dataset_infos.json # 数据集元信息(audio 特征) └── README.md ``` > 说明:所有混噪数据以 ZIP 压缩包分发,每个压缩包约 575–593 MB。解压后根目录名与压缩包一致(如 `Gaussian_SNR_0dB/`、`SNR_0dB/`),其下按类别 `A/ B/ C/ D/` 组织。 ### 数据格式 **(1)原始录音** | 字段 | 说明 | | --- | --- | | 文件命名 | `<序号>__<日期DD_MM_YY>_<船名/类型>_<状态>.wav`,如 `15__10_07_13_radaUno_Pasa.wav` | | E 类命名 | `85__E__1L.wav`、`93__A__Draga_1.wav` 等 | | 采样率 | 44,100 Hz 或 52,734 Hz(各文件不一致,读取时请以文件头为准) | | 位深 / 声道 | 16 bit 或 24 bit PCM,单声道 | | 时长 | 单条 10 s–11.4 min,合计约 3.15 h | **(2)混噪片段** | 字段 | 说明 | | --- | --- | | 文件命名 | `<原始文件名>_<类别>-Segment_<k>.wav`,如 `15__10_07_13_radaUno_Pasa_A-Segment_1.wav` | | 采样率 / 位深 | 16,000 Hz,32 bit float(IEEE float,WAV_FORMAT_EXTENSIBLE),单声道 | | 单文件大小 | 320,080 B(5 s × 16,000 Hz × 4 B + 80 B 头) | | 片段长度 | 5 s(80,000 采样点),不重叠 | | 标签来源 | 目录名(`A`/`B`/`C`/`D`),与原始录音类别一致 | --- ## 数据集加载方式 推荐使用 ModelScope CLI 或 Git 拉取,再按需解压 ZIP。示例环境:Python ≥ 3.9,`soundfile`、`numpy`、`torch`(可选)。 ### 1. 下载数据 ```bash # 方式一:ModelScope CLI(推荐) pip install modelscope modelscope download --dataset schwarz11/ShipsEarNoiseMixed --local_dir ./ShipsEarNoiseMixed # 方式二:Git(需安装 git-lfs) git lfs install git clone https://www.modelscope.cn/datasets/schwarz11/ShipsEarNoiseMixed.git ``` ### 2. 解压混噪子集并读取片段 ```python import os import glob import zipfile import soundfile as sf root = "./ShipsEarNoiseMixed" zip_path = os.path.join(root, "GaussN", "Gaussian_SNR_0dB.zip") out_dir = os.path.join(root, "GaussN_0dB") with zipfile.ZipFile(zip_path) as z: z.extractall(out_dir) files = sorted(glob.glob(os.path.join(out_dir, "Gaussian_SNR_0dB", "*", "*.wav"))) print(len(files)) # 1999 x, sr = sf.read(files[0], dtype="float32") print(x.shape, sr) # (80000,) 16000 label = os.path.basename(os.path.dirname(files[0])) # 'A' / 'B' / 'C' / 'D' print(label) ``` ### 3. 构建 PyTorch Dataset(对数梅尔谱示例) ```python import torch import torchaudio class ShipsEarSeg(torch.utils.data.Dataset): def __init__(self, wav_files, labels=("A", "B", "C", "D")): self.files = wav_files self.lut = {c: i for i, c in enumerate(labels)} self.mel = torchaudio.transforms.MelSpectrogram( sample_rate=16000, n_fft=2048, hop_length=512, n_mels=224, f_min=20, f_max=8000) self.db = torchaudio.transforms.AmplitudeToDB() def __len__(self): return len(self.files) def __getitem__(self, idx): path = self.files[idx] wav, sr = torchaudio.load(path) # (1, 80000) feat = self.db(self.mel(wav)).squeeze(0) # (224, T) label = self.lut[path.split(os.sep)[-2]] return feat, label ``` ### 4. 读取原始录音(未切割) ```python import soundfile as sf path = "./ShipsEarNoiseMixed/Original ShipsEar Dataset/A/15__10_07_13_radaUno_Pasa.wav" info = sf.info(path) print(info.samplerate, info.channels, info.subtype, info.duration) # 52734 1 PCM_24 44.53... x, sr = sf.read(path, dtype="float32") # 建议随后统一重采样至 16 kHz ``` ### 数据集分片 片段级划分在**类别内**按约 70% / 15% / 15% 随机划分(随机种子 42)。混噪实验中,同一片段的 5 个版本(干净 + 4 个 SNR)绑定为一个整体,只会落入训练、验证或测试之一;训练/验证集每个片段随机取一个版本,测试集中 5 个版本全部参与评测。 | 类别 | 船舶类型 | 原始录音 | 原始时长 | 5 s 片段 | 训练 | 验证 | 测试(干净) | 测试(含 5 个 SNR 版本) | | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | | A | 渔船、拖网船、贻贝养殖船、拖船、挖泥船 | 17 | 31.4 min | 369 | 258 | 55 | 56 | 280 | | B | 摩托艇、引航船、帆船 | 19 | 26.1 min | 301 | 210 | 45 | 46 | 230 | | C | 客渡船 | 30 | 71.3 min | 843 | 590 | 126 | 127 | 635 | | D | 远洋邮轮、滚装船 | 12 | 41.0 min | 486 | 340 | 72 | 74 | 370 | | E | 海洋环境噪声(仅作混噪噪声源) | 12 | 19.1 min | — | — | — | — | — | | **合计** | — | **90** | **约 3.15 h** | **1,999** | **1,398** | **298** | **303** | **1,515** | > 划分仅为本数据集维护者提供的参考划分,可按需重新划分;重新划分时建议保持"片段版本绑定"与"按类别分层"两条约束。 --- ## 数据集生成的相关信息 ### 原始数据 原始数据为 ShipsEar 数据库公开发布的 90 条实测录音,采集于西班牙西北部近岸海域,覆盖不同季节、海况与船舶操纵状态(进港、出港、等待、通过等)。本仓库中的 `Original ShipsEar Dataset/` 为其**未切割**版本,未做重采样或重编码。 ### 数据集标注 ShipsEar 的标注即录音所属的船舶类别,由原始数据提供方依据船舶类型完成: | 类别 | 包含船舶类型 | | --- | --- | | A | 渔船(fishing boats)、拖网船(trawlers)、贻贝养殖船(mussel boats)、拖船(tugboats)、挖泥船(dredgers) | | B | 摩托艇(motorboats)、引航船(pilot boats)、帆船(sailboats) | | C | 客渡船(passenger ferries) | | D | 远洋邮轮(ocean liners)、滚装船(ro-ro vessels) | | E | 海洋环境噪声(风、雨、浪、海流),不参与目标分类,仅作为混噪噪声源 | 片段标签由所属录音继承,`A-Segment_k` 即表示该片段属于 A 类录音的第 k 个 5 s 片段。 ### 混噪流程 1. **重采样与切片**:目标录音(A–D)统一重采样至 16 kHz,按不重叠 5 s 切分,得到 1,999 个片段(A 369 / B 301 / C 843 / D 486)。 2. **噪声构造**:GaussN 为与片段等长的加性高斯白噪声(随机种子固定为 42);SelfN 取自同数据集 E 类实测海洋环境噪声,截取/拼接至与片段等长。 3. **按目标 SNR 缩放叠加**:噪声按目标信噪比缩放后与干净片段相加,使混合信号在**波形域的 RMS 信噪比**等于目标值。 4. **防削波归一化**:若混合信号峰值超过 1,则整体归一化,避免削波失真。 5. **版本生成**:每个噪声类型生成 +5、0、−5、−10 dB 四个版本,每个版本 1,999 个片段;同一实验内训练、验证、测试使用**同一种噪声类型**。 ### 数据统计 | 项目 | 数值 | | --- | --- | | 原始录音 | 90 条 / 约 3.15 h / 约 1.6 GB | | 干净片段 | 1,999 × 5 s ≈ 2.78 h | | 混噪版本 | 8 套(GaussN ×4 SNR,SelfN ×4 SNR),每套 1,999 个片段 | | 混噪片段总量 | 15,992 个(8 × 1,999) | | 混噪数据体积 | 约 4.6 GB(8 个 ZIP,单个 575–593 MB) | --- ## 数据集版权信息 - **原始 ShipsEar 数据**:版权归 Universidade de Vigo(西班牙维戈大学)所有,仅供学术研究使用。使用原始录音请引用 Santos-Domínguez 等(2016)。 - **本仓库的整理与混噪派生数据**(切片、混噪版本、划分、文档):以 **MIT License** 发布,可自由用于研究与商业用途,但须保留版权与许可声明,并引用下文文献。 - 若需将数据用于商业产品或再分发原始录音,请先与原始数据版权方确认授权范围。 --- ## 引用方式 若使用本数据集(尤其是混噪子集),请引用原始 ShipsEar 论文: ```bibtex @article{santos2016shipsear, title = {ShipsEar: An underwater vessel noise database}, author = {Santos-Dom{\'i}nguez, David and Torres-Guijarro, Soledad and Cardenal-L{\'o}pez, Antonio and Pena-Gimenez, Antonio}, journal = {Applied Acoustics}, volume = {113}, pages = {64--69}, year = {2016}, doi = {10.1016/j.apacoust.2016.06.008} } ``` --- ## 其他相关信息 - **类别不均衡**:C 类(客渡船)片段数约为 B 类的 2.8 倍,训练时建议使用类别平衡采样,评测时建议同时报告总体准确率与各类别召回率/宏平均 F1。 - **噪声为人工叠加**:GaussN 与 SelfN 均为仿真混噪,与真实海试中的信道失真、混响、多目标干扰仍有差异;结论外推到实际海况时需谨慎。 - **单一海域**:原始录音均来自西班牙西北部近岸,船舶类型与海洋环境具有地域性,跨海域泛化需额外验证。 - **采样率不一致**:原始录音为 44.1 kHz 或 52.734 kHz,直接混用前请统一重采样;混噪片段已统一为 16 kHz。 - **评测建议**:报告 +5 / 0 / −5 / −10 dB 四档结果,并注明噪声类型(GaussN / SelfN)与划分种子,便于横向比较。 ## 更新日志 | 日期 | 说明 | | --- | --- | | 2026-10-31 | 重构数据集卡片:补充数据来源、类别定义、混噪流程、划分统计与加载示例 | | 2026-10-30 | 上传原始录音与 GaussN / SelfN 混噪子集 |



