سلام
من از شبکه ی MobileNet-SSD که در این لینک هست دارم استفاده می کنم.
برای آموزش مدل خودم، وقتی از caffemodel ارائه شده (mobilenet_iter_73000.caffemodel) برای finetuning استفاده می کنم، می تونم هر شبکه ای با هر تعداد کلاس آموزش بدم اما وقتی از snapshot های خودم استفاده می کنم و تعداد کلاس رو عوض می کنم خطای زیر رخ میده:
upgrade_proto.cpp:80] Successfully upgraded batch norm layers using deprecated params.
F0425 10:55:57.510852 14777 net.cpp:774] Cannot copy param 0 weights from layer 'conv11_mbox_conf_new'; shape mismatch. Source param shape is 30 512 1 1 (15360); target param shape is 75 512 1 1 (38400). To learn this layer's parameters from scratch rather than copying from a saved net, rename the layer.
*** Check failure stack trace: ***
@ 0x7f693b4695cd google::LogMessage::Fail()
@ 0x7f693b46b433 google::LogMessage::SendToLog()
@ 0x7f693b46915b google::LogMessage::Flush()
@ 0x7f693b46be1e google::LogMessageFatal::~LogMessageFatal()
@ 0x7f693bce16eb caffe::Net<>::CopyTrainedLayersFrom()
@ 0x7f693bce8445 caffe::Net<>::CopyTrainedLayersFromBinaryProto()
@ 0x7f693bce84de caffe::Net<>::CopyTrainedLayersFrom()
@ 0x40a539 CopyLayers()
@ 0x40b994 train()
@ 0x4075b0 main
@ 0x7f693a3d9830 __libc_start_main
@ 0x407dd9 _start
@ (nil) (unknown)
یک سری لایه هست (6تا) که آخر اسمشون new داره مثل conv11_mbox_conf_new و در اونها پارامتر num_output ظاهرا ضریبی از تعداد کلاس ها هست، باید اسم این لایه ها رو عوض کنم؟
وقتی اسم این 6 لایه رو عوض می کنم دیگه خطا رخ نمی ده اما مقدار Loss از مقدار زیادی (حدود 30) شروع به کم شدن می کنه. در حالی که مقدار Loss قبلا به حدود 0.83 رسیده. البته بعد از 2000 تکرار به حدود 0.99 رسید.
این کار که اسم لایه ها رو عوض کردم درسته؟
راه بهتری نیست؟
من ممکنه بعدا هم بخوام کلاس جدید اضافه کنم، اگه یک سری کلاس اضافه مشخص کنم که نمونه ای براشون وجود نداره برای این که بعدا استفاده بشن، مشکلی پیش نمیاد؟