车位关键点检测是指通过计算机视觉技术,自动地检测出停车场区域内的每个车位的位置和边界。这个过程通常涉及到目标检测和图像分割等算法。通过车位关键点检测,可以实现对停车场的精细管理和优化,提高停车位的利用率。
车位识别是指通过车位关键点检测后,进一步对每个车位进行状态判断,即判断该车位是否被占用。这个过程通常通过图像分类或物体检测算法来实现。车位识别可以帮助驾驶员快速找到可用车位,减少寻找空余车位的时间和拥堵情况,提高停车效率。
车辆识别检测是指对停车场内的车辆进行实时监测和识别。通过使用计算机视觉和机器学习技术,可以对车辆进行自动识别,并进一步分析车辆的类型、颜色、车牌等信息。车辆识别检测可以应用于车辆出入口管理、违规停车监控等场景,提高交通管理的效率和安全性。
上面的例子显示了一个停车位,它不能用直立的矩形(黄色)来表示。由4个关键点(蓝色)包围的形状表示它更符合要求。
在自动驾驶(AD)应用领域中,自动代客泊车(AVP)在机会和采用方面尤其具有吸引力。摄像机是AVP应用中常用的感知传感器之一。在摄像机馈送中,停车点的检测和分类为空闲或占用是关键的。
停车点检测功能在自主操作期间用于定位和操纵到适当的停车位置。停车点检测的主要挑战在于在图像域中将停车点表现为梯形。此外,用于环绕视野或泊车辅助功能的现代相机往往是鱼眼,其中镜头失真会导致现实生活中的直线段和物体看起来弯曲。
提出了一种基于深度学习中对象检测框架的高效像素级停车点实例化和分类方法。该方法使用MobileNet-V1网络架构作为主干卷积神经网络(CNN),并使用改进的单镜头检测器(SSD)作为对象检测元架构,以直接在鱼眼域中执行停车点实例化。
物体检测功能的传统SSD元架构已经创新性地增强,以检测停车点的主要关键点,从而精确地描绘停车点边界。所提出的解决方案对于检测到的包围停车点的矩形盒实**现了0.87mAP,**并且每次检测的四个角点的精度为0.76OKS。
?
1-空停车位
2-占用的停车位
3-车辆
为每个停车点和车辆采集四个角点坐标。注释时保持关键点的顺序。第一和第二个关键点分别是停车点入口的左角和右角。其余角点沿逆时针方向捕捉。对于车辆,第一和第二关键点分别是包围车辆的矩形的地面上最左侧和最右侧的关键点。其他两个关键点是在车辆逆时针方向捕捉的车辆的其他两个角。
Bounding box参数是包围捕获的四个关键点的矩形框。边界框参数不带注释,而是在捕捉关键点后导出。
TI_PSD_VD_v3数据集的精度低于@IOU阈值=0.6。这是与下面提到的预训练模型相对应的精度。
|类别 |mAP|
|空停车位 |85.48%|
|占用停车位 |75.75%|
|车辆 |67.25%|
|平均AP |76.16%|
?
#全部代码可加qq767172261
def train():
#parses command line args
args = parse_args()
#parses args from file
if args.config_file is not None:
cfg_from_file(args.config_file)
if (args.FIX_MODEL_CHECKPOINT):
args.FIX_MODEL_CHECKPOINT = args.FIX_MODEL_CHECKPOINT.replace(" ", "")
args.FIX_MODEL_CHECKPOINT = args.FIX_MODEL_CHECKPOINT.replace("=", "")
cfg.RESUME_CHECKPOINT = args.FIX_MODEL_CHECKPOINT
cfg.CHECK_PREVIOUS = False
if (os.path.exists(cfg.RESUME_CHECKPOINT) == False):
print('Exiting the process as asked model for resuming is not found')
exit()
if (args.RESUME_CHECKPOINT):
cfg.RESUME_CHECKPOINT = args.RESUME_CHECKPOINT
if (args.LOG_DIR):
cfg.EXP_DIR = args.LOG_DIR
cfg.LOG_DIR = cfg.EXP_DIR
if (args.PHASE):
cfg.PHASE = []
cfg.PHASE.append(args.PHASE)
if (args.EVAL_METHOD):
cfg.DATASET.EVAL_METHOD = args.EVAL_METHOD
#for backward compatibility
if cfg.DATASET.DATASET == 'psd':
cfg.DATASET.DATASET = 'tiod'
if cfg.DATASET.BGR_OR_RGB == True:
#cfg.DATASET.PIXEL_MEANS = (123.68, 116.78, 103.94)
#cfg.DATASET.PIXEL_MEANS = (123, 117, 104)
cfg.DATASET.PIXEL_MEANS = (128.0, 128.0, 128.0) # simpler mean subtraction to keep data in int8 after mean subtraction
print("cfg: ", cfg)
for phase in cfg.PHASE:
cfg_dir = cfg.LOG_DIR + '/' + phase + '_cfg/'
os.makedirs(os.path.dirname(cfg_dir), exist_ok=True)
shutil.copy(args.config_file, cfg_dir)
# to making every run consistent # TII
np.random.seed(100)
torch.manual_seed(100)
torch.cuda.manual_seed(100)
random.seed(100)
torch.cuda.manual_seed_all(999)
torch.backends.cudnn.enabled = False
train_model()
if __name__ == '__main__':
train()
?推理结果 全部代码可私信。
?