ubuntu-yolo3--使用

版权声明:本文为博主原创文章,未经博主允许不得转载O(∩_∩)O https://blog.csdn.net/qq_38153833/article/details/88674678

背景:
yolo是继faster-r-cnn后,原作者在目标检测领域进行的新研究。到了v3版本以后,虽然已经换人支持,但是更注重工程实践,在实际使用过程中突出感受就是:“非常快”,GPU加速以后能够达到实时多目标
更多相关背景知识还有原理以及与faster-rcnn对比请看这:https://www.cnblogs.com/makefile/p/YOLOv3.html

现在要用cv2拍一个视频传yolo3让它框出一些物体看看情况怎么样

先上视频代码

#-*-coding:utf-8-*-
import cv2

cap = cv2.VideoCapture(0)
width = 640
ret = cap.set(3, width)
height = 480
ret = cap.set(4, height)

# fourcc = cv2.VideoWriter_fourcc(*'XVID')

fourcc = cv2.VideoWriter_fourcc(*'MJPG')    # 转换为这个格式可以直接打开 不过保存时候文件好大,xvid虽然不能打开但是yolo3传进去时候是可以打开这个视频的。


out = cv2.VideoWriter('out.mp4', fourcc, 20.0, (width, height))


while cap.isOpened():
    ret, frame = cap.read()
    if ret is True:
        frame = cv2.resize(frame, (640, 480))

        out.write(frame)

        cv2.imshow('frame', frame)

    else:
        break

    key = cv2.waitKey(1)
    if key == ord('q'):
        break

cap.release()
out.release()
cv2.destroyAllWindows()

题外话(别人说的):OpenCV只支持avi的格式,而且生成的视频文件不能大于2GB,而且不能添加音频。但我实验结果表明mp4都可以:)

这个也是题外话之前网上下了一个视频说无法打开视频,就应用商店安装VLC(参考我之前文章 https://blog.csdn.net/qq_38153833/article/details/88659839)

至于怎么跑起来:
看qqwwee的开始操作,直接传一张图片或者视频就直接可以看到效果了,我就不再这里啰嗦了




开题:下面是用它的代码来训练自己的图片,看看效果怎样
参考:https://blog.csdn.net/Patrick_Lxc/article/details/80615433
记得:路径要对上!!,还有yolov3.cfg确实没调用,改了也没用。

LabelImg安装
因为我已经安装了pyqt5了所以就只安装必要就好了,下面有些是重复的,如果不行就自己网上看其他教程吧

git clone https://github.com/tzutalin/labelImg.git
sudo apt-get install python-lxml
cd labelImg
make all
sudo apt-get install pyqt5-dev-tools
sudo pip3 install lxml
make qt5py3
python3 labelImg.py

训练时候
Tensorflow训练之Allocator (GPU_0_bfc) ran out of memory trying to allocate 1.00MiB.
还有结尾红色报错
If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info.

是显卡内存不够,将batch-size降低才能训练模型,(或者找一台更好的机器吧)

为了加大batch-size还有训练速度,用双gpu实现
四句话:
train.py里面
import os
from keras.utils import multi_gpu_model
os.environ[“CUDA_VISIBLE_DEVICES”] = ‘0,1’ #指定第0,1块GPU可用
在这里插入图片描述如果是出现多个加载权重失败即SKipping loading of weights,原因可能是因为单卡权重的层和双卡权重的层命名不一样,如果先加载权重后换成双卡就能加载了也就是下图
在这里插入图片描述权重加载虽然由之前加载失败的六个变成现在失败了三个,问题还是没解决,希望有人告诉我如何解决。而且yolo3显存占满了,但是两个gpu利用率也只是用到45左右而已
在这里插入图片描述最终效果:
在这里插入图片描述
其他问题
对cv2的图像进行运算时候eg:frame=frame-frame1,为何cv2.imshow出现一片空白,这是因为类型问题,需要转int才可以,否则减去后出现负数就会自动加255。转int即可

至于数据集问题还有map,loss问题正在解决中,不过最近在忙,到时候做差不多再继续往下写吧。


frame1 = frame1.astype(np.int)


附上别人挺好的总结:

v3毫无疑问现在成为了工程界首选的检测算法之一了,结构清晰,实时性好。这是我十分安利的目标检测算法,更值得赞扬的是,yolo_v3给了近乎白痴的复现教程,这种气量在顶层算法研究者中并不常见。你可以很快的用上v3,但你不能很快地懂v3。而我自己实现后发现封装很深,但是用自己数据效果并不好,希望能找到更多人一起讨论怎么改进,最近也在忙暑假实习问题,但我最弱的现在就是OJ题了,这个都不通过即使我做了几个项目大公司也不会要,发发恼骚,接下来就是解决各种各样的问题了,如果有小伙伴打kaggle比赛的话,记得带上我这么新手:)。

猜你喜欢

转载自blog.csdn.net/qq_38153833/article/details/88674678