Python实战:如何将YOLO目标检测模型部署为在线服务并分享经验
YOLO_Online 将深度学习最火的目标检测做成在线服务
第一次接触 YOLO 这个目标检测项目的时候,我就在想,怎么样能够封装一下让普通人也能够体验深度学习最火的目标检测项目,不需要关注技术细节,不需要装很多软件。只需要网页就能体验呢。
在踩了很多坑之后,终于实现了。
效果:
1.上传文件

2.选择了一张很多狗的图片

3.YOLO 一下

技术实现
web 用了 Django 来做界面,就是上传文件,保存文件这个功能。 YOLO 的实现用的是 keras-yolo3,直接导入 yolo 官方的权重即可。 YOLO 和 web 的交互最后使用的是 socket。 坑 1:
Django 中 Keras 初始化会有 bug,原计划是直接在 Django 里面用 keras,后来发现坑实在是太深了。
最后 Django 是负责拿文件,然后用 socket 把文件名传给 yolo。
坑 2:
说好的在线服务,为什么没有上线呢?买了腾讯云 1 CPU 2 G 内存,部署的时候发现 keras 根本起不来,直接被 Killed。

解决,并没有解决,因为买不起更好地服务器了,只好本地运行然后截图了。
坑 3:
YOLO 的识别是需要一定的时间的,做成 web 的服务,上传完文件之后,并不能马上识别出来,有一定的延迟。
相关教程:
TensorFlow + Keras 实战 YOLO v3 目标检测图文并茂教程
https://zhuanlan.zhihu.com/p/36152438
YOLO QQ 群(求土豪赞助一波服务器啊)
群号:167122861
ObjectDetection:http://objectdetection.cn/
Python实战:如何将YOLO目标检测模型部署为在线服务并分享经验
租个带显卡的云服务吧,最好 2G 以上,不然。。
这个需求很明确,就是把训练好的YOLO模型包装成一个Web API服务,方便调用。核心就是模型加载、推理和接口暴露。下面我用YOLOv5和FastAPI给你一个最直接、能跑起来的方案。
1. 环境准备 先装好必要的包:
pip install torch torchvision fastapi uvicorn pillow python-multipart
# 克隆YOLOv5(如果不用官方代码,可以只装ultralytics)
git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -r requirements.txt
2. 核心服务代码
创建一个 app.py,内容如下:
import io
import torch
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import JSONResponse
from PIL import Image
import yolov5 # 或者用ultralytics的YOLO
app = FastAPI(title="YOLOv5 Detection API")
# 加载模型(这里用官方yolov5s示例,可替换成自己的权重)
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
model.eval()
@app.post("/predict/")
async def predict(file: UploadFile = File(...)):
# 读取上传的图片
image_data = await file.read()
image = Image.open(io.BytesIO(image_data))
# 推理
results = model(image)
# 解析结果:获取检测框、置信度、类别
predictions = []
for *box, conf, cls in results.xyxy[0].tolist():
predictions.append({
"class": results.names[int(cls)],
"confidence": conf,
"bbox": [round(x, 2) for x in box]
})
return JSONResponse(content={"detections": predictions})
@app.get("/health")
def health_check():
return {"status": "ok"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
3. 运行和测试 启动服务:
python app.py
用curl测试:
curl -X POST "http://localhost:8000/predict/" \
-H "accept: application/json" \
-H "Content-Type: multipart/form-data" \
-F "file=@your_image.jpg"
4. 关键点说明
- 模型加载:示例用了torch.hub加载官方模型,实际部署时换成自己的权重文件路径就行。
- 输入处理:FastAPI的
UploadFile直接处理上传的图片,用PIL打开。 - 输出格式:返回JSON,包含类别、置信度和边界框坐标,方便客户端解析。
- 性能:生产环境要考虑异步处理、模型缓存和GPU推理优化,但上面代码跑通没问题。
总结:用FastAPI搭YOLO服务就是加载模型、写个predict接口处理图片返回结果的事。
绝了,keras 部署还行,至少也要用 Caffe2 或者 TF Serving 吧。
已经上线了,只是比较鸡肋,大佬。
多谢大佬指导,晚点试一下。
体验网址: http://objectdetection.cn/2018/05/08/yolo_online/
最后上线的是 web 接收图片,传回自己电脑 YOLO,会比较慢。
正在做一整套开源的包括训练、检测、分割、分类任务的库[手动狗头],类似楼主这个,可以参考: https://github.com/unarxiv/CVTron,Serve 和 Vis 分别是后台和前端的程序
#8 应该是
正在做一整套开源的包括训练、检测、分割、分类任务的库[手动狗头],类似楼主这个,可以参考: https://github.com/unarxiv/CVTron 其中 Serve 和 Vis 分别是后台和前端的程序
感谢楼主的项目,不过你博文中说的“解决,并没有解决,因为买不起更好地服务器了,只好本地运行然后截图了”,为啥一定要买贵的上天的国内服务器,用国外的服务器不就行了么?腾讯云 1G 内存的价格,至少可以买美国 or 法国 1000TB 内存的服务器了,推荐 online 家的 scaleway: https://www.scaleway.com 价格便宜,楼主可以试试
多谢,最后实现了一个版本是 web 只用来让用户上传文件,然后我自己电脑 YOLO 完了传回去。这个版本可以运行了,目前还不稳定。
是的,想法差不多,我计划也是先用 YOLO 跑一下,后续试一下类似于分类之类的模型。


