论 文
https://pjreddie.com/media/files/papers/YOLOv3.pdf
翻译
https://zhuanlan.zhihu.com/p/34945787
yoloV3主页:
https://pjreddie.com/darknet/yolo/
keras-yolo3代码:
https://github.com/qqwweee/keras-yolo3.git
最新:https://github.com/pjreddie/darknet
VOC数据集
http://host.robots.ox.ac.uk/pascal/VOC/
环境需求
- tensorflow-gpu1.4.0
- keras2.1.3
- python3.6.0
demo
- 下载代码
https://github.com/qqwweee/keras-yolo3.git
- 下载 yoloV3 权重文件
https://pjreddie.com/media/files/yolov3.weights
- 权重下载太慢的话可以到下面的连接下载
链接:https://pan.baidu.com/s/1HqSZPEC5OiBhFB4I060TUg
提取码:b99w
- 将darknet下的yolov3配置文件转换成keras适用的h5文件
python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5
运行预测图像程序
- 运行预测图像
python yolo_video.py --image
识别图片的代码逻辑
- 要求输入图片,进入
yolo.py的detect_image()方法
,计时开始 - 新建一个长宽均为416,RGB为[128, 128, 128]的图片,把原始图片按比例缩放,画到新建的图片上,返回该图片
iw, ih = image.size
# size:[416, 416]
w, h = size
scale = min(w/iw, h/ih)
nw = int(iw*scale)
nh = int(ih*scale)
image = image.resize((nw,nh), Image.BICUBIC)
new_image = Image.new('RGB', size, (128,128,128))
Image._show(new_image)
new_image.paste(image, ((w-nw)//2, (h-nh)//2))
Image._show(new_image)
return new_image
- 把返回的图片每个像素放到数组里,归一化到0-1之间,并把数组维度扩充为4维
image_data = np.array(boxed_image, dtype='float32')
image_data /= 255.
image_data = np.expand_dims(image_data, 0)
- 开始预测
out_boxes, out_scores, out_classes = self.sess.run(
[self.boxes, self.scores, self.classes],
feed_dict={
self.yolo_model.input: image_data,
self.input_image_shape: [image.size[1], image.size[0]],
K.learning_phase(): 0
})
- 取得预测结果进一步处理,把 类别,分数,lable画到图片上
- 运行预测视频
# python yolo_video.py --input <input video file> --output <output video file>
python yolo_video.py --input d:\ai\test.mp4 --output d:\ai\test_success.mp4
- 调用预测本地摄像头
yolo.py 中大致175行 把vid = cv2.VideoCapture(video_path)
修改为vid = cv2.VideoCapture(0)
然后运行python yolo_video.py
- 调用远程 rtmp/rtsp 流进行预测
yolo.py 中大致175行 把vid = cv2.VideoCapture(video_path)
修改为vid = cv2.VideoCapture('rtmp://58.200.131.2:1935/livetv/hunantv')
然后运行python yolo_video.py