Fast R-CNN训练自己的数据集时遇到的报错及解决方案

Fast R-CNN训练自己的数据集时遇到的报错及解决方案,第1张

概述最近使用Fast R-CNN训练了实验室的数据集,期间遇到一些报错,主要还是在配置环境上比较麻烦,但可以根据提示在网上找到解决这些错误的办法。这里我只记录一些难改的报错,以后再遇见这些时希望能尽快解决

最近使用Fast R-CNN训练了实验室的数据集,期间遇到一些报错,主要还是在配置环境上比较麻烦,但可以根据提示在网上找到解决这些错误的办法。这里我只记录一些难改的报错,以后再遇见这些时希望能尽快解决~

 

报错汇总:

1、assert (Boxes[:,2] >= Boxes[:,0]).all()

2、targets_dh = np.log(gt_heights / ex_heights)

3、AssertionError: assert (gt_heights > 0).all()

4、ModuleNotFoundError: No module named 'lib.utils.cython_bBox'

5、error: Unable to find vcvarsall.bat

 

 

解决方法:

报错1:assert (Boxes[:,0]).all()

这个错误表示调用append_flipped_images函数时,自己的数据集标注出现矩形越界,导致后面的计算溢出。在尝试了网上说的几种方法无果后,我决定先想办法找到是哪些图片出现问题。需要在lib/datasets/imdb.py文件的assert (Boxes[:,0]).all()这句前面加上一行:

print(self.image_index[i])  #打印出图像名

打印出当前正在处理的图像名,运行train.py后报错前最后一个打印的图像名就是出问题的图像啦,打开Annotation中该图像的标注是不是有矩形越界的情况。经查,还真有两个目标的Xmax被标注成了1047。注意每次重新运行前都要删掉./data/cache中的缓存文件。

 

报错2:targets_dh = np.log(gt_heights / ex_heights)

这个错误尽量不要看网上说的降低learning_rate,降低了学习率很可能只会延迟报错的时间。

折腾好久终于明白,这个错误还是自己的数据集标注出现问题。源码是针对pascal_voc数据集写的,默认数据集没有错误,所以对x和y的标注都没有检查,在上一报错中,我们只检查了图像中对x的标注,所以后面还需对图像中y的标注进行检查。

点击报错的代码,会自动找到lib/datasets/imdb.py文件中targets_DW = np.log(gt_wIDths / ex_wIDths)的位置。在其前面加上:

1     print(gt_wIDths)2     (ex_wIDths)3     (gt_heights)4     (ex_heights)5     assert (gt_wIDths > 0).all()6     assert (gt_heights >7     assert (ex_wIDths >8     assert (ex_heights > 0).all()

加上后运行train.py文件,发现运行日志有新的报错3:AssertionError: assert (gt_heights > 0).all(),表示height方向数据存在错误,也就是图像中的y,所以应该是y的标注错误。接下来,我们就要对y的标注进行检查。打开imdb.py文件,找到_get-wIDths函数和append_flipped_images函数所在位置,如下图:

整体替换为下面代码:

 1     def _get_wIDths(self): 2         return [PIL.Image.open(self.image_path_at(i)).size[0] 3                 for i in range(self.num_images)] 4     源码中没有获取图像高度信息的函数,需要补充上 5      _get_heights(self): 6       return [PIL.Image.open(self.image_path_at(i)).size[1] 7                8  9      append_flipped_images(self):10         num_images = self.num_images11         wIDths = self._get_wIDths()12         heights = self._get_heights()add to get image height13          range(num_images):14             Boxes = self.roIDb[i]['Boxes'].copy()15             oldx1 = Boxes[:,0].copy()16             oldx2 = Boxes[:,217             (self.image_index[i])18             assert (Boxes[:,1]<=Boxes[:,3]).all()assert that ymin<=ymax19             assert ymin>=0,for 0-based20             assert ymax<height[i],1)">21             assert (oldx2<wIDths[i]).all()assert xmax<withd[i],1)">22             assert (oldx1>=0).all()assert xmin>=0,1)">23             assert (oldx2 >= oldx1).all()assert xmax>=xmin,1)">24             Boxes[:,0] = wIDths[i] - oldx2 - 125             Boxes[:,2] = wIDths[i] - oldx1 - 126             print ("num_image:%d"%(i))27             28             entry = { : Boxes,29                      gt_overlaps' : self.roIDb[i][],1)">30                      gt_classes31                      flipped : True}32             self.roIDb.append(entry)33         self._image_index = self._image_index * 2

然后运行,当出现中断报错就查看运行日志上最后一个打印出的图像名,找到对应的标注文件检查。改过后记得要删掉./data/cache中的缓存,然后再运行,直到所有图像的y标注错误都修改完后就大功告成啦!

 

报错4:ModuleNotFoundError: No module named 'lib.utils.cython_bBox'

这个错误可能是因为没有生成训练所需的cython_bBox.py文件,或者已有的cython_bBox.py文件不能在本地正常运行。

解决办法是从cmd中先进入./data/coco/PythonAPI目录,分别运行下面两条命令:

python setup.py build_ext --inplace
python setup.py build_ext install

然后,在cmd中进入./lib/utils目录,运行下面一条命令:

python setup.py build_ext --inplace

这样,就重新运行了setup.py,重新生成了训练所需的文件,报错就解决了。

 

报错5:error: Unable to find vcvarsall.bat

在构建coco的相关环境时,出现这个错误,找不到vcvarsall.bat,这是因为没有安装c++的配置文件。我的解决方法是下载vs2015版,在安装时记得勾选c++相关的组件,安装成功后把vs2015添加到环境变量,这样就成功解决该报错啦。

 

感悟:直面BUG,找到问题源头就更容易解决。

这次内容就分享到这里了,希望与各位老师和小伙伴们交流学习~

 

总结

以上是内存溢出为你收集整理的Fast R-CNN训练自己的数据集时遇到的报错及解决方案全部内容,希望文章能够帮你解决Fast R-CNN训练自己的数据集时遇到的报错及解决方案所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1189690.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存