常规情况下,目标检测要进行视频流检测,通常需要进行模型的加速。常规的加速就是使用tensorrt进行模型的量化,以进行视频流的检测。本文主要基于tensorrt进行实时视频流检测。
为了进行模型的量化,作者使用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.conf4.在使用过程中,原作者的推送命令不能进行推送,可使用以下命令进行推送:
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 条评论) “” |