Open lkxxxxx opened 9 months ago
可以使用 https://pytorch.org/docs/stable/profiler.html 或者其他第三方的库
请问一下pytorch版本的flops怎么计算?感谢!!
可以使用 https://pytorch.org/docs/stable/profiler.html 或者其他第三方的库
找到了一个第三方库 @MrYXJ https://github.com/MrYxJ/calculate-flops.pytorch 在det_solver.py里改最后一个val函数,先安装2个库pip install calflops pip install transformers,
from calflops import calculate_flops
def val(self, ):
self.eval()
base_ds = get_coco_api_from_dataset(self.val_dataloader.dataset)
module = self.ema.module if self.ema else self.model
test_stats, coco_evaluator = evaluate(module, self.criterion, self.postprocessor,
self.val_dataloader, base_ds, self.device, self.output_dir)
batch_size = 1
input_shape = (batch_size, 3, 640, 640)
flops, macs, params = calculate_flops( model=self.model,
input_shape=input_shape,
output_as_string=True,
output_precision=4)
print("Model FLOPs:%s MACs:%s Params:%s \n" %(flops, macs, params))
if self.output_dir:
dist.save_on_master(coco_evaluator.coco_eval["bbox"].eval, self.output_dir / "eval.pth")
return
之后运行test脚本就可以了,比如 python tools/train.py -c configs/rtdetr/rtdetr_r18vd_6x_coco.yml -r output/rtdetr_r18vd_6x_coco/checkpoint0071.pth --test-only
请问一下pytorch版本的flops怎么计算?感谢!!
可以使用 https://pytorch.org/docs/stable/profiler.html 或者其他第三方的库
测出来18版本的是20M,61 GFLOPs
如果觉得输出过多的话,把输入细节关掉
calculate_flop设置参数print_detailed =False
@NeKoooo233 太详细了,非常感谢!! 再请问一下您是怎么计算模型的fps,怎么比较公平的和其他模型做对比。 我现在第一个方法是直接在det_engine最后面添加代码。 images = torch.rand(1, 3, 640, 640) images = images.to('cuda:0') import time
total_time = 0
for i in range(1000):
start = time.time()
# 执行模型推理
model(images)
end = time.time()
# 计算fps
fps = 1 / (end - start)
# 计算总时间
total_time += end - start
# 打印时间,使用毫秒
print(f'消耗{(end - start) * 1000}ms', f'fps:{fps}')
# 计算平均fps
avg_fps = 1 / (total_time / 1000)
print(f'平均fps:{avg_fps}',f'设备:{device}')
第二种是把模型输出成onnx模式,再调用onnx模型进行计算fps。 这两种方法得到的fps差距还是挺大的,所以在对比其他模型fps时怎么做到公平一点?
@lkxxxxx 我还没开始测速的工作,到时候准备用作者提供的工具试一试 https://github.com/lyuwenyu/RT-DETR/tree/main/benchmark 我觉得在onnx或者tensorRT上面测比较好,至于公平,那只能把所有需要对比的模型在同一个设备上测试了, 毕竟作者用的T4,我也没有😭 或许可以去autoDL上面租T4
@NeKoooo233 好的,了解了,非常感谢
@NeKoooo233 太详细了,非常感谢!! 再请问一下您是怎么计算模型的fps,怎么比较公平的和其他模型做对比。 我现在第一个方法是直接在det_engine最后面添加代码。 images = torch.rand(1, 3, 640, 640) images = images.to('cuda:0') import time # 初始化变量 total_time = 0 for i in range(1000): start = time.time() # 执行模型推理 model(images) end = time.time() # 计算fps fps = 1 / (end - start) # 计算总时间 total_time += end - start # 打印时间,使用毫秒 print(f'消耗{(end - start) * 1000}ms', f'fps:{fps}') # 计算平均fps avg_fps = 1 / (total_time / 1000) print(f'平均fps:{avg_fps}',f'设备:{device}') 第二种是把模型输出成onnx模式,再调用onnx模型进行计算fps。 这两种方法得到的fps差距还是挺大的,所以在对比其他模型fps时怎么做到公平一点?
第一种测出来的速度还不如yolov8呢,怎么回事啊?
@71tongwei 你对比的是yolov8的哪个版本,yolov8模型本身预测速度还是很快的,但是我转换成onnx后,同时加上后处理操作,yolov8的速度就不如rt-detr了
请问一下pytorch版本的flops怎么计算?感谢!!