最近被Moilenet SSD虐的真的是不要不要的,花了两周的时候才算是彻底跑通它的源码和训练自己的数据集(虽然这摸摸那摸摸的时间占了一大半),而且我以前基本是不用Caffe这个框架的,因为以前也是在编译Caffe的时候被虐惨了,所以一直都是Tensorflow的忠实爱好者,但是上手之后(。。。真香)。废话不多说,直接进入正题~~
安装caffe ssd可以参考这个大神的:https://blog.csdn.net/xiao_lxl/article/details/79106837
Mobilenet ssd 可以参考这个大神的:https://blog.csdn.net/xiao__run/article/details/80643346
博主在配置Mobilenet ssd的时候基本上是参考这两位大神的步骤一步一步来的,但是里面有几点我碰到的奇葩问题:
.
奇葩问题一.针对make runtest 的问题。
在这里面的第四步 make runtest不是必须的,但是我后面在mobilenet 跑训练的时候碰到了如下的错误:
这个问题解决方法为:
输入命令:sudo rm -rf ~/.nv/ 不行的话就用命令:sudo rm -rf .nv/ (此方法在caffe和tensorflow均能使用)
奇葩问题二:
这个问题针对于用window制作数据集,用ubuntu跑实验的同学。
这个问题出现的原因是window的分行符和ubuntu的分行符不同,所以在Main文件夹下的txt文本会写成一行,在运行create_lish.sh就会出现上面的问题,解决方法,在你自己的VOC数据集当前目录运行如下代码:
import os
import random
trainval_percent = 0.7
train_percent = 0.8
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets/Main'
total_xml = os.listdir(xmlfilepath)
num = len(total_xml)
list = range(num)
tv = int(num*trainval_percent)
tr = int(tv*train_percent)
trainval = random.sample(list,tv)
train = random.sample(trainval,tr)
ftrainval = open(txtsavepath+'/trainval.txt', 'w',encoding="utf-8")
ftest = open(txtsavepath+'/test.txt', 'w',encoding="utf-8")
ftrain = open(txtsavepath+'/train.txt', 'w',encoding="utf-8")
fval = open(txtsavepath+'/val.txt', 'w',encoding="utf-8")
for i in list:
name = total_xml[i][:-4]+'\r\n'
if i in trainval:
ftrainval.write(name)
if i in train:
ftrain.write(name)
else:
fval.write(name)
else:
ftest.write(name)
ftrainval.close()
ftrain.close()
fval.close()
ftest .close()
print('Well Done!!!')
运行后,就能生成正常的txt文本了。
再次说明此问题只会出现在用window 做数据集,ubuntu上做实验的同学身上。
其他的问题基本上csdn的大神都可以解决了。