目录
1.配置环境2.问题描述3.解决方法3.1设置需要接续训练的结果3.2设置训练代码4.原理5.结束语1.配置环境
操作系统:Ubuntu20.04
CUDA版本:11.4
Pytorch版本:1.9.0
TorchVision版本:0.7.0
IDE:PyCharm
硬件:RTX2070S*2
2.问题描述
在训练YOLOv5时由于数据集很大导致训练时间十分漫长,这期间Python、主机等可能遇到死机的情况,如果需要训练300个epoch但是训练一晚后发现在200epoch时停下是十分崩溃了,好在博主摸索到在yolov5中接续训练的方法了。
3.解决方法
首先直接上方法
3.1设置需要接续训练的结果
如果你想从上一次训练结果中回复训练,那么首先保证你的训练结果(一般都存放在/runs/train目录下)在保存目录中代号为最大的。
如上图所示,在train文件夹下一共有14个训练结果,假设我的第12次训练中断了,想接着第12次的结果继续训练,那么只需要将比12更大的:exp13、exp14这两个文件夹删除或者移动到其他地方,这样便设置好了需要接续训练的结果。
3.2设置训练代码
代码见yolov5代码中的train.py
if __name__ == "__main__": os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE" parser = argparse.ArgumentParser() parser.add_argument("--weights", type=str, default="../weights/yolov5s.pt", help="initial weights path") parser.add_argument("--cfg", type=str, default="./models/yolov5s.yaml", help="model.yaml path") parser.add_argument("--data", type=str, default="data/car.yaml", help="data.yaml path") parser.add_argument("--hyp", type=str, default="data/hyp.scratch.yaml", help="hyperparameters path") parser.add_argument("--epochs", type=int, default=300) parser.add_argument("--batch-size", type=int, default=32, help="total batch size for all GPUs") parser.add_argument("--img-size", nargs="+", type=int, default=[640, 640], help="[train, test] image sizes") parser.add_argument("--rect", action="store_true", help="rectangular training") parser.add_argument("--resume", nargs="?", const=True, default=False, help="resume most recent training") parser.add_argument("--nosave", action="store_true", help="only save final checkpoint") parser.add_argument("--notest", action="store_true", help="only test final epoch") parser.add_argument("--noautoanchor", action="store_true", help="disable autoanchor check") parser.add_argument("--evolve", action="store_true", help="evolve hyperparameters") parser.add_argument("--bucket", type=str, default="", help="gsutil bucket") parser.add_argument("--cache-images", action="store_true", help="cache images for faster training") parser.add_argument("--image-weights", action="store_true", help="use weighted image selection for training") parser.add_argument("--device", default="1", help="cuda device, i.e. 0 or 0,1,2,3 or cpu") parser.add_argument("--multi-scale", action="store_true", help="vary img-size +/- 50%%") parser.add_argument("--single-cls", action="store_true", help="train multi-class data as single-class") parser.add_argument("--adam", action="store_true", help="use torch.optim.Adam() optimizer") parser.add_argument("--sync-bn", action="store_true", help="use SyncBatchNorm, only available in DDP mode") parser.add_argument("--local_rank", type=int, default=-1, help="DDP parameter, do not modify") parser.add_argument("--workers", type=int, default=8, help="maximum number of dataloader workers") parser.add_argument("--project", default="runs/train", help="save to project/name") parser.add_argument("--entity", default=None, help="W&B entity") parser.add_argument("--name", default="exp", help="save to project/name") parser.add_argument("--exist-ok", action="store_true", help="existing project/name ok, do not increment") parser.add_argument("--quad", action="store_true", help="quad dataloader") parser.add_argument("--linear-lr", action="store_true", help="linear LR") parser.add_argument("--label-smoothing", type=float, default=0.0, help="Label smoothing epsilon") parser.add_argument("--upload_dataset", action="store_true", help="Upload dataset as W&B artifact table") parser.add_argument("--bbox_interval", type=int, default=-1, help="Set bounding-box image logging interval for W&B") parser.add_argument("--save_period", type=int, default=-1, help="Log model after every "save_period" epoch") parser.add_argument("--artifact_alias", type=str, default="latest", help="version of dataset artifact to be used") opt = parser.parse_args()
注意上面patser中第9个参数resume,将其设置为default=True
即可,也就是那一行代码改变为
parser.add_argument("--resume", nargs="?", const=True, default=True, help="resume most recent training")
接下来运行python train.py边不会产生新的exp而是在最新的exp上接续训练
如下图所示:
博主运行完python train.py
后便是接着上一次训练完139个epoch继续训练
4.原理
其实接续训练不是什么深奥内容 ,博主在训练自己模型的时候也早会使用。
我们在使用yolov5提供的权重,也就是像yolov5s.pt之类的文件时就是使用了官方提供的模型接续训练的。
我们每次训练模型时都会生成新的模型结果,存放在/runs/train/expxxx/weights下,接续训练就是将上次训练一半得到的结果拿来和模型结合进行训练。具体来说:如果最终训练目标是300个epoch,上次训练完了139个epoch,那么就是将第139个epoch得到的权重载入到模型中再训练161个epoch便可等效为训练了300个epoch
5.结束语
到此这篇关于Yolov5训练意外中断后如何接续训练的文章就介绍到这了,更多相关Yolov5训练中断接续训练内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?