@[TOC] (自己的数据集训练detectron)
先建立自己的训练数据:
注:
annotations下放了两个json文件:train.json 和 val.json(里面什么都没有写,因为没有验证集)
train下放的是训练集的原始图片
val下放的是验证集的原始图片(我的下面什么都没放,因为没有验证集)
1. 选择的训练网络:
我选择的是:configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml
2. 修改 datasets/dataset_catalog.py
在datasets 里面加上自己的数据集
##3. 修改 configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml
4. 运行代码
python tools/train_net.py --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml --skip-test OUTPUT_DIR /home/lixn/zy_work/out_dir
遇到了错误 : Loss is NaN
Loss is NaN:损失大过头了
可能的原因:
- 梯度爆炸造成Loss爆炸
学习率过高的情况下,直接影响到每次更新值的程度比较大,走的步伐因此也会大起来,过大的学习率会导致如法顺利达到最低点,稍有不慎就会跳出可控区域,因此将会面对的就是损失成倍增加。这种情况很容易在网络层数比较深的时候出现。
解决方法:降低初始的学习率,并设置学习率衰减。
将.yaml文件下的BASE_LA:0.02 改小
查看显存:nvidia-smi
最终我的配置文件:
最终训练结果:
5. 测试
修改文件:’/detectron/datasets/dummy_datasets.py’将classes 安装生成的train.json 中categories分类顺序改为自己的类别。
关于测试的命令:
python tools/infer_simple.py --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml --output-dir /home/lixn/zy_work/out_dir --wts /home/lixn/zy_work/out_dir/train/labelme_train/generalized_rcnn/model_final.pkl demo
–cfg:配置文件
–output-dir:输出文件夹
–wts:训练好的权重
demo:该位置可改为自己要测试的图片放置的位置
我的测试代码:
python tools/infer_simple.py --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml --output-dir /home/lixn/zy_work/out_dir --wts /home/lixn/zy_work/out_dir/train/labelme_train/generalized_rcnn/model_final.pkl /home/lixn/zy_work/mydata/val/