前言
在训练目标检测时,标注数据是一项简单而又浪费时间的事情,如果能够自动标注数据将可以高效的扩充数据集,从而提高训练模型的效果。
目前能想到的一种自动标注方法是先训练一个检测效果较好的模型,然后使用这个模型对需要标注的图片进行检测,将检测到的BBox写入到标注文件中。这里来简单说明一下相关代码。
python脚本文件下载地址:https://download.csdn.net/download/qq_43019451/12836771
一、使用opencv调用模型
此处以Darknet模型为例,使用OpenCV调用模型来检测图片中的目标。
#引用opencv-python库
import cv2
#此处设置相关的文件路径,我使用的时人脸检测的模型,所示是face.weights
weightsPath = "./face/face.weights"
configPath = "./face/face.cfg"
labelsPath = "./face/face.names"
#读取names文件中的类别名
LABELS = open(labelsPath).read().strip().split("\n")
#使用opencv加载Darknet模型
net = cv2.dnn.readNetFromDarknet(configPath, weightsPath)
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)
#下面是通过检测获取坐标的函数
def coordinate_get(img):
coordinates_list=[] # 创建坐标列表
boxes = []
confidences = []
classIDs = []
(H, W) = img.shape[:2]
# 得到 YOLO需要的输出层
ln = net.getLayerNames()
ln = [ln[i[0] - 1] for i in net.getUnconnectedOutLayers()]
# 从输入图像构造一个blob,然后通过加载的模型,给我们提供边界框和相关概率
blob = cv2.dnn.blobFromImage(img, 1 / 255.0, (416, 416), swapRB=True, crop=False)
net.setInput(blob)
layerOutputs = net.forward

本文介绍了一种利用预训练模型自动标注数据的方法,通过Darknet模型与OpenCV结合,实现目标检测和坐标获取,再将检测结果写入XML文件,有效提升数据集规模和模型训练效率。
最低0.47元/天 解锁文章
1376





