【YOLO】之理解预训练和微调
问题描述在阅读YOLO论文的时候总是出现预训练(pretraining)以及微调(fine tuning)。那么问题来了预训练是什么为什么要用预训练怎样预训练微调是什么为什么要用微调怎样微调一查询了网上的一些理解参考链接https://blog.csdn.net/abc13526222160/article/details/89320108?depth_1-什么是预训练和微调你需要搭建一个网络模型来完成一个特定的图像分类的任务。首先你需要随机初始化参数然后开始训练网络不断调整直到网络的损失越来越小。在训练的过程中一开始初始化的参数会不断变化。当你觉得结果很满意的时候你就可以将训练模型的参数保存下来以便训练好的模型可以在下次执行类似任务时获得较好的结果。这个过程就是 pre−training。之后你又接收到一个类似的图像分类的任务。这时候你可以直接使用之前保存下来的模型的参数来作为这一任务的初始化参数然后在训练的过程中依据结果不断进行一些修改。这时候你使用的就是一个 pre−trained模型而过程就是 finetuning。所以预训练 就是指预先训练的一个模型或者指预先训练模型的过程微调 就是指将预训练过的模型作用于自己的数据集并使参数适应自己数据集的过程。预训练和微调的作用在 CNN领域中实际上很少人自己从头训练一个 CNN网络。主要原因是自己很小的概率会拥有足够大的数据集基本是几百或者几千张不像 ImageNet有 1200 万张图片这样的规模。拥有的数据集不够大而又想使用很好的模型的话很容易会造成过拟合。所以一般的操作都是在一个大型的数据集上ImageNet训练一个模型然后使用该模型作为类似任务的初始化或者特征提取器。比如 VGGInception等模型都提供了自己的训练参数以便人们可以拿来微调。这样既节省了时间和计算资源又能很快的达到较好的效果。二个人理解小白级解释首先为什么使用预训练呢因为自己的数据集规模不够大一般只有几百张数千张直接应用这些数据训练一个网络效果可能不太好训练的模型参数可能不是最优的容易产生过拟合问题。故提出一种思路先在 ImageNet 上预训练当预训练效果比较好时将训练模型的参数保存下来再训练自己的数据集。为什么呢因为 ImageNet有 1200 万张图片拥有足够大的数据集方便达到最好的训练效果。为什么要用训练模型参数呢因为预训练的结果是比较好的参数也是最优的使用预训练模型的参数具有一定的参考意义。然后什么是微调微调就是微调预训练模型的参数以适应自己数据集的训练。为什么要微调呢毕竟每个人的数据集不一样个人需求也不一样有的要求速度快有的要求精度高个人硬件配置不一样故微调是根据自己的实际情况而定。最后当训练完自己的数据集以后就可以检测了预测物体的位置和类别。我们在训练自己的数据集时直接微调训练模型VGGResnetdarknet等等即可不需要预训练直接下载预训练模型当然也可以直接训练。预训练的计算量很大也非常耗时。再比如YOLOv3训练自己的数据集时在Imagenet上预训练好的模型参数darknet53.conv.74大小76MB基础上继续训练。darknet53.conv.74下载链接 https://pjreddie.com/media/files/darknet53.conv.74下载完成后放在darknet主目录。也可以直接在darknet目录下通过wget命令下载wget https://pjreddie.com/media/files/darknet53.conv.74附YOLOv1论文训练部分原文叙述。
