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搜索
- 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- 1
- 2
- 3
- 4
另外,在訓練時glog輸出如下的錯誤 ,也是同樣的原因 :
annotated_data_layer.cpp:205 CHECK(std::equal(top_shape.begin() + 1, top_shape.begin() + 4,shape.begin() + 1)- 1
- 2
- 3
一
版權聲明:本文為博主原創文章,轉載請注明源地址。 https://blog.csdn.net/10km/article/details/70160645總結
以上是生活随笔為你收集整理的SSD(Single Shot MultiBox Detector):因为数据集中图像通道数不对导致的训练异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROI Pooling层解析
- 下一篇: SSD训练自己的数据集