SSD pytorch 运行debug

news/2024/7/3 12:19:06
  • 出于某些原因需要在一个数据集上测试SSD

  • 源代码来自github 高star的repos:https://github.com/amdegroot/ssd.pytorch
  • 为了在自己的数据集上进行训练和测试,首先是要按下面这篇blog的流程先修改:
    https://blog.csdn.net/dingkm666/article/details/88775428

  • 数据集处理:
  • 之前为了在faster-rcnn上测试,数据集标注已经用脚本生成为coco的json格式,而这个repos虽然支持coco的训练却不支持coco的测试,想来想去还是把数据集变成voc格式比较方便,coco转voc网上脚本很多,我随便找了个:
    https://blog.csdn.net/minstyrain/article/details/79572155亲测有效,只有路径处理和类别处理需要根据自己的需要做些修改,此外第100行和第101行可以注释掉。

  • 模型脚本修改:然而这个repos的bug实在有点多,即使按上面提到的blog进行修改,还是有其它需要修改的地方,(注意,是先按上面blog进行修改,然后再按下面的进行修改,才可以跑得起来)如下:
  • 由于用脚本生成的voc数据集的文件夹名字是image而不是jpegimage,所以data/voc0712.py文件中VOCDetection类的init函数中self._imgpath要改为self._imgpath = osp.join('%s', 'images', '%s.jpg')
  • 各种路径和类别都要修改,我可能记不全,有遗漏,跑的时候出现bug再改就行了,总的来说不算太麻烦:
    • voc0712.py中的VOC_CLASSES和VOC_ROOT
    • config.py中的voc和HOME,HOME要改为你repos的根目录的地址,如:/home/graduate/wjh/ssd/ssd.pytorch
    • 此外即使你跑VOC,coco部分的路径也需要修改,因为这代码特别坑的是一些os.join之类的并不是放在函数内部而是放在外面,所以即使你没有调用到coco的类,只要用到了这个文件,就会报路径错误,具体是哪里我忘了,报错的时候根据报错改就行了,不难,有一个就是会找不到coco_label.txt,其实你没有跑coco数据集但他还是会这样,你就把这个txt放到那个位置去就行了也不是什么问题
  • 接下来是巨坑的模型训练部分,有两个bug:
    • 一个是layers/modules/multibox_loss.py的第97行,loss_c[pos] = 0这一行会报错,因为loss_c是n x 1的长条状的tensor而pos是a x b的长方形tensor,这行的本意是把loss_c当成长方形tensor,和pos形状一样,然后loss_c在pos等于1的位置的元素置为0,但是形状不匹配会出错,所以在这一行前面加上一行loss_c = loss_c.view_as(pos)
    • 一个是train.py里有一行:images, targets = next(batch_iterator),这个是错误用法,next(batch_iterator)在遍历完一次数据后就会停止,并不会像dataloader那样不停地迭代重新开始,所以要把这一句改成下面这一段:
		try:
            images, targets = next(batch_iterator)
        except StopIteration:
            batch_iterator = iter(data_loader)
            images, targets = next(batch_iterator)
  • 还有一个不算错,就是模型的学习率太高了,最好还是调低点不然跑着跑着就爆掉了,在train.py的43行附近,有一个lr的参数

  • 完成上述修改就行了,我已经跑起来训练了,莫得太大问题,至于测试等我跑完训练再看看

http://www.niftyadmin.cn/n/3658022.html

相关文章

转载:如何指定程序在Vista上面需要提升权限运行(Elevated)

在Manifest中加上下面内容即可:level""asInvoker""uiAccess""false"" />全文请见:http://blogs.msdn.com/shawnfa/archive/2006/04/06/568563.aspx

CornerNet跑自己数据集笔记

原repos地址为:https://github.com/princeton-vl/CornerNet为了在服务器的cuda10电脑上用自己的数据集跑这份代码,主要有三点: 修改数据集接口适应cuda10和pytorch1.5训练配置 接下来就分点详述: 修改数据集接口: 有…

转贴:Mark Russinovich的Inside Vista Kernel系列文章,讲到了Vista内核的调度,IO,内存管理,缓存,事务处理,安全等众多新特性

Mark Russinovich的Inside Vista Kernel系列文章。Mark是SysInternals的创始人之一,是多个著名系统工具的作者,是Windows系统内核方面的高手。不久前他接受了Microsoft的Technical Fellow职位,参与Windows Kernel开发。本文讲到了Vista内核的…

2-6月以来密集的项目实践的总结

2-4月做了三件事,为MICCAI会议投稿论文准备一些实验,打了个超分辨率比赛NTIRE,得了大概是第7名/200多个参赛队伍,做了一个新冠病毒相关肺部图像诊断的项目;4-6月以来做了三件事情,写了一份(实际…

今天David Solomon的为期三天的Windows Internal培训刚结束

今天David Solomon的为期三天的Windows Internal培训刚结束,很累,但是也受益匪浅。讲座基本上是他和Mark合著的Windows Internal书最新的Vista相关内容,讲的非常清晰透彻,不愧是David。(其实搞技术不一定非要写程序&am…

Overcoming Classififier Imbalance for Long-tail Object Detection with Balanced Group Softmax 阅读笔记

这是CVPR2020的一篇文章,关于detection中的类别不平衡问题的解决方法提出了一个新的softmax用于解决目标检测中的类不平衡问题在类平衡数据集上表现很好的检测模型在类不平衡数据集上效果下降很严重,经过实验发现,分类器参数对不同类别的权重…

一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)

看上去似乎任何已知的算法都无法做到,如果谁做到了,那么所有的排序方法:QuickSort,ShellSort,HeapSort,BubbleSort等等等等,都可以扔掉了,还要这些算法干吗阿,呵呵。不过…

Dynamic Convolution: Attention over Convolution Kernels 论文阅读笔记

这篇是CVPR2020的文章目的是用更轻量化的网络提供更高的性能因此采取了这样的结构,同一个层有多个卷积核,但是用attention网络组合成一个,这样增加了网络参数但是网络速度并没有多少降低