最近使用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'

解决方法:

报错1:assert (boxes[:, 2] >= boxes[:, 0]).all()

这个错误表示调用append_flipped_images函数时,自己的数据集标注出现矩形越界,导致后面的计算溢出。在尝试了网上说的几种方法无果后,我决定先想办法找到是哪些图片出现问题。需要在lib/datasets/imdb.py文件的assert (boxes[:, 2] >= 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 print(ex_widths)
3 print(gt_heights)
4 print(ex_heights)
5 assert (gt_widths > 0).all()
6 assert (gt_heights > 0).all()
7 assert (ex_widths > 0).all()
8 assert (ex_heights > 0).all()

加上后运行train.py文件,发现运行日志有新的报错3AssertionError: 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 def _get_heights(self):
6 return [PIL.Image.open(self.image_path_at(i)).size[1]
7 for i in range(self.num_images)]
8
9 def append_flipped_images(self):
10 num_images = self.num_images
11 widths = self._get_widths()
12 heights = self._get_heights()#add to get image height
13 for i in range(num_images):
14 boxes = self.roidb[i]['boxes'].copy()
15 oldx1 = boxes[:, 0].copy()
16 oldx2 = boxes[:, 2].copy()
17 print(self.image_index[i])
18 assert (boxes[:,1]<=boxes[:,3]).all()#assert that ymin<=ymax
19 assert (boxes[:,1]>=0).all()#assert ymin>=0,for 0-based
20 assert (boxes[:,3]<heights[i]).all()#assert ymax<height[i],for 0-based
21 assert (oldx2<widths[i]).all()#assert xmax<withd[i],for 0-based
22 assert (oldx1>=0).all()#assert xmin>=0, for 0-based
23 assert (oldx2 >= oldx1).all()#assert xmax>=xmin, for 0-based
24 boxes[:, 0] = widths[i] - oldx2 - 1
25 boxes[:, 2] = widths[i] - oldx1 - 1
26 #print ("num_image:%d"%(i))
27 assert (boxes[:, 2] >= boxes[:, 0]).all()
28 entry = {'boxes' : boxes,
29 'gt_overlaps' : self.roidb[i]['gt_overlaps'],
30 'gt_classes' : self.roidb[i]['gt_classes'],
31 '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,重新生成了训练所需的文件,报错就解决了。

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

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

Fast R-CNN训练自己的数据集时遇到的报错及解决方案的更多相关文章

  1. 使用Ajax时[object%20object] 报错的解决方案

    踩坑经过 最近初学Ajax,当我想把Ajax应用到自己项目中的时候,没有达到理想的效果,还报了如下错误: 点击图中报错,产生报错页面如下: 当时写的Ajax如下: // 提交修改密码表单 $(&quo ...

  2. List使用Foreach 修改集合时,会报错的解决方案 (Error: Collection was modified; enumeration operation may not execute. ) - 摘自网络

    当用foreach遍历Collection时,如果对Collection有Add或者Remove操作时,会发生以下运行时错误: "Collection was modified; enume ...

  3. MyBatis SQL配置文件中使用#{}取值为null时却不报错的解决方案。

    原因是因为#{kh_id} 这个参数名为小写,我之前写成了大写{#KH_ID}所以取不到值

  4. 解决:eclipse导入android时工程下没有R文件的问题,以及style.xml文件报错

    解决:eclipse导入android时工程下没有R文件的问题,以及style.xml文件报错

  5. soamanager发布的Webservice服务,调用时出现http500报错

    最近再给薪酬那边发布ws服务时出现了报错,调用方反馈了errorCode:BEA-380002.在使用XMLspy工具去调用这个WSDL时候,则反馈http500的错误消息.如下图: 遇到这种问题我通 ...

  6. 当子查询内存在ORDER BY 字句时查询会报错

    问题:当子查询内存在ORDER BY 字句时查询会报错 SQL: SELECT * FROM ( SELECT * FROM USER ORDER BY USER_CORD ) S. 解决办法:在子查 ...

  7. 连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的,

    连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的, 2018-03-12 17:08:52.532DEBUG[localhost-startStop-1]o.s.beans.factor ...

  8. 关于使用CodeFirst,修改类或上下文时操作数据库报错解决方法

    在操作已经创建好的数据库时,若是添加新的实体类或者修改原有数据库上下文,会报如下错误: The model backing the 'StudentDbContext' context has cha ...

  9. nuget包管理nuget服务器发布包时出现请求报错 406 (Not Acceptable)

    在window服务器上部署nuget服务器时,发布包时出现请求报错 406 (Not Acceptable) 验证用户名.密码正确的情况下,还是出现上面错误.后面跟踪服务器日志,发现window\te ...

随机推荐

  1. Mark基本语法

    Markdown语法 1. 标题 样式的标题在行的开头使用1-6个#,对应于标题级别1-6.例如: 2.引用 在引用中再嵌套一个引用(在用">"的段落中使用"> ...

  2. Linux环境mysql快速备份及迁移

    在项目实施的过程中,经常会面临数据库迁移,导出和导出数据,如果用普通的mysql客户端备份,时间较长且容易出错.那么mysql快速备份及迁移,就成为数据库迁移的重中之重. 下面介绍我在项目实现过程中用 ...

  3. nginx详解、反向代理、负载均衡和LNMP架构

    资源池 nginx官方网站:http://nginx.org/ nginx官方文档:http://nginx.org/en/docs/ 本章资源: 点击这里 资源提取码:u2jv 1.nginx简介 ...

  4. Centos8上搭建EMQ MQTT

    layout: post title: Centos8上搭建EMQ MQTT subtitle: 在阿里云Centos8搭建EMQ并配置接入 date: 2020-3-11 author: Dapen ...

  5. OpenCV4.4.0 安装测试 Installation & Examination (Ubuntu18.04, Ubuntu 20.04)

    OpenCV4.4.0 安装测试 Installation & Examination (Ubuntu18.04, Ubuntu 20.04) 单纯简单的 OpenCV 安装配置方法,在这个地 ...

  6. git的几种实用操作(合并代码与暂存复原代码)

    总述     git工具也用了很久,自己也写了几篇使用教程,今天继续给大家分享一些我工作中使用过的git操作. 1.git合并远程仓库的代码 2.git stash保存当前的修改 这两种情况大家应该都 ...

  7. inceptor es表插入成功,返回报错you should set transaction.type before any DCL statement

    在finebi下用星环的连接驱动去写inceptor es表,发现插入能成功,但是返回一个报错: Caused by: java.sql.SQLException: Error to commit. ...

  8. PAT甲级—暴力搜索

    1091 Acute Stroke (30point(s)) 基础的搜索,但是直接用递归会导致段错误,改用队列之后就不会了,这说明递归调用在空间利用率上还是很吃亏的. #include <cst ...

  9. BZOJ-1086 [SCOI2005]王室联邦 (树分块)

    递归处理子树,把当前结点当作栈底,然后递归,回溯回来之后如果栈中结点数量到达某一个标准时,弹出栈中所有的元素分到一个块中,最后递归结束了如果栈中还有元素,那么剩下的这些元素放在新的块中 题目:BZOJ ...

  10. 2019 Multi-University Training Contest 1 D.Vacation(思维)

    题意:有n俩车行驶在一条道路上,每辆车有车长li,距离终点的距离si,速度vi,不能超出,并且驶过终点后会依旧保持原状态行驶,问最后一辆车过终点的时间. 思路:因为行驶过终点后还是要保持之前的行驶方式 ...