python3.x
opencv-python
numpy
torch==0.4.1
torchvision==0.2.1
卷积神经网络
迁移学习
vgg16预训练模型
mobile_net预训练模型
1.以下步骤中,前7步我都已经实现,无须重复这些步骤,只是描述具体过程.剩下的就是树莓派的部署安装及代码整理
2.关于用到的技术,由于内容繁多,不懂的请查阅和学习相关资料
3.目前用了两个模型,vgg16和mobile_net.即使是最小的mobile_net运行时需要的内存至少也要0.7G,所以1G内存的树莓派可能会有压力.而vgg16将无法在树莓派中运行
4.vgg16准确率较高,能达到97%但是占用内存太大,速度太;,而mobile_net仅有90%左右的准确率,内存小,速度略快
5.如果需要在mobile_net上提升效果,重新采集图像,并只用演示物体做训练数据,重新训练,方法和代码均给出,请自行研究
1.通过make_train_pic.py采集不同类别的图像(empty,circle,rectangle),分别存放到image_all下的三个文件夹中,每个类别采集2000张左右
2.将采集的图像中随机各自挑选200张,分别存放到empty,circle,rectangle三个文件夹中,作为验证集,其余的作为训练集
3.将训练集的三个文件夹放到images/train目录下,将验证集放到images/val目录下,train和val同在images文件夹中.具体目录结构见 目录.jpg
4.打开fine_tune_vgg16.py 修改好路径,进行迁移学习训练.训练之前将冻结vgg16的卷积层权重,并将全连接层输出替换为三个类别.并只训练全连接层权重
5.训练过程中图像数据经过数据增强,包括随机反转 随机镜像 随机旋转 随机调整亮度对比度 转换为灰度图 数据标准化等操作
6.经过10个epoch后,训练集和测试集准确率达到97%,并保存训练好的权重为model_vgg16_finetune.pth,具体数据见vgg16_train.log
7.打开detect.py文件,运行后会加载训练好的权重,打开摄像头,将处理好的数据送入网络中进行识别,并显示可能性最大的类别.具体效果见 形状识别.wmv
8.将所有程序整理好安装到树莓派中.根据网络的输出控制舵机的运行,可参考detect_duoji.py