我在google中通过克隆git克隆yolo4 https://github.com/roboflow-ai/pytorch-YOLOv4.git
建立了一个git pytorch框架。
我通过训练创造了检查点。由于我们需要更强大的训练模型,我再次给训练分配预先训练的检查点,但损失似乎像第一次训练一样具有很高的价值。
代码是用于培训!python train.py -b 2 -s 1 -l 0.001 -g 0 -pretrained ./Yolov4_epoch100_latest.pth -classes 1 -dir ./train -epochs 100
的。
不确定我的预先训练的检查点是否被用于2端训练?如果使用它,那么为什么第二次在开始训练时损失的价值似乎像第一次训练一样高?如果你有任何想法,请分享你的想法。
发布于 2020-12-15 20:52:56
显然,只更新了预训练模型的较低层权重。若要更改它,请打开models.py并向下滚动到Yolov4的类定义。正如人们所看到的,只有1-下降5和脖子层是更新的预先训练的模型重量,而头部是开始新的。应该将此代码部分更改为类似于:
if yolov4conv137weight:
self.neck = Neck()
**self.head = Yolov4Head(output_ch)**
_model = nn.Sequential(self.down1, self.down2, self.down3, self.down4, self.down5, self.neck, **self.head**)
pretrained_dict = torch.load(yolov4conv137weight)
model_dict = _model.state_dict()
# 1. filter out unnecessary keys
pretrained_dict = {k1: v for (k, v), k1 in zip(pretrained_dict.items(), model_dict)}
# 2. overwrite entries in the existing state dict
#print("update weights")
model_dict.update(pretrained_dict)
_model.load_state_dict(model_dict)
# head
**else:
self.head = Yolov4Head(output_ch)**
再次运行,并观察预期的损失(希望)。祝好运!
https://datascience.stackexchange.com/questions/80944
复制相似问题