基于目标检测的回归创新实验感想(基于yolo v1)

    科技2025-07-14  17

    Regression from [x,y,w,h] to [x,y,s,r] (ratioNet)

    出发点:为什么不直接预测长度和比例使anchor更加方便? s c a l e = w ∗ h r a t i o = w h scale = \sqrt{w*h} \\ ratio = \sqrt{\frac{w}{h}} scale=wh ratio=hw

    Experiment Result

    先来看结果,采用了yolo v1 作为基本网络,使用VOC2007+VOC2012作为数据集进行实验

    原生yolov1ratioNet0-0.480220-0.462271-0.333321-0.2003520.15677420.03957230.32596730.15962740.36416140.21112850.43054350.22696460.44276560.21186570.49644170.25723380.50885980.2621390.53076290.273801100.544456100.282887

    很可惜我对于训练的可视化不太熟悉,没有及时保存,但是在训练的过程中,我发现使用ratioNet的loss在2左右,而原生yolov1则在2~3附近

    Analysis

    并且这几天在实验室和其他人的交流中我发现一点,loss低并不代表mAP就高,在我的直觉上,这应该是一个十分自然的事情,loss包含了定位的损失,分类的损失,如果loss低那么自然而然(不知道这还能不能叫做自然而然),mAP就会相应的高,从这个角度上,我提出的想法是:

    单单测试定位精度、分类精度人工查看预测的坐标与相应的groundtruth的比较是否系数、坐标转换正确

    以上三点是从这几个角度来想的:

    mAP的计算是在IOU满足阈值的情况查看分类结果,那么mAP低可能就有两种原因引起,一种是检测框的IOU阈值过小,另一种分类框判断的类别是有限的。

    第二点的看法其实不是从这个实验上的出来的,是在做HRSC2016数据集测试的时候,数据集由师兄提供,正确的数据集的一个目标应为[position classname difficult],而师兄可能在考虑到HRSC2016只有一个类别,把数据修改为了[position imagename difficult]这导致了代码中判断类别是否一致的出错,导致我的mAP始终为零。但上述查找代码是我先自行比对了预测框和真实框的坐标,发现其实很接近,按理说不会出现mAP为零的情况,于是进行排查发现了这一类问题。

    在这个实验中,我对这一块排查时间最久,毕竟我进行修改的就是这一模块,改多错多,因此无限的进行排查,总的来说是这么几个心得

    修改代码前,应把修改的地方记录,既方便排查也不会重复的去找几个工作我的想法不能work的原因,我觉得是提出的ratio包含除法,我觉得这是一个需要谨慎使用的操作,因为除法可能导致inf,nan的出现,在实验过程中没有进行排查,是在之后输出数据的时候才发现的在本次实验中,loss还是常见的L2损失,但是如果在之后涉及到了求导方式的改变,可能更需要注意吧

    Conclusion

    从实验方面来讲,还是对整体的模型不熟悉,经常反复地在模型和数据加载中切换调试,浪费时间,需减少这一类问题(实验记录很重要吧,还有问题考虑要周全)实验其实还是不充分的,目前来讲为什么ratio的想法不work,是因为在IOU计算的时候转换带来了精度的误差,自我感觉这还不如直接预测w、h来的痛快(但是没有充分的证据说明为啥不work \心累.jpg)从自我感觉IOU限制了模型的角度来看,问题是mAP的计算就会涉及到IOU,也许应该从L2 loss上进行修改,在loss上说明w,h的劣势,突出预测ratio和scale的优点

    End

    这个实验大概做了一个礼拜吧,其实还有很多没做的东西,有兴趣的同学可以告诉我可以把实验补充上,或者把创新点在做的更有意思一点。

    Ps. 读研不简单,能找到合适的工作就去吧,逐渐围城的时代安逸最重要了

    提出一个idea(别人哪里不好,或者叠加别人的idea)实验(一定要记录做了啥!)分析(为什么work为什么不work)

    每一步都很关键吧,我觉得写下来自己也能长点记性,本来这么一个实验不需要一个礼拜的,还是走了挺多弯路的,

    就这。

    希望有更多的志同道合之人吧

    Processed: 0.010, SQL: 8