本文主要参考这个网址,本文是对这个网址所遇到错误的总结,如有侵权,请与我联系。
0.配置深度学习环境
安装之前,你要知道tensorflow的安装环境,见官网:
https://tensorflow.google/install/source_windows#install_visual_c_build_tools_2015
MSVC+CUDA+cuDNN+python的版本都要正确
0.1 MSVC是VS附带的软件包:Microsoft Visual C++ 2015 Redistributable和Microsoft 生成工具 2015,tensorflow官网上说可以不用下载VS可以直接单独下载它,但是你最好还是安装一个VisualStudio2015,VS会附带这两个东西。我尝试了很多次只安装Microsoft Visual C++ 2015 Redistributable和Microsoft 生成工具 2015,结果CUDA装不上。
VS2015免费版的下载可以去这个微信公众号找:软件安装管家
tensorflow官网里有单独的MSVC2015的下载地址,我这里也把它给出吧:
安装 Visual C++ 生成工具 2015。此软件包随附在 Visual Studio 2015 中,但可以单独安装:
- 转到 Visual Studio 下载页面,
- 选择“可再发行组件和生成工具”,
- 下载并安装:
- Microsoft Visual C++ 2015 Redistributable 更新 3
- Microsoft 生成工具 2015 更新 3
这里可以看到:
选择x64的,x64是给64位的系统用的,x86是给32位系统用的。
0.2 关于CUDA的安装可以参考这个网址里的CUDA安装方法:
WIN10安装TENSORFLOW(GPU版本)详解(超详细,从零开始) - 知乎
关于cuDNN的安装你可以参考这个网址的安装方法:
Win10+cuda8.0+cudnn5.1+tensorflow-gpu1.2.0+gtx1050ti,tensorflow环境搭建与配置_angzhangzhang123的博客-CSDN博客_gtx1050ti tensorflow
0.3 至于python我是下载了一个anaconda3,它的默认python版本是3.5,然后我就用Anaconda Prompt当cmd用
1.下载代码
本篇博客对应的旧代码:
带模型版665.5MB+:
百度网盘链接 提取码: bre5
只含代码版5MB:
tensorflow_yolov3_mud.rar - 蓝奏云
或者可以去看原作者的新代码,这个代码有更新,如果选择使用新代码,则本篇博客不适用新代码,要根据github上的readme.md来走:
https://github/YunYang1994/tensorflow-yolov3.git
2.安装第三方库
这一步的目的就是安装运行代码所需要的第三方库,requirements.txt里面就是各种依赖库对应的版本。
cd tensorflow-yolov3
pip install -r ./docs/requirements.txt
命令行下(本人用的是Anaconda Prompt)输入:pip install -r ./docs/requirements.txt的时候遇到很多错误,你可能需要符合以下两点要求:
(1)首先是你的命令行要到tensorflow-yolov3这个目录,
(2)然后要保证你的命令行下的python版本在3.5到3.6之间(直接输入python查看版本)。
当然你也可以用Anaconda Prompt命令行来一步一步安装requirements.txt里安装不了的依赖包。
(3)这个requirement.txt文件里安装的tensorflow版本是GPU,1.11.0,它对你的显卡的算力,也就是compute capability的要求是3.7以上,我的Tesla k40m的算力是3.5,每次运行demo时都不能使用GPU,都自动跑的CPU版本,所以我卸载了这个版本,换了更低的版本,如果你的tensorflow能跑下面的那个示例代码就不用执行这一步来卸载重装其它版本的tensorflow了。关于你的显卡的compute capability可以在官网上搜。
pip uninstall tensorflow-gpu==1.11.0
pip install tensorflow-gpu==1.10.0
我NVIDIA GTX 1060的显卡安装tensorflow-gpu==1.12.0、tensorflow-cpu==1.12.0、tensorflow-cpu==1.5.0也可以,2.0的tensorflow则不行了。
运行这个示例代码看看,你的tensorflow是否安装成功以及是在GPU还是CPU上跑:
import tensorflow as tf
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print (sess.run(c))
sess.close()
tensorflow安装成功,并可以看到我的是在GPU上跑的。
tensorflow-cpu版的话就是这样:
3.导出.pb模型文件
第3步把加载好的COCO权重导出为TF checkpoint (yolov3.ckpt) 和 frozen graph (yolov3_gpu_nms.pb) 。
关于这一步,它这一句话只是解释说明你现在做的事,并不是指导你去做什么,你照着它下面的指示做就好了,不用管这句话。
如果你没有yolov3.weights的话,去下载,然后放到./checkpoint目录下。下载地址是:
https://github/YunYang1994/tensorflow-yolov3/releases/download/v1.0/yolov3_coco.tar.gz
接着anaconda prompt下或cmd下输入命令:
python convert_weight.py --convert --freeze
这一步是把作者的这个yolov3.weights转化成识别的时候使用的.pb文件,这个.pb文件可以识别生活中常见的物体,如果你是用yunyang1994在github上的新代码的话就不能运行,必须使用我的旧代码。
4.视频识别
第4步:然后,./checkpoint目录下就会出现一些.pb文件。现在可以跑Demo脚本了:
python nms_demo.py
python video_demo.py # if use camera, set video_path = 0
输入第一个命令会报错:ModuleNotFoundError: No module named 'cv2',则输入命令安装opencv2:
pip install opencv-python
输入第二个命令时,你可能会报错:python video_demo.py # if use camera, set video_path = 0
因为你的电脑没有摄像头,这样的话可以不用管。如果你的电脑有摄像头的话,这个命令就是开启你的摄像头实时识别现实中的物体
假如你在使用摄像头时出现错误:
Traceback (most recent call last):
File "video_demo.py", line 29, in <module>
["Placeholder:0", "concat_9:0", "mul_6:0"])
File "D:\tensorflow-yolov3-master\core\utils.py", line 220, in read_pb_return_tensors
return_elements=return_elements)
File "D:\Pro2\Anaconda3\lib\site-packages\tensorflow\python\framework\importer.py", line 283, in import_graph_def
raise ValueError('No op named %s in defined operations.' % node.op)
ValueError: No op named GatherV2 in defined operations.
说明你的tensorflow版本太低,需升级,如果出现了其他的错误,检查你的video_demo.py文件里使用的那个nms.pb文件是cpu还是gpu版本的,是否与你的tensorflow-cpu或gpu相匹配。
5.训练VOC或COCO格式的数据
到了这一步,如果你要弄VOC格式的数据集,你可以不往下看了,可以转到下面这篇博客,而且强烈建议跳到这里,因为下面这篇博客更详细:
tenforflow版YOLOv3下VOC数据集的准备和训练_UryWu的博客-CSDN博客
如果你要弄COCO格式的数据集:
官网:
http://cocodataset/
5.1下载的数据图像集是那个COCO官网的--》Dataset下的--》Download--》Images的--》2017 Train images [118K/18GB]
但是官网上的很慢,可以去这个网址下载。
强烈推荐用迅雷下载,因为下载到一半突然网络错误是很痛苦的。我就踩了不用迅雷的坑。
上面那个数据集太大,建议用这个小数据集算了:
5.2下载的标注集是COCO官网的--》Dataset下的--》Download--》Images的--》2017 Train/Val annotations [241MB]
6.提取COCO数据集为txt
然后,就要从数据集里提取一些有用的信息了,比如边界框,拿这些信息生成你自己的.txt文件。
python core/extract_coco.py --dataset_info_path ./data/train_data/COCO/train2017.txt
在这个目录里用的cmd命令行窗口里输入上面那个命令后,报错:
python: can't open file 'core/extract_coco.py': [Errno 2] No such file or directory
于是我去scipts这个目录下找到这个缺失的文件,并把它放到指定的core目录下。
根据教程输入命令:
python core/extract_coco.py --dataset_info_path ./data/train_data/COCO/train2017.txt
错误:
File "core/extract_coco.py", line 30, in main
labels = json.load(open(flags.json_path, encoding='utf-8'))
FileNotFoundError: [Errno 2] No such file or directory: '/home/yang/test/COCO/annotations/instances_train2017.json
应该是这个文件里的路径不对,我去改一下路径。
可以看到源文件中有三个路径对于我的文件目录都要改
我的三个路径:
7.txt转tfrecord
生成那个train2017.txt文件后,
接下来,要把图像数据集转成.tfrecord,就是用二进制来保存数据。
python core/convert_tfrecord.py --dataset_txt ./data/train_data/COCO/train2017.txt --tfrecord_path_prefix ./data/train_data/COCO/tfrecords/coco
txt文件里就是数据,它的格式如下:
--xxxx是参数标识符,这个后面就是路径参数,列如这里的--dataset_txt是路径参数标识符,它的后面就是用来输入的txt文件的路径。你的路径一定要存在,不存在的更换路径或是自己创建这个目录。后面的--tfrecord_path_prefix就是输出的tfrecord文件的地址,我这里是./data/train_data/COCO/tfrecords/coco,我用的是相对路径,最后面的这个coco是生成的tfrecord文件名,这个不是文件夹。
参考网址
这一步可能会报错:
convert_tfrecord.py: error: unrecognized arguments: --num_tfrecords 100
于是我把这个--num_tfrecords 100配置参数去掉了,因为报错的这个convert_tfrecord.py文件里:
它的参数中
不包括这个--num_tfrecords
继续输入7.开头的那个命令,继续报错:
compat.as_bytes(path), compat.as_bytes(compression_type), status)
File "E:\Anaconda3-5.2.0-Windows-x86_64\lib\site-packages\tensorflow\python\framework\errors_impl.py", line 526, in __exit__
c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.NotFoundError: Failed to create a NewWriteableFile: ./data/train_data/COCO/tfrecords/coco.tfrecords : ϵͳ\udcd5Ҳ\udcbb\udcb5\udcbdָ\udcb6\udca8\udcb5\udcc4·\udcbe\udcb6\udca1\udca3
; No such process
根据这个网址的提示:error when generate tfrecord · Issue #41 · datitran/raccoon_dataset · GitHub
要修改输入输出路径,我觉得就是这个文件convert_tfrecord.py里的路径错误,上面那个是保存数据图片名字和标注的txt文件的路径,下面是输出打包后tfrecords文件的目录,没有这个保存目录它会自己创建:
我改成了:
继续输入7.开头的那个命令,开始生成tfrecord文件,tfrecord文件就是把那些Images数据和标注好的annotations标注打包起来,生成一个tfrecord文件,并用于训练:
为了好看,我把它的名字改成了tain2017.tfrecords
之后,在这下面两个网址下载用来测试的图片和标注。
http://images.cocodataset/zips/test2017.zip
wget http://images.cocodataset/annotations/image_info_test2017.zip
根据上面第7、8的步骤,用同样的方法生成tfrecord文件,我取名为test2017.tfrecords
8.模型训练、测试与评估
然后打开tensorflow-yolo3下面的quick_train.py文件:
1. BATCH_SIZE是总共训练包的个数,但你训练时出现显存不够(Out of range),或是蓝屏、程序崩溃的时候可以尝试把这个参数调小。
2. STEPS是迭代次数的多少,低则识别率低,反之则否,我用3000幅左右的图片来训练并且迭代2500次用了一个半小时,我迭代50000次则用了25个小时左右。
3. CLASSES之后的路径是存放你要识别的类别的txt文件。
4. ANCHORS之后的路径是你训练的网络单元的权重文件,这个txt文件名含有anchors,我们用的是VOC格式的数据,这里要改为voc_anchors.txt。
最下面的两个train_tfrecord和test_tfrecord是之前生成的,改好路径。改为:
注意这两个tfrecords文件的路径,你的路径不一定和我的相同,但一定要保证你有你自己的这个路径,并且存在这两个文件。
然后在anaconda prompt中进入tensorflow-yolo3的根目录,输入命令开始训练:
python quick_train.py
最后会在tensorflow-yolo3/checkpoint目录下生成三个ckpt文件,这个就是训练好的模型。
然后在anaconda prompt中输入命令生成模型应用文件:
python convert_weight.py -cf ./checkpoint/yolov3.ckpt-2500 -nc 1 -ap ./data/coco_anchors.txt --freeze
此命令会利用上面的ckpt文件生成*cpu_nms.pb和*gpu_nms.pb文件。
然后打开文件:tensorflow-yolov3/quick_test.py
anaconda prompt下输入命令来测试:
python quick_test.py
这时候等一会儿,会出现那幅测试的图片,被识别出来的物体会被框出来。
然后是评估模型,打开tensorflow-yolov3/evaluate.py:
anaconda prompt下输入命令来评估:
python evaluate.py
这个mAP就是识别率。
*****完结撒花*****
另附参考博客:
Github 项目 - YOLOV3 的 TensorFlow 复现 - AI备忘录
更多推荐
Win10安装YOLOv3.0
发布评论