网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
165行的`images, targets = next(batch_iterator)`改成:
try:
images, targets = next(batch_iterator)
except StopIteration:
batch_iterator = iter(data_loader)
images, targets = next(batch_iterator)
### 预训练文件vgg16\_reducedfc.pth
开始训练时需要一个预训练文件 `vgg16_reducedfc.pth`
>
> [链接]( )
>
>
>
下载之后放在SSD项目下新建的weights文件夹下,然后就可以进行训练了。
注:训练中途遇到 loss=nan 的现象,将`train.py`中,`parser.add_argument('--lr', '--learning-rate', default=1e-3, type=float,`中的 `default=1e-3`改为`default=1e-4`。\*~~直到loss降低到1左右时即可~~ \*
### eval.py
`trained_model`评估的模型路径,`save_folder` 评估保存路径
### demo.py
新建`test_image`,在文件夹中放置几张待测图片(四处修改 20220106更新)
import os
import sys
import torch
from torch.autograd import Variable
import numpy as np
import cv2
from ssd import build_ssd
from data import VOC_CLASSES as labels
from matplotlib import pyplot as plt
------ 初始化 libiomp5md.dll 报错修改 ------
os.environ[“KMP_DUPLICATE_LIB_OK”] = “TRUE”
-----------------------------------------
module_path = os.path.abspath(os.path.join(‘…’))
if module_path not in sys.path:
sys.path.append(module_path)
if torch.cuda.is_available():
torch.set_default_tensor_type(‘torch.cuda.FloatTensor’)
net = build_ssd(‘test’, 300, 5) # 第一处修改:类别+1
将预训练的权重加载到数据集上
net.load_weights(‘weights/ssd300_VOC_1995.pth’) # 第二处修改:使用自己训练好的文件
加载多张图像
imgs = ‘test_image/’# 第三处修改:改成你自己的文件夹
img_list = os.listdir(imgs)
for img in img_list:
# 对输入图像进行预处理
current_img = imgs + img
image = cv2.imread(current_img)
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
x = cv2.resize(image, (300, 300)).astype(np.float32)
x -= (104.0, 117.0, 123.0)
x = x.astype(np.float32)
x = x[:, :, ::-1].copy()
x = torch.from_numpy(x).permute(2, 0, 1)
# 把图片设为变量
xx = Variable(x.unsqueeze(0))
if torch.cuda.is_available():
xx = xx.cuda()
y = net(xx)
# 解析 查看结果
top_k = 10
plt.figure(figsize=(6, 6))
colors = plt.cm.hsv(np.linspace(0, 1, 21)).tolis