1
交通数据集核心信息总结表
| 总结维度 | 具体内容 |
|---|---|
| 数据类别 | 包含9类目标,分别为自行车、公共汽车、汽车、绿化带、发动机、人、道路、三轮车、卡车 |
| 数据数量 | 图像数量共1.7k张(1671张) |
| 图像分辨率 | 未在数据集信息中明确标注 |
| 数据格式 | 未在数据集信息中明确标注(推测为计算机视觉任务常用格式,如JPG、PNG等,适配实例分割任务需求) |
数据集应用领域
- 智能交通系统开发:可用于训练车辆检测、行人识别、道路区域划分等模型,支撑交通流量统计、交通违规识别(如非机动车占用机动车道)、道路状况监测等功能,提升交通管理的智能化水平。
- 自动驾驶技术研发:为自动驾驶车辆的环境感知模块提供训练数据,帮助车辆精准识别道路上的各类目标(如其他车辆、行人、自行车)及道路基础设施(如绿化带、道路边界),增强自动驾驶的安全性与可靠性。
- 交通场景分析与规划:基于数据集中的目标分布信息,可分析不同交通场景下的车辆、行人密度及流动规律,为城市交通路网规划、交通设施优化(如增设行人通道、调整绿化带位置)提供数据支撑。
- 计算机视觉算法优化:作为实例分割任务的训练数据,可用于优化实例分割算法在交通场景下的性能,提升算法对小目标(如行人)、相似目标(如不同类型车辆)的识别精度,推动计算机视觉技术在交通领域的落地应用。
数据集价值
- 降低开发成本:为从事交通领域计算机视觉相关项目的团队或个人提供现成的标注数据集,避免从零开始采集、标注数据所耗费的大量时间与人力成本,加速项目开发进程。
- 保障数据适用性:数据专门针对交通场景设计,涵盖交通领域常见的核心目标类别,能够满足多数交通相关计算机视觉任务的训练需求,确保数据与实际应用场景的匹配度。
- 推动技术普及:降低交通领域计算机视觉技术的入门门槛,使更多开发者(尤其是缺乏数据资源的中小团队或个人开发者)能够基于该数据集开展技术研究与应用开发,促进相关技术的普及与创新。
- 支撑多场景落地:数据的通用性使其可应用于智能交通、自动驾驶、交通规划等多个细分场景,为不同领域的技术落地提供基础数据支持,助力交通行业数字化、智能化转型。
1
1
1
以下是基于该交通实例分割数据集的训练代码示例,采用PyTorch + Detectron2框架(实例分割任务常用工具),代码包含数据加载、模型配置、训练与验证流程,适配数据集的9类目标(自行车、公共汽车、汽车、绿化带、发动机、人、道路、三轮车、卡车):
一、环境准备
首先安装依赖包:
# 安装PyTorch(根据CUDA版本调整,此处以CUDA 11.8为例)pip3installtorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118# 安装Detectron2(Facebook开源实例分割框架)python -m pipinstall'git+https://github.com/facebookresearch/detectron2.git'# 安装其他依赖pipinstallpillow opencv-python pycocotools matplotlib二、数据集格式转换(关键步骤)
该数据集标注格式需转换为Detectron2支持的COCO格式(或Detectron2自定义格式),假设原始标注为JSON格式(含多边形坐标),转换逻辑如下(示例代码):
importjsonimportosfromPILimportImagefrompycocotools.cocoimportCOCOfrompycocotools.cocoevalimportCOCOeval# 1. 定义类别映射(数据集9类目标,对应COCO格式的category_id)CATEGORY_MAPPING={"bicycle":1,"bus":2,"car":3,"greenbelt":4,"motor":5,"people":6,"roadway":7,"tricycle":8,"truck":9}CATEGORIES=[{"id":v,"name":k,"supercategory":"traffic"}fork,vinCATEGORY_MAPPING.items()]# 2. 转换函数:将原始标注转为COCO格式defconvert_to_coco(raw_annot_dir,img_dir,save_json_path):coco_data={"images":[],"annotations":[],"categories":CATEGORIES}img_id=1ann_id=1# 遍历所有原始标注文件(假设每个图像对应一个标注JSON)forraw_ann_fileinos.listdir(raw_annot_dir):ifnotraw_ann_file.endswith(".json"):continueraw_ann_path=os.path.join(raw_annot_dir,raw_ann_file)img_name=raw_ann_file.replace(".json",".jpg")# 假设图像与标注文件名对应img_path=os.path.join(img_dir,img_name)# 读取图像尺寸(需确保图像存在)ifnotos.path.exists(img_path):print(f"跳过不存在的图像:{img_path}")continuewithImage.open(img_path)asimg:width,height=img.size# 添加图像信息到COCO数据coco_data["images"].append({"id":img_id,"file_name":img_name,"width":width,"height":height})# 读取原始标注(参考网页中"Annotation Data"的多边形格式)withopen(raw_ann_path,"r",encoding="utf-8")asf:raw_ann=json.load(f)# 解析每个多边形标注(对应一个实例)forboxinraw_ann.get("boxes",[]):label=box["label"]iflabelnotinCATEGORY_MAPPING:print(f"跳过未知类别:{label}")continue# 处理多边形坐标(原始坐标为[x,y]列表,需转为COCO格式的flatten列表)points=box["points"]# 格式:[[x1,y1], [x2,y2], ..., [xn,yn]]segmentation=[coordforpointinpointsforcoordinpoint]# 展平为一维列表area=box["width"]*box["height"]# 简化计算面积(或用多边形面积公式)bbox=[box["x"],# xmin(原始标注的x坐标)box["y"],# ymin(原始标注的y坐标)box["width"],# widthbox["height"]# height]# 添加标注信息到COCO数据coco_data["annotations"].append({"id":ann_id,"image_id":img_id,"category_id":CATEGORY_MAPPING[label],"segmentation":[segmentation],"area":area,"bbox":bbox,"iscrowd":0# 0表示单个实例,1表示人群/密集目标})ann_id+=1img_id+=1# 保存COCO格式标注文件withopen(save_json_path,"w",encoding="utf-8")asf:json.dump(coco_data,f,indent=2)print(f"COCO格式标注已保存到:{save_json_path}")# 3. 执行转换(需替换为你的数据集路径)RAW_ANNOT_DIR="path/to/raw/annotations"# 原始标注文件目录IMG_DIR="path/to/images"# 图像文件目录TRAIN_COCO_JSON="path/to/train_coco.json"# 训练集COCO标注保存路径VAL_COCO_JSON="path/to/val_coco.json"# 验证集COCO标注保存路径(需拆分数据集)# (可选)拆分训练集/验证集(按8:2比例)# 此处省略拆分逻辑,建议先手动拆分图像和标注,再分别执行转换convert_to_coco(RAW_ANNOT_DIR+"/train",IMG_DIR+"/train",TRAIN_COCO_JSON)convert_to_coco(RAW_ANNOT_DIR+"/val",IMG_DIR+"/val",VAL_COCO_JSON)三、模型训练代码(Detectron2)
importdetectron2fromdetectron2.utils.loggerimportsetup_loggerfromdetectron2importmodel_zoofromdetectron2.engineimportDefaultTrainer,DefaultPredictorfromdetectron2.configimportget_cfgfromdetectron2.dataimportMetadataCatalog,DatasetCatalogfromdetectron2.data.datasetsimportregister_coco_instancesfromdetectron2.evaluationimportCOCOEvaluator,inference_on_datasetfromdetectron2.dataimportbuild_detection_test_loaderimportos# 1. 配置日志setup_logger()# 2. 注册COCO格式数据集到Detectron2# 训练集register_coco_instances(name="traffic_train",# 数据集名称(自定义)metadata={},json_file=TRAIN_COCO_JSON,# 训练集COCO标注路径(需与上文一致)image_root=IMG_DIR+"/train"# 训练集图像路径)# 验证集register_coco_instances(name="traffic_val",metadata={},json_file=VAL_COCO_JSON,image_root=IMG_DIR+"/val")# 3. 获取数据集元数据(用于类别映射)traffic_metadata=MetadataCatalog.get("traffic_train")dataset_dicts=DatasetCatalog.get("traffic_train")# 可查看数据集加载是否正常# 4. 配置模型参数cfg=get_cfg()# 加载预训练模型(选择实例分割模型,此处用Mask R-CNN,基于ResNet-50-FPN)cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))# 替换为自定义数据集cfg.DATASETS.TRAIN=("traffic_train",)cfg.DATASETS.TEST=("traffic_val",)# 训练中同时验证cfg.DATALOADER.NUM_WORKERS=4# 数据加载线程数(根据CPU核心调整)# 预训练权重(使用COCO预训练权重,加速收敛)cfg.MODEL.WEIGHTS=model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")# 训练参数配置cfg.SOLVER.IMS_PER_BATCH=2# 每批次图像数(根据GPU显存调整,12GB显存建议2-4)cfg.SOLVER.BASE_LR=0.001# 基础学习率(默认0.002,小批次建议减小)cfg.SOLVER.MAX_ITER=10000# 最大迭代次数(根据数据集大小调整,1.7k图像建议10k-20k)cfg.SOLVER.STEPS=(6000,8000)# 学习率衰减步骤(60%、80%迭代次数时衰减)cfg.SOLVER.GAMMA=0.1# 学习率衰减系数# 模型输出配置(类别数=9,需与CATEGORY_MAPPING一致)cfg.MODEL.ROI_HEADS.NUM_CLASSES=9# 交通数据集共9类目标cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE=128# 每个图像的ROI批次大小(默认128)# 验证配置cfg.TEST.EVAL_PERIOD=1000# 每1000次迭代执行一次验证# 输出目录(保存模型权重、日志等)os.makedirs(cfg.OUTPUT_DIR,exist_ok=True)# 5. 定义训练器(集成验证逻辑)classCustomTrainer(DefaultTrainer):@classmethoddefbuild_evaluator(cls,cfg,dataset_name,output_folder=None):ifoutput_folderisNone:output_folder=os.path.join(cfg.OUTPUT_DIR,"inference")returnCOCOEvaluator(dataset_name,output_dir=output_folder)# 6. 启动训练trainer=CustomTrainer(cfg)trainer.resume_or_load(resume=False)# resume=False表示从头训练,True表示加载上次权重trainer.train()# 7. 训练后验证(输出mAP等指标)print("="*50)print("开始训练后验证...")cfg.MODEL.WEIGHTS=os.path.join(cfg.OUTPUT_DIR,"model_final.pth")# 加载训练好的最终权重cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST=0.5# 测试时的置信度阈值(仅保留>0.5的预测结果)predictor=DefaultPredictor(cfg)# 构建验证集加载器并执行验证evaluator=COCOEvaluator("traffic_val",output_dir=os.path.join(cfg.OUTPUT_DIR,"inference"))val_loader=build_detection_test_loader(cfg,"traffic_val")inference_on_dataset(trainer.model,val_loader,evaluator)四、关键说明
- 数据集路径适配:需将代码中
RAW_ANNOT_DIR、IMG_DIR等路径替换为你的实际数据集路径,确保图像与标注文件一一对应。 - GPU显存适配:若GPU显存不足(如<8GB),可减小
cfg.SOLVER.IMS_PER_BATCH(设为1)、降低模型复杂度(如用mask_rcnn_R_18_FPN.yaml轻量模型)。 - 训练参数调整:
MAX_ITER:1.7k图像建议10k-20k次迭代,若验证集mAP不再提升可提前停止(需添加早停逻辑)。BASE_LR:若批次大小为1,建议设为0.0005;批次大小为4,可设为0.002。
- 结果查看:训练过程中日志、模型权重(
model_final.pth)会保存在cfg.OUTPUT_DIR(默认./output),验证后会输出mAP(实例分割任务核心指标)。 - 预测演示:训练完成后,可使用
predictor对新图像进行预测,示例代码:importcv2importmatplotlib.pyplotasplt img_path="path/to/test_image.jpg"img=cv2.imread(img_path)outputs=predictor(img)# 执行预测# 可视化预测结果(Detectron2自带工具)fromdetectron2.utils.visualizerimportVisualizer v=Visualizer(img[:,:,::-1],metadata=traffic_metadata,scale=1.2)out=v.draw_instance_predictions(outputs["instances"].to("cpu"))plt.imshow(out.get_image()[:,:,::-1])plt.axis("off")plt.show()
五、其他框架支持
若需使用TensorFlow/PyTorch Lightning,可参考:
- TensorFlow:使用
TensorFlow Object Detection API,需将数据集转为TFRecord格式,模型选择mask_rcnn_inception_resnet_v2_atrous_coco。 - PyTorch Lightning:基于上述Detectron2代码封装为LightningModule,便于分布式训练和日志管理。