基于tensorrt下的视频流目标检测

常规情况下,目标检测要进行视频流检测,通常需要进行模型的加速。常规的加速就是使用tensorrt进行模型的量化,以进行视频流的检测。本文主要基于tensorrt进行实时视频流检测。

  1. 需要的工具包(darknet,tensorrt,onnx)
  2. 进行视频的推流(srs4)

为了进行模型的量化,作者使用AlexeyAB/darknet进行了厨房帽子的检测。文中所有内容参考(https://github.com/rasyadmar/Yolo-RTSP-JetsonSide)进行了设计。

1.模型训练,作者通过使用m3u8解析了视频流网站进行了视频的下载和截取,并使用少部分手动标注的数据训练的模型进行不断迭代重新训练,得到了一个训练集(13000张图片),验证集(1200张图片)进行模型的训练,得mAP:0.972。

2.进行模型的转换。模型转换使用(https://github.com/jkjung-avt/tensorrt_demos#yolov3)进行了模型得转换,得到onnx和tensorrt模型。

3.srs流服务设置。使用(https://github.com/ossrs/srs)使用命令:

docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 \
registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 ./objs/srs -c conf/docker.conf

4.在使用过程中,原作者的推送命令不能进行推送,可使用以下命令进行推送:

        command = [ 'ffmpeg',
                    '-y', '-an',
                    '-f', 'rawvideo',
                    '-vcodec', 'rawvideo',
                    '-pix_fmt', 'bgr24',
                    '-s', sizeStr,
                    '-r', '25',
                    '-i', '-',
                    '-b:v', '0',
                    '-qscale', '0',
                    #'-c:v', 'libx264',
                    '-pix_fmt', 'yuv420p',
                    #'-preset', 'ultrafast',
                    #'-f', 'rtsp',
                    #'-vcodec', 'copy',
                    '-f', 'flv',
                    rtsp_server
                    ]
boxes, confs, classes = self.cf_trt_yolo.detect(frame, 0.6)
frame = self.cf_vis.draw_bboxes(frame, boxes, confs, classes)
process = sp.Popen(command, stdin=sp.PIPE)
process.stdin.write(frame.tobytes())

实际测试过程中,有口罩和帽子两个检测模型,实时fps为20(未做量化int8)。最后来一张识别效果图:

检测结果

在使用过程中,应该注意视频流拉取的过程中可能需要重新拉取,应具有判断流断开并正确拉取的过程。

在进行帽子检测的过程中,由于佩戴黑色帽子和未戴帽子的会存在识别错误的问题,需要再进行一次分类,或者再做一个全局nms进行滤除。

当然也可以使用先检测人体的方式进行头部裁剪再进行一个二分类。(该方法未测试)。

原图存在的图片有只有露出帽子的(应该是佩戴的),有只包含人脸部分的(不能确定是否佩戴)

deepstream效果也不错,但有部分问题未解决。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章