SSD(Single Shot MultiBox Detector):因为数据集中图像通道数不对导致的训练异常

今天在开始做SSD训练的时候,报了一个错误 导致训练无法 进行下去:

OpenCV Error: Assertion failed ((scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F)) in cvtColor, file /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/imgproc/src/color.cpp, line 3959 terminate called after throwing an instance of ‘cv::Exception’ what(): /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/imgproc/src/color.cpp:3959: error: (-215) (scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F) in function cvtColor * Aborted at 1492071248 (unix time) try “date -d @1492071248” if you are using GNU date * PC: @ 0x7f1497764428 gsignal * SIGABRT (@0x3e800000985) received by PID 2437 (TID 0x7f1455438700) from PID 2437; stack trace: * @ 0x7f14977644b0 (unknown) @ 0x7f1497764428 gsignal @ 0x7f149776602a abort @ 0x7f1497d9d84d __gnu_cxx::__verbose_terminate_handler() @ 0x7f1497d9b6b6 (unknown) @ 0x7f1497d9b701 std::terminate() @ 0x7f1497d9b919 __cxa_throw @ 0x7f1487838c66 cv::error() @ 0x7f1489de2f91 cv::cvtColor() @ 0x7f149967b817 caffe::AdjustSaturation() @ 0x7f149967fc0b caffe::RandomSaturation() @ 0x7f14996802ef caffe::ApplyDistort() @ 0x7f149982f743 caffe::DataTransformer<>::DistortImage() @ 0x7f14997a5096 caffe::AnnotatedDataLayer<>::load_batch() @ 0x7f14997fbecb caffe::BasePrefetchingDataLayer<>::InternalThreadEntry() @ 0x7f1499685d45 caffe::InternalThread::entry() @ 0x7f149751a5d5 (unknown) @ 0x7f1496dd36ba start_thread @ 0x7f149783582d clone @ 0x0 (unknown) Aborted (core dumped)

看这个错误信息只知道是opencv的一个断言错误 ,因为 没glog输出信息,无从知道是从哪个源文件抛出的。但是看到这个assert表达式(scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F) 感觉可能与数据集的图像通道数有关,记得faster rcnn ,ssd这多数的模型都要求是3通道RGB的图像,会不会我生成的数据集中有1通道或4通道的图像呢? 于是在数据集Annotations文件夹下执行grep搜索

guyadong@gyd-u16:~/data/VOCdevkit/VOC2007/Annotations$ grep \<depth\>1 *

果然发现有一些depth为1的图像(也就是灰度图像)在里面。重新修改了数据集生成代码(我们自己有一个图像数据标注及训练数据生成系统,java代码),只提取depth为3的图像生成VOC2007数据集,再执重新执行create_list.sh,create_data.sh生成lmdb,再开始训练 ,则问题解决 :

cd caffe-ssd
./data/VOC2007/create_list.sh
./data/VOC2007/create_data.sh
python ./examples/ssd/ssd_pascal.py 

另外,在训练时glog输出如下的错误 ,也是同样的原因 :

annotated_data_layer.cpp:205
CHECK(std::equal(top_shape.begin() + 1, top_shape.begin() + 4,
              shape.begin() + 1)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ATYUN订阅号

在TensorBoard中使用t-SNE实现TensorFlow自动编码器的可视化嵌入

将TensorBoard插在MNIST数据集上的一个自动编码器上,用于演示非监督机器学习的t-SNE嵌入的可视化。 需要说明的是,在这个项目中,我们有两种类型的...

4334
来自专栏CreateAMind

dcgan人脸生成效果复现-多图及代码学习

https://github.com/carpedm20/DCGAN-tensorflow

1061
来自专栏大数据挖掘DT机器学习

tensorflow LSTM + CTC实现端到端OCR

本文github源码地址: 在公众号 datadw 里 回复 OCR 即可获取。 最近在做OCR相关的东西,关于OCR真的是有悠久了历史了,最开始用tes...

7463
来自专栏ATYUN订阅号

【实践操作】:六步教你如何用开源框架Tensorflow对象检测API构建一个玩具检测器

TensorFlow对象检测API是一个建立在TensorFlow之上的开源框架,可以轻松构建,训练和部署对象检测模型。 到目前为止,API的性能给我留下了深刻...

3488
来自专栏AI研习社

YOLO 升级到 v3 版,速度相比 RetinaNet 快 3.8 倍

雷锋网 AI 研习社按,YOLO 是一种非常流行的目标检测算法,速度快且结构简单。日前,YOLO 作者推出 YOLOv3 版,在 Titan X 上训练时,在 ...

1093
来自专栏CVer

利用OpenCV和Tesseract实现OCR和文本识别

本教程将介绍如何使用 OpenCV OCR。我们将使用 OpenCV、Python 和 Tesseract 执行文本检测和文本识别。

601
来自专栏锦小年的博客

Nilearn学习笔记3-提取时间序列建立功能连接体

在nilearn库中,提供了两种从fmri数据中提取时间序列的方法,一种基于脑分区(Time-series from a brain parcellation ...

2295
来自专栏王磊的博客

图片人脸检测——Dlib版(四)

上几篇给大家讲了OpenCV的图片人脸检测,而本文给大家带来的是比OpenCV更加精准的图片人脸检测Dlib库。 点击查看往期: 《图片人脸检测——OpenCV...

4947
来自专栏ATYUN订阅号

浣熊检测器实例, 如何用TensorFlow的Object Detector API来训练你的物体检测器

这篇文章是“用Tensorflow和OpenCV构建实时对象识别应用”的后续文章。具体来说,我在自己收集和标记的数据集上训练了我的浣熊检测器。完整的数据集可以在...

4497
来自专栏深度学习与数据挖掘实战

【深度学习】资料整理

712

扫码关注云+社区