想要尝试运行一篇基于YOLOX改进的YOLOV的paper 的程序文章
论文:https://arxiv.org/pdf/2208.09686.pdf
代码:https://github.com/YuHengsss/YOLOV
运行它的demo 的时候出现了以下问题,我的系统为windows11。
C:\ketixiangguan\envs\pytorch\python.exe F:/YOLOV-master/tools/vid_demo.py
2022-12-03 16:22:42.895 | INFO | __main__:main:246 - Args: Namespace(camid=0, ckpt='F:/YOLOV-master/yolov_s.pth', conf=0.05, dataset='vid', demo='video', device='gpu', exp_file='F:/YOLOV-master/exps/yolov/yolov_s.py', experiment_name='yolov_s', fp16=True, fuse=False, gframe=32, legacy=False, name=None, nms=0.5, output_dir='', path='F:/YOLOV-master/jiwawashiping.mp4', save_result=True, trt=False, tsize=576)
C:\ketixiangguan\envs\pytorch\lib\site-packages\torch\functional.py:568: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at C:\cb\pytorch_1000000000000\work\aten\src\ATen\native\TensorShape.cpp:2228.)
return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]
2022-12-03 16:22:44.247 | INFO | __main__:main:256 - Model Summary: Params: 9.84M, Gflops: 25.65
2022-12-03 16:22:45.449 | INFO | __main__:main:267 - loading checkpoint
2022-12-03 16:22:45.543 | INFO | __main__:main:271 - loaded checkpoint done.
Traceback (most recent call last):
File "F:/YOLOV-master/tools/vid_demo.py", line 302, in <module>
main(exp, args)
File "F:/YOLOV-master/tools/vid_demo.py", line 295, in main
imageflow_demo(predictor, vis_folder, current_time, args)
File "F:/YOLOV-master/tools/vid_demo.py", line 188, in imageflow_demo
ratio = min(predictor.test_size[0] / height, predictor.test_size[1] / width)
ZeroDivisionError: float division by zero
Process finished with exit code 1
def imageflow_demo(predictor, vis_folder, current_time, args):
gframe = args.gframe
cap = cv2.VideoCapture(args.path)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) # float
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT) # float
fps = cap.get(cv2.CAP_PROP_FPS)
save_folder = os.path.join(
vis_folder, time.strftime("%Y_%m_%d_%H_%M_%S", current_time)
)
os.makedirs(save_folder, exist_ok=True)
**
ratio = min(predictor.test_size[0] / height, predictor.test_size[1] / width)
**
save_path = os.path.join(save_folder, args.path.split("/")[-1])
logger.info(f"video save_path is {save_path}")
vid_writer = cv2.VideoWriter(
save_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (int(width), int(height))
)
frames = []
outputs = []
ori_frames = []
while True:
ret_val, frame = cap.read()
if ret_val:
ori_frames.append(frame)
frame, _ = predictor.preproc(frame, None, exp.test_size)
frames.append(torch.tensor(frame))
else:
break
res = []
frame_len = len(frames)
index_list = list(range(frame_len))
random.seed(41)
random.shuffle(index_list)
random.seed(41)
random.shuffle(frames)
split_num = int(frame_len / (gframe))#
for i in range(split_num):
res.append(frames[i * gframe:(i + 1) * gframe])
res.append(frames[(i + 1) * gframe:])
for ele in res:
if ele == []: continue
ele = torch.stack(ele)
t0 = time.time()
outputs.extend(predictor.inference(ele))
outputs = [j for _,j in sorted(zip(index_list,outputs))]
for output,img in zip(outputs,ori_frames[:len(outputs)]):
result_frame = predictor.visual(output,img,ratio,cls_conf=args.conf)
if args.save_result:
vid_writer.write(result_frame)
复现YOLOV的全过程
我可以辅助你完成