RCNN
RCNN使用算则行搜索算法,先在图像上生成一系列候选区域,再分别在每个候选区域进行卷积运算提取特征,之后再单独进行预测
class RCNN(nn.Module):
def __init__(self, num_classes):
super(RCNN, self).__init__()
# 使用预训练的 ResNet-50 作为基础网络
self.backbone = torchvision.models.resnet50(pretrained=True)
# 替换 ResNet-50 的最后一层全连接层
self.backbone.fc = nn.Linear(2048, 512)
def forward(self, x):
# 基础网络前向传播
features = self.backbone(x)
# flatten
features = features.view(features.size(0), -1)
return features
#实例化基础网络
model=RCNN.eval()
def get_regions(image_path):
# 使用OpenCV的选择性搜索算法生成候选区域
img = cv2.imread(image_path)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
ss = cv2.ximgproc.segmentation.createSelectiveSearchSegmentation()
ss.setBaseImage(img_rgb)
ss.switchToSelectiveSearchFast()
rects = ss.process()
return img_rgb, rects
def extract_features(image, rects, model, transform):
features = []
regions = []
for (x