多目标跟踪2解决问题OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\resize.cpp:40
1.问题出现背景:
在ByteTrack代码中添加了一个deepsort的跟踪算法,也就是实现YOLOx的检测器 deepsort的组合,可是在使用MOT17评测的过程中有些序列可以跑完,但是有些序列跑到中间就会报错
网上有很多文章指出是路径的问题,但是路径并没有出错,还是出现了这样的问题
2.问题报错函数:
(1)报错提示如下:
Loading weights from C:/Users/zxc/Desktop/ByteTrack-main/deep_sort/deep/checkpoint/ckpt.t7... Done!
Traceback (most recent call last):
File "C:/Users/zxc/Desktop/ByteTrack-main/tools/demo_track.py", line 558, in <module>
main(exp, args)
File "C:/Users/zxc/Desktop/ByteTrack-main/tools/demo_track.py", line 549, in main
image_demo_deepsort2(predictor, vis_folder, current_time, args)
File "C:/Users/zxc/Desktop/ByteTrack-main/tools/demo_track.py", line 378, in image_demo_deepsort2
outputs = deepsort.update((torch.Tensor(bbox_xywh)), (torch.Tensor(confs)), img_info['raw_img'])
File "C:\Users\zxc\Desktop\ByteTrack-main\deep_sort\deep_sort.py", line 29, in update
features = self._get_features(bbox_xywh, ori_img)
File "C:\Users\zxc\Desktop\ByteTrack-main\deep_sort\deep_sort.py", line 99, in _get_features
features = self.extractor(im_crops)
File "C:\Users\zxc\Desktop\ByteTrack-main\deep_sort\deep\feature_extractor.py", line 58, in __call__
im_batch = self._preprocess(im_crops)
File "C:\Users\zxc\Desktop\ByteTrack-main\deep_sort\deep\feature_extractor.py", line 42, in _preprocess
im=_resize(im, self.size)
File "C:\Users\zxc\Desktop\ByteTrack-main\deep_sort\deep\feature_extractor.py", line 38, in _resize
return cv2.resize(im.astype(np.float32)/255., size)
cv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\resize.cpp:4052: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
(2)找到报错的函数位置:
位于\feature_extractor.py文件中,在deepsort的特征提取中的resize函数
def _resize(im, size):
return cv2.resize(im.astype(np.float32)/255., size)
im_batch = torch.cat([self.norm(_resize(im, self.size)).unsqueeze(0) for im in im_crops], dim=0).float()
return im_batch
3.问题解决办法:
通过报错的提示:
cv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\resize.cpp:4052: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
可知可能是在resize函数处有空帧的情况,因此解决的办法是在使用resize前先判断一下是否为空帧,代码修改如下:
def _resize(im, size):
try:
return cv2.resize(im.astype(np.float32)/255., size)
except:
pass
这是网上的其他人分享的方法,但是我在使用后并没有解决问题,可以看一下resize的下一步需要什么处理
im_batch = torch.cat([self.norm(_resize(im, self.size)).unsqueeze(0) for im in im_crops], dim=0).float()
可以看到,每一个img在经过resize后,还需要经过self.norm()函数的处理,因为我们上一步将空帧跳过了,所以它空帧经过resize之后的结果还是为空,所以在这一步仍然需要判断,代码修改如下:
def _preprocess(self, im_crops):
"""
TODO:
1. to float with scale from 0 to 1
2. resize to (64, 128) as Market1501 dataset did
3. concatenate to a numpy array
3. to torch Tensor
4. normalize
"""
def _resize(im, size):
try:
return cv2.resize(im.astype(np.float32)/255., size)
except:
pass
img=[]
for im in im_crops:
im=_resize(im, self.size)
if im is not None:
im=self.norm(im).unsqueeze(0)
img.append(im)
im_batch=torch.cat(img, dim=0).float()
#im_batch = torch.cat([self.norm(_resize(im, self.size)).unsqueeze(0) for im in im_crops], dim=0).float()
return im_batch
将原函数注释掉,并按步骤拆开,对im进行判断,如果不是空,进行norm()处理,并将成功处理的im加入到img列表管理,这是img中就没有空的结果了
问题得到解决!!!
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhiaakga
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel打印预览压线压字怎么办
PHP中文网 06-22