本专栏参考的原作者文章声明如下。
PS:本专栏对原作者的文章存在适当的修改与补充,使之更适合本作者所阐述的训练要求!如有侵权,请联系13512076879@163.com。
————————————————
版权声明:本文为CSDN博主「欣欣以向荣」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
————————————————
1. caffe框架下openmv的训练步骤
目前 OPenMV 只提供Caffe模型到network网络的转换,未来可能会支持TensorFlow,但目前不行。通过Caffe框架学习,我们最终的目标肯定是得到 ******.network 的网络库文件
训练网络的主要步骤如下:
配置环境,安装Caffe
采集数据集
训练网络
量化模型
将模型转换为二进制格式
在OPenMV上部署模型
运行网络
故障排除
2.caffe环境的搭建(以本文环境为例介绍)
windows 10
python 2.7
pycharm
vs2013
openmv cam h4
openmv ide
3.vs2013 编译caffe
4.制作数据集
由于原文章之前训练使用的数据集为64*64,然而这种方法训练得到的network模型对于openmv来说太大,会造成堆内存溢出,无法运行。
故本文使用数据集为32*32.
本文使用的数据集为使用画图板制作,并经过一些数据处理方法,使得数据集更加丰富。
制作步骤:
4.1.使用以下代码新建文件夹保存原始数据(E:/pydoc/blog/为本文程序根目录 E:/pydoc/blog/为本文程序根目录 E:/pydoc/blog/为本文程序根目录)
importos, sysdefgenDir():
base= 'E:/pydoc/blog/MY_numbers/'i=0
name=['ZERO','ONE','TWO','THREE','FOUR','FIVE','SIX','SEVEN','EIGHT','NINE']for j in range(10):
file_name= base+name[i]
os.mkdir(file_name)
i=i+1genDir()
结果如图:
4.2. 使用以下代码新建文件夹保存扩展数据:
importos, sysdefgenDir():
base= 'E:/pydoc/blog/MY_numbers/'i=0
name=['ZERO','ONE','TWO','THREE','FOUR','FIVE','SIX','SEVEN','EIGHT','NINE']for j in range(10):
file_name= base+str(i)+'_'+name[i]
os.mkdir(file_name)
i=i+1genDir()
结果如图:
4.3 制作原始数据集.
利用画图板制作手写体数据集,0-9每个5张图片,大小为32*32.
打开画图板
将这些图片对应地保存到./MY_numbers/ZERO(ONE,TWO,···,NINE)
4.4.使用以下代码扩展数据集,代码保存到根目录,命名为augment_images.py。
importos, sysimportargparseimportrandomimportcv2importnumpy as npimportimgaug as iafrom imgaug importaugmenters as iaafrom tqdm importtqdmdefmain():#CMD args parser
parser = argparse.ArgumentParser(description='Augment image datasets')
parser.add_argument("--input", action = "store", help = "Input images dir")
parser.add_argument("--output", action = "store", help = "Output images dir")
parser.add_argument("--count", action = "store", help = "Number of augmented sets to make", type=int, default=1)#Parse CMD args
args =parser.parse_args()if (args.input == None or args.output ==None):
parser.print_help()
sys.exit(1)
ia.seed(1)
paths=os.listdir(args.input)for x inrange(args.count):
seq=iaa.Sequential([
iaa.Fliplr(0.5), #horizontal flips
#Small gaussian blur with random sigma between 0 and 0.5.
#But we only blur about 50% of all images.
iaa.Sometimes(0.5,
iaa.GaussianBlur(sigma=(0, 0.2))
),#Add gaussian noise.
#For 50% of all images, we sample the noise once per pixel.
#For the other 50% of all images,