这是一个18年毕业本科生的一个毕设题目,项目还没有完成,在这里会记录下在caffe上实现YOLO的过程。欢迎大家和我交流!
20171123-前期准备:
- 首先当然是YOLO作者的自留地:darknet
- 一位在caffe添加了自己写的层
- YOLO算法的Caffe实现
- caffe 添加YOLO新层Leaky Layer
- 在微软caffe上实现yolov1的训练和预测(windows cpu)
github上关于caffe-yolo项目
https://github.com/hojel/caffe-yolo-model
https://github.com/yeahkun/caffe-yolo
https://github.com/xingwangsfu/caffe-yolo
大致看了一下以后感觉要看一下caffe 的源码,添加一些caffe目前没有的层和改变caffe最后的激活函数。
20171124-阅读caffe源码教程:
caffe源码解析的三个博客分享
caffe目录结构 及 caffe源码文件说明
- 学习了解有关C++的基础知识,编写自己需要的layer。 (c++相关课程,请大家也多多推荐哦)
- 调研目前业界常用的物体检测的开放样本集并收集整理。
- 制定一个选取负样本的策略。
~20171220:
之前几天主要完成到工作:
- 完成正样本制作1.5w张,负样本制作0.05w张;
- 在ubuntu环境下搭建caffe(ubuntu16.04+cuda+cuDNN+anacoda3+caffe)
~20180410
我还在搞这个项目啊,现在我从github里面下了一个基于Caffe的YOLO模型,改成了中间自己的参数,虽然过程中没有什么难点但是实际操作上碰到了一些坑。
比如说有时候会在训练bith_size 太大的时候,会报会内存不过的错误
Check failed: error == cudaSuccess (2 vs. 0) out of memory
。这是时候对应的解决方案是在命令台输入nvidia-smi
得到正在运行的GPU的PID,使用如下代码。如果进行如下操作还是报相同错误,那就应该尝试将bitch_size改小。kill -9 PID
有时候在使用python调用caffe的时候
ImportError: No module named 'caffe'
的报错,但是你在项目导入过程中不仅make pycaffe
了,而且在桌面的python下面,import caffe
也没有报错,那很有可能是因为你的py文件缺少下面一段话:sys.path.append('/your/caffe/path/python')//其中的/your/caffe/path/指的是自己这个caffe项目的根目录
在基于caffe使用别人写的网络的过程中,经常会出现要调用不同版本的python情况。网上也有很多很方便的方法,下面是本人经常使用更换ubuntu系统默认python版本的方法(以将python3.5换成python2.7为例):
~$ python --version //查看系统python自带版本 Python 3.5.2 ~$ whereis python2.7 //搜索系统是否已经安装python2.7 python2: /usr/bin/python2.7-config /usr/bin/python2.7 /usr/bin/python2 /usr/lib/python2.7 /etc/python2.7 /usr/local/lib/python2.7 /usr/include/python2.7 /usr/share/man/man1/python2.1.gz //若结果里面有/usr/bin/python2.7说明已经安装 //如果没有则需要手动安装 ~$ sudo rm /usr/bin/python //删除原有的python连接文件 ~$ sudo ln -s /usr/bin/python2.7 /usr/bin/python //然后建立指向python2.7的软链接 $ PATH=/usr/bin:$PATH //把路径/usr/bin/加入环境变量PATH中
重新装完python以后,肯定就是要import caffe。在import caffe之前需要下载skimage
sudo pip install scikit-image
sudo pip install protobuf
因为直接拿别人的代码来会比较简单,所以我现在的思路是
- 首先把一个基于Caffe的YOLO网络和SSD跑通,YOLO使用的网络是yeahkun 的,SSD使用的是
weiliu89的,并且还附有ssd_pacal.py的源码解读(20180411完成) - 然后再用自己的数据集在上面跑通,这里当然会有一些理解网络参数,修改参数符合自己数据集的过程,进行一些对网络性能的评估运算;(20180410完成在YOLO上面的自己数据集的运行)
- 接着对YOLO网络进行一些调参的训练,这个过程也是一个看代码学习的过程。
- 最后希望就是自己基于caffe写一个网络,可以是YOLO2或者YOLO3。
20180412
我的Ubuntu系统根目录满了根本下不了东西了,我知道有多种清空内存的方法,但是我还是喜欢暴力简单的,直接从win系统中分出一部分给ubuntu,下班之前搞一下。参考文章
确定评估我的检测网络的标准。