今天在使用Yolov5的detect.py对本地视频进行推理时,发现推理速度受硬件性能影响比较大,为提高检测效率,在部分没必要逐帧检测的情况下,可以考虑设置跳帧检测。
对detect.py观察了一番之后,发现视频读取靠的是dataloaders.py库,于是继续观察。
最终得出了以下解决方案:
if self.video_flag[self.count]:
# Read video
self.mode = 'video'
ret_val, img0 = self.cap.read()
# 设置要读取的下一帧,这里表示每次跳 10 帧
self.cap.set(cv2.CAP_PROP_POS_FRAMES, self.frame + 10)
while not ret_val:
self.count += 1 # 需要推理的文件序数
self.cap.release()
if self.count == self.nf:
raise StopIteration
path = self.files[self.count]
self.new_video(path)
ret_val, img0 = self.cap.read()
self.frame += 10
s = f'video {self.count + 1}/{self.nf} ({self.frame}/{self.frames}) {path}: '
文章来源地址https://www.toymoban.com/news/detail-522352.html
注意事项:dataloaders.py 里面,跳帧之后,记得加个self.frame加跳帧数之后是否大于self.frames总帧数的判断,如果大于,就跳到下一段媒体内容进行检测,不然偶尔会一直循环下去,加载帧数超过视频实际总帧数。
思路如下:
图中代码236行 while not 仅判断了ret_val,是否读取到视频帧,可以同时加个“或”条件:
self.frame+跳帧数>self.frames
保存的检测结果视频属性帧率不变,但由于跳了帧,所以呈现出加速效果,请根据实际需求酌情修改。文章来源:https://www.toymoban.com/news/detail-522352.html
到了这里,关于Yolov5对本地视频进行推理时,实现跳帧检测,提高推理效率的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!