nanodet相关
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