-
Notifications
You must be signed in to change notification settings - Fork 86
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
如何阶段性保存模型?在训练过程中valset的coco_eval的AP一直是0?total_loss较大 #13
Comments
图片似乎显示不出来,图片 内容如下: |
非常感谢你详细的描述!接下来我们来解决问题:
|
@CPFLAME 使用coco训练也会出现类似问题 |
@lbin 真是糟糕的消息,一度怀疑自己的代码哪里搞错了0 0. 可以看一下你的config或者改动么,我用默认的centernet_res18_coco_0.5.yaml跑结果是正常的。 |
centernet_res18_coco_0.5.yaml 跑10次大概有2~3次是0.0000的mAP,什么也没改 |
啊这。。 加了COMMUNISM,或者调小BASE_LR可能会更稳定一些
|
感谢解答,我试试! |
按照readme配好环境后,直接基于coco数据集训练(./run.sh),代码运行不成功: |
@zc-tx |
你好,用骨干网络res50训练出来的效果较差,请问提供其他的骨干网络的配置吗?@CPFLAME |
@Fly-dream12 目前只有resnet和regnet,需要的话可以自行在backbone里面添加自己的网络 |
@CPFLAME 请问这个项目里面有添加feature loss吗? 好像没看到,是否能提供一个实例呢 |
@5RJ 好喽,您好,我想用自己得两类数据训练一个学生模型,请问该如何使用? |
作者,你好,我有几个问题想请教一下:
我发现目前工程只在训练完全结束后才会保存模型,请问如何阶段性保存模型呢?我通过pip install安装了detectron2,随后在detectron2.engine.defaults.py中的DefaultTrainer增加train函数(以期覆盖TrainerBase中的train函数),具体代码如下(基于TrainerBase.train(), 增加了一行print, 以及阶段性保存模型的代码):
` def train(self, start_iter: int, max_iter: int):
"""
Args:
start_iter, max_iter (int): See docs above
"""
logger = logging.getLogger(name)
logger.info("Starting training from iteration {}".format(start_iter))
import ipdb; ipdb.set_trace()
self.iter = self.start_iter = start_iter
self.max_iter = max_iter
`
然而并没有print对应的内容,模型也没保存上,请问正确的打开方式是什么呢?
环境配置:采用coco/centernet_res50_coco.yaml 进行目标检测任务,数据集按照coco格式处理好,且在xingyizhou发布的CenterNet工程上可以正常训练和测试。
在centerX上对cfg的修改:
cfg.DATASETS.TRAIN = ("table_aline_train",)
cfg.DATASETS.TEST = ("table_aline_val",)
cfg.DATALOADER.NUM_WORKERS = 2
cfg.SOLVER.MAX_ITER = 30
cfg.OUTPUT_DIR = "./output/table_aline"
cfg.SOLVER.IMS_PER_BATCH = 8
cfg.SOLVER.BASE_LR = 0.00125
cfg.INPUT.MAX_SIZE_TRAIN = 1024
cfg.INPUT.MIN_SIZE_TRAIN = 512
此外在main函数中借助register_coco_instances注册了我的数据集。
用作者提供的run.sh脚本,2块gpu运行。
train: 700+
val: 80+
具体问题
![1211](https://user-images.githubusercontent.com/41320257/101897884-35704880-3be6-11eb-979f-4096d97e0244.png)
在训练过程中,发现在val set上做coco evaluation时,结果一直都是下图这样:
在迭代了2300+次后,total_loss从1281降到了6.6左右,看inference中生成的框score很多接近1了,但是它们的位置远远超出了图片的尺寸(尺寸参考下面的信息),例如:
{"image_id": 7, "category_id": 1, "bbox": [-120932.8515625, -51244.3125, 250420.453125, 95695.1640625], "score": 1.0}, {"image_id": 7, "category_id": 1, "bbox": [-146367.90625, -59846.8046875, 301889.0625, 119286.0078125], "score": 1.0}
已尝试的debug
对比total_loss相较原始centerNet上的训练情况(loss收敛到0.8左右),我怀疑也许dataloader加载的bbox有些问题,于是将数据集相关信息打印出来了,举个例子:
centerX/modeling/meta_arch/centernet.py 中 CenterNet.forward()里,输出了batched_inputs[0],得到如下结果:
{'file_name': '/mnt/maskrcnn-benchmark/datasets/table_aline/train2017/d-27.png', 'height': 2339, 'width': 1654, 'image_id': 174, 'image': tensor([[[170., 170., 170., ..., 170., 170., 170.],
[170., 170., 170., ..., 170., 170., 170.],
[170., 170., 170., ..., 170., 170., 170.],
...,
[170., 170., 170., ..., 170., 170., 170.],
[170., 170., 170., ..., 170., 170., 170.],
[170., 170., 170., ..., 170., 170., 170.]],
在annotations文件中,对应的标注信息是:
{"category_id": 1, "id": 317, "image_id": 174, "iscrowd": 0, "segmentation": [[137.76953125, 1297.650390625, 1509.9000000000015, 1297.650390625, 1509.9000000000015, 2105.5, 137.76953125, 2105.5]], "area": 1108576.0, "bbox": [138.0, 1298.0, 1372.0, 808.0]}
{"category_id": 1, "id": 316, "image_id": 174, "iscrowd": 0, "segmentation": [[146.541015625, 194.87890625, 1507.0552978515625, 194.87890625, 1507.0552978515625, 379.3728790283203, 146.541015625, 379.3728790283203]], "area": 250240.0, "bbox": [147.0, 195.0, 1360.0, 184.0]},
经过计算,height/image_height ≈ width/ image_width
然而,原始gt bbox(转换为x1,y1,x2,y2的格式为[138, 1298, 1510, 2106],[147, 195, 1507, 379])和batched_inputs中的bbox()并没有高和宽那样的比例关系,这里是正常的吗?
但是,惊讶的是,当我在centerX/modeling/layers/centernet_gt.py中generate函数 将画图部分代码取消注释后,观察了许多结果图片,框的位置并没有问题。
我有注意到,其实每张图片的shape是不同的,但generate函数里只传入了当前batch最后一张图的shape,并将所有图片按照这个shape(after scale)输出后续的gt,以确保一个batch里的score map是相同shape,这里会是症结所在吗?(原centernet是将图片resize为统一尺寸后,再进行后续的下采样,建gt等)
我现在很迷茫,不知道该如何解决这个问题,希望作者及了解的朋友可以指点迷津,万分感谢!
The text was updated successfully, but these errors were encountered: