首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SSD(Single Shot MultiBox Detector):因为数据集中图像通道数不对导致的训练异常

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

作者头像
10km
发布2018-01-03 11:54:35
1.5K0
发布2018-01-03 11:54:35
举报
文章被收录于专栏:10km的专栏10km的专栏

今天在开始做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)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年04月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档