YOLOv3
问题1:已解决
已知:YOLOv3训练的图片是(416,416,3)size大小
测试单张图片时,对一张(1600,1200,3)分辨率大小的图片进行测试,分别以原图和原图resize为(416,416,3)进行测试,发现用原图测试效果更好,why?
解决:所用yolo代码作者先将图片进行BiCubic插值方法进行resize为一个尺寸,再将图片用image.paste填充到一个(416,416,3)大小的像素全为(128,128,128)图片上来进行测试,之后再反馈到原图。
代码:
'''resize image with unchanged aspect ratio using padding'''
# image为输入图片,size为目标尺寸即(416,416,3)
def letterbox_image(image, size):
iw, ih = image.size
w, h = size
scale = min(w/iw, h/ih)
nw = int(iw*scale)
nh = int(ih*scale)
image = image.resize((nw,nh), Image.BICUBIC)
new_image = Image.new('RGB', size, (128, 128, 128))
new_image.paste(image, ((w-nw)//2, (h-nh)//2))
return new_image
问题2:已解决
训练时最终loss很低,检测效果却很差,检测不到目标,调试发现训练图片转为的tensor全为0。
解决:将图片的box信息转为0-1比时,定义的矩阵没有给定float类型,导致转换结果全为0.
问题3:未解决
将yolo网络的输出,计算所有格子的class类别,发现实际检测时预测目标的概率很低
解决