YOLO26矿场矿车坐人数据集 YOLO识别乘坐的煤矿矿车 正常情况下的矿车人员乘坐情况 构建矿场矿车坐人检测深度学习模型

📅 2026/8/19 13:05:55
YOLO26矿场矿车坐人数据集 YOLO识别乘坐的煤矿矿车 正常情况下的矿车人员乘坐情况 构建矿场矿车坐人检测深度学习模型
使用PyTorch框架和YOLOv5模型训练矿场矿车坐人数据集 来识别乘坐的煤矿矿车、正常情况下的矿车人员乘坐情况 构建矿场矿车坐人检测深度学习模型文章目录使用PyTorch框架和YOLOv5模型训练矿场矿车坐人数据集 来识别乘坐的煤矿矿车、正常情况下的矿车人员乘坐情况 构建矿场矿车坐人检测深度学习模型表格表示1. 环境设置2. 数据准备创建自定义Dataset类3. 数据增强和转换4. 模型定义5. 训练流程6. 模型保存与加载7. 应用到实际场景中注意事项以下文字及代码仅供参考。矿场矿车坐人数据集 3900张 矿车坐人 voc yolo 标注三类有人员乘坐的矿车、正常情况下的矿车没有人员乘坐以及异常情况下的矿车。共8475个边界框标注具体分布如下表所示。表格表示类别图片数量边界框数量有人员乘坐344404正常情况33357739异常情况272332总计39638475备注提醒其中“有人员乘坐”指的是矿车上有人的情况“正常情况”指的是矿车按预期使用但无人乘坐的情况而“异常情况”可能指的是除上述两种情况之外的特殊情况例如设备故障或其他非标准操作状态。这里的数据总计与提供的数字略有出入可能是由于四舍五入或额外的数据点造成的因此请根据实际情况进行调整。labe|| pic_num| boxnumWith People:(344404)Norma | :(33357739)Abnormal: (272 332)total :(3963,8475)1构建一个矿场矿车坐人检测系统涉及多个步骤包括数据预处理、模型选择与训练、评估和优化。我们将使用PyTorch框架和YOLOv5模型作为示例。以下是详细的步骤和代码1. 环境设置确保安装了必要的库pipinstalltorch torchvision opencv-python numpy pipinstallyolov52. 数据准备假设你的数据集已经按照VOC格式标注好并且包含以下目录结构data/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/创建自定义Dataset类importosimportcv2importtorchfromtorch.utils.dataimportDatasetclassMineCartDataset(Dataset):def__init__(self,root,splittrain,transformNone):self.rootroot self.splitsplit self.transformtransform self.images_diros.path.join(root,images,split)self.labels_diros.path.join(root,labels,split)self.image_pathssorted(os.listdir(self.images_dir))self.label_paths[f.replace(.jpg,.txt)forfinself.image_paths]def__len__(self):returnlen(self.image_paths)def__getitem__(self,idx):img_pathos.path.join(self.images_dir,self.image_paths[idx])label_pathos.path.join(self.labels_dir,self.label_paths[idx])imagecv2.imread(img_path)imagecv2.cvtColor(image,cv2.COLOR_BGR2RGB)withopen(label_path,r)asf:linesf.readlines()boxes[]forlineinlines:partsline.strip().split()x_center,y_center,width,heightmap(float,parts[1:])xminint((x_center-width/2)*image.shape[1])yminint((y_center-height/2)*image.shape[0])xmaxint((x_centerwidth/2)*image.shape[1])ymaxint((y_centerheight/2)*image.shape[0])boxes.append([xmin,ymin,xmax,ymax])target{boxes:torch.tensor(boxes,dtypetorch.float32),labels:torch.ones(len(boxes),dtypetorch.int64)# 假设只有一个类别}ifself.transform:image,targetself.transform(image,target)returnimage,target3. 数据增强和转换定义一些基本的数据增强和转换操作importalbumentationsasAfromalbumentations.pytorchimportToTensorV2defget_transform(train):iftrain:returnA.Compose([A.HorizontalFlip(p0.5),A.RandomBrightnessContrast(p0.2),A.Normalize(),ToTensorV2()])else:returnA.Compose([A.Normalize(),ToTensorV2()])4. 模型定义使用YOLOv5模型进行训练importtorchimporttorch.nnasnnfromyolov5.models.commonimportDetectMultiBackendfromyolov5.utils.generalimportnon_max_suppressiondefget_model(num_classes):modelDetectMultiBackend(yolov5s.pt)model.ncnum_classes# number of classesmodel.class_names[person]# class namesreturnmodel5. 训练流程定义训练循环并使用train_one_epoch和evaluate函数来训练和评估模型fromtorch.utils.dataimportDataLoaderfromyolov5.utils.datasetsimportLoadImagesfromyolov5.utils.torch_utilsimportselect_devicedeftrain(model,dataloader,optimizer,device):model.train()forimages,targetsindataloader:imagesimages.to(device)targets[{k:v.to(device)fork,vint.items()}fortintargets]loss_dictmodel(images,targets)lossessum(lossforlossinloss_dict.values())optimizer.zero_grad()losses.backward()optimizer.step()defevaluate(model,dataloader,device):model.eval()withtorch.no_grad():forimages,targetsindataloader:imagesimages.to(device)targets[{k:v.to(device)fork,vint.items()}fortintargets]outputsmodel(images)predictionsnon_max_suppression(outputs,conf_thres0.5,iou_thres0.5)# 这里可以添加评估指标的计算pass# 加载数据集dataset_trainMineCartDataset(path/to/data,splittrain,transformget_transform(trainTrue))dataloader_trainDataLoader(dataset_train,batch_size4,shuffleTrue,num_workers4)dataset_valMineCartDataset(path/to/data,splitval,transformget_transform(trainFalse))dataloader_valDataLoader(dataset_val,batch_size4,shuffleFalse,num_workers4)# 初始化模型deviceselect_device()modelget_model(num_classes2)# 背景无人机model.to(device)# 构建优化器optimizertorch.optim.SGD(model.parameters(),lr0.005,momentum0.9,weight_decay0.0005)# 开始训练num_epochs10forepochinrange(num_epochs):train(model,dataloader_train,optimizer,device)evaluate(model,dataloader_val,device)6. 模型保存与加载在训练结束后可以保存模型以便后续使用torch.save(model.state_dict(),mine_cart_detection_model.pth)# 加载模型model.load_state_dict(torch.load(mine_cart_detection_model.pth))7. 应用到实际场景中加载模型并进行推理defpreprocess_image(image_path):imagecv2.imread(image_path)imagecv2.cvtColor(image,cv2.COLOR_BGR2RGB)returnimagedefdetect_people(model,image_tensor,threshold0.5):withtorch.no_grad():outputsmodel(image_tensor.unsqueeze(0))predictionsnon_max_suppression(outputs,conf_thresthreshold,iou_thres0.5)returnpredictionsdefvisualize_predictions(image,predictions):forpredinpredictions:boxespred[:,:4].cpu().numpy()scorespred[:,4].cpu().numpy()forbox,scoreinzip(boxes,scores):xmin,ymin,xmax,ymaxmap(int,box)cv2.rectangle(image,(xmin,ymin),(xmax,ymax),(0,255,0),2)cv2.putText(image,f{score:.2f},(xmin,ymin-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,0),2)cv2.imshow(Detected People,image)cv2.waitKey(0)cv2.destroyAllWindows()# 实际使用image_tensorpreprocess_image(path_to_your_test_image.jpg)predictionsdetect_people(model,image_tensor)visualize_predictions(image_tensor,predictions)注意事项数据划分确保数据集划分为训练集、验证集和测试集。超参数调整根据实验结果调整学习率、批次大小等超参数。模型优化考虑使用更高级的技术如多模态融合、迁移学习等提高模型性能。通过上述步骤你可以构建一个用于矿场矿车坐人检测的深度学习模型并对其进行训练和评估。