错误“缓存可能已过期,请尝试 `force_reload=True`。”即使我在代码块中包含了 `force_reload=True` 也会出现?
Posted
技术标签:
【中文标题】错误“缓存可能已过期,请尝试 `force_reload=True`。”即使我在代码块中包含了 `force_reload=True` 也会出现?【英文标题】:An error 'Cache may be out of date, try `force_reload=True`.' comes up even though I have included `force_reload=True` in the code block? 【发布时间】:2021-09-09 09:39:47 【问题描述】:当我尝试对模型进行推断时,我的 Heroku 应用程序给出了内部服务器错误 (500)。
使用命令heroku logs --tail
出现以下错误(这是收到的错误的一部分)
2021-06-25T13:13:01.052585+00:00 heroku[web.1]: State changed from up to starting
2021-06-25T13:13:02.131624+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2021-06-25T13:13:02.333580+00:00 app[web.1]: [2021-06-25 13:13:02 +0000] [8] [INFO] Worker exiting (pid: 8)
2021-06-25T13:13:02.333668+00:00 app[web.1]: [2021-06-25 13:13:02 +0000] [4] [INFO] Handling signal: term
2021-06-25T13:13:02.333748+00:00 app[web.1]: [2021-06-25 13:13:02 +0000] [7] [INFO] Worker exiting (pid: 7)
2021-06-25T13:13:02.734851+00:00 app[web.1]: [2021-06-25 13:13:02 +0000] [4] [INFO] Shutting down: Master
2021-06-25T13:13:02.814358+00:00 heroku[web.1]: Process exited with status 0
2021-06-25T13:13:32.771092+00:00 heroku[web.1]: Starting process with command `gunicorn app:app`
2021-06-25T13:13:37.235228+00:00 app[web.1]: [2021-06-25 13:13:37 +0000] [4] [INFO] Starting gunicorn 20.1.0
2021-06-25T13:13:37.235870+00:00 app[web.1]: [2021-06-25 13:13:37 +0000] [4] [INFO] Listening at: http://0.0.0.0:17520 (4)
2021-06-25T13:13:37.236182+00:00 app[web.1]: [2021-06-25 13:13:37 +0000] [4] [INFO] Using worker: sync
2021-06-25T13:13:37.248134+00:00 app[web.1]: [2021-06-25 13:13:37 +0000] [7] [INFO] Booting worker with pid: 7
2021-06-25T13:13:37.304799+00:00 app[web.1]: [2021-06-25 13:13:37 +0000] [8] [INFO] Booting worker with pid: 8
2021-06-25T13:13:37.739229+00:00 heroku[web.1]: State changed from starting to up
2021-06-25T13:14:08.000000+00:00 app[api]: Build succeeded
2021-06-25T13:48:08.838837+00:00 heroku[web.1]: Idling
2021-06-25T13:48:08.857160+00:00 heroku[web.1]: State changed from up to down
2021-06-25T13:48:10.249612+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2021-06-25T13:48:10.325914+00:00 app[web.1]: [2021-06-25 13:48:10 +0000] [4] [INFO] Handling signal: term
2021-06-25T13:48:10.336944+00:00 app[web.1]: [2021-06-25 13:48:10 +0000] [7] [INFO] Worker exiting (pid: 7)
2021-06-25T13:48:10.337795+00:00 app[web.1]: [2021-06-25 13:48:10 +0000] [8] [INFO] Worker exiting (pid: 8)
2021-06-25T13:48:11.241652+00:00 app[web.1]: [2021-06-25 13:48:11 +0000] [4] [INFO] Shutting down: Master
2021-06-25T13:48:11.421533+00:00 heroku[web.1]: Process exited with status 0
2021-06-26T07:29:48.172006+00:00 heroku[web.1]: Unidling
2021-06-26T07:29:48.174345+00:00 heroku[web.1]: State changed from down to starting
2021-06-26T07:30:11.641635+00:00 heroku[web.1]: Starting process with command `gunicorn app:app`
2021-06-26T07:30:13.993835+00:00 app[web.1]: [2021-06-26 07:30:13 +0000] [4] [INFO] Starting gunicorn 20.1.0
2021-06-26T07:30:13.994244+00:00 app[web.1]: [2021-06-26 07:30:13 +0000] [4] [INFO] Listening at: http://0.0.0.0:34971 (4)
2021-06-26T07:30:13.994334+00:00 app[web.1]: [2021-06-26 07:30:13 +0000] [4] [INFO] Using worker: sync
2021-06-26T07:30:14.001212+00:00 app[web.1]: [2021-06-26 07:30:14 +0000] [7] [INFO] Booting worker with pid: 7
2021-06-26T07:30:14.034313+00:00 app[web.1]: [2021-06-26 07:30:14 +0000] [8] [INFO] Booting worker with pid: 8
2021-06-26T07:30:15.444809+00:00 heroku[web.1]: State changed from starting to up
2021-06-26T07:30:16.251487+00:00 heroku[router]: at=info method=GET path="/" host=safety-helmet-object-detection.herokuapp.com request_id=1a73ef92-3214-4814-a6e6-0a078b49091e fwd="122.200.18.98" dyno=web.1 connect=1ms service=10ms status=200 bytes=2567 protocol=https
2021-06-26T07:30:16.253872+00:00 app[web.1]: 10.43.233.218 - - [26/Jun/2021:07:30:16 +0000] "GET / HTTP/1.1" 200 2412 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
2021-06-26T07:30:16.635010+00:00 heroku[router]: at=info method=GET path="/" host=safety-helmet-object-detection.herokuapp.com request_id=8f5913f4-2fc5-4875-a490-18c10c068f80 fwd="122.200.18.98" dyno=web.1 connect=1ms service=10ms status=200 bytes=2567 protocol=http
2021-06-26T07:30:16.635538+00:00 app[web.1]: 10.47.181.239 - - [26/Jun/2021:07:30:16 +0000] "GET / HTTP/1.1" 200 2412 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
2021-06-26T07:30:16.913529+00:00 heroku[router]: at=info method=GET path="/static/style.css" host=safety-helmet-object-detection.herokuapp.com request_id=46585aa5-e4b8-465a-b088-6026bec294e2 fwd="122.200.18.98" dyno=web.1 connect=1ms service=8ms status=200 bytes=696 protocol=http
2021-06-26T07:30:16.913943+00:00 app[web.1]: 10.47.181.239 - - [26/Jun/2021:07:30:16 +0000] "GET /static/style.css HTTP/1.1" 200 0 "http://safety-helmet-object-detection.herokuapp.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
2021-06-26T07:30:17.013092+00:00 app[web.1]: 10.63.152.20 - - [26/Jun/2021:07:30:17 +0000] "GET /static/pytorch.png HTTP/1.1" 200 0 "http://safety-helmet-object-detection.herokuapp.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
2021-06-26T07:30:17.013496+00:00 heroku[router]: at=info method=GET path="/static/pytorch.png" host=safety-helmet-object-detection.herokuapp.com request_id=e334b2ec-032c-4392-99f5-7ff57c368de6 fwd="122.200.18.98" dyno=web.1 connect=1ms service=16ms status=200 bytes=11679 protocol=http
2021-06-26T07:30:17.371585+00:00 app[web.1]: 10.63.152.20 - - [26/Jun/2021:07:30:17 +0000] "GET /favicon.ico HTTP/1.1" 404 232 "http://safety-helmet-object-detection.herokuapp.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
2021-06-26T07:30:17.372076+00:00 heroku[router]: at=info method=GET path="/favicon.ico" host=safety-helmet-object-detection.herokuapp.com request_id=5a0b6062-de2b-465c-80f9-ccc556342ef2 fwd="122.200.18.98" dyno=web.1 connect=1ms service=2ms status=404 bytes=393 protocol=http
2021-06-26T07:31:30.049426+00:00 app[web.1]: Downloading: "https://github.com/ultralytics/yolov5/archive/master.zip" to /app/.cache/torch/hub/master.zip
2021-06-26T07:31:37.289772+00:00 app[web.1]: Exception on / [POST]
2021-06-26T07:31:37.289821+00:00 app[web.1]: Traceback (most recent call last):
2021-06-26T07:31:37.289821+00:00 app[web.1]: File "/app/.cache/torch/hub/ultralytics_yolov5_master/hubconf.py", line 40, in _create
2021-06-26T07:31:37.289822+00:00 app[web.1]: model = attempt_load(fname, map_location=torch.device('cpu')) # download/load FP32 model
2021-06-26T07:31:37.289837+00:00 app[web.1]: File "/app/.cache/torch/hub/ultralytics_yolov5_master/models/experimental.py", line 119, in attempt_load
2021-06-26T07:31:37.289838+00:00 app[web.1]: ckpt = torch.load(attempt_download(w), map_location=map_location) # load
2021-06-26T07:31:37.289838+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/torch/serialization.py", line 579, in load
2021-06-26T07:31:37.289839+00:00 app[web.1]: with _open_file_like(f, 'rb') as opened_file:
2021-06-26T07:31:37.289839+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/torch/serialization.py", line 230, in _open_file_like
2021-06-26T07:31:37.289839+00:00 app[web.1]: return _open_file(name_or_buffer, mode)
2021-06-26T07:31:37.289840+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/torch/serialization.py", line 211, in __init__
2021-06-26T07:31:37.289840+00:00 app[web.1]: super(_open_file, self).__init__(open(name, mode))
2021-06-26T07:31:37.289840+00:00 app[web.1]: FileNotFoundError: [Errno 2] No such file or directory: 'best.pt'
2021-06-26T07:31:37.289840+00:00 app[web.1]:
2021-06-26T07:31:37.289841+00:00 app[web.1]: The above exception was the direct cause of the following exception:
2021-06-26T07:31:37.289841+00:00 app[web.1]:
2021-06-26T07:31:37.289841+00:00 app[web.1]: Traceback (most recent call last):
2021-06-26T07:31:37.289842+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/flask/app.py", line 2070, in wsgi_app
2021-06-26T07:31:37.289842+00:00 app[web.1]: response = self.full_dispatch_request()
2021-06-26T07:31:37.289842+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/flask/app.py", line 1515, in full_dispatch_request
2021-06-26T07:31:37.289842+00:00 app[web.1]: rv = self.handle_user_exception(e)
2021-06-26T07:31:37.289842+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/flask/app.py", line 1513, in full_dispatch_request
2021-06-26T07:31:37.289843+00:00 app[web.1]: rv = self.dispatch_request()
2021-06-26T07:31:37.289843+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/flask/app.py", line 1499, in dispatch_request
2021-06-26T07:31:37.289843+00:00 app[web.1]: return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
2021-06-26T07:31:37.289843+00:00 app[web.1]: File "/app/app.py", line 23, in predict
2021-06-26T07:31:37.289844+00:00 app[web.1]: model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt', force_reload=True).autoshape() # force_reload = recache latest code
2021-06-26T07:31:37.289844+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/torch/hub.py", line 339, in load
2021-06-26T07:31:37.289844+00:00 app[web.1]: model = _load_local(repo_or_dir, model, *args, **kwargs)
2021-06-26T07:31:37.289845+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/torch/hub.py", line 368, in _load_local
2021-06-26T07:31:37.289845+00:00 app[web.1]: model = entry(*args, **kwargs)
2021-06-26T07:31:37.289845+00:00 app[web.1]: File "/app/.cache/torch/hub/ultralytics_yolov5_master/hubconf.py", line 65, in custom
2021-06-26T07:31:37.289845+00:00 app[web.1]: return _create(path, autoshape=autoshape, verbose=verbose, device=device)
2021-06-26T07:31:37.289846+00:00 app[web.1]: File "/app/.cache/torch/hub/ultralytics_yolov5_master/hubconf.py", line 60, in _create
2021-06-26T07:31:37.289846+00:00 app[web.1]: raise Exception(s) from e
2021-06-26T07:31:37.289851+00:00 app[web.1]: Exception: Cache may be out of date, try `force_reload=True`. See https://github.com/ultralytics/yolov5/issues/36 for help.
2021-06-26T07:31:37.290810+00:00 app[web.1]: 10.63.152.20 - - [26/Jun/2021:07:31:37 +0000] "POST / HTTP/1.1" 500 290 "http://safety-helmet-object-detection.herokuapp.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
2021-06-26T07:31:37.291579+00:00 heroku[router]: at=info method=POST path="/" host=safety-helmet-object-detection.herokuapp.com request_id=15ab238a-5ef8-40e5-86e9-159f6b4de20f fwd="122.200.18.98" dyno=web.1 connect=1ms service=8230ms status=500 bytes=463 protocol=http
主要错误是
FileNotFoundError: [Errno 2] 没有这样的文件或目录:'best.pt'
上述异常是以下异常的直接原因:
例外:缓存可能已过期,请尝试force_reload=True
。请参阅https://github.com/ultralytics/yolov5/issues/36 寻求帮助。
(app.py,即我正在使用的代码与 best.pt 位于同一目录中)
我写的代码如下:
"""
Web App to perform inference on a YOLOv5s custom model
"""
import io
from PIL import Image
from pathlib import Path
from flask import Flask, render_template, request, redirect
import torch
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def predict():
if request.method == "POST":
if "file" not in request.files:
return redirect(request.url)
model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt', force_reload=True).autoshape() # force_reload = True re cache last code (But it doesn't work here)
model.eval()
file = request.files["file"]
if not file:
return
img_bytes = file.read()
img = Image.open(io.BytesIO(img_bytes))
results = model(img, size=640)
results.display(save=True, save_dir = Path('static'))
return redirect("static/image0.jpg")
return render_template("index.html")
if __name__ == "__main__":
app.run()
【问题讨论】:
【参考方案1】:我解决了这个问题, 这 FileNotFoundError:[Errno 2] 没有这样的文件或目录:'best.pt' 是主要错误,Heroku 无法找出那个路径,所以我将这个自定义模型包含在一个名为 static 的文件夹中。 我的新代码块是:
model = torch.hub.load('ultralytics/yolov5', 'custom', path='static/best.pt', force_reload=True).autoshape()
其中 app.py 和 static 位于同一目录中。
【讨论】:
以上是关于错误“缓存可能已过期,请尝试 `force_reload=True`。”即使我在代码块中包含了 `force_reload=True` 也会出现?的主要内容,如果未能解决你的问题,请参考以下文章