ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

痤疮图像识别数据集构建与YOLOv8目标检测实践指南

2026/9/27 1:26:38 拓冰建站 浏览量
痤疮图像识别数据集构建与YOLOv8目标检测实践指南 简介YOLOv8框架下的痤疮图像识别数据集面向计算机视觉与医疗辅助诊断场景服务于痤疮识别模型的训练、验证与性能评估。数据由图像文件与YOLOv8格式标签文件构成标签包含定位框与类别标识可用于区分不同阶段或类型的痤疮病灶配合“ignore.txt”文件可在训练时排除部分样本帮助模型聚焦关键特征。资源共2000个文件以927个txt标签、738个jpg图像为主辅以327个zbak备份、yaml配置文件与pt预训练权重整体约39.37MB结构清晰方便直接接入YOLOv8训练流程。已有75人学习适合目标检测初学者、皮肤病变识别研究者及医疗AI开发人员参考。借助该数据集可完成数据划分、图像预处理、模型训练与调优全流程并能集成至辅助诊断系统提升痤疮筛查效率。资源来源于网络分享仅用于学习交流。1. 痤疮图像识别数据集为什么比模型结构更决定成败同样是 YOLOv8有人拿公开人脸数据集三天跑出 0.9 的 mAP有人面对一万张痤疮照片折腾一个月精度还不到 0.5。差别不在网络结构而在痤疮图像识别数据集本身和背后的标注规范。痤疮病灶小、密集、类别边界模糊一张 640×640 的输入图里可能挤着几十个皮损框怎么画、类别怎么分、光照怎么统一直接决定 YOLOv8 能学到什么。这篇笔记按我自己做皮肤影像识别的流程把类别定义、标注规范、数据清洗增强、训练验证的完整路径讲透适合正在用 YOLOv8 做痤疮识别数据集的工程师、研究生以及准备把这类小目标检测落到诊室场景的产品团队。2. 从临床分级到检测框痤疮类别体系与标注规范怎么定做痤疮检测之前先回答一个问题模型到底要输出什么。是有没有痘的二分类还是这张脸上有多少粉刺、多少脓疱的实例级检测。二分类对临床没有价值皮肤科医生自己一眼就能判断有没有痤疮。真正有用的是皮损计数和分级这要求把每个皮损框出来并分类所以数据集必须按实例级检测来建设。类别体系不能拍脑袋得跟临床形态学对齐标注员拿到照片才知道边界在哪。2.1 六类皮损的定义粉刺、丘疹、脓疱、结节、囊肿怎么分临床把痤疮皮损分成非炎性粉刺和炎性丘疹、脓疱、结节、囊肿两大类。IGA 和 Pillsbury 分级是给整体严重度打分的不产生实例框检测任务要自己定实例级类别。我一般用六类方案覆盖从轻到重的完整谱系。类别影像形态判定要点建议框法blackhead 黑头毛孔扩大中心黑色或褐色角质栓黑点与周围皮肤边界明确框住毛孔外缘whitehead 白头肤色或白色小隆起无明显开口边界浅主要靠高光判断框住整个隆起范围papule 丘疹红色实性隆起直径小于 5mm红色加隆起无脓头框住整个红斑范围pustule 脓疱红色隆起顶部有白色脓头脓头是核心判据框到脓疱外周nodule 结节深在性硬结直径大于 5mm体积大、边界模糊框住可辨硬结范围cyst 囊肿囊性肿块常伴暗红或波动感边界光滑常比结节更鼓框住整个鼓起区域边界案例要在规范里写死。黑头和毛孔粗大的区别黑头中心有明确的角质栓毛孔粗大只是孔径大、没有色素栓。丘疹和脓疱的区别有没有白色脓头拿不准时保守归为丘疹。结节和囊肿在照片上最难分如果触诊信息不可用图像上看到边界模糊、表面光滑发亮的大隆起我一般倾向归囊肿并让标注员标记不确定交给医生复核。有人问为什么不只分轻度、中、重度三类。检测框类别本质上决定下游能做什么按六类统计可以输出粉刺 23 个、脓疱 5 个这种报告再做分级算法。只分三类中间态的皮损类别归属模糊标注一致性上不去。类别分得细会牺牲一点标注速度但换来的是模型可解释性和后续产品价值这笔账划算。2.2 labelme 标注用于 YOLOv8框的粒度、遮挡和质检流程标注工具我一般用 labelme因为它输出的 json 结构简单转 YOLO 格式的脚本好写也便于多人协作时做 diff 检查。安装和启动pip install labelme labelme --labels labels.txt --nodatalabels.txt 里预置类别名每行一个顺序和后面转换脚本的 class_names 完全一致。--nodata 参数让 json 不内嵌图像数据文件体积小很多几百兆的数据集能省出不少磁盘。labelme 打开图片后按 CtrlR 进入矩形框模式从右侧下拉框选类别。标注规范里最容易被忽略的是粒度。我的规则很简单一个皮损一个框相邻但中间有正常皮肤分隔的必须分开框框紧贴皮损边缘留 12 像素余量不要额外留白遮挡超过 50% 的皮损不标图像模糊、过曝、逆光区域的皮损不标同一患者的同一皮损在不同角度照片里都要标。这些规则看起来琐碎但决定了模型学到的框边界是否干净。多人标注必须配质检流程否则标注一致性崩得很快。我一般先让一个人标 30 张做 golden 标准其他标注员照着这个标准学每标完 500 张抽检 10%计算标注框和 golden 的 IOUIOU 大于 0.5 算一致。如果一致性低于 0.85整批退回返工。这一步是数据集的后悔药等训练完发现标注烂再回头改成本翻倍。2.3 从 labelme json 转 YOLO txt转换脚本与四个边界处理labelme 的 json 转成 YOLO txt 是每个 YOLOv8 数据集项目都要写一遍的活。转换脚本本身不难难在边界处理。下面是完整脚本import json import os from pathlib import Path def labelme2yolo(json_path, out_dir, class_names): with open(json_path, r, encodingutf-8) as f: data json.load(f) img_w float(data[imageWidth]) img_h float(data[imageHeight]) if img_w 0 or img_h 0: print(f跳过 {json_path}: 图像尺寸异常) return lines [] for shape in data[shapes]: label shape[label] if label not in class_names: continue class_id class_names.index(label) # labelme 的 rectangle 存两点不保证左上右下顺序 pts shape[points] x1, y1 pts[0] x2, y2 pts[1] x_min, x_max min(x1, x2), max(x1, x2) y_min, y_max min(y1, y2), max(y1, y2) # 裁剪到图像范围内防止越界框 x_min max(0.0, min(x_min, img_w)) x_max max(0.0, min(x_max, img_w)) y_min max(0.0, min(y_min, img_h)) y_max max(0.0, min(y_max, img_h)) w x_max - x_min h y_max - y_min if w 0 or h 0: continue # YOLO 格式类别 中心x 中心y 宽 高全部归一化到 0~1 cx ((x_min x_max) / 2.0) / img_w cy ((y_min y_max) / 2.0) / img_h nw w / img_w nh h / img_h lines.append(f{class_id} {cx:.6f} {cy:.6f} {nw:.6f} {nh:.6f}) if not lines: return stem Path(json_path).stem out_file os.path.join(out_dir, stem .txt) with open(out_file, w, encodingutf-8) as f: f.write(\n.join(lines)) # 用法示例 class_names [blackhead, whitehead, papule, pustule, nodule, cyst] json_dir labelme_jsons out_dir labels/train os.makedirs(out_dir, exist_okTrue) for jf in Path(json_dir).glob(*.json): labelme2yolo(str(jf), out_dir, class_names)脚本里的四个边界处理分别是min/max 矫正逆序框、clamp 裁掉越界坐标、过滤宽高非正的无效框、按 class_names 索引类别 ID。前两个不处理训练时会出现框中心跑到图外、loss 不收敛的翻车现场第三个不处理会有空标注或负尺寸框混进数据集第四个不处理类别错位会让整个模型学错。项目里我一般也会跳过 shpae 类型是 polygon 或 circle 的标注只处理 rectangle多边形的皮损在照片上极少统一矩形框反而有利于密集小目标。转换完不能直接训练先做一轮可视化抽查。把 txt 的归一化坐标乘回原图宽高画框随机看 50 张图确认框的位置和皮损对齐。这一步花 20 分钟能挡掉后面几十个小时的无效训练。3. 采集、清洗与增强让痤疮数据集贴近真实诊室场景很多团队在标注上花足了力气却忽略了采集环节的域一致性。痤疮识别的一个特点是颜色信息极度重要丘疹是红色、脓疱有白点、黑头是深色角质栓光线一变颜色全偏模型学到的是光照伪影而不是病理特征。采集、清洗、增强三条线本质都是在跟光照和小目标作斗争。3.1 采集与脱敏光源色温、分辨率、设备一致性采集规范第一条固定设备、固定机位、固定光源。我一般要求用同一部手机或相机机位固定在正脸 0 度和左右 45 度三个角度距离控制在 3040cm让皮损尺度在数据集里相对一致。光源用环形补光灯加柔光罩色温 5000K 左右接近诊室自然光避免手机闪光灯那种高角度硬光硬光会在鼻翼和下颌投下阴影把正常的毛孔误渲染成黑头。分辨率建议原图至少 1920×1080。JPEG 压缩质量低于 85 时小病灶的纹理会被抹掉黑头边缘和丘疹边界直接糊成一片。条件允许就存 PNG数据集大一倍但值得。拍摄角度固定还有一个好处后续做切片推理时tile 的尺寸和重叠策略可以复用一套参数。脱敏这块必须做在前面。面部图像属于个人信息采集前要告知患者用途并取得同意数据集文件名用编号不用姓名跟患者 ID 的映射表单独加密存放。图像交付前眼睛和眉毛区域做局部高斯模糊降低可识别性。不要从网上爬图网上图片的分辨率、光源、拍摄距离千差万别做出来的模型在诊室场景基本是废的。想快速起步先找皮肤科门诊谈授权用他们的诊室照片做第一批数据。3.2 三步清洗去重、去模糊、去水印清洗决定数据集质量的下限。第一步去重用感知哈希 phash 找重复和近重复图同一患者在不同光线下拍的同一部位也算近重复。代码import os import imagehash from PIL import Image def dedup(image_dir, threshold10): hashes {} kept [] for name in sorted(os.listdir(image_dir)): p os.path.join(image_dir, name) try: h imagehash.phash(Image.open(p).convert(RGB)) except Exception as e: print(f{name} 读取失败: {e}) continue # 汉明距离小于阈值视为相似保留先出现的 if any(h - old_h threshold for old_h in hashes): print(f去重丢弃: {name}) continue hashes[h] name kept.append(name) return keptphash 的汉明距离阈值 10 是一个经验值分辨率越高可以适当放宽到 12阈值设太小会漏掉同一张图的不同压缩版本设太大会把同一部位不同角度的照片误删。需要注意这段代码是 O(n²) 的5000 张图跑起来要几分钟可以接受上万张时先按拍摄时间分桶再组内去重。第二步去模糊。用拉普拉斯算子的方差判断清晰度方差低于经验阈值 100 的图直接丢。注意这个阈值跟分辨率强相关1920×1080 的图适用换分辨率要重新标定。过曝和欠曝用直方图判断高光像素占比超过 20%或者暗部像素占比超过 40%检查后基本是废图。第三步去水印和文字区域。诊室采集的照片偶尔会带设备型号水印、日期戳这类文字会让模型学到有水印的地方附近有皮损这种假关联。简单的做法是检测图像四角 ROI 的梯度密度文字区域梯度剧烈更稳妥的是人工抽检每批照片的四个角发现水印就整体裁掉边缘。清洗完成后按类别统计一遍框的数量和每张图的目标数分布。如果某类框数量比中位数少一个数量级先补数据再训练不要在残缺数据上指望增强能救命。3.3 增强策略小目标为什么要少转、轻变、控色痤疮数据集的增强不能直接抄 COCO 那套。Mosaic 拼接在 YOLOv8 上默认开启对自然场景是好事对痤疮是把双刃剑拼接后每个子图都被缩小本来就小的皮损变得更小模型被迫在低分辨率下学习小目标特征。我一般把 mosaic 概率压到 0.50.8配合后面讲的 imgsz 补偿。用 albumentations 做离线增强更可控核心思路是轻几何、控颜色import albumentations as A import cv2 train_transform A.Compose([ A.HorizontalFlip(p0.5), A.RandomBrightnessContrast(p0.5, brightness_limit0.15, contrast_limit0.1), A.HueSaturationValue(p0.3, hue_shift_limit5, sat_shift_limit10, val_shift_limit10), A.ShiftScaleRotate(p0.3, shift_limit0.05, scale_limit0.05, rotate_limit15, border_modecv2.BORDER_CONSTANT, value0), A.OneOf([ A.MotionBlur(blur_limit3, p0.5), A.GaussianBlur(blur_limit(3, 3), p0.5), ], p0.15), ], bbox_paramsA.BboxParams(formatyolo, label_fields[class_labels]))参数为什么要这样设。Hue 的 shift 限在 5肤色稍微偏一点没关系偏太多会让红色丘疹变成紫红色反而干扰模型。旋转限 15 度皮损本身没有方向性但大角度旋转会让面部几何不自然且旋转会把框的短边信息切碎。ShiftScaleRotate 的 border_mode 用常数填充而不是反射填充反射会把脸边缘的皮肤镜像到嘴里生成完全虚假的样本。模糊增强概率压在 0.15模拟少量对焦不准的采集但绝不能多用否则模型会把模糊当成皮损特征。少数类过采样是痤疮数据集增强里性价比最高的一步。结节和囊肿占比通常不到 5%单靠随机增强翻不出花来。我一般把这些少数类边框的像素块裁出来做一个简单的 copy-paste贴到没有皮损的正常皮肤区域贴的时候把源块的亮度和饱和度微调 5%避免贴上去像一块补丁。增强之后重新统计框的宽高分布确认没有产生极端细长或者放大的畸形框。4. YOLOv8 训练自己的痤疮数据集从 Ubuntu 20.04 CPU 环境到训练命令数据集准备好了进入训练环节。很多人一上来就纠结要不要上 A100其实先把流程在 CPU 环境上跑通比什么都重要。这一章按 Ubuntu 20.04 搭建 YOLOv8 环境开始讲数据目录、data.yaml 和训练参数中间插一个画损失函数曲线图的小操作。4.1 最小环境搭建Ubuntu 20.04 的 CPU 版本先跑通流程Ubuntu 20.04 上搭建 YOLOv8 环境的常见做法是用虚拟环境隔离避免污染系统 Python。CPU 版本足够做数据校验和 smoke testsudo apt update sudo apt install -y python3.9 python3.9-venv git python3.9 -m venv ~/venvs/yolov8 source ~/venvs/yolov8/bin/activate pip install --upgrade pip # CPU 版 PyTorch体积小推理和调试够用 pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu pip install ultralytics albumentations labelme opencv-python imagehashCPU 版本解决的是流程能不能跑通的问题转换脚本、标签检查、5 个 epoch 的冒烟训练都能在 CPU 上完成。但正式训练不建议用 CPU一张 GTX 1660Ti 6G 显存就能跑 yolov8n640 输入时 batch 控制在 816 没问题民用量级完全够起步。装完验证一下python - EOF from ultralytics import YOLO m YOLO(yolov8n.pt) # 首次运行自动下载预训练权重 res m.predict(一张测试图.jpg) print(len(res[0].boxes)) # 能打出检测框数量即环境正常 EOF预训练权重下载慢是国内网络的常见问题手动下载 yolov8n.pt 放到 ~/.config/Ultralytics 目录下可以跳过自动下载。权重文件本身几十 MB下载一次后面所有项目都能复用。4.2 数据目录与 data.yaml类名顺序错一个就全崩Ultralytics 对数据集目录约定很死labels 目录必须和 images 目录同级文件名前缀完全一致。我的目录结构是这样datasets/acne/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yamldata.yaml 内容path: /home/user/datasets/acne train: images/train val: images/val test: images/test names: 0: blackhead 1: whitehead 2: papule 3: pustule 4: nodule 5: cystnames 的顺序必须和第 2.3 节转换脚本里的 class_names 顺序完全一致错一位就是全部标注错位训练时类别 loss 怎么都不会收敛。path 建议写绝对路径相对路径在换机器跑的时候经常出诡异问题。labels 目录不需要写进 yamlUltralytics 自动找 images 的同级 labels。训练前先做标签合法性检查这一步在 CPU 环境几秒跑完python - EOF import glob bad 0 for txt in glob.glob(datasets/acne/labels/train/*.txt): for line in open(txt): parts line.split() if len(parts) ! 5: bad 1 continue _, cx, cy, w, h map(float, parts) if not (0 cx 1 and 0 cy 1 and w 0 and h 0): bad 1 print(f非法框: {txt} - {line.strip()}) print(f检查完成非法标签 {bad} 条) EOF中心点坐标必须在 01 之间宽高必须为正。跑出非法标签先回头查转换脚本不要带着脏标签进训练。4.3 训练参数与损失曲线epochs、batch、imgsz 怎么调训练命令用 Ultralytics 的 CLI 即可常见做法是yolo detect train \ modelyolov8n.yaml \ datadatasets/acne/data.yaml \ epochs100 \ batch16 \ imgsz800 \ patience25 \ device0 \ cacheTrue \ optimizerAdamW \ lr00.001 \ cos_lrTrue \ projectruns/acne \ namebaseline关键参数的含义和调法参数推荐值调参逻辑epochs80120小数据集 100 起步配 patience 早停防过拟合batch8166G 显存 640 输入可到 16imgsz 提到 800 就降到 8imgsz800 或 1024痤疮是小目标640 下采样后病灶只剩几个像素必须加大patience2030验证集指标连续 N 轮不涨就停省时间lr00.001用 COCO 预训练微调用 0.001从零开始训练用 0.01cos_lrTrue小数据集推荐开收敛更平稳cacheTrue把数据缓存到内存第一次慢后面快显存不够就 cacheFalsemodel 参数用 yolov8n.yaml 表示从 COCO 预训练权重开始这是最常见的做法。如果想完全从零训练把 model 改成 yolov8n.yaml 并且在命令里加 pretrainedFalse但小数据集不建议这么做。训练过程看两样东西终端输出的验证指标和 runs/acne/baseline/results.csv 里的损失曲线。画损失函数曲线图的命令很简洁python - EOF import pandas as pd import matplotlib.pyplot as plt df pd.read_csv(runs/acne/baseline/results.csv) plt.figure(figsize(8, 5)) plt.plot(df[train/box_loss], labeltrain box_loss) plt.plot(df[val/box_loss], labelval box_loss) plt.xlabel(epoch) plt.ylabel(box_loss) plt.legend() plt.savefig(loss_curve.png, dpi150) EOF判断标准是train/box_loss 持续下降、val/box_loss 先降后升说明过拟合早停会在升起来之前截断train 降但 val 横着不动说明增强过度或验证集和训练集分布差异太大。loss 曲线不是越平滑越好关键看 train 和 val 的间距有没有越拉越大。5. 痤疮数据集实践避坑清单5 个最容易翻车的地方这一章把我在痤疮数据集项目里踩过的坑和见过的翻车案例按现象、原因、解决整理出来每一条都是真实项目里反复出现的欢迎对号入座。5.1 标注粒度不统一mAP 虚高但部署后医生不认现象训练完 mAP50 有 0.87非常漂亮但把模型部署到门诊新照片上框乱跑一个框框住三四个病灶医生看一眼就说不能用。原因多人标注时没有统一粒度标注员 A 一个皮损一个框标注员 B 把一片红肿区域框成一个框。YOLOv8 在训练时对两种标注取折中最终学出来的框既不是单个皮损也不是整体区域而是中间态。mAP 高是因为验证集也是同一批人标的错误模式一致互相配合出来了虚高。解决把一个皮损一个框写进标注规范融合的皮损按最大单病灶框分不清的不要标。标注团队先由一个人标 30 张作为 golden其他人照着学每 500 张做一次一致性抽检。重点检查两张图的同一个皮损框中心点偏移超过框短边 25% 就要重标。这个流程是数据集的后悔药越早做越便宜。5.2 类别极端不均衡结节囊肿总被多数类吃掉现象总 mAP50 稳定在 0.8但按类别看 recallblackhead 有 0.9nodule 只有 0.12cyst 只有 0.03。重度皮损几乎全漏。原因粉刺在数据里可能有三万个框结节囊肿加起来不到八百个。YOLOv8 的分类 loss 是类别加权求和少数类的梯度贡献被多数类淹没模型学会了只要不输出结节loss 也不会太差。解决训练前先统计类别分布框数量相差一个数量级就必须处理。做法分三步少数类图片过采样复制后配不同增强参数进训练针对性增强只对含结节囊肿的图做亮度、翻转增强更务实的方案是把结节和囊肿合并成重度皮损一个类类数从六类降到五类样本量翻倍。评估指标必须看 per-class recall总 mAP50 在这个场景下会骗人。5.3 同一患者照片泄漏验证集虚高的元凶现象train 和 val 的 box_loss 双双压得很低模型看起来收敛完美换一批新的患者照片mAP 直接掉一半。原因数据集按照片随机划分训练集和验证集同一个患者的二十张照片同时出现在两边。模型记住的不是痤疮长什么样而是这个人的皮肤纹理长什么样。这在医学图像里叫患者级数据泄漏是跨患者泛化失败的头号原因。解决按患者 ID 划分数据集一个患者的所有照片只能进一个集合。如果原始数据没有患者 ID用文件名前缀分桶或者在采集时就按患者建文件夹。划分完跑一遍跨集合去重把 train 和 val 的图像做 phash去掉相似度高于阈值的跨集配对。这一步不做后面所有指标都是乐观的假数据。5.4 labelme 转 YOLO 坐标翻车loss 不降先查标注现象训练第一个 epoch 的 box_loss 就是 8 以上而且几个 epoch 过去纹丝不动或者 loss 直接变 nan。原因labelme 的 rectangle 存的 points 不保证左上右下顺序有人顺手用 polygon 画框转出来的坐标没有先取 min/max归一化时除的宽高和训练时实际图像尺寸不一致。这些都会产生中心点越界、宽高为负的标注框。解决转换脚本必须统一做四件事min/max 矫正逆序坐标、clamp 到图像边界、过滤宽高非正的框、polygon 直接跳过。转完后跑一遍 4.2 节的标签合法性检查再用可视化回看 50 张图。遇到 loss 不降第一反应不是调学习率是拉出标注框看一眼八成问题在数据不在模型。5.5 小目标漏检的玄学640 输入下的信息丢失现象大的脓疱结节能检出黑头和小丘疹频繁漏检把 confidence 阈值从 0.25 降到 0.1大目标开始出大量误检小目标还是漏。原因原图 2000×1500 上 30×30 像素的病灶缩到 640 之后不到 10×10经过 YOLOv8 五次下采样特征图上只剩一两个像素点信息基本丢光。这不是模型玄学是输入分辨率的数学问题。小目标检测在 640 输入下天然吃亏。解决训练 imgsz 提到 800 或 1024验证集同步保持一致。还漏就上切片推理把原图切成四块 1024 的 tile分别推理再用 NMS 合并跨 tile 的重复框这就是 SAHI 的思路。标注阶段同样建议先切 tile 再标小目标在原图上标注本身就容易造成 510 像素的偏差切开放大后标注精度高一个档次。6. 验证模型是否真的能用先读混淆矩阵再读三个指标训练完别急着开心先跑验证命令yolo detect val \ modelruns/acne/baseline/weights/best.pt \ datadatasets/acne/data.yaml \ imgsz800 \ batch86.1 三个数字map50、mAP50-95、per-class recall验证命令会生成 confusion_matrix.png 和一堆指标我只看三个数字。第一个是 map50反映粗粒度上检没检到第二个是 mAP50-95反映框的定位精度和类别置信度排序质量第三个是 per-class recall在结果里逐个类别看结节囊肿的 recall 低于 0.4 就说明少数类没学好。混淆矩阵要重点看两类错误类别混淆把丘疹误判成脓疱和背景误检把毛孔误判成黑头这两类错误直接决定医生是否愿意用这个模型。6.2 一套最小验证流程与部署前的量化提醒我的固定验证流程是先读混淆矩阵再对比 train 和 val 的 per-class recall 差值差值超过 0.15 说明数据泄漏或者过拟合回到第 5 章的检查清单。接着做一次跨患者验证留出 10% 患者的照片完全不进训练单独测一轮这一步比任何指标都真实。部署到边缘端时rk3588 这类芯片常用 ONNX 导出加 INT8 量化。注意量化对小目标极不友好痤疮病灶本身的纹理信息就弱INT8 会进一步压缩特征表达建议先导 FP16精度不够再试 INT8 并评估 recall 掉点是否可接受。我自己每批数据交付前都会先跑一轮切片推理验证确认小目标在 800 输入下的表现再决定要不要合入训练集。这个习惯帮我挡掉好几次返工。如果这篇能让你在痤疮图像识别数据集上少踩两个坑希望帮到你。本文还有配套的精品资源点击获取