赞
踩
关键词:YOLO算法、TT100K数据集、交通标志、目标检测、智能交通系统
1. 研究背景
随着智能交通系统的不断发展,交通标志的快速准确检测成为了一项重要任务。现有的目标检测算法中,YOLO(You Only Look Once)以其高效的特点被广泛应用。然而,在处理交通标志这一特定场景时,传统的YOLO算法存在一定的局限性,需要进行改进和优化。
2. 相关工作
之前的研究工作主要集中在交通标志目标检测的数据集构建和算法优化方面。TT100K数据集是一个包含大量交通标志样本的数据集,为交通标志检测提供了重要的数据支持。同时,针对YOLO算法的改进也取得了一定的成果,如网络结构的优化、损失函数的设计等方面的改进均能有效提升检测精度。
3. 方法介绍
本文针对交通标志目标检测,基于改进的YOLO算法,在TT100K数据集上进行了实验。首先,我们对YOLO算法进行了调整和优化,改进了网络结构以适应交通标志的特征。其次,我们设计了针对交通标志的损失函数,提高了模型对交通标志的检测能力。最后,通过大量实验验证了改进算法在TT100K数据集上的有效性和准确性。
4. 实验结果与分析
实验结果表明,我们提出的改进算法在TT100K数据集上取得了较好的性能表现,相比传统的YOLO算法具有更高的检测准确率和更快的检测速度。通过与其他算法进行对比实验,我们进一步验证了改进算法的有效性和优越性。
在原始代码基础上:
注: 实验开启weight_decay或是 不对conv层和FC层的bias参数,以及BN层的参数进行权重衰减,mAP下降很大,mAP@[.5:.95]=0.244
训练集
[Tsinghua-Tencent 100K]
下载的训练集主要包含train和test两部分,分别为6107和3073张图片。统计标注文件,共221类。详细统计每类标志个数,发现很多类的数量为0,所以清楚了部分数量为0的label,剩下类别为151,其中仍存在很多类数量<5.
TT100k转为CoCo格式:
交通标志类别:
python scripts/tt100k2coco.py
pretrained model
密码: lcou
下载到model_data,运行:python predict.py
结果
mAP of yolo
对比yolov3:
如上,mAP不高,分析原因,可能如下:
可优化:
- # ----------------------------------------------------#
- # 对视频中的predict.py进行了修改,
- # 将单张图片预测、摄像头检测和FPS测试功能
- # 整合到了一个py文件中,通过指定mode进行模式的修改。
- # ----------------------------------------------------#
- import time
-
- import cv2
- import numpy as np
- from PIL import Image
-
- from yolo import YOLO
-
- if __name__ == "__main__":
- yolo = YOLO()
- # -------------------------------------------------------------------------#
- # mode用于指定测试的模式:
- # 'predict'表示单张图片预测
- # 'video'表示视频检测
- # 'fps'表示测试fps
- # -------------------------------------------------------------------------#
- mode = "predict"
- # -------------------------------------------------------------------------#
- # video_path用于指定视频的路径,当video_path=0时表示检测摄像头
- # video_save_path表示视频保存的路径,当video_save_path=""时表示不保存
- # video_fps用于保存的视频的fps
- # video_path、video_save_path和video_fps仅在mode='video'时有效
- # 保存视频时需要ctrl+c退出才会完成完整的保存步骤,不可直接结束程序。
- # -------------------------------------------------------------------------#
- video_path = 0
- video_save_path = ""
- video_fps = 25.0
-
- if mode == "predict":
- '''
- 1、该代码无法直接进行批量预测,如果想要批量预测,可以利用os.listdir()遍历文件夹,利用Image.open打开图片文件进行预测。
- 具体流程可以参考get_dr_txt.py,在get_dr_txt.py即实现了遍历还实现了目标信息的保存。
- 2、如果想要进行检测完的图片的保存,利用r_image.save("img.jpg")即可保存,直接在predict.py里进行修改即可。
- 3、如果想要获得预测框的坐标,可以进入yolo.detect_image函数,在绘图部分读取top,left,bottom,right这四个值。
- 4、如果想要利用预测框截取下目标,可以进入yolo.detect_image函数,在绘图部分利用获取到的top,left,bottom,right这四个值
- 在原图上利用矩阵的方式进行截取。
- 5、如果想要在预测图上写额外的字,比如检测到的特定目标的数量,可以进入yolo.detect_image函数,在绘图部分对predicted_class进行判断,
- 比如判断if predicted_class == 'car': 即可判断当前目标是否为车,然后记录数量即可。利用draw.text即可写字。
- '''
- while True:
- img = input('Input image filename:')
- try:
- image = Image.open(img)
- except:
- print('Open Error! Try again!')
- continue
- else:
- r_image = yolo.detect_image(image)
- r_image.save(img.split("/")[-1])
- r_image.show()
-
- elif mode == "video":
- capture = cv2.VideoCapture(video_path)
- if video_save_path != "":
- fourcc = cv2.VideoWriter_fourcc(*'XVID')
- size = (int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
- out = cv2.VideoWriter(video_save_path, fourcc, video_fps, size)
-
- fps = 0.0
- while (True):
- t1 = time.time()
- # 读取某一帧
- ref, frame = capture.read()
- # 格式转变,BGRtoRGB
- frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
- # 转变成Image
- frame = Image.fromarray(np.uint8(frame))
- # 进行检测
- frame = np.array(yolo.detect_image(frame))
- # RGBtoBGR满足opencv显示格式
- frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
-
- fps = (fps + (1. / (time.time() - t1))) / 2
- print("fps= %.2f" % (fps))
- frame = cv2.putText(frame, "fps= %.2f" % (fps), (0, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
-
- cv2.imshow("video", frame)
- c = cv2.waitKey(1) & 0xff
- if video_save_path != "":
- out.write(frame)
-
- if c == 27:
- capture.release()
- break
- capture.release()
- out.release()
- cv2.destroyAllWindows()
-
- elif mode == "fps":
- test_interval = 100
- img = Image.open('img/street.jpg')
- tact_time = yolo.get_FPS(img, test_interval)
- print(str(tact_time) + ' seconds, ' + str(1 / tact_time) + 'FPS, @batch_size 1')
- else:
- raise AssertionError("Please specify the correct mode: 'predict', 'video' or 'fps'.")
企鹅耗子:767172261
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。