【问题标题】:FastAI PyTorch Train_loss and valid_loss look very good, but the model recognize nothingFastAI PyTorch Train_loss 和 valid_loss 看起来很不错,但是模型什么都识别不了
【发布时间】: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


    【解决方案1】:

    对于此数据集,您的学习率计划不是最佳的。尝试首先找出该网络和数据集的最佳学习率 LRFinder。这可以通过探索不同学习率的损失行为来完成

    learn.lr_find()
    learn.recorder.plot()
    

    编辑:

    您似乎正在重新训练网络中的最后一层。而是尝试从头开始训练更多层。如:

    learn.unfreeze(2)
    

    【讨论】:

    • 嗨导航,我实际上已经做到了,我使用的 lr 是由 lr_find() 方法建议的。这是我发布有关 lr_find() 相关问题的更多详细信息的帖子。在阅读了该问题和我在该问题中的更新 1 之后,您可能会看到 lr_find() 无法正常工作。
    • 你的损失曲线很混乱。表示最小化失败。请探索几个学习日期,直到曲线逐渐最小化。对学习率的搜索应该是对数尺度。然后我有第二套建议给你。
    • 感谢导航。 “学习日期”是什么意思?你能详细说明一下吗?谢谢
    • 抱歉错字。我的意思是费率。
    猜你喜欢
    • 2013-09-25
    • 2021-07-31
    • 2014-04-03
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 2019-10-02
    • 1970-01-01
    相关资源
    最近更新 更多