YOLOv7船舶检测实战:从HRSC2016数据转换到训练调参

发布时间:2026/10/11 10:11:20
YOLOv7船舶检测实战:从HRSC2016数据转换到训练调参 简介YOLOv7船舶检测完整代码与配套数据集面向计算机视觉研究者、算法工程师及船舶识别相关项目的开发者。方案在YOLOv7高效检测框架基础上针对船舶目标做了数据与训练适配集成了网络结构、训练脚本与标注数据可帮助用户直接开展模型训练、评估与部署。压缩包共2377个文件约247.63MB包含772张船舶图像、742个VOC格式xml标签、741个YOLO格式txt标签以及yaml配置文件、Python训练脚本、预训练pt权重和TensorBoard事件文件覆盖从数据准备到训练监控的主要环节。已有1057人学习下载。用户可按需选择VOC或YOLO标签格式训练借助附带的损失曲线与mAP可视化可直观分析模型收敛情况预训练权重便于在已有基础上微调快速搭建适用于港口监控、海事巡航、渔业管理等场景的船舶识别系统。1. 船舶检测不是难在模型难在框怎么画做航拍船舶检测的人第一次跑通 YOLOv7 都会有个错觉模型能检测出船了Loss 降得也挺漂亮mAP 看着也不差但一放到真实遥感图上就露馅——船在码头边挤成一排、长短比例极端、船头船尾朝向任意水平矩形框一个框里往往并排塞着两三艘船。这个项目拿 YOLOv7 搭配 HRSC2016 数据集解决的正是这类落地问题而不是给你一个「能跑通的 demo」。它包含完整的训练代码、转换脚本和带标注的船舶数据集适合两类人一类是刚接触遥感目标检测想用一套靠谱代码把数据准备到训练验证全流程走通的新手另一类是已经在用 YOLO 系列做通用检测、现在要转向船舶等细长任意朝向目标的工程师。先说结论这套资源里最值钱的不是模型本身而是围绕 HRSC2016 的地面真实框处理逻辑和训练参数调法。2. YOLOv7 检测船舶的选型依据anchor 机制与骨干结构2.1 为什么选 YOLOv7 而不是 v8先看船舶目标的特点很多人的第一反应是「现在不都用 YOLOv8 吗」。从部署便利性看 v8 确实有优势但船舶检测这个场景里 YOLOv7 反而有更实际的选型理由。船舶目标在遥感图像里呈现出两个极端一个是长宽比极大一艘停在港口的大型货轮其检测框的长宽比可以达到 1:8 甚至 1:10另一个是密集排列渔业船队在近海区域往往是十几艘船挤在一起相邻目标之间的间距可能只有几个像素。YOLOv7 的 anchor-based 机制在这种情况下更有优势。v8 是 anchor-free靠中心点加距离回归来预测目标框面对长宽比极端的细长物体时回归头的压力会比较大。而 YOLOv7 保留了预设 anchor 的机制你可以针对船舶的尺寸分布来调整 anchor 的宽高比让它初始就贴近船的真实形变范围。项目代码里默认给 HRSC2016 聚类生成的 anchor 是[[10,13], [16,30], [33,23], [30,61], [62,45], [59,119], [116,90], [156,198], [373,326]]这是 COCO 的初始值实际训练前需要用tools/目录下的聚类脚本重新生成一组适合船舶尺寸的 anchor。另一个值得说的结构点是 RepConv。YOLOv7 在 backbone 里用了重参数化卷积训练时是 multi-branch 结构推理时等价折叠成单路 3×3 卷积。这个特性在船舶检测里非常实用因为遥感图像往往是大尺寸整图切 patch 后推理推理速度直接决定了生产效率。同样跑 1280×1280 的输入YOLOv7 的推理耗时比同样精度的两阶段检测器明显更低而重参数化后的单路结构在 TensorRT 上也能吃到更好的算子优化。从模型结构看YOLOv7 的 E-ELAN 结构通过扩展、洗牌、合并的方式让不同层的学习能力互补。船舶检测里小目标占比高E-ELAN 的跨层特征融合比 v5 的 PANet 更充分对小尺寸船只的召回提升比较明显。整体判断是如果做通用目标检测v8 确实省事但如果你的业务场景是航拍船舶YOLOv7 在细长目标上的 anchor 适配能力和 RepConv 带来的部署优势更值得投入。2.2 HRSC2016 数据集的关键特点任意朝向框与极端长宽比明白了模型选型再来看数据。资源里的数据集是 HRSC2016这是船舶检测领域用得比较多的一份公开遥感数据集由西北工业大学发布图像主要来自 Google Earth 的可见光遥感影像。HRSC2016 最大的特点是它提供了两种标注格式一种是水平矩形框HBB就是xmin, ymin, xmax, ymax另一种是旋转矩形框OBB也就是cx, cy, w, h, angle。这个在船舶检测里非常关键因为遥感影像里船是任意朝向的水平框包一个斜着的船会引入大量背景噪声。数据集的图像尺寸跨度很大从 300×300 到 1500×900 都有每张图里的船只数量差异也大。靠近港口的图像密密麻麻排着几十艘船开阔海域的单张图可能只有一两艘。船的类型分大类航母、货船、渔船、客轮等。这对训练时的采样策略有直接影响——如果你不做类别均衡模型会把高频出现的渔船学得很好而货船这种长宽比极端的类别召回就很差。数据集里另一个需要特别注意的是类别标注的不均衡程度。HRSC2016 的完整版有 25 个细分类别但很多类别的样本量只有几十张直接全部参与训练会把模型学崩。常用做法是先把细分类归并成大类比如把各种渔船合并为ship把军用舰艇归为warship用两到三个类别来做实验先跑通流程再逐步细分类别。资源里已经在转换脚本里预设了类别归并逻辑你只需要确认自己实验用的类别数跟配置一致。2.3 资源包的文件结构与关键代码入口拿到资源后先别急着跑训练梳理一下目录结构。标准的项目文件布局大致如下yolov7-ship/ ├── data/ # 数据集目录 │ ├── hrsc2016/ │ │ ├── images/ # 原始遥感图像 │ │ ├── labelTxt/ # HRSC 原始旋转框标注 │ │ └── ImageSets/ # 官方提供的训练/验证划分 ├── tools/ │ ├── convert_hrsc2yolo.py # 旋转框转 YOLO 格式核心脚本 │ └── kmeans_anchor.py # 针对船舶尺寸聚类 anchor ├── models/ │ ├── yolo.py │ └── yolo7.yaml # 模型结构配置 ├── data/ │ └── ship.yaml # 训练数据路径与类别配置 ├── train.py # 训练入口 ├── detect.py # 推理入口 └── requirements.txt先把requirements.txt里的依赖装齐。我一般在干净环境里这样做conda create -n yolov7 python3.8 -y conda activate yolov7 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 pip install opencv-python pyyaml tqdm matplotlib pandas这里用 PyTorch 官方源安装 CUDA 11.8 版本对应 torch不用国内镜像避免镜像源同步延迟导致的版本不一致。装完环境后在项目根目录执行python tools/convert_hrsc2yolo.py脚本会读取 HRSC 官方标注把旋转框坐标转换成 YOLO 需要的归一化中心点 宽高格式。转换时会有一个关键选择旋转框转水平框时用外接矩形还是最小外接矩形。项目代码默认走最小外接矩形这个逻辑更贴近船的真实占用区域但边缘会有少量截断具体影响在后面的避坑章节细讲。3. 数据准备与格式转换HRSC 旋转框到 YOLO 训练格式3.1 转换脚本的核心逻辑与路径配置HRSC2016 的原始标注格式是旋转矩形框每行记录x1 y1 x2 y2 x3 y3 x4 y4 category四个角点逆时针排列。而 YOLOv8、YOLOv7 的默认训练格式是class_id x_center y_center width height宽高是归一化的。转换脚本需要处理两个问题一是四角点坐标如何转成中心点加宽高二是是否保留旋转角度信息。import math import numpy as np import os from pathlib import Path def poly_to_obb_cxcywh(points): 将四角点坐标转为 (cx, cy, w, h, angle) 格式 points: [(x1,y1), (x2,y2), (x3,y3), (x4,y4)] 顺时针或逆时针均可 返回 cx, cy, w, h 为像素值angle 为弧度 x_coords [p[0] for p in points] y_coords [p[1] for p in points] cx sum(x_coords) / 4 cy sum(y_coords) / 4 # 计算以中心为原点的相对坐标 dx [x - cx for x in x_coords] dy [y - cy for y in y_coords] # 找最长边作为主方向 max_dist 0 angle 0 for i in range(4): j (i 1) % 4 dist (dx[i] - dx[j]) ** 2 (dy[i] - dy[j]) ** 2 if dist max_dist: max_dist dist angle math.atan2(dy[j] - dy[i], dx[j] - dx[i]) # 计算长边和短边在旋转坐标系下 cos_a math.cos(angle) sin_a math.sin(angle) rotated_x [dx * cos_a dy * sin_a for dx, dy in zip(dx, dy)] rotated_y [-dx * sin_a dy * cos_a for dx, dy in zip(dx, dy)] w max(rotated_x) - min(rotated_x) h max(rotated_y) - min(rotated_y) return cx, cy, w, h, angle def convert_hrsc_line(line, img_w, img_h): 解析 HRSC 标注行转换为 YOLO 归一化格式 HRSC 原始格式: x1 y1 x2 y2 x3 y3 x4 y4 category parts line.strip().split() coords list(map(float, parts[:8])) class_idx int(parts[8]) # 类别 ID points [(coords[i], coords[i1]) for i in range(0, 8, 2)] cx, cy, w, h, _ poly_to_obb_cxcywh(points) # YOLO 格式归一化的中心点坐标和宽高 cx_norm cx / img_w cy_norm cy / img_h w_norm w / img_w h_norm h / img_h return f{class_idx} {cx_norm:.6f} {cy_norm:.6f} {w_norm:.6f} {h_norm:.6f}\n这段代码里有几个地方值得解释。poly_to_obb_cxcywh函数第一步是计算四个角点的质心作为目标中心然后通过遍历相邻点找最长边来确定船头方向。这一步不能省因为 HRSC 标注的角点顺序在不同子集中并不完全一致直接取前两个点算宽高会得到错误结果。angle变量在当前水平框转换版本里没有用但保留它可以在后续需要接旋转框检测时直接复用。3.2 训练集 / 验证集划分与类别映射HRSC2016 官方提供了三种规模的划分方式。完整版包含 1061 张图像其中训练集 436 张、验证集 181 张、测试集 444 张。但很多实践者发现直接用官方划分会出现一个问题同一个港口在训练集和验证集中出现的图像时间不同但船只停靠位置高度相似导致验证分数虚高。import random from pathlib import Path random.seed(42) image_dir Path(data/hrsc2016/images) label_dir Path(data/hrsc2016/labels) train_images [] val_images [] # 按官方 ImageSets 读取划分 with open(data/hrsc2016/ImageSets/train.txt) as f: train_ids [line.strip() for line in f.readlines()] with open(data/hrsc2016/ImageSets/val.txt) as f: val_ids [line.strip() for line in f.readlines()] # 按类别归并把细分船类映射为统一类别 class_map { 1: 0, # 航母 - ship 2: 0, # 货船 - ship 3: 1, # 渔船 - fishing # 其余类别按需归并 } def remap_label(label_path, class_map): 读取标签文件并重映射类别 ID with open(label_path) as f: lines f.readlines() new_lines [] for line in lines: parts line.strip().split() old_cls int(parts[0]) if old_cls in class_map: new_lines.append(f{class_map[old_cls]} .join(parts[1:]) \n) return new_lines # 生成 YOLO 格式的 train.txt 和 val.txt for img_id in train_ids: label_path label_dir / f{img_id}.txt if label_path.exists(): new_lines remap_label(label_path, class_map) with open(label_path, w) as f: f.writelines(new_lines) train_images.append(str(image_dir / f{img_id}.jpg))这个脚本做的事是先读官方划分再把类别重映射。核心是class_map字典——原始 HRSC 标注共 25 类你可以按业务需要自由归并。我实际做的时候把类别压缩成 2 类普通船、渔船先把基准跑通等追精度的时候再逐步放开来对比。这个技巧能省很多调试时间。3.3 数据增强的参数设置mosaic 和 copy_paste 的取舍YOLOv7 默认开启 mosaic 增强把四张图拼接成一张训练。这个策略在船舶检测里需要谨慎使用。遥感图像里的船尺寸差异本就极大——同一张 1280×1280 的 patch 里可能同时出现一艘 200 像素长的货轮和一艘 15 像素的小渔船。mosaic 拼接后小目标会被进一步缩小容易低于网络下采样后的最小特征图感受野阈值。# data/ship.yaml 训练数据配置 train: data/hrsc2016/train.txt val: data/hrsc2016/val.txt nc: 2 names: [ship, fishing] # 增强参数在 train.py 中通过 hyp 配置文件控制 # 推荐值针对船舶场景调整过 hsv_h: 0.015 hsv_s: 0.7 hsv_v: 0.4 degrees: 0.0 translate: 0.1 scale: 0.5 shear: 0.0 perspective: 0.0 mosaic: 1.0 mixup: 0.0degrees: 0.0是我故意设的这意味着关闭随机旋转增强。很多跑通用检测的人习惯性地开 90 度旋转但船舶本身朝向任意模型需要学习的是「斜着的船」而不是「图像旋转后的船」。如果开了 90 度旋转会让水平框的语义变得混乱——一个水平框包住旋转后的斜船面积会膨胀很多给回归头制造噪音。scale: 0.5控制尺度变化范围如果计算资源充足可以适当调到 0.8但要注意它跟 mosaic 叠加后对小目标的影响是乘性的。mixup: 0.0是关掉的船舶检测里图像间混合会生成「透明船」这种无意义的训练样本尤其在高分辨率遥感图上mixup 对特征学习的帮助很有限。4. 训练配置与超参数解析把一次完整实验跑通4.1 训练入口与关键超参数表资源包提供的train.py是 YOLOv7 官方训练脚本的适配版核心入口参数如下python train.py \ --data data/ship.yaml \ --cfg models/yolov7-ship.yaml \ --weights weights/yolov7_training.pt \ --batch-size 8 \ --img 1280 \ --epochs 100 \ --hyp data/hyp.scratch.ship.yaml \ --device 0这里几个参数需要展开讲。--img 1280是输入分辨率。HRSC2016 原始图像边长从 300 到 1500 不等很多小船在 640×640 下只有十几个像素。实践经验是把推理尺寸定在 1280训练尺寸可以先用 640 跑通流程再切到 1280 精调。--batch-size 8是单卡 A100 或 3090 级别下的值如果你的卡是 24G 显存以下建议降到 4配合梯度累积一样能稳定训练。--weights weights/yolov7_training.pt是 COCO 预训练权重。这里有个重要选择要不要用预训练权重。我的建议是必须用因为 HRSC2016 的训练集只有 400 多张图从零训练 backbone 会严重过拟合。COCO 预训练模型虽然没见过遥感图但它学到的底层特征边缘、纹理、颜色分布是通用的迁移到遥感场景时相当于只微调高层语义。下面是针对船舶检测场景调整过的主要超参数表这份配置可以直接抄参数名默认值船舶场景推荐值说明lr00.010.003样本量少初始学习率要降lrf0.10.1最终学习率倍率momentum0.9370.937不变weight_decay0.00050.0005不变warmup_epochs3.05.0遥感数据分布差异大预热要长warmup_momentum0.80.8不变warmup_bias_lr0.10.1不变cls_pw1.00.8类别不均衡时降低正样本权重obj_pw1.01.0对象损失权重anchor_t4.05.0放宽 anchor 匹配阈值覆盖长宽比极端目标lr0从 0.01 降到 0.003 的原因很简单HRSC2016 训练图像只有 436 张高学习率会让 loss 在刚开始几个 epoch 就震荡甚至发散。遥感图像的特征分布和自然图像差异大warmup 从 3 个 epoch 延长到 5 个让模型先稳定适应新的数据分布。anchor_t从 4 提升到 5 意味着允许更大长宽比的目标匹配到预设 anchor这对细长货轮是有利的但副作用是会增加一些低质量匹配如果发现 mAP 下降优先回调这个值而不是动学习率。4.2 模型配置文件里必须改的三个位置models/yolov7-ship.yaml是模型结构配置官方默认的 yolov7.yaml 用在船舶场景时需要改三处。第一处是anchors前面提到要运行kmeans_anchor.py重新聚类。运行方式python tools/kmeans_anchor.py \ --data data/hrsc2016/train.txt \ --img_size 1280 \ --num_anchors 9 \ --output data/ship_anchors.txt聚类脚本读取训练集标签的宽高用 IoU 距离做 K-Means。针对 HRSC2016 聚类出来的九组 anchor 形状通常是几组接近正方形的用于小船几组w/h接近 5~8 的用于货轮。把生成的结果替换进 yaml 文件的anchors字段。第二处是nc字段必须和data/ship.yaml里的类别数一致。如果你用的是 2 类这里就写 2。第三处是depth_multiple和width_multiple。官方 YOLOv7 的倍率是 1.0如果你的显存紧张可以降到 0.67 和 0.75 构建一个轻量版。但注意船舶检测吃小目标召回降宽度对 mAP 的影响比降深度更明显建议优先降 depth。4.3 训练日志里看什么不是只看 mAP训练启动后每 10 个 batch 会输出一条日志格式是Epoch gpu_mem box_loss obj_loss cls_loss Instances Size 1/100 6.37G 0.0523 0.0412 0.00321 42 1280box_loss降得很慢是正常的因为船舶的框长宽比分布极不均匀回归头的学习难度大于通用目标。你需要盯的是obj_loss——它收敛得太快反而不是好事说明模型可能走了捷径比如把「有船的区域整体预测为前景」而不是精确定位船。一个常见的现象是cls_loss在 2 类模式下几乎不下降这是正常的因为 2 类之间的特征差异足够大。每轮 epoch 结束后会打印验证集的 mAP0.5 和 mAP0.5:0.95。船舶检测里我更关注 mAP0.5:0.95因为这个指标对框的定位质量更敏感。如果出现 mAP0.5 很高但 mAP0.5:0.95 很低的情况说明模型「找得到船但框不准」优先检查 anchor 聚类质量而不是网络结构。训练过程中建议每 20 个 epoch 用验证集选一批「困难样本」输出预测图。方法是在detect.py里加一个--save-txt参数定期人工看预测结果。我一般只看两类图港口密集停靠区和远海单船场景。前者看漏检后者看误检——远海图里经常出现的白色浪花本身就是天然干扰。5. 避坑指南船舶检测场景下最常见的六类问题5.1 类别不均衡货船和渔船样本量悬殊导致模型偏食现象训练完成后渔船类别的 Recall 能达到 0.85 以上而货船只有 0.4 左右尤其在远海区域漏检严重。原因HRSC2016 里渔业船队出镜率远高于远洋货轮。436 张训练图里渔船目标约 1500 个大型货轮只有 200 多个比例接近 8:1。模型自然把更多容量分配给了高频类别货轮这个低频类别的特征学习不充分。解决先做类别归并把 25 类压缩为 2 类「ship / fishing」再考虑过采样。如果不允许归并可以在数据加载阶段对含货轮的图像做重复采样。我实际从 epoch 30 开始手动观察每类别的 AP如果货轮 AP 停止增长而渔船仍在上升就把cls_pw从 1.0 调到 0.8让分类损失对高频类别稍微「钝化」一些。5.2 旋转框当水平框用mAP 虚高但实测翻车现象验证集 mAP0.5 达到 0.78但在实际业务图像上数错严重。两张并排靠岸的船预测框连成一个或者一个预测框同时包了两条船。原因HRSC2016 的旋转框在转成水平框时如果直接用外接矩形两个靠岸船只的外接矩形大面积重叠NMS 会把它们合并成一个目标。验证集 mAP 高是因为验证时用的是训练时同样方法生成的水平框Ground Truth 本身就被「膨胀」过。解决转换时改用最小外接矩形并接受目标边缘有少量截断。更偏工程的方案是训练两阶段先用水平框训练出粗检模型再在粗检结果的 ROI 上跑一个旋转框分类头。资源包配套的转换脚本两种模式都支持--mode min_rect切到最小外接矩形模式。5.3 小目标召回率低输入尺寸和下采样倍率不匹配现象15 像素以下的小船在验证集上几乎全部漏检即使它们肉眼清晰可辨。原因YOLOv7 的 P3 特征图下采样 8 倍输入 640×640 时P3 层每个 grid cell 对应 8×8 像素区域。15 像素的船在 P3 特征图上只占 2×2 个格子比 anchor 最小尺度还小匹配阶段就被过滤掉了。解决把训练和推理的img参数提升到 1280让 15 像素的船在特征图上占据更多响应区域。如果显存不够保持 640 训练但推理时用 1280配合 TTA测试时增强里的多尺度预测对召回率提升明显。注意推理尺寸和训练尺寸差距不要超过两倍否则特征分布偏移严重。5.4 靠岸船只和码头结构背景误检现象验证集上 Precision 不高码头上的集装箱、岸桥被预测为船但看 loss 并没有异常。原因码头区域颜色纹理复杂且集装箱的颜色分布和船舱甲板高度相似。遥感图像里船与码头之间没有清晰的语义边界模型学到的是「密集矩形纹理区域 船」。解决数据增强里关掉shear和perspective这两个增强会改变目标的矩形外观让模型更难学具体形状。同时增加一个负样本类别「port」在训练数据里标注码头区域。更省事的替代方案是在后处理里按长宽比过滤——船的长宽比通常大于 1.5把接近 1:1 的矩形预测直接丢弃能滤掉大量码头误检。5.5 显存不足时的 batch 与梯度累积设置现象12G 显存的卡跑 1280 分辨率时batch-size 只能设为 2模型训练极不稳定loss 波动很大。原因batch-size 过小时 BatchNorm 统计量不稳定每一批的均值和方差抖动剧烈。YOLOv7 的 BN 层数量多对 batch 大小高度敏感。解决用梯度累积模拟大 batch。--batch-size 2 --accumulate 4等效于用 8 的 batch只是 BN 仍然按 2 计算。如果 BN 统计量仍然抖动把--batch-size 4 --accumulate 2并用 640 分辨率先训练 50 个 epoch再切到 1280 精调 20 个 epoch。5.6 验证集里出现了训练图片现象训练到后期发现验证集 mAP 和训练集 mAP 差距小于 1%但换一张图推理效果很差。原因HRSC2016 同一目标比如同一艘停在港口的船在不同采集时间出现在不同图像中。官方划分是按场景划分的但同一港口的图像很可能同时进入训练集和验证集造成数据泄漏。解决跑完第一轮实验后写个脚本对训练集和验证集图像做感知哈希相似度比对把相似度超过 0.7 的验证图剔除。方法是用 OpenCV 计算每一对图像的 pHash具体做法是缩放到 32×32、转灰度、做 DCT 后比较前 64 个系数的差异。整个过程不复杂但很实际。6. 推理部署导出 ONNX 与 TensorRT 下的置信度调参训练完成后把模型导出成 ONNX 再进行 TensorRT 加速这是工程落地的标准路径。YOLOv7 的导出命令如下python export.py \ --weights runs/train/exp/weights/best.pt \ --img 1280 \ --batch 1 \ --simplify \ --include onnx \ --dynamic导出的 ONNX 模型接着用 TensorRT 的trtexec转 engine。这里一个关键参数是--fp16。航拍图的动态范围大白浪反光区域和阴影区域亮度差异显著fp16 可能会让那些处于亮度中间值的模糊小船漏检。我的做法是先跑 fp32 版本的推理确认 mAP 没有明显损失后再切 fp16。如果你部署的边缘设备只支持 int8那就要先准备校准数据集——从验证集里抽 200 张图标注好类别和框校准后对比 int8 与 fp32 的 mAP 差值超过 2% 就建议放弃 int8。推理时的置信度阈值也需要特别调。YOLOv7 默认conf_thres0.25、iou_thres0.45但这个值在船舶场景下偏高因为遥感图上大量目标很小预测置信度天然偏低。我实际跑下来conf_thres0.15、iou_thres0.5更合理。你可以先 0.25 跑一遍统计所有预测框的置信度分布再看哪个阈值点 Precision-Recall 曲线最平衡。# 用置信度分布辅助选阈值 import numpy as np # 从 detect 的 --save-txt 输出解析 conf confs [] with open(runs/detect/exp/labels/xxx.txt) as f: for line in f: parts line.strip().split() confs.append(float(parts[4])) confs np.array(confs) # 观察 0.1-0.3 区间内的目标分布 hist, edges np.histogram(confs, bins20, range(0, 1)) print(hist)如果 0.1~0.3 区间内堆积了大量目标说明模型的平均置信度偏低阈值要下调如果 0.1 以下还有不少目标那问题不在阈值而在训练阶段——你该回头检查小目标的特征学习。验证的时候我习惯用混淆矩阵而不是只看 mAP从混淆矩阵里能看到哪些类别之间互相打架比如「fishing」经常被错分成「ship」就说明这两类的类间距离不够得回到数据层面补充边界样本。这套资源我前后跑过三轮实验最值钱的经验是船舶检测的瓶颈永远在数据处理而不是模型结构。YOLOv7 作为检测器足够强HRSC2016 作为训练数据也够用但数据划分是否干净、转换格式是否正确、增强参数是否适配这些环节每差一个档次最终 mAP 就差三到五个点。从那以后我每次做遥感目标检测都强制先跑一遍数据可视化——把转换后的标注框画回原图肉眼确认每条船都被框对方向再进训练环节。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询