代碼是RetinaNet的pytorch版本,鏈接為
GitHub - yhenon/pytorch-retinanet: Pytorch implementation of RetinaNet object detection.
class Anchors()
__init__:
self.pyramid_levels=[3,4,5,6,7]? # feature map的標號,分辨率從大到小
self.strides=[8,16,32,64,128]? # 滑窗的步長
self.sizes=[32,64,128,256,512]? # anchor面積:32*32等
self.ratios=[0.5,1,2]? # anchor的長寬比
self.scales=[,
,
]? # 面積增比
forward(input_image):
input_image是原圖以(608,1024)為標準等比例縮放得到的,我的原始image均為1080*1920,resize之后變?yōu)?08*1056,參考代碼dataloader/Resizer()。
以下為anchor生成的兩個函數(shù):
1. anchors = generate_anchors(sizes[i], ratios, scales)
????輸出anchors.shape=(9,4),對應面積為sizes[i]的9個不同ratios,scales的anchor坐標
????每行為一個anchor:(x1,y1,x2,y2),中心坐標(x_c,y_c)=(0,0),故x1,y1為負,x2,y2為正
2. shifted_anchors = shift(shapes[i], strides[i], anchors)
? ? shapes為對應feature map的尺寸
? ? 輸出shifted_anchors.shape=(shapes[0]*shapes[1]*9, 4)
? ? anchor是在input_image上以strides為步長滑動生成的坐標(x2, y1, x2, y2)
后續(xù)還包括一些增加fake dimension,轉(zhuǎn)化tensor,加載cuda的操作