ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

MMDetection测试与可视化全流程解析:从配置到调参实践

MMDetection测试与可视化全流程解析:从配置到调参实践 1. 测试与可视化的整体思路MMDetection这个开源目标检测工具箱大家在训练上投入的精力往往最多但真正到了模型测试和结果可视化这一步反倒容易草草了事。其实测试和可视化是闭环里最关键的一环模型在验证集上跑出什么指标、在真实场景里到底长什么样全靠这一步来回答。如果只盯着训练损失下降却不知道预测框画出来是什么效果那前面的调参工作基本属于盲人摸象。很多同学第一次接触MMDetection的test流程时第一反应是直接跑tools/test.py看到打印出一串mAP数值就觉得完事了。这里我想先强调一个容易被忽略的前提测试阶段和训练阶段的数据处理方式是有差异的。MMDetection在训练时为了增强鲁棒性会做随机翻转、随机尺度变化、马赛克之类的操作而测试时这些都应该关掉保留原始分辨率或者只做固定尺度的缩放这样才能真实反映模型在干净数据上的表现。好在MMDetection的设计已经内置了pipeline的区分train_pipeline和test_pipeline各自独立配置但从思路上理解这个差异能帮你在自定义数据时少踩坑。另外一个核心思路是可视化要放在指标之前做。我第一次跑一个新数据集时习惯先输出几张可视化结果图粗略检查预测框的坐标是否贴合目标、类别标签是否正确然后再去看mAP、AR这些数字。因为指标是聚合的损失它可以告诉你整体好还是坏但不会告诉你具体错在哪。比如mAP偏低可能是定位偏差、分类混淆、重复检测、小目标漏检四种完全不同的病根治疗方案完全不同。可视化能直接定位病灶这是任何指标都替代不了的。测试和可视化适合谁来做不光是做算法研究的同学做工程落地的朋友更需要。经常有做巡检、安防、工业质检的工程师朋友跟我聊说离线指标挺好但部署到现场效果不稳定。这种问题十有八九能从测试可视化里看出端倪——场景光照变化、遮挡、目标尺度分布和训练集不一致这些在画框图上一目了然。所以这篇文章我会从配置、命令行、原理解析、常见坑这几个角度把这套流程完整拆开给你一份可以直接参考的实操方案。2. 测试阶段的核心配置解析2.1 test_pipeline的数据处理链路MMDetection的测试流程本质上也是通过DataLoader驱动把测试数据从硬盘上的图片变成可以直接喂进模型的张量。这条链路里的test_pipeline决定了模型推理时看到的数据长什么样直接关系到预测结果的可靠性。先看一个常见的test_pipeline长什么样。以RetinaNet或Faster R-CNN这类检测模型为例配置文件里的测试数据处理单元通常由LoadImageFromFile、Resize、LoadAnnotations、PackDetInputs这几个组件组成。LoadImageFromFile负责把图片读到内存并解码成数组Resize负责把图片缩放到模型输入尺寸LoadAnnotations负责把标注文件通常是COCO格式的JSON解析成模型需要的格式PackDetInputs负责把图像数据和标注信息打包成一个统一的数据结构DetDataSample供模型推理时消费。这里最需要关注的是Resize的策略。MMDetection在测试推理时为了保证不同尺寸图片能组成一个batch会先把所有图片缩放到同一个尺度。常见的做法是保持长宽比缩放让短边固定为一个值比如img_scale(1333, 800)表示长边不超过1333、短边固定为800。如果测试时你想保持原始分辨率可以把img_scale设得足够大也可以直接让Resize不做缩放但那样做batch内图片尺寸不一致MMDetection的collate函数需要额外处理实际中不推荐。我的经验是按训练时用的img_scale来设定测试尺度这样数据分布最接近训练状态指标参考价值最高。2.2 test_dataloader与test_evaluator的配置逻辑在MMDetection 3.x版本中测试配置被拆分成test_dataloader、test_evaluator、test_cfg三块。test_dataloader里有batch_size、num_workers、dataset和sampler四个关键子配置。batch_size要结合显存来定测试阶段不需要做反向传播梯度计算关闭显存占用比训练小很多通常可以设成训练时的一倍或两倍。num_workers决定数据加载线程数建议在Linux下用nproc命令看看物理核数一般设为8到12比较稳妥设太高反而可能引起进程切换开销过大。test_evaluator指定用哪种指标评测方式最常用的是CocoMetric。这个配置里核心参数是ann_file标注文件路径、metric比如bbox或segm、classwise是否输出每个类别独立的AP值。我习惯把classwiseTrue打开因为只看整体mAP会掩盖类别不均衡的问题。比如一个数据集里猫和狗的数量比例是10比1整体mAP可能还凑合但狗的AP往往惨不忍睹通过classwise能快速定位到哪个类别拖了后腿。test_cfg里还有一个容易被忽略的参数就是推理时的det_threshold之类的后处理配置。测试阶段模型会输出大量候选框一般通过NMS非极大值抑制筛选之后再用score_thr比如0.05或0.01过滤掉置信度过低的框。这里要说明一个细节评测指标计算时mAP本身就兼顾了不同置信度阈值下的精度和召回率所以score_thr设低一点如0.01不会漏报评测结果更接近模型的真实能力。如果你设成0.5mAP会有虚高的倾向因为相当于人为砍掉了大量低置信度检测让precision看起来很漂亮。做可视化时却恰恰相反建议把score_thr调高到0.3或0.5只看高置信度的预测图面更干净、说服力更强。下面给一份精简的测试配置片段方便你对照检查自己的配置文件# configs/_base_/datasets/coco_detection.py test_dataloader dict( batch_size2, num_workers4, persistent_workersTrue, samplerdict(typeDefaultSampler, shuffleFalse), datasetdict( typeCocoDataset, data_rootdata/coco/, ann_fileannotations/instances_val2017.json, data_prefixdict(imgval2017/), pipeline[ dict(typeLoadImageFromFile), dict(typeResize, scale(1333, 800), keep_ratioTrue), dict(typeLoadAnnotations, with_bboxTrue), dict(typePackDetInputs, meta_keys(img_id, img_path, ori_shape, img_shape, scale_factor)) ])) test_evaluator dict( typeCocoMetric, ann_filedata/coco/annotations/instances_val2017.json, metricbbox, classwiseTrue, format_onlyFalse) test_cfg dict(typeTestLoop, det_threshold0.01)注意PackDetInputs里meta_keys这个参数它决定了哪些原始信息会被保留在数据样本中img_shape、scale_factor是可视化时反向映射坐标必须的信息千万别省。如果你自定义了可视化脚本需要用到原始图像路径或尺寸记得在这里补充对应的meta_key。3. 测试命令的完整实操流程3.1 基于训练好的权重跑测试训练完模型或者拿到一个预训练权重测试是第一步。MMDetection标准的测试命令长这样python tools/test.py \ configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py \ work_dirs/faster-rcnn_r50_fpn_1x_coco/epoch_12.pth \ --work-dir work_dirs/faster-rcnn_r50_fpn_1x_coco/test_epoch12 \ --cfg-options test_evaluator.classwiseTrue \ --show-dir work_dirs/faster-rcnn_r50_fpn_1x_coco/vis_results三个位置参数要记牢第一个是配置文件路径第二个是权重文件路径第三个可选是日志和评测结果的输出目录。--work-dir用来指定测试日志、评测pkl文件的落盘位置建议每次测试都单独设置一个子目录避免和训练日志混在一起。--show-dir就是输出可视化图片的目录只要指定了这个参数工具脚本会在跑完指标评测后自动把所有测试图片都画上预测框保存下来。--cfg-options可以临时覆盖配置里任何参数不需要改配置文件本身适合快速验证某个参数的影响比如把classwise打开。在跑测试之前打开配置文件确认一下model.test_cfg的配置。以Faster R-CNN为例test_cfg里通常会有nms的iou_threshold默认0.5和max_per_img默认100。max_per_img决定了每张图最终保留的检测框上限设太小会丢失部分目标设太大会让结果包含大量低质量框可视化时画面也乱100是精度和可读性的平衡点。测试过程跑完后终端会打印类似这样的内容coco/bbox_mAP: 0.376 coco/bbox_mAP_50: 0.584 coco/bbox_mAP_75: 0.405 coco/bbox_mAP_s: 0.209 coco/bbox_mAP_m: 0.417 coco/bbox_mAP_l: 0.493这些指标含义得先说透因为很多人只看一个mAP就下结论。mAP_50表示IoU阈值0.5下的平均精度mAP_75是IoU阈值0.75下的平均精度后者更严格对定位精度要求更高。mAP_s/m/l分别是小、中、大目标的平均精度COCO数据集的定义是小目标面积小于32x32大目标面积大于96x96。如果你的项目场景里小目标居多就得重点盯mAP_s这个指标比整体mAP更能反映实际效果。3.2 用测试结果pkl做更灵活的分析如果不指定--show-dir工具脚本默认会生成一个results开头的.pkl文件里面保存了模型在测试集上每张图的全部预测信息包括框坐标、置信度分数、类别ID。这个文件是后续做各种自定义分析的“原材料”我强烈建议每次测试都保留它。比如你在测试脚本里加上--out work_dirs/test_result.pkl参数就能把预测结果整个dump出来。拿到pkl文件后有几个很实用的分析方向。第一个是看置信度分布把每张图的预测框按置信度从高到低排列统计不同置信度区间里正确检测和误检的数量可以帮你判断模型是“犹豫型”还是“自信型”。第二个是做PR曲线分析虽然mAP已经聚合了PR曲线的面积但PR曲线的形状能告诉你模型更擅长保精度还是保召回对业务上线时设置置信度阈值的参考价值很大。第三个是分析错误类型比如用TIDE之类的工具库把检测错误分类成定位误差、分类混淆、重复检测、背景误检等几类有针对性地调优。写一段简单代码看看怎么读取和分析pkl文件import pickle with open(work_dirs/test_result.pkl, rb) as f: results pickle.load(f) # MMDetection 3.x中results是DetDataSample列表 for sample in results[:5]: # 从gt_instances取真实框从pred_instances取预测框 gt_bboxes sample.gt_instances.bboxes.tolist() pred_bboxes sample.pred_instances.bboxes.tolist() pred_scores sample.pred_instances.scores.tolist() print(gt num:, len(gt_bboxes), pred num:, len(pred_bboxes)) print(max score:, max(pred_scores) if pred_scores else 0)这种脚本写得越早越好因为后续换backbone、调anchor、调loss都需要用同一套分析脚本对比前后差异有了脚本就可以做到量化对比而不是谁训完谁说了算。我曾经把五六个版本的pkl合并在一起做可视化对比一眼就看出来某个版本在特定类别上召回率提升很多但在遮挡场景下误检也增多这种Trade-off只靠看单独一个mAP根本发现不了。3.3 带上可视化一起跑--show-dir的细节--show-dir参数是MMDetection 3.x内置的可视化入口。指定它之后你不需要额外写绘图代码测试脚本会在每个epoch的评估阶段结束后遍历测试集图片把预测框和真实框画到原图上保存到指定目录。对着一张图你能直观看到两个方面预测框通常用蓝色或绿色和真实框通常用红色存在的错检、漏检都能看出来。默认只画预测框如果你想把真实框一起画出来做对比需要确保test_pipeline里包含LoadAnnotations并且在配置文件的visualizer里设置draw_gtTrue。可视化结果的文件名默认是原图文件名.jpg。如果你的测试图片很多建议按类别或场景建子目录否则几百上千张图堆在一起想找某一特定场景非常麻烦。另外建议在--cfg-options里加上visualizer.save_dirwork_dirs/vis_xxx把可视化目录独立出来不要和pkl文件混在一起。有一点值得单独提醒test.py的可视化是边推理边画图全程不中断但这种方式在高分辨率图片上会明显拖慢测试速度因为画图本身也是IO操作。如果你只是需要跑指标不一定要可视化就别开--show-dir如果必须要可视化建议用小一点的测试集子集做展示比如随机抽200张效果一样的却能省不少时间。后续我会讲怎么优雅地做这种抽样可视化。4. 灵活的可视化方案与手工可视化实践4.1 使用内置工具脚本快速出图除了用--show-dirMMDetection还提供了一个专门的可视化脚本tools/analysis_tools/browse_dataset.py虽然它最初设计是给训练前检查数据标注用的但也能用来查看带预测框的结果——如果你把模型权重挂载上去的话。大部分情况下--show-dir已经够用了。内置可视化的最大好处是零代码缺点是定制能力弱。比如你想把置信度分数直接显示在框边上默认画布不展示想按类别用不同颜色区分默认是随机颜色想只显示置信度大于0.5的框默认是全部显示。遇到这些需求就得自己写脚本了。4.2 手工可视化脚本的完整实现我平时用得最多的可视化方案还是基于DetDataSample结构自己写绘图脚本。这样可控性最强想调什么调什么。下面给出一份可以直接借鉴的脚本结合了pkl结果和原图路径进行可视化import os import pickle import cv2 import numpy as np from mmdet.visualization import DetLocalVisualizer with open(work_dirs/test_result.pkl, rb) as f: results pickle.load(f) # 假设测试图片在test_imgs目录 image_root data/coco/val2017 save_root work_dirs/vis_custom os.makedirs(save_root, exist_okTrue) for sample in results: img_path sample.metainfo[img_path] image cv2.imread(img_path) pred_instances sample.pred_instances # 过滤低置信度框可视化时只留下0.3以上的 keep pred_instances.scores 0.3 pred_instances pred_instances[keep] # 调用mmdet内置可视化器的draw方法这里传入样本会绘制gt和pred visualizer DetLocalVisualizer() visualizer.dataset_meta {classes: (cat, dog)} visualizer.add_datasample( result, image, sample, draw_gtTrue, draw_predTrue, showFalse, wait_time0, out_fileos.path.join(save_root, os.path.basename(img_path)))这个脚本里有两个关键地方。第一个sample.pred_instances是一个InstanceData对象支持布尔索引scores 0.3直接返回InstanceData的切片非常方便想过滤哪个字段都行。第二个visualizer.add_datasample接口负责真正画图draw_gtTrue时会把标注框也画出来out_file指定输出路径不指定就会直接弹窗显示在服务器上运行没有GUI的话就等着报错吧所以记得一定要设out_file。你可能会问手动画图为什么不用OpenCV画框因为MMDetection的DetLocalVisualizer已经实现了类别颜色管理、置信度文本、图例等复杂功能自己用OpenCV从零画代码量至少翻三倍而且边界框粗细、字体大小这些细节调试起来也费劲。除非你要做极度定制化的效果比如视频流实时预览、在非标准图像格式上绘制否则不建议重复造轮子。4.3 视频与多图对比的可视化思路如果你测试的对象是视频逐帧保存成图片再合成视频是最蠢但最稳定的做法。效率高一点的方法是直接改造测试脚本的推理循环把每一帧的预测结果传给视频写入器。MMDetection提供了inference_detector接口可以逐帧推理配合OpenCV的VideoWriter就能把预测框实时画到视频帧上并输出成MP4。下面是用inference_detector做单张图片推理的极简示例from mmdet.apis import init_detector, inference_detector import mmcv config_file configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py checkpoint_file work_dirs/epoch_12.pth model init_detector(config_file, checkpoint_file, devicecuda:0) img test.jpg result inference_detector(model, img) # result是DetDataSample可以直接可视化或检查框这个接口对工程集成特别有用比如接到摄像头实时流、嵌入到Flask服务里做API推理都可以基于它来扩展。多图对比分析时把同一张图在不同模型配置下的预测结果拼成一张画布左半部分是模型A的框右半部分是模型B的框能直观看出哪个模型定位更准。我常用np.concatenate把多张可视化图横向拼接然后用一个标题栏标注每个子图对应的配置名这样对比效率极高。4.4 可视化结果如何指导调参讲了这么多操作层面的东西落到最终用途上可视化结果到底怎么指导调参。这里我总结几个高频场景。第一如果预测框普遍偏大或偏小说明anchor size设置和数据集目标尺度不匹配。训练前先用可视化脚本检查数据集的标注框尺寸分布如果目标普遍较小而模型默认anchor是适合COCO的尺度就要在小尺度anchor上增密。第二如果同类目标距离极近导致漏检或误检NMS的iou_threshold需要调低让重复框更容易被抑制。第三如果预测框整体偏移比如所有框都往下偏大概率是训练时数据标注有系统性误差可视化能帮你一眼看出这种偏差。第四如果高置信度预测框经常落在背景区域说明模型学到了纹理特征而非语义特征可能需要换更强的backbone或者增加上下文信息。这些调参结论如果不做可视化根本得不出来。所以我要强调这一条理念每跑一次测试至少抽看50张可视化结果图然后再看指标。别看40张就说够了因为错检和漏检往往集中在长尾分布的那部分目标上看得越多样品越容易碰到。5. 测试阶段常用参数速查表与效率提示把测试环节涉及的常用参数和对应建议整理一张表方便你直接对照使用。其中有一些参数是从工程效率角度给出的经验值请结合自己的硬件条件合理调整。参数项常见取值建议与说明test_dataloader.batch_size1 ~ 8显存不够时优先调小因为测试不走反向传播Faster R-CNN系列2~4是稳妥起点test_dataloader.num_workers4 ~ 12建议按CPU物理核数的一半设置设太高反而增加调度开销test_evaluator.metricbbox / segm检测任务用bbox实例分割任务用segmtest_cfg.det_threshold0.01 ~ 0.05评测时用低阈值保证召回率统计完整score_thr可视化0.3 ~ 0.5只在可视化或部署时使用评测时不用高阈值--show-dir自定义目录只跑指标时不要设置避免无谓IO--out自定义.pkl路径建议每次测试都保存方便后续自定义分析接着说说测试效率的问题。测试阶段最耗时的点其实是数据加载和预处理GPU本身闲置率往往很高。有人觉得GPU显存大干脆batch_size设成16猛干结果发现速度提升不是线性的瓶颈在CPU端数据预处理和IO。想提升测试吞吐优先加num_workers再考虑批量大小。如果图片分辨率很大预处理里的Resize会成为一个计算热点测试时可以考虑用一个更小的img_scale比如(1000, 600)前提是你得明白这会降低小目标检测精度必须做对比验证后再确定。如果你的测试集是那种大而全的原始数据集几万张图全跑一遍太耗时可以用--cfg-options临时构造一个抽样子集比如用tools/analysis_tools/analyze_logs.py的脚本或mmcv的抽样工具随机取500张做快速验证。我在实际项目中经常先跑500张验证流程没问题再全量跑能省下不少来回调试的时间。6. 测试可视化常见问题与排查技巧实录6.1 预测框置信度全是0或者没有预测输出这个现象通常和test_cfg里的score_thr设置无关更可能是数据预处理出了问题。排查步骤从下往上走先看看测试图片能否正常加载再检查test_pipeline里的Resize是否把大图缩得太狠导致目标在缩放后小于2像素最后检查模型输入的batch_inputs形状是不是正常。我在自定义数据集上踩过这个坑原因是LoadAnnotations里的with_bbox在测试时依然为True而测试标注文件路径不存在导致数据加载静默失败预测结果自然为空。解决方法是确保测试集标注文件始终可用即使零标注也要提供一个空的JSON别让数据加载报错吞掉。6.2 可视化结果里框和原图对不上位置这是最常见也最容易让人抓狂的坑。框画出来和物体位置错位几像素或几十像素通常不是模型问题而是绘制时没有用原图坐标。MMDetection在推理时会把图片缩放或加padding预测框坐标是基于缩放后的图算的。如果你直接从pred_instances.bboxes里取值然后画到原图上框就会偏移。正确做法是乘回scale_factor或者用DetLocalVisualizer的add_datasample接口它会自动处理坐标还原。我建议在配置PackDetInputs时保留ori_shape和scale_factor元信息这样任何时候想手动绘图都有足够信息做反变换。如果你在用inference_detector接口result里自带这些元信息直接用visualizer渲染就行不需要手动换算。6.3 尺寸不匹配单张测试没问题但batch测试崩溃这个问题大多是test_pipeline没有设置统一的Resize尺度或者keep_ratioTrue导致batch内图片尺寸不一致触碰了batch维度校验的限制。MMDetection 3.x对batch内张量尺寸一致性要求很严格如果尺寸不一致会报invalid argument或size mismatch错误。解决方法是确保所有测试图片最终缩放到完全相同的尺寸比如固定(1333, 800)并且设置keep_ratioTrue这样batch内尺寸仍然可能不一致所以更好的做法是用统一的scale但这样会牺牲原始比例信息。实际中一般不会对测试集做严格统一因为MMDetection的分组采样器会尽量把尺寸接近的图片分到同一个batch但如果你自己改了数据加载方式就要特别小心这个问题。6.4 显存不足OOM怎么办测试阶段OOM可能出现在两个地方。第一个是test_dataloader的batch_size设置太大FP16加速也没开很容易爆显存。第二个是高分辨率图片做全图推理时特征图占用过大。常见解决办法有四种把batch_size调成1使用--cfg-options model.data_preprocessor.batch_augmentsNone关闭一些数据增强相关操作如果配置里有尝试开启--amp混合精度推理或者给大的测试图做TTATest-Time Augmention之前先切图避免一次性把整张大图塞进GPU。显存优化是一个越早做收益越大的事。建议测试之前先用nvidia-smi看看GPU显存剩余量粗略估算一下当前模型大小x batch_size的显存需求。如果还不够用torch.cuda.max_memory_allocated()峰值统计接口判断瓶颈是在backbone还是在检测头后处理上。6.5 可视化结果过多或过少可视化图太多时筛选的策略很关键。只保存置信度最高的前K个检测这是一个办法按类别过滤只看你关心的类别这样更精准。漏检占比高的图是最有价值的单独抽出来分析误检多的图也有参考意义。我的建议是把可视化结果按预测框数量排序多框的、零框的、高置信度错检的分别归类存放这样分析效率会高很多。如果你介意人工一个个翻图还可以写脚本统计每张图的错检率只把错检率高于某个阈值的图保存下来减少人工工作量。6.6 测试结果与训练时的验证集结果不一致有朋友遇到过这样的怪事训练日志里每个epoch的验证mAP有0.5但单独用tools/test.py跑出来的结果只有0.4。这个问题的根源通常是两个评估流程的数据处理不完全一致。一种可能是训练过程里的验证阶段用了val_pipeline而tools/test.py用的是test_pipeline两者如果配置不同比如Resize尺度、是否带TTA指标自然会不一样。另一种可能是测试时使用了不同的权重文件最常见的是best_coco_bbox_mAP_epoch和latest的混淆——前者保存的是验证集上指标最好的权重后者是随机初始化的权重如果你用的是--auto-resume之类还有可能加载到不完整权重。解决的关键是每次测试都把配置和权重路径记录下来尤其是用bash脚本批量跑测试时别搞混。7. 将测试与可视化嵌入日常开发流的建议很多同学把测试和可视化当作一个阶段性的动作训完了跑一次就完事。但我更建议把它做成一个可重复的日常流程。每次调整数据增强、修改模型结构、更换训练策略之后都跑一次小规模测试和可视化与前一个版本对比。这个迭代回路看起来增加了工作量实际能帮你尽早发现问题。具体怎么嵌进日常工作我的习惯是写一个验证脚本输入是配置文件路径和权重路径输出是一份自动生成的对比报告包含mAP、各类别AP、PR曲线以及抽样可视化图。这样只要跑一条命令就能拿到全部信息不需要每次手动进终端敲一串工具命令再打开目录找图。sh scripts/validate_and_vis.sh \ configs/my_faster_rcnn.py \ work_dirs/best.pth \ work_dirs/exp_compare脚本内部逻辑不算复杂调用tools/test.py跑指标和结果pkl再用一段Python脚本读取pkl抽50张图做可视化最后用pandas汇总指标并画柱状图。整个过程跑完大概需要几分钟取决于测试集大小但省下来的“改配置-重新训练-手工比较”时间往往是以天来计的。最后提醒一个容易被忽视的点可视化保存的图片是给人类看的不是给模型看的。你在调参时看可视化结果也要带上业务视角。比如做工业质检漏检比误检严重得多那看到低置信度漏检的图应该优先考虑降低置信度阈值而不是调整NMS做安防巡检误检率太高会烦死值班人员那就要想办法提高正样本质量、增加难负样本挖掘。同一张可视化图在不同业务目标下得出的调参方向可能是相反的。8. 结尾再聊两句个人心得做检测项目几年下来我最大的感受是模型训练只是“炼丹”测试和可视化才是“验丹”。很多人炼丹炼得很投入验丹却马虎得很只看一个mAP就交差。但真正把系统推到实际场景里最容易暴露问题的恰恰是那些可视化里看起来“不够自然”的预测结果——一个高置信度的错误框、一个被漏检的小目标、一条偏离的边界这些才是模型能力边界的真实投影。讲到底测试可视化和指标评测是互补的指标告诉你“做到什么程度”可视化告诉你“为什么是这个程度”。两者一起用模型在什么场景下能打、在什么场景下会翻车基本就心里有数了。最后分享一个小建议跑测试时与其等到训完再看不如训练到中途就经常拿最新权重做小规模可视化抽查。批量训练动辄几十个小时中途发现模型存在系统性误差比如类别混淆严重、或者目标边界定位整体偏移早发现就能早停掉重训或者调整方案比熬到最后一秒钟看到结果失望要省钱省心得多。反正可视化的成本很低就是几张图的事但信息量往往比一个先进指标更大。这套“半路验丹”的习惯我一直用到现在实战里帮我在好几次实验中提前发现了一开始没注意到的问题推荐你也试试。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表