【发布时间】:2020-01-05 20:21:00
【问题描述】:
更新 1
我认为这可能是我的检测器代码中的错误。 所以,这是我使用训练有素的学习者/模型来预测图像的代码。
import requests
import cv2
bytes = b''
stream = requests.get(url, stream=True)
bytes = bytes + stream.raw.read(1024) # I have my mobile video streaming to this url. the resolution for the video streaming is: 2048 x 1080
a = bytes.find(b'\xff\xd8')
b = bytes.find(b'\xff\xd9')
if a != -1 and b != -1:
jpg = bytes[a:b+2]
bytes = bytes[b+2:]
img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR)
processedImg = Image(pil2tensor(img, np.float32).div_(255))
predict = learn.predict(processedImg)
self.objectClass = predict[0].obj
我阅读了imdecode()方法的文档,它以B G R顺序返回图像。
会不会是因为训练和检测时使用的通道数据不同?
或者
可能是因为我使用 299 x 450 的图像大小进行训练,但是当从视频流中检测到输入图像大小为 2048 x 1080 时没有调整大小?
FastAi、ML 和 Python 的新手。我训练了我的“鸟类或非鸟类”模型。 train_loss、valid_loss 和 error_rate 正在改善。如果我只训练了 3 个 epoch,那么模型就起作用了(意味着它可以识别图像中是否有鸟或没有鸟),然后我增加到 30 个 epoch,所有指标看起来都很好,但是模型不再识别东西了,无论如何我输入的图像,模型总是返回 Not-Birds。
这是训练输出:
这是 learn.recorder 的情节
这是我的代码:
from fastai.vision import *
from fastai.metrics import error_rate
from fastai.callbacks import EarlyStoppingCallback,SaveModelCallback
from datetime import datetime as dt
from functools import partial
path_img = '/minidata'
train_folder = 'train'
valid_folder = 'validation'
tunedTransform = partial(get_transforms, max_zoom=1.5)
data = ImageDataBunch.from_folder(path=path_img, train=train_folder, valid=valid_folder, ds_tfms=tunedTransform(),
size=(299, 450), bs=40, classes=['birds', 'others'],
resize_method=ResizeMethod.SQUISH)
data = data.normalize(imagenet_stats)
learn = cnn_learner(data, models.resnet50, metrics=error_rate)
learn.fit_one_cycle(30, max_lr=slice(5e-5,5e-4))
learn.recorder.plot_lr()
learn.recorder.plot()
learn.recorder.plot_losses()
这是我的数据集文件夹结构:
- 迷你数据
- 火车
- 鸟类(7500 张图片)
- 其他(大约 7300 张图片)
- 验证
- 鸟类(1008 张图片)
- 其他(大约 872 张图片)
- 火车
【问题讨论】:
标签: machine-learning computer-vision pytorch fast-ai