darknet/
:darknet 根目录,可完全独立使用
cfg/
:各版本网络
...
building_v3.cfg
:本系统采用的复杂版的网络配置building_v3_tiny.cfg
:本系统采用的简版(v3-tiny)的网络配置...
data/VOCdevkit/building2018/
: 本系统的训练数据集,不提供,需要请 issues 私信...
weights/
: 训练好的模型文件,文件不提供,需要请 issues 私信building_v3.weights
:对应building_v3.cfg
训练出的复杂模型/权重文件building_v3_tiny.weights
:对应building_v3_tiny.cfg
训练出的简版(v3-tiny)模型/权重文件
...
bin/
: build 后的可执行文件
...
Guone/
:Guonepylint/
:使用 pylint 静态检查代码gunicorn/
:http serverbuildout/
:构建工具
eggs/
: 依赖的包...
forms/
:所用表单models/
:数据模型static/
:静态文件scripts/
:脚本文件,图像分类模式的计算模块templates/
:HTMLviews/
:路由、视图tests/
:供识别的测试图片
1/
:模式1(图像分类)的测试图片2/
:模式2(目标检测)的测试图片
config.py
:相关配置app.py
: appsetup.py
:构建文件buildout.cfg
:配置文件versions.cfg
: versions
使用命令:
git clone https://github.com/acthse/Guone.git you_path
然后:
git submodule init
git submodule update
或者使用 --recursive
也 OK 滴:
git clone --recursive https://github.com/acthse/Guone.git you_path
下载完成后,进入 Guone 构建项目:
cd Guone/
buildout
如果你没有安装 buildout
可使用 pip
安装:
pip install zc.buildout
构建完成后,启动 Guone:
./bin/Guone
或者通过以下命令来指定开启的进程数,监听端口等来启动:
./bin/gunicorn -w 1 -b 0.0.0.0:8004 app:app -k gevent
成功启动项目后,可看到如下信息:
[2018-06-07 19:33:02 +0800] [9928] [INFO] Starting gunicorn 19.8.1
[2018-06-07 19:33:02 +0800] [9928] [INFO] Listening at: http://0.0.0.0:8004 (9928)
[2018-06-07 19:33:02 +0800] [9928] [INFO] Using worker: gevent
[2018-06-07 19:33:02 +0800] [9931] [INFO] Booting worker with pid: 9931
访问 http://localhost:8004
即可看到系统的登录界面使用 Guone,但因为 Guone 依赖 darknet
框架 和 VLFeat
工具包,所以你需要安装完成 darknet
并下载配置 VLFeat
工具包后才能正常使用,下面介绍安装方法。
darknet
是一个用 C
和 CUDA
编写的相当不错的开源神经网络框架,这是作者的darknet
主页。
关于安装和使用,请阅读 darknet
主页的 Installing Darknet
和 YOLO: Real-Time Object Detection
,有详细介绍。
你需要在你的机子上根据你的需要以及硬件条件决定是否安装 OpenCV
和 CUDA
,安装完成后,在 MakeFile
中修改相关选项。因为我的代码已经编译过,你需要进入 darknet
目录执行:
meke clean
然后重新编译完成即可使用:
meke -j16
站在大神的肩膀上,一切都变得很简单。
采用本系统训练好的模型(当然你也可以下载官网给出的其他模型)进行测试,命令如下(windows
下使用 darknet.exe
即可)
- building_v3.cfg 复杂版网络
./darknet detector test cfg/building.data cfg/building_v3.cfg weights/building_v3.weights test_image_path
- building_v3_tiny.cfg 简版网络,速度比上面的快10多倍,检测效果略差。
./darknet detector test cfg/building.data cfg/building_v3_tiny.cfg weights/building_v3_tiny.weights test_image_path
- 开启摄像头实时检测,需要在编译时开启
CUDA
和opencv
,不用-c
指定摄像头时opencv
默认为0
。
./darknet detector demo cfg/building.data cfg/building_v3.cfg weights/building_v3.weights [ -c <num> ]
- 检测本地视频文件,至少需要在编译时开启
opencv
。
./darknet detector demo cfg/building.data cfg/building_v3.cfg weights/building_v3.weights test_video_file_path
如果测试成功,则说明你已经成功安装并可以使用 darknet
框架了。
关于安装opencv
,各操作系统不相同,推荐 使用 Google
或者 必应搜索国际版 搜索关键字 opencv3 install on your_system
来找到靠谱的教程。
笔者 mac os
系统安装,推荐这篇教程。
安装成功opencv
后,在 MakeFile
中令:
OPENCV = 1
遇到问题:
gcc -Iinclude/ -Isrc/ -DOPENCV
pkg-config --cflags opencv
-Wall -Wno-unknown-pragmas -Wfatal-```
errors -fPIC -Ofast -DOPENCV -c ./src/gemm.c -o obj/gemm.o
In file included from /usr/local/include/opencv2/core/types_c.h:59:0,
from /usr/local/include/opencv2/core/core_c.h:48,
from /usr/local/include/opencv2/highgui/highgui_c.h:45,
from include/darknet.h:25,
from ./src/utils.h:5,
from ./src/gemm.c:2:
/usr/local/include/opencv2/core/cvdef.h:485:1: error: unknown type name ‘namespace’
namespace cv {
^~~~~~~~~
compilation terminated due to -Wfatal-errors.
Makefile:85: recipe for target 'obj/gemm.o' failed
make: *** [obj/gemm.o] Error 1
这也是笔者在使用opencv
编译所遇到的问题,可参考这里解决。
本系统在传统图像分类模式中图像特征的提取(计算图像sift
特征值)使用了开源工具包VLFeat
提供的二进制文件,获取我要工具包。该工具包支持主流的(windows, Mac, Linux)
操作系统,下载好工具包后,我们只需要 sift
的可执行文件,将其在系统中的配置:
在
scripta/sift.py
的方法process_image()
中的cmmd
给出sift
可执行文件的位置即可。
buildout
是一个基于 Python
的构建工具, 通过一个配置文件,可以从多个部分创建、组装并部署你的应用,即使应用包含了非 Python
的组件,buildout
也能够胜任。 buildout
不但能够像 setuptools
一样自动更新或下载安装依赖包,而且还能够像 virtualenv
一样,构建一个封闭隔离的开发环境。
开发过程中如果需要添加依赖,只需要在 setup.py
中的 install_requires
中添加你的包名,然后 buildout
一下即可。
本系统的有两种模式,其中主要介绍实时目标识别 Yolo(darknet)
关于自己数据集的训练。
训练过程步骤细节较多,需细心关注,大致可以分为以下阶段:
- 数据准备,采集图像数据,预处理等;
- 标注,推荐使用LabelImg;
该工具在
linux
和windows
下安装极为简单,mac os
下很难,作者的 github 上有说明。标注是一个体力活,数据集量大的话,也不要急,慢慢来呗。
- 理解并修改
darknet/scripts/voc_label.py
,并用其将标注产生的xml
文件转换成yolo
需要的格式; - 配置你想采用的网络,本系统使用了
yolov3-voc.cfg
和yolov3-tiny.cfg
两个版本 ; - 准备你的
pro_name.data
; - 下载预训练模型/权重文件,开始训练,命令如下:
./darknet detector train cfg/your_pro_name.data cfg/your_pro_name.cfg [预训练模型] [-gpus 0,1,2,3]
这里墙裂推荐使用
GPU
,没有条件的可以瞅瞅极客云,不是打广告,笔者就是用的这个,觉着很好用,方便性,价比高。CPU
的话,额,等的你花儿都谢了。
- 测试你的模型/权重文件。
具体过程可以参考这篇博文。
这是 yolov2
的训练过程,与 yolov3
的训练过程主要相差在网络文件的修改配置,v3可看这篇博文。
图像分类模式的本地图像库训练方法很简单:依次使用脚本
scripts/savevocab.py
图像训练scripts/buildindex.py
建库创索引/存储库scripts/query.py
(可选) 查询测试
此部分图像处理参考自《Python计算机视觉编程》