9.SSD目标检测之三:训练失败记录(我为什么有脸写这个……)

这个大概折腾了三四天,反正我能想到改的地方都改了,笔记本上试过了,宿舍的电脑上也试过了,反正就是不行,我也没什么办法了,后面就转向YoloV3了。尽管失败了,还是记录一下。
我具体怎么做的就写在下面:

1 下载源码框架。

地址:https://github.com/balancap/SSD-Tensorflow 下载下来解压。

2 创建tfrecord_,train_model,VOC2007三个文件夹。

主目录下创建,当然名称不一定是这样,主要是为了减少源码修改。分别是存储tfrecord格式的训练数据,存储训练的模型以及存储原始VOC格式的训练数据用的,这个时候就可以把上一篇做好的VOC格式的训练数据复制过来了。

3 生成.tfrecords训练文件。

这里面有几个需要修改的文件:

  • datasets/pascalvoc_common.py
    改掉原始的标签,把自己的标签填入。比如我改完就是这样。0号标签不要动,是背景。
  • datasets/pascalvoc_to_tfrecords.py

    line 67: 这里的作用主要是几个xml文件生成一个tfrecords,这样做的原因作者的readme文件里也说的很清楚:(虽然我并不是特别理解)。

另外,修改,83行的读取方式和图片类型:

  • 运行tf_convert_data.py文件,点击run,Edit_configuration,在parameters中填入预编译命令:
--dataset_name=pascalvoc
--dataset_dir=./VOC2007/        #VOC文件夹
--output_name=voc_2007_train     #输出名称的前缀
--output_dir=./tfrecords_       #目标文件夹

./tfrecords_文件夹中生成了tcrecords文件的话就表明生成成功了。

3. 训练代码调整。

  • datasets/pascalvoc_2007.py
    修改数据的shape:

几个参数解释一个:TRAIN_STATISTICS中的格式是:类别:(训练集个数,当前类别标签数)。
比如对于person类来说,包含其的共有100张照片,这100张照片中一共有150个人的标签。就是这么个意思。
TEST_STATISTICS中就不用说了,照着填就可以了。
SPLIT_TO_SIZE中train就是训练基的个数,Test是测试集的个数,我是全部用作训练了(因为数据量很少,所以测试集就随便写了一个数,这个在训练的时候是不影响的)。

  • nets/ssd_vgg_300.py
    line 96,97:修改为类别+1.
  • eval_ssd_network.py
    line 66:修改类别数:
  • train_ssd_network.py
    有几个要改的地方:
    line27: 数据格式改成 NHWC
    line135: 类别个数: 类别数+1
    line154: 训练步数:这个自己改了,先给的小的训练看下loss。

4.下载预训练模型。

我们基于VGG16的预训练模型来训练,提供个网盘吧:
链接:https://pan.baidu.com/s/1nlHYtH9qUO0gBQPzmNZL-w
提取码:jcig
下载之后解压到checkpoint文件夹中。

5.训练。

train_ssd_network.py来配置预编译命令,点击run,Edit_configuration,在parameters中填入预编译命令:
这里比较多,主要关注下最后面的几个,我写在注释里。

--train_dir=./train_model/
--dataset_dir=./tfrecords_/
--dataset_name=pascalvoc_2007
--dataset_split_name=train
--model_name=ssd_300_vgg
--checkpoint_path=./checkpoints/vgg_16.ckpt
--checkpoint_model_scope=vgg_16
--checkpoint_exclude_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box
--trainable_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box
--save_summaries_secs=60
--save_interval_secs=600       #保存模型的时间
--weight_decay=0.0005          #初始化权重
--optimizer=adam                   #优化器
--learning_rate=0.001            #学习率,这个一开始可以给大一点看一下loss
--learning_rate_decay_factor=0.94      #学习率退火系数。
--batch_size=24           #batch_size
--gpu_memory_fraction=0.9         #GPU使用率

如果出现GPU内存分配的问题的话就可以把batch_size改小一点或者GPU使用率这个系数改小一些。
这样的话就可以开始训练了。

6.总结

我最后遇到的问题就是训练的时候loss居高不下,最终也都是在20-100之间跳跃,这个loss太大了一些,所以也没有用保存的模型来看一下测试结果。
我猜想了几种可能。

  • 训练数据量太少?
    按照我大量参考的博客来讲,150张训练样本并不算少,而且为了消除这个疑虑,我用VOC的数据也训练了一段时间(大概四个小时),loss也是降不下来。所以基本排除了训练数据的问题。
  • 设置有问题?
    反正照着前面的设置都认真写了。为了避免因为平台带来的问题在不同的电脑上也试了,各个参数的意义自己问别人和看代码也基本了解了,应该没有问题了。
  • 训练的时间太少?(还没有到极值)学习率太大?(跳过去极值)
    前者我有一天打球之前开了训练,练了20000多个step,后者我把学习率改到万分之一训练了四个多小时,什么结果都没有。

后面我确实没招了,整个代码框架还是挺复杂的,也没有时间去细细看,所以我就放弃了,转向Yolo了,值得欣喜的事,Yolo很快就有了不错的结果,除了我傻逼了把系统搞崩了之外。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容