深度学习yolov3 裂痕检测和手势识别教程 小白学习笔记

深度学习yolov3 手势识别教程 小白学习笔记

深度学习yolov3 裂痕检测和手势识别教程 小白学习笔记

这是本人在学习yolov3目标检测过程的一些记录,希望能够对大家有所帮助
裂痕检测视频演示训练到演示
/记得一键三连/
持续更新

环境安装

环境安装配置能劝退一大批人,这是大佬说的,这是事实,确实难搞,不过环境配置完成后接下来就是起飞的感觉了。
1.Unbuntu18.04安装
微信公众号上面有教程:软件安装管家
如果不会安装也可以来找我(我安装过很多次,踩过很多坑)
我的ubuntu系统用不了wifi就很难受了,只能手机usb共享网络。
2. 安装qq(为了传输数据更加方便)
百度搜索linux 版QQ
下载后双击安装包点击安装即可(这个qq太简陋了,受不了,之前我是有一个接近现代版本的qq的只是找不到了)
貌似这个可以安装windows版本的qq:
百度搜索wine QQ
wine QQ
不知为啥,我的两个版本的qq都用不了了,卸载重装也一个样子,卡得不行……
3. cuda安装:
cuda安装
cuda下载:百度搜索cuda nvidia
4. cudnn安装:b站有教程,详细的,保存网址了。
cudnn下载:百度搜索cudnn nvidia

可开始yolov3的使用

yolov3 目标识别教程:

yolov3 目标识别教程
(我是主要按照这篇文章来做的,以下是我按照这篇教程做的过程中所遇到的一些问题和经验)

如果初始权重下载速度过慢就直接点击权重的网址来下载

修改makefile文件:输入命令:~/darknet

安装opencv库:
安装opencv库

如果中途报错则:
报错解决方案

安装opencv库换源下载享受非一般的感觉: sudo pip3 install opencv-python -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

如果报错:“ import skbuild ModuleNotFoundError: No module named ‘skbuild’ ”
sudo apt install cmake
sudo pip3 install scikit-build
重新安装opencv库

如果一直卡在那个running:
sudo pip3 install --upgrade pip

重新安装opencv库

验证opencv安装是否成功:
输入:python3
import cv2
如果没报错就可以了

继续跟着yolov3教程里面的弄,用笔记本自带的摄像头进行图像识别,如果报错说GPU内存不足:
解决方案

就可以快乐玩耍了!!!!

我亲测试过,GPU运行比CPU运行快了几百倍都有,虽然还是有点卡卡的样子,但是如果你用过cpu运行对比过你就知道什么才叫真正的卡了,你就能体会到GPU的顺滑了。

用官方权重连续识别图片
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights1

到这里就差不多了,起飞!!!!!!!

ctrl+c
退出程序

如何在ubuntu终端运行.py文件?
ctrl+alt+t打开终端
输入python3+把想要运行的.py文件拖到终端里然后单击回车键 OK

在训练自己的数据时,标注图片数据。
可以直接点击下载
如果安装labelImg失败:
sudo apt-get install pyqt5-dev-tools
sudo pip3 install -r requirements/requirements-linux-python3.txt
make qt5py3
python3 labelImg.py
按照流程来弄如果遇到报错说labels文件内的文件不存在,你就把你的……_labels里面的所有文件复制到labels文件夹中。

软件卸载:
sudo apt-get remove……
sudo apt autoremove……

总而言之:遇到问题,把问题复制粘贴到百度上面就对了,疯狂百度反复csdn

训练自己的手势数据实际记录

用官方权重开始训练
./darknet detector train cfg/kua.data cfg/yolo-kua.cfg | tee person_train_log.txt

./darknet detector train cfg/kua.data cfg/yolov3.cfg | tee person_train_log.txt

用图片来进行识别测试
./darknet detect cfg/yolov3.cfg backup/yolov3_60000.weights kua100.jpg -thresh 0.4
千万不要在那个train.txt最后留有回车换行,不然后果很奇怪,程序莫名中断,说图片读取错误!!!!!!!!!!!!!!!!!!!!反复裂开整整一天!!!!!

查看显卡使用情况指令:
watch -n 1 nvidia-smi

如果发现模型训练过程中停止保存模型了就说明你的训练效果越来越差了
模型在训练过程中会不断将优化好的模型保存在yolov3.backup中(如果你打开yolov3.backup的属性,你就会发现他的修改时间会隔一段时间变化一次)

avg: 是平均Loss,这个数值应该越低越好,一般来说,一旦这个数值低于0.060730 avg就可以终止训练了。

_40000.weights
图片识别:
./darknet detect cfg/yolov3.cfg backup/yolov3_10004.weights hand54.jpg -thresh 0.12

./darknet detect cfg/yolov3.cfg yolov3_80000.weights

摄像头识别
./darknet detector demo cfg/kua.data cfg/yolov3.cfg yolov3_100010.weights -thresh 0.09

遇到一个非常奇怪的问题,不知道为什么Avg 先由1000多一直慢慢减小到5左右然后又突然增加到100,1000,10000……nan
怀疑是学习率太高导致模型发散了

中断后结合训练(后来这种方法不行了,换了下一种方法)
./darknet detector train cfg/kua.data cfg/yolov3.cfg backup/ yolov3_10000.weights | tee person_train_log.txt

中断训练后接着训练:
把相应的权重复制到darknet文件夹下面(这一步很重要不然会又需要重新训练过)
./darknet detector train cfg/kua.data cfg/yolov3.cfg yolov3_10009.weights | tee person_train_log.txt

学习率为0.00001训练了一个晚上,损失率还是只有0.8左右,没有减小到0.06以下。然后我又把学习率改为0.000001重新训练貌似收敛地挺快地。用80000次的模型0.000001的学习率一个晚上损失率从0.9到0.7。

奇怪:使用迁移学习后的模型就识别不了之前能识别的物种了?

用视频来识别:
./darknet detector demo cfg/kua.data cfg/yolov3.cfg yolov3_10000.weights bj.mp4 -thresh 0.01

ubuntu 茄子相机 打开usb摄像头
指令:cheese

图片分配80%训练集 20%测试集

yolov3 cfg代码解释(用于训练出更好的模型):
yolov3 cfg代码解释(用于训练出更好的模型)

里面大佬解释如何调整学习率: ★ 学习率决定着权值更新的速度,设置得太大会使结果超过最优值,太小会使下降速度过慢。如果仅靠人为干预调整参数,需要不断修改学习率。刚开始训练时可以将学习率设置的高一点,而一定轮数之后,将其减小在训练过程中,一般根据训练轮数设置动态变化的学习率。刚开始训练时:学习率以 0.01 ~ 0.001 为宜。一定轮数过后:逐渐减缓。接近训练结束:学习速率的衰减应该在100倍以上。学习率的调整参考

调整学习率
★★★ 学习率调整一定不要太死,实际训练过程中根据loss的变化和其他指标动态调整,手动ctrl+c结
束此次训练后,修改学习率,再加载刚才保存的模型继续训练即可完成手动调参,调整的依据是根据训练
日志来,如果loss波动太大,说明学习率过大,适当减小,变为1/5,1/10均可,如果loss几乎不变,
可能网络已经收敛或者陷入了局部极小,此时可以适当增大学习率,注意每次调整学习率后一定要训练久
一点,充分观察,调参是个细活,慢慢琢磨★★ 一点小说明:实际学习率与GPU的个数有关,例如你的学习率设置为0.001,如果你有4块GPU,那真实学习率为0.001/4

画loss:
python3 ‘/home/fengzi/darknet/line.py’
画loss的下载链接

本来使用300张图片进行训练,但是loss的值一直在0.6和1之间徘,然后我又增加了600张图片进去训练,此时学习率0.0001,看看效果怎么样吧:继续训练了半个小时,loss在0.6到1.7之间跳动 。将学习率改为0.00001继续训练2.5小时,loss下降到了0.37到0.6之间跳动。学习率0.00001继续训练。再次看看会有什么效果。(在此期间我又重新做了采集了1000张图片。)标注了两个小时左右。一共1830张图片,学习率0.00001,2小时,loss 0.52-0.28(用摄像头试着识别了一下,感觉有点效果了,但是还是距离理想的状态差了很远)。学习率0.000001继续训练……继续训练了10个小时,loss:3.5-5.5之间跳动,识别效果稍微好了一点点而以。又重把数据集都给删除了,重新采集了400张图片,这次的图片是根据测试时候出现的问题而采集,针对性地采集,学习率0.0001继续训练……1.5个小时过后loss:0.17-0.26跳动,学习率改为0.00001接着训练4小时,loss:0.08-0.14之间,识别效果还是差不多。。。。只能说这次的手势是别宣告失败了……………………………………………………下次再来…………继续慢慢寻找方法。

关注我:持续更新~~~~

上一篇:VS2017配置darknet环境配置【目标检测】


下一篇:linux-GStreamer安装缺少插件