使用Detectron2分6步进行目标检测( 二 )
文章插图
这是一个JSON格式的图像 。 边界框表示有不同类型的格式 。 它必须是Detectron2的structures.BoxMode成员 。 这样的格式有5种 。 但目前 , 它支持 BoxMode.XYXY_ABS, BoxMode.XYWH_ABS.
我们使用第二种格式 。 (X , Y)表示边界框的一个坐标 , W , H表示该框的宽度和高度 。 category_id 指的是边界框所属的类别 。
然后 , 我们需要注册我们的数据集 。
import jsonfrom detectron2.structures import BoxModedef get_board_dicts(imgdir):json_file = imgdir+"/dataset.json" #Fetch the json filewith open(json_file) as f:dataset_dicts = json.load(f)for i in dataset_dicts:filename = i["file_name"]i["file_name"] = imgdir+"/"+filenamefor j in i["annotations"]:j["bbox_mode"] = BoxMode.XYWH_ABS #Setting the required Box Modej["category_id"] = int(j["category_id"])return dataset_dictsfrom detectron2.data import DatasetCatalog, MetadataCatalog#Registering the Datasetfor d in ["train", "val"]:DatasetCatalog.register("boardetect_" + d, lambda d=d: get_board_dicts("Text_Detection_Dataset_COCO_Format/" + d))MetadataCatalog.get("boardetect_" + d).set(thing_classes=["HINDI","ENGLISH","OTHER"])board_metadata = http://kandian.youth.cn/index/MetadataCatalog.get("boardetect_train")
为了验证数据加载是否正确 , 让我们可视化训练集中随机选择的样本的标注 。
步骤3:可视化训练集我们将从数据集的train文件夹中随机选择3张图片 , 并查看边界框的外观 。
#Visualizing the Train Datasetdataset_dicts = get_board_dicts("Text_Detection_Dataset_COCO_Format/train")#Randomly choosing 3 images from the Setfor d in random.sample(dataset_dicts, 3):img = cv2.imread(d["file_name"])visualizer = Visualizer(img[:, :, ::-1], metadata=http://kandian.youth.cn/index/board_metadata)vis = visualizer.draw_dataset_dict(d)cv2_imshow(vis.get_image()[:, :, ::-1])
输出看起来是这样的 ,
文章插图
文章插图
文章插图
第四步:训练模型我们向前迈进了一大步 。 这是我们给出配置和设置模型准备接受训练的步骤 。 从技术上讲 , 我们只是在数据集上微调我们的模型 , 因为模型已经在COCO数据集上进行了预训练 。
在Detectron2的模型库里有大量的模型可用于目标检测 。 在这里 , 我们使用faster_rcnn_R_50_FPN_3x 。
文章插图
这里有一个主干网(这里是Resnet) , 用于从图像中提取特征 , 然后是一个区域建议网络 , 用于提出区域建议 , 以及一个用于收紧边界框的框头部 。
你可以在我的前一篇文章中读到更多关于R-CNN如何更快工作的文章 。
from detectron2.engine import DefaultTrainerfrom detectron2.config import get_cfgimport oscfg = get_cfg()cfg.merge_from_file(model_zoo.get_config_file("COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml")) #Get the basic model configuration from the model zoo #Passing the Train and Validation setscfg.DATASETS.TRAIN = ("boardetect_train",)cfg.DATASETS.TEST = ("boardetect_val",)# Number of data loading threadscfg.DATALOADER.NUM_WORKERS = 4cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml")# Let training initialize from model zoo# Number of images per batch across all machines.cfg.SOLVER.IMS_PER_BATCH = 4cfg.SOLVER.BASE_LR = 0.0125# pick a good LearningRatecfg.SOLVER.MAX_ITER = 1500#No. of iterationscfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 256cfg.MODEL.ROI_HEADS.NUM_CLASSES = 3 # No. of classes = [HINDI, ENGLISH, OTHER]cfg.TEST.EVAL_PERIOD = 500 # No. of iterations after which the Validation Set is evaluated. os.makedirs(cfg.OUTPUT_DIR, exist_ok=True)trainer = CocoTrainer(cfg) trainer.resume_or_load(resume=False)trainer.train()
我不认为这是最好的配置 。 当然 , 其他配置的精确度也会提高 。 毕竟 , 这取决于选择正确的超参数 。文章插图
注意 , 这里我们还计算验证集中每500次迭代的精确度 。
第五步:使用训练好的模型进行推理现在是时候通过在验证集上测试模型来推断结果了 。
成功完成训练后 , 输出文件夹保存在本地存储器中 , 其中存储最终权重 。 你可以保存此文件夹 , 以便将来根据此模型进行推断 。
from detectron2.utils.visualizer import ColorMode#Use the final weights generated after successful training for inferencecfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, "model_final.pth")cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.8# set the testing threshold for this model#Pass the validation datasetcfg.DATASETS.TEST = ("boardetect_val", )predictor = DefaultPredictor(cfg)dataset_dicts = get_board_dicts("Text_Detection_Dataset_COCO_Format/val")for d in random.sample(dataset_dicts, 3):im = cv2.imread(d["file_name"])outputs = predictor(im)v = Visualizer(im[:, :, ::-1],metadata=http://kandian.youth.cn/index/board_metadata,scale=0.8,instance_mode=ColorMode.IMAGE)v = v.draw_instance_predictions(outputs["instances"].to("cpu")) #Passing the predictions to CPU from the GPUcv2_imshow(v.get_image()[:, :, ::-1])
- 会员|美容院使用会员管理软件给顾客更好的消费体验!
- 桌面|日常使用的软件及网站分享 篇一:几个动态壁纸软件和静态壁纸网站:助你美化你的桌面
- QuestMobile|QuestMobile:百度智能小程序月人均使用个数达9.6个
- 车辆|魔道之争,自主驾驶汽车会不会变成犯罪分子的工具?
- 介绍|5分钟介绍各种类型的人工智能技术
- 资本|2020年中国人工智能医疗行业发展现状分析 处于成长期且资本热度高
- 轻松|使用 GIMP 轻松地设置图片透明度
- 电池容量|Windows 自带功能查看笔记本电脑电池使用情况,你的容量还好吗?
- 用户|密室逃脱行业发展及用户分析报告:哪些人在沉迷密室逃脱?
- 车一族|直播|@爱车一族:60分钟穿越汽车的前世今生