DAVAR-Lab-OCR
DAVAR-Lab-OCR copied to clipboard
opencv的copyMakeBorder函数报错
作者您好,非常感谢您开源的OCR系列工作,最近在运行./tools/train.py代码时,报出错误:cv2.error: OpenCV(4.5.3) /tmp/pip-req-build-9gwtlx3c/opencv/modules/core/src/copy.cpp:1026: error: (-215:Assertion failed) top >= 0 && bottom >= 0 && left >= 0 && right >= 0 && _src.dims() <= 2 in function 'copyMakeBorder'
这是详细报错的图片,期待您的解答,祝您工作愉快,身体健康!
请问是执行哪个算法的demo时出现的问题,另外图片太过模糊无法看清楚。
您好,感谢您的回信。我执行的是表格识别的项目,配置文件是lgpma-base.py,代码运行到训练数据的pipeline对mask进行填充时,报错的。报错的图片,我放在附件您看一下。 谢谢!
发自我的iPhone
------------------ 原始邮件 ------------------ 发件人: Liang Qiao @.> 发送时间: 2022年1月21日 14:03 收件人: hikopensource/DAVAR-Lab-OCR @.> 抄送: SilverBach805 @.>, Author @.> 主题: Re: [hikopensource/DAVAR-Lab-OCR] opencv的copyMakeBorder函数报错 (Issue #51)
请问是执行哪个算法的demo时出现的问题,另外图片太过模糊无法看清楚。
— Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android. You are receiving this because you authored the thread.Message ID: @.***>
copyMakeBorde
没有收到附件
图片可能不清晰,我把报错的信息复制过来,在下面您看一下。
Traceback (most recent call last):
File "/data/cliu/Hik_table/davarocr/tools/train.py", line 269, in
图片可能不清晰,我把报错的信息复制过来,在下面您看一下。 Traceback (most recent call last): File "/data/cliu/Hik_table/davarocr/tools/train.py", line 269, in main() File "/data/cliu/Hik_table/davarocr/tools/train.py", line 264, in main meta=meta) File "/data/cliu/Hik_table/davarocr/davarocr/davar_common/apis/train.py", line 174, in train_model runner.run(data_loaders, cfg.workflow) File "/data/anaconda3/envs/torch_cliu/lib/python3.6/site-packages/mmcv/runner/epoch_based_runner.py", line 125, in run epoch_runner(data_loaders[i], **kwargs) File "/data/anaconda3/envs/torch_cliu/lib/python3.6/site-packages/mmcv/runner/epoch_based_runner.py", line 47, in train for i, data_batch in enumerate(self.data_loader): File "/data/anaconda3/envs/torch_cliu/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 435, in next data = self._next_data() File "/data/anaconda3/envs/torch_cliu/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 475, in _next_data data = self._dataset_fetcher.fetch(index) # may raise StopIteration File "/data/anaconda3/envs/torch_cliu/lib/python3.6/site-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch data = [self.dataset[idx] for idx in possibly_batched_index] File "/data/anaconda3/envs/torch_cliu/lib/python3.6/site-packages/torch/utils/data/_utils/fetch.py", line 44, in data = [self.dataset[idx] for idx in possibly_batched_index] File "/data/anaconda3/envs/torch_cliu/lib/python3.6/site-packages/mmdet/datasets/custom.py", line 193, in getitem data = self.prepare_train_img(idx) File "/data/cliu/Hik_table/davarocr/davarocr/davar_common/datasets/davar_custom.py", line 291, in prepare_train_img return self.pipeline(results) File "/data/anaconda3/envs/torch_cliu/lib/python3.6/site-packages/mmdet/datasets/pipelines/compose.py", line 40, in call data = t(data) File "/data/anaconda3/envs/torch_cliu/lib/python3.6/site-packages/mmdet/datasets/pipelines/transforms.py", line 534, in call self._pad_masks(results) File "/data/anaconda3/envs/torch_cliu/lib/python3.6/site-packages/mmdet/datasets/pipelines/transforms.py", line 515, in _pad_masks results[key] = results[key].pad(pad_shape, pad_val=self.pad_val) File "/data/anaconda3/envs/torch_cliu/lib/python3.6/site-packages/mmdet/core/mask/structures.py", line 305, in pad for mask in self.masks File "/data/anaconda3/envs/torch_cliu/lib/python3.6/site-packages/mmdet/core/mask/structures.py", line 305, in for mask in self.masks File "/data/anaconda3/envs/torch_cliu/lib/python3.6/site-packages/mmcv/image/geometric.py", line 450, in impad value=pad_val) cv2.error: OpenCV(4.5.3) /tmp/pip-req-build-9gwtlx3c/opencv/modules/core/src/copy.cpp:1026: error: (-215:Assertion failed) top >= 0 && bottom >= 0 && left >= 0 && right >= 0 && _src.dims() <= 2 in function 'copyMakeBorder'
这个是用目前仓库给出的datalist直接训练就会报的错,还是用自己的数据训练出的问题?
是的,是训练自己的数据出的问题,是我们自己标注的表格图片。然后可能有些图片的尺寸要比公开数据集上的尺寸要大很多,不知道是不是这个引起的原因
图像大小应该不是问题关键。在PubTabNet中,所有的标注是基于“文本块”的,然后生成了aligned bounding box。这个问题有可能是因为自己的训练集中标注的bbox中不包含文本区域,或者是其他的标注形式不兼容导致的,所以生成mask的时候会出现问题。可以定位一下是哪张图片出的问题以及对应的标注什么样的。如果是所有数据集都有这种标注,可以考虑在数据pipeline的时候做一下过滤或者适配。
好的,大部分的数据在训练过程中应该是没问题的,可能少部分数据标注的时候除了一些错误,我看看是哪些数据有问题,谢谢您!
我们在最新的更新中 c85ca3f5b1c00b785ca346882a8983d57287d75f,新增了对一些数据处理环节的过滤处理;排查过程中我们发现,原先的版本中,如果数据中存在bboxes的坐标是一个面积为0的框(例如y坐标一样),会报出如题一致的错误。因此在数据处理的环节中我们把所有这类框都当成empty box进行处理。如果是由于其他数据错误造成类似的问题,可以反馈给我们进行补充。
您好,非常感谢您详尽的解释,但是我这个我后来通过对davarresize函数进行debug发现,在那些总是出错的样本上,我在服务器上用mmcv.imread()读取的图片的尺寸总是和segmasks的尺寸不一致,要稍微大一些。这导致了后面在pad的时候,masks的尺寸要比padded_image的尺寸要大,所以对mask进行pad时出错。
最终我发现,是因为我的粗心,导致本地和服务器上的同一张图片的尺寸不一致导致的,我本地的图片和标注文件json的image_shape都是一样的,但是传入到服务器上的同样的图片的尺寸可能由于之前没有裁剪,所以总是偏大一丢丢,所以就导致了和json中同样图片shape的不一致,就报错了。
谢谢!现在问题完全排除,在我们自己的图片样本上效果还是挺好的。
@SilverBach805 你好,可以请教一下如何制作表格标签吗,谢谢
这个是自己按照LGPMA方案中所需要的标签去标注的,主要就是单元格的坐标信息以及单元格跨行跨列的信息。
这个是自己按照LGPMA方案中所需要的标签去标注的,主要就是单元格的坐标信息以及单元格跨行跨列的信息。
请问表格标注用的什么工具。 标注了多少训练数据呢
作者您好,非常感谢您开源的OCR系列工作,最近在运行./tools/train.py代码时,报出错误:cv2.error: OpenCV(4.5.3) /tmp/pip-req-build-9gwtlx3c/opencv/modules/core/src/copy.cpp:1026: error: (-215:Assertion failed) top >= 0 && bottom >= 0 && left >= 0 && right >= 0 && _src.dims() <= 2 in function 'copyMakeBorder'
这是详细报错的图片,期待您的解答,祝您工作愉快,身体健康!
Hello, have you solved this problem? I got the same prblem:cv2.error: OpenCV(4.7.0) /tmp/pip-install-hf9jzx4y/opencv-python-headless_cb0d0c9b34ef473dbdaccd8745b54f3d/opencv/modules/core/src/copy.cpp:1026: error: (-215:Assertion failed) top >= 0 && bottom >= 0 && left >= 0 && right >= 0 && _src.dims() <= 2 in function 'copyMakeBorder'