前言:本人穷,乞丐,无GPU,windows10破本一台,在此记录一下学习、部署、使用YOLO笔记
本文将描述描述内容:
文笔不好这里引用一位知乎大佬原话
5分钟GET AI - 用 Python 玩转 YOLO
YOLO 是时下最流行(state of the art)的物体检测(Object Detection) AI 模型之一,流行的原因是因为好用,好用的标准归纳为3条:
*PASCAL VOC 和 COCO 数据集是什么?*数据集由成千上万张图片组成,AI通过学习数据集图片中包含的物体以及该物体的分类,最终能达到正确识别所有图片中的物体所属的分类。PASCAL VOC 和 COCO 是两个有名的图片物体分类数据集,同样有名的还有 ImageNet 数据集。
*200FPS 是什么?*可以理解为一秒钟处理200张图片,普通视频24FPS肉眼就不会感到卡顿
安装opencv依赖,安装3.+的,别出啥幺蛾子,能支持更多格式的图像,并且得到实时的显示,opencv使用用源码安装,熟悉一下
github https://github.com/opencv/opencv/tree/3.4
访问费劲,还是从镜像取吧
code china https://codechina.csdn.net/opencv/opencv.git
分支切好,别去最新版的opencv了
THinK@LAPTOP-OBP0I7V8 MINGW64 /d/test/yolo_learn/opencv (3.4.15)
$ git branch
* 3.4.15
master
先给自己电脑装个CMAKE,链接里找到windows平台的msi下载下来双击安装即可,我下的是 cmake-3.20.0-windows-x86_64.msi,版本无所谓了,能用就行
在opencv目录下新建build目录,打开cmake-gui
点击generate,出现如下语句,项目生成成功,在build文件夹下出现 项目文件 OpenCv.Sln
-----------------------------------------------------------------
Configuring done
Generating done
个人看到网上最火的应该是
Darknet: Open Source Neural Networks in C,一款基于Yolo算法的框架,好吧,就研究他了。
网站:
darknet https://pjreddie.com/darknet/
上面的链接提供了github地址:
https://github.com/pjreddie/darknet
git clone https://github.com/pjreddie/darknet
cd darknet
make
带cmakelist的darknet源码地址,自己clone下来
github地址 https://github.com/alexeyab/darknet
本人网络环境访问github日常抽风,这里有个国内镜像
code china https://codechina.csdn.net/mirrors/alexeyab/darknet.git
这忘了说,没装git的话自己直接下载zip源码解压缩吧
把需要用的东西拷贝出来,放在任意一个地方
还需要下载别人训练好的权重 weights,去Yolo官网下载,电脑不行,就跑个YOLOV3-tiny,cfg文件在D:\test\yolo_learn\darknet\cfg\yolov3-tiny.cfg里面已经有了,不用下了。
集齐之后目录长这样
网上找个大象图片,保存在该目录 1.jpg,使用如下命令:
.\darknet.exe detect .\yolov3-tiny.cfg .\yolov3-tiny.weights 1.jpg
看看效果,好厉害鼓掌!!
Darknet给我们提供了调用示例:
任意新建文件夹,拷贝以下文件过来:
darknet.py提供了Python调用C接口的桥梁,注意源码中加载的dll名字不对,要改为 darknetd.dll
if os.name == "posix":
cwd = os.path.dirname(__file__)
lib = CDLL(cwd + "/libdarknet.so", RTLD_GLOBAL)
elif os.name == "nt":
cwd = os.path.dirname(__file__)
os.environ['PATH'] = cwd + ';' + os.environ['PATH']
lib = CDLL("darknetd.dll", RTLD_GLOBAL)
else:
print("Unsupported OS")
exit
darknet_images.py调用darknet.py实现图像识别,darknet_video.py调用darknet.py实现视频识别
darknet_images.py 分析
def parser():
parser = argparse.ArgumentParser(description="YOLO Object Detection")
parser.add_argument("--input", type=str, default="",
help="image source. It can be a single image, a"
"txt with paths to them, or a folder. Image valid"
" formats are jpg, jpeg or png."
"If no input is given, ")
parser.add_argument("--batch_size", default=1, type=int,
help="number of images to be processed at the same time")
parser.add_argument("--weights", default="./yolov3-tiny.weights",
help="yolo weights path")
parser.add_argument("--dont_show", action='store_true',
help="windown inference display. For headless systems")
parser.add_argument("--ext_output", action='store_true',
help="display bbox coordinates of detected objects")
parser.add_argument("--save_labels", action='store_true',
help="save detections bbox for each image in yolo format")
parser.add_argument("--config_file", default="./yolov3-tiny.cfg",
help="path to config file")
parser.add_argument("--data_file", default="./cfg/coco.data",
help="path to data file")
parser.add_argument("--thresh", type=float, default=.25,
help="remove detections with lower confidence")
return parser.parse_args()
image, detections = image_detection(
image_name, network, class_names, class_colors, args.thresh
)
使用下面命令行试一试:
python .\darknet_images.py --input ./data/horses.jpg --weights .\yolov3-tiny.weights --config_file .\yolov3-tiny.cfg
打印detections的结果
[('horse', '27.55', (38.82840347290039, 198.037841796875, 97.55213928222656, 83.2736587524414)), ('horse', '31.6', (179.0945281982422, 216.92813110351562, 106.2730941772461, 166.52919006347656)), ('cow', '36.68', (278.2288818359375, 231.1339874267578, 83.64852905273438, 122.21803283691406)), ('cow', '49.55', (280.13873291015625, 230.17926025390625, 41.53354263305664, 75.0211181640625)), ('horse', '55.55', (39.60430908203125, 183.631591796875, 34.10652542114258, 43.73979949951172)), ('horse', '67.8', (278.2288818359375, 231.1339874267578, 83.64852905273438, 122.21803283691406)), ('horse', '70.22', (280.13873291015625, 230.17926025390625, 41.53354263305664, 75.0211181640625)), ('horse', '73.84', (85.5504150390625, 240.89239501953125, 163.40762329101562, 172.07479858398438))]
准备研究研究怎么训练自己的数据集。