09-自定义物体训练:专属抓取物体数据集训练落地

发布时间:2026/8/10 22:22:59
09-自定义物体训练:专属抓取物体数据集训练落地 自定义物体训练:专属抓取物体数据集训练落地作者:黒漂技术佬场景:无人售货柜专属商品检测、智慧农业特定品种果蔬识别、工控产线非标零件分拣一、通用模型为什么不够用?你从GitHub上下载一个YOLOv8预训练模型,它能识别80类常见物体(COCO数据集)。但你让它识别"售货柜里第三排那个小瓶装的山楂汁"——它一脸懵。这就是为什么需要自定义训练:你的业务场景里那些奇形怪状的专属物体,通用模型根本不认识。打个比方:通用模型是"认识猫狗汽车人"的大学生,你要它去认"某品牌限定款气泡水",得从头教。二、数据采集:先有粮草才好打仗训练效果70%取决于数据质量。垃圾进,垃圾出(Garbage In, Garbage Out),模型再牛也救不了烂数据。采集原则:三多多角度:正俯视、斜45度、侧面——覆盖机械臂摄像头实际可能看到的所有视角多光照:白天自然光、柜内LED灯、背光逆光——售货柜补光灯角度不同,反射完全不一样多背景:空货架、有其他商品遮挡、反光玻璃面——真实场景的复杂度importcv2importosclassDataCollector:def__init__(self,save_dir="dataset/raw",max_per_class=500):self.save_dir=save_dir self.max_per_class=max_per_class self.count=0os.makedirs(save_dir,exist_ok=True)defcapture_loop(self,cap):"""自动采集脚本:按不同角度/光照循环拍摄"""print("开始采集,按q退出,按s保存当前帧")whileself.countself.max_per_class:ret,frame=cap.read()ifnotret:breakcv2.imshow("Capture",frame)key=cv2.waitKey(1)0xFFifkey==ord('s'):fname=f"{self.save_dir}/img_{self.count:04d}.jpg"cv2.imwrite(fname,frame)print(f"保存:{fname}({self.count+1}/{self.max_per_class})")self.count+=1elifkey==ord('q'):breakdefauto_capture_with_augment(cap,collector):"""自动采集+自动角度提示"""angles=["正俯视","左斜45度","右斜45度","侧面"]forangleinangles:print(f"请将摄像头调整为:{angle}")foriinrange(125):# 每个角度125张ret,frame=cap.read()ifret:fname=f"{collector.save_dir}/{angle}_{i:03d}.jpg"cv2.imwrite(fname,frame)cv2.waitKey(50)print(f"{angle}完成")数量建议:每类物体至少300500张,复杂场景建议8001000张。不是越多越好,而是覆盖度要够。500张相同角度相同光照的照片,不如200张多角度多光照的。三、标注:用LabelImg画框数据采完了,现在要告诉模型"图片里哪个是目标"——这就是标注(Annotation)。LabelImg操作流程# 安装pipinstalllabelImg# 启动(在数据集目录下)labelImg操作步骤:Open Dir → 选择图片目录Change Save Dir → 选择标注输出目录设定YOLO格式输出(左侧菜单选 YOLO)快捷键w画框 → 框住目标 → 输入类别名快捷键d下一张类别文件YOLO格式需要.classes文件定义类别:defgenerate_classes_file(classes,filepath