你要知道,我的导师是研究光电技术的,我在实验室搬砖的项目和图像识别相关,当时我选择了Faster RCNN这个开源框架来识别各种纷繁复杂(黑白分明)的OCT图像,OCT的全称是Optical Coherence Tomography,也就是光学相干断层成像,它和大家熟悉的CT成像(计算机断层扫描)是属于一个范畴的技术,OCT的主要优点在于对人体的伤害小(相对于CT成像而言)。
Faster RCNN是一个图像识别的工具,基于CNN,具有更快的速度,它不仅可以识别出图像中的物体,还可以用矩形框定位该物体并给出置信度。初期,实验室老师给了我少量图像让我识别,我手动标注了几百张,训练之后测试效果还不错。过了一段时间,老师得到了更多的数据,此时手动标注显然是不现实的,因为所有图片加起来有几千张,我一天最多能标注几百张而已,而且标注之后我感到很想睡觉,困乏无力,于是我将整张图片当作单个物体的区域,坐标类似于(0, 0, length, width)
的形式,然后将图片放进去训练,没想到在训练的第一阶段就出现错误了。
错误的具体信息我记不得了,当时也没有截图,都是Python的一些错误提示(没错,我爱Python),大致如下:
- 数值越界
- Key Error
当时试过很多方法,比如修改学习率,重新制作数据集,结果都无效,也不知道后来灵感怎么就闪现出来了,竟发现了问题所在,解决了这两个bug。
数值越界是因为我前面提到过的,我将整张图片作为单个物体的区域,也就是区域坐标为(0, 0, length, width)
,因为坐标里面含有0,导致Faster RCNN在训练区域的时候出现了负数,因而报错,解决方法就是将左上角坐标(0, 0)
稍微向右下角偏移一些,比如变成(5, 5)
,这对训练的影响不大。
Key Error的原因是没有删除之前用Faster RCNN训练所产生的cache,删除即可。