欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

nanodet相关

程序员文章站 2022-03-03 21:18:43
nanodet网址:https://github.com/RangiLyu/nanodet训练保存的pth模型比预想大:issues/50训练保存的pth模型(7MB出头)比作者提供的pth模型(3MB)更大,原因是训练过程中保存的模型是附带优化器的check point。可以在save model时不保存优化器来获得3MB的模型。(作者原话)保存模型的函数在项目工程的nanodet/util/check_point.py defsave_model。调用地点有两处line133 &am.....

nanodet网址:https://github.com/RangiLyu/nanodet

 

训练保存的pth模型比预想大:issues/50

训练保存的pth模型(7MB出头)比作者提供的pth模型(3MB)更大,原因是训练过程中保存的模型是附带优化器的check point。可以在save model时不保存优化器来获得3MB的模型。(作者原话)

保存模型的函数在项目工程的nanodet/util/check_point.py def save_model。调用地点有两处line133 & line151,在nanodet/trainer/trainer.py def run,分别是保存last和保存best。要另外保存不包含优化器的模型只需要在保存语句下面再添加

save_model(self.rank, self.model, os.path.join(self.cfg.save_dir, 'model_last.pth'), epoch, self._iter)

其实就是直接去除函数最后的优化器信息输入即,因为函数优化器的default是None。

 

调整demo.py,将infer得到的图片结果保存在指定文件夹:

推理使用的是一个Predictor类,推理使用的是类里面的inference方法,将结果呈现到图片上用的是visualize方法。

visualize方法:使用self.model.head.show_result进行结果呈现。self.model是Predictor类的model属性,由build_model(cfg.model)函数创建。在前面的import找到对应函数model/arch/__init__.py,这个函数是根据同文件夹的gfl.py创建一个GFL类,且看gfl.py知道GFL类是继承了同文件夹的OneStage类,可以见到model的head属性也是在OneStage类创建的。在one_stage.py的import找到对应函数model/head/__init__.py,里面根据config的参数生成对应的head结构。如果config填的是NanoDetHead,就会生成NanoDetHead类,NanoDetHead类继承了GFLHead类,show_result方法就在gfl_head.py内。show_result方法使用了nanodet/util/visualization.py里面的overlay_bbox_cv函数(返回画好框的图)。

项目infer图片的结果原本是cv2.imshow,但是在linux上没有图形界面,因此显示不了,所以将其改为将infer结果图片保存到指定路径。

  • 修改nanodet/model/head/gfl_head.py的def show_result,将imshow改为imwrite到指定路径
  • 修改demo/demo.py。增加一个输入参数 infer图片保存路径。在predictor.visualize(res, meta, cfg.class_names, 0.35, imgsavepath) 增加imgsavepath参数,并在这行上面加了三行代码确定每张图的保存路径。

 

本文地址:https://blog.csdn.net/zicai_jiayou/article/details/110469717