SOTIF-雨雪雾行驶场景下交通参与者视觉检测及识别

1.任务要求

2.数据处理

3.训练过程

4.踩的一些坑

5.总结

6.完善

1.任务要求

基于自然驾驶采集的图像数据,评价雨雪雾等恶劣天气场景下交通参与者的检测的性能,输出二维边界框(BoundingBox)。其中,所有遮挡或截断比例小于70%、长边像素大于10的非机动车辆均需要识别,所有遮挡或截断比例小于70%、长边像素大于15的行人目标均需要识别。当目标被遮挡时,边界框需要包含目标被遮挡的部分,当目标被截断时(目标的一部分在镜头外),边界框只需包含目标在图像内可见部分即可。对于骑行人,需要分别输出非机动车框和行人框。

2.数据处理

首先看一下官方给的数据集:

SOTIF-雨雪雾行驶场景下交通参与者视觉检测及识别_第1张图片

SOTIF-雨雪雾行驶场景下交通参与者视觉检测及识别_第2张图片

官方给的label里面是json文件,需要把json文件转化成Yolo需要的txt文件。然后需要划分训练集和验证集,我划分的比例是8:2,文件结果如下:

SOTIF-雨雪雾行驶场景下交通参与者视觉检测及识别_第3张图片

 数据处理的代码如下:

import json
import os
import random
import cv2

data_path = "F:/SOTIF/data/"
catagory_id = {"pedestrian": 0, "non-motor-vehicle": 1, "motor-vehicle": 2, "other": 3}
save_image_path = "F:/SOTIF/data/VOCdevkit/images/"
save_label_path = "F:/SOTIF/data/VOCdevkit/labels/"
TRAIN_RATIO = 80   # 训练集和测试集划分的比例

def anno(json_path):
    "从json文件中获取信息"
    with open(json_path, "r") as f:
        dict = json.load(f)
    img_path = dict.get("info").get("image_name")
    img_id = img_path.replace('.png', '')
    annnotations = dict.get('annotations')

    prob = random.randint(1, 100)  # 随机数划分比例
    if prob

3.训练过程

我用的是Yolov3训练的,设置的Epoch是300,这是跑100个Epoch左右,mAp的值在0.83左右,测试结果如下:

SOTIF-雨雪雾行驶场景下交通参与者视觉检测及识别_第4张图片

 但是也有一些检测的比较离谱的,两张图片只差了一帧,结果却相差那么大,如下:

4.踩的一些坑

4.1 在处理数据的时候,错把json文件里的bbox(x,y,w,h)的存储方式当成了bbox(x1,y1,x2,y2),导致得到的都是一些错的数据,用这些错的数据训练了很久,然后发现效果特别差,如下:

 起初以为问题出在数据不均衡,因为我用代码计算了一下每个类别的数量,结果就出现了下面的离谱数据:'non-motor-vehicle': 428, 'motor-vehicle': 10073, 'pedestrian': 998, 'other': 7

SOTIF-雨雪雾行驶场景下交通参与者视觉检测及识别_第5张图片

 然后就想着对数据进行数据增广的操作,在yolo里面自带的有对数据处理的程序,处理完之后发现效果还是很差,然后就想到了可能是数据处理出错了,然后又分析json文件,知道了bbox里面储存的是(x,y,w,h)。等修正之后程序就能正常训练了。

5.总结

在测试过程中,发现有些图片的检测偏差比较大,接下来准备增加训练的Epoch,来提高mAP,再试试测试的效果。然后再通过换网络,试试Yolov5的效果。

还有一种设想是在进行训练之前,对图片进行一个除雾,除雨雪的操作,减少对目标物的遮挡,然后再进行训练。

6.完善

上面提到的在检测的时候会出现一些检测特别离谱的情况,把mAP提高到0.93的时候还是存在这种情况,然后就把用Yolov3训练出来的模型在Yolov5上运行,发现效果很好,没有之前存在的那种情况了。之后我就找为什么在v3中会发生这种情况,后来发现在进行数据处理的时候,训练集和验证集分的有问题,导致了那种情况。现在在用Yolov5训练模型,这是mAP值为0.6时的检测效果,如下:

test

后续会继续用Yolov5进行训练,提高mAP的值。 

你可能感兴趣的:(目标检测,python,目标检测)