Your model is able to overfit random data perfectly:
class ConvNet(nn.Module):
    def __init__(self):
        super(ConvNet, self).__init__()
        self.conv1 = nn.Conv2d(3, 32, kernel_size=5)
        self.conv2 = nn.Conv2d(32,64, kernel_size=5)
        self.conv3 = nn.Conv2d(64,128, kernel_size=5)
        self.pool = nn.MaxPool2d(3,3)
        self.fc1 = nn.Linear(128*5*5, 512)
        self.fc2 = nn.Linear(512, 256)
        self.fc3 = nn.Linear(256,1)
        self.check = []
    
    def forward(self, x):        
        x = self.pool(F.relu(self.conv1(x)))        
        x = self.pool(F.relu(self.conv2(x)))  
        self.check.append(x)
        if len(self.check) > 1:
            print((self.check[-1] == self.check[-2]).float().sum())
        x = self.pool(F.relu(self.conv3(x)))       
        x = x.view(x.size(0), -1)
        x = F.relu(self.fc1(x))        
        x = F.relu(self.fc2(x))        
        x = self.fc3(x)
        return x

model = ConvNet()
data = torch.randn(10, 3, 200, 200)
target = torch.randint(0, 2, (10, 1)).float()
criterion = nn.BCEWithLogitsLoss()    
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)

for epoch in range(100):
    optimizer.zero_grad()    
    outputs = model(data)
    loss = criterion(outputs, target)
    loss.backward()
    optimizer.step()
    print('epoch {}, loss {}'.format(epoch, loss.item()))

acc = ((outputs > 0.0) == target).float().mean()
print(acc)
> tensor(1.)

so I’m unsure why overfitting a small dataset from your training set doesn’t work.
Maybe try to overfit random data first as well and then compare it to your real data and see if this is still not working. If so, then try to normalize the input data etc.
PS: you can post code snippets by wrapping them into three backticks ```, which makes debugging easier.