Example #1
0
    def test(self):
        epoch = self.scheduler.last_epoch + 1
        self.ckpt.write_log('\n[INFO] Test:')
        self.model.eval()

        self.ckpt.add_log(torch.zeros(1, 5))
        # get the encodings/features for the query dataset
        # the result size for example in the market query dataset
        # is 3368 X 2048 since there are 3368 query photos
        qf = self.extract_feature(self.query_loader).numpy()
        # get the encodings/features for the query dataset
        # the result size for example in the market gallery dataset
        # is 15913 X 2048 since there are 15913 gallery photos
        gf = self.extract_feature(self.test_loader).numpy()

        if self.args.re_rank:
            q_g_dist = np.dot(qf, np.transpose(gf))
            q_q_dist = np.dot(qf, np.transpose(qf))
            g_g_dist = np.dot(gf, np.transpose(gf))
            # dist will end up being a 2D matrix of size #query_photos X #gallery_photos
            # in case of market, this is 3368 X 15913
            # thus, dist[0][0] is the distance between query_photo[0] to gallery_photo[0]
            dist = re_ranking(q_g_dist, q_q_dist, g_g_dist)
        else:
            # each image is represented by a vector of size 2048 which are its "features/encoding"
            # distance is calculated here using euclidian distances between the cross product
            # of each query image with each gallery image
            dist = cdist(qf, gf)
        r = cmc(dist,
                self.queryset.ids,
                self.testset.ids,
                self.queryset.cameras,
                self.testset.cameras,
                separate_camera_set=False,
                single_gallery_shot=False,
                first_match_break=True)
        m_ap = mean_ap(dist, epoch, self.queryset.ids, self.testset.ids,
                       self.queryset.cameras, self.testset.cameras)

        self.ckpt.log[-1, 0] = m_ap
        self.ckpt.log[-1, 1] = r[0]
        self.ckpt.log[-1, 2] = r[2]
        self.ckpt.log[-1, 3] = r[4]
        self.ckpt.log[-1, 4] = r[9]
        best = self.ckpt.log.max(0)
        self.ckpt.write_log(
            '[INFO] mAP: {:.4f} rank1: {:.4f} rank3: {:.4f} rank5: {:.4f} rank10: {:.4f} (Best: {:.4f} @epoch {})'
            .format(m_ap, r[0], r[2], r[4], r[9], best[0][0],
                    (best[1][0] + 1) * self.args.test_every))
        if not self.args.test_only:
            self.ckpt.save(self,
                           epoch,
                           is_best=((best[1][0] + 1) *
                                    self.args.test_every == epoch))
Example #2
0
    def test(self):
        epoch = self.scheduler.last_epoch + 1
        # print("test=")
        # print(epoch)
        self.ckpt.write_log('\n[INFO] Test:')
        self.model.eval()

        # print("after eval")

        self.ckpt.add_log(torch.zeros(1, 5))
        qf = self.extract_feature(self.query_loader).numpy()
        gf = self.extract_feature(self.test_loader).numpy()

        # print("111")
        if self.args.re_rank:
            q_g_dist = np.dot(qf, np.transpose(gf))
            q_q_dist = np.dot(qf, np.transpose(qf))
            g_g_dist = np.dot(gf, np.transpose(gf))
            dist = re_ranking(q_g_dist, q_q_dist, g_g_dist)
        else:
            dist = cdist(qf, gf)

        # print("222")
        r = cmc(dist,
                self.queryset.ids,
                self.testset.ids,
                self.queryset.cameras,
                self.testset.cameras,
                separate_camera_set=False,
                single_gallery_shot=False,
                first_match_break=True)
        m_ap = mean_ap(dist, self.queryset.ids, self.testset.ids,
                       self.queryset.cameras, self.testset.cameras)

        self.ckpt.log[-1, 0] = m_ap
        self.ckpt.log[-1, 1] = r[0]
        self.ckpt.log[-1, 2] = r[2]
        self.ckpt.log[-1, 3] = r[4]
        self.ckpt.log[-1, 4] = r[9]
        best = self.ckpt.log.max(0)

        # print("333")
        self.ckpt.write_log(
            '[INFO] mAP: {:.4f} rank1: {:.4f} rank3: {:.4f} rank5: {:.4f} rank10: {:.4f} (Best: {:.4f} @epoch {})'
            .format(m_ap, r[0], r[2], r[4], r[9], best[0][0],
                    (best[1][0] + 1) * self.args.test_every))
        if not self.args.test_only:
            self.ckpt.save(self,
                           epoch,
                           is_best=((best[1][0] + 1) *
                                    self.args.test_every == epoch))
Example #3
0
    def test(self):
        epoch = self.scheduler.last_epoch + 1
        self.ckpt.write_log('\n[INFO] Test:')
        self.model.eval()

        # print("$$$$$$$$$$$$$$$$$$$")
        # print(self.attackset.ids)
        self.ckpt.add_log(torch.zeros(1, 5))
        qf = self.extract_feature(self.attack_loader).numpy()
        # gradients = torch.autograd.grad(qf, self.query_loader)[0]
        # adversarial_examples = self.query_loader+(0.1*gradients.sign())
        # adversarial_examples = torch.clamp(adversarial_examples, min=0, max=1).detach()
        # qf = self.extract_feature(adversarial_examples)
        gf = self.extract_feature(self.test_loader).numpy()
        # print(qf.shape())
        # print(gf.shape())
        # print("###############")

        if self.args.re_rank:
            q_g_dist = np.dot(qf, np.transpose(gf))
            q_q_dist = np.dot(qf, np.transpose(qf))
            g_g_dist = np.dot(gf, np.transpose(gf))
            dist = re_ranking(q_g_dist, q_q_dist, g_g_dist)
        else:
            dist = cdist(qf, gf)
        r = cmc(dist,
                self.attackset.ids,
                self.testset.ids,
                self.attackset.cameras,
                self.testset.cameras,
                separate_camera_set=False,
                single_gallery_shot=False,
                first_match_break=True)
        m_ap = mean_ap(dist, self.attackset.ids, self.testset.ids,
                       self.attackset.cameras, self.testset.cameras)

        self.ckpt.log[-1, 0] = m_ap
        self.ckpt.log[-1, 1] = r[0]
        self.ckpt.log[-1, 2] = r[2]
        self.ckpt.log[-1, 3] = r[4]
        self.ckpt.log[-1, 4] = r[9]
        best = self.ckpt.log.max(0)
        self.ckpt.write_log(
            '[INFO] mAP: {:.4f} rank1: {:.4f} rank3: {:.4f} rank5: {:.4f} rank10: {:.4f} (Best: {:.4f} @epoch {})'
            .format(m_ap, r[0], r[2], r[4], r[9], best[0][0],
                    (best[1][0] + 1) * self.args.test_every))
        if not self.args.test_only:
            self.ckpt.save(self,
                           epoch,
                           is_best=((best[1][0] + 1) *
                                    self.args.test_every == epoch))
Example #4
0
    def test(self):
        self.epoch = self.scheduler.last_epoch + 1
        self.ckpt.write_log('\n[INFO] Test:')
        self.ckpt.add_log(torch.zeros(1, 5))

        qf = self.extract_feature(self.query_loader)
        gf = self.extract_feature(self.test_loader)

        # save feature, cam, label, frames
        #pytorch_result = {'query_f':qf, 'query_cam':self.queryset.cameras,
        #                  'query_label':self.queryset.ids, 'query_frames':self.queryset.frames,
        #                  'gallery_f':gf, 'gallery_cam':self.testset.cameras,
        #                  'gallery_label':self.testset.ids, 'gallery_frames':self.testset.frames}
        #savemat('./pytorch_result.mat',pytorch_result)
        #print('saved')

        if self.args.re_rank:
            q_g_dist = np.dot(qf, np.transpose(gf))
            q_q_dist = np.dot(qf, np.transpose(qf))
            g_g_dist = np.dot(gf, np.transpose(gf))
            dist = re_ranking(q_g_dist, q_q_dist, g_g_dist)
        else:
            dist = cdist(qf, gf)
        r = cmc(dist, self.queryset.ids, self.testset.ids, self.queryset.cameras, self.testset.cameras,
                separate_camera_set=False,
                single_gallery_shot=False,
                first_match_break=True)
        m_ap = mean_ap(dist, self.queryset.ids, self.testset.ids, self.queryset.cameras, self.testset.cameras)

        self.ckpt.log[-1, 0] = m_ap
        self.ckpt.log[-1, 1] = r[0]
        self.ckpt.log[-1, 2] = r[2]
        self.ckpt.log[-1, 3] = r[4]
        self.ckpt.log[-1, 4] = r[9]
        best = self.ckpt.log.max(0)
        self.ckpt.write_log(
            '[INFO] mAP: {:.4f} rank1: {:.4f} rank3: {:.4f} rank5: {:.4f} rank10: {:.4f} (Best: {:.4f} @epoch {})'.format(
            m_ap,
            r[0], r[2], r[4], r[9],
            best[0][0],
            (best[1][0] + 1)*self.args.test_every
            )
        )
        if not self.args.test:
            self.ckpt.save(self, self.epoch, is_best=((best[1][0] + 1)*self.args.test_every == self.epoch))
Example #5
0
    def test(self):
        epoch = self.scheduler.last_epoch + 1
        self.ckpt.write_log('\n[INFO] Test:')
        self.model.eval()

        self.ckpt.add_log(torch.zeros(1, 5))
        qf, q_image_paths = self.extract_feature(self.query_loader)
        gf, _ = self.extract_feature(self.test_loader)
        qf = qf.numpy()  # (31, 2048) for debug
        gf = gf.numpy()  # (154, 2048) for

        if self.args.re_rank:
            q_g_dist = np.dot(qf, np.transpose(gf))
            q_q_dist = np.dot(qf, np.transpose(qf))
            g_g_dist = np.dot(gf, np.transpose(gf))
            dist = re_ranking(q_g_dist, q_q_dist, g_g_dist)
        else:
            dist = cdist(qf, gf, metric='cosine')

        if self.args.multi_query:
            # Suitable for boxes dataset only
            # Use several same id query samples to retrieval one gallery
            print(dist.shape)  # (31, 154)
            ids = [
                int(x.split(os.sep)[-1].split('_')[0]) for x in q_image_paths
            ]
            ids_set = set(ids)
            ids_np = np.asarray(ids, dtype=np.int32)

            for id in ids_set:
                indices = np.where(ids_np == id)[0]
                mean = np.mean(dist[indices, :], axis=0)
                for index in indices:
                    dist[index, :] = mean

        r = cmc(dist,
                self.queryset.ids,
                self.testset.ids,
                self.queryset.cameras,
                self.testset.cameras,
                separate_camera_set=False,
                single_gallery_shot=False,
                first_match_break=True)
        m_ap = mean_ap(dist, self.queryset.ids, self.testset.ids,
                       self.queryset.cameras, self.testset.cameras)

        self.ckpt.log[-1, 0] = m_ap
        self.ckpt.log[-1, 1] = r[0]
        self.ckpt.log[-1, 2] = r[2]
        self.ckpt.log[-1, 3] = r[4]
        self.ckpt.log[-1, 4] = r[9]
        best = self.ckpt.log.max(0)
        self.ckpt.write_log(
            '[INFO] mAP: {:.4f} rank1: {:.4f} rank3: {:.4f} rank5: {:.4f} rank10: {:.4f} (Best: {:.4f} @epoch {})'
            .format(m_ap, r[0], r[2], r[4], r[9], best[0][0],
                    (best[1][0] + 1) * self.args.test_every))
        # Another method to calculate cmc and mAP, it get the same result!
        # print(eval_market1501(dist, self.queryset.ids, self.testset.ids,
        #                       self.queryset.cameras, self.testset.cameras, 100))

        if not self.args.test_only:
            self.ckpt.save(self,
                           epoch,
                           is_best=((best[1][0] + 1) *
                                    self.args.test_every == epoch))
Example #6
0
    def test(self):
        epoch = self.scheduler.last_epoch + 1
        self.ckpt.write_log('\n[INFO] Test:')
        self.model.eval()

        self.ckpt.add_log(torch.zeros(1, 5))
        qf = self.extract_feature(self.query_loader).numpy()
        gf = self.extract_feature(self.test_loader).numpy()

        # distence threshold
        norms_q = np.linalg.norm(qf, axis=1)  # axis=1, l1范数
        norms_g = np.linalg.norm(gf, axis=1)
        qf = qf / np.reshape(norms_q, ((qf.shape)[0], 1))
        gf = gf / np.reshape(norms_g, ((gf.shape)[0], 1))

        # no rerank
        dist = cdist(
            qf,
            gf)  # metric='cosine',计算两个矩阵行间的所有向量对的距离,默认:euclidean; 3368*15913

        m_ap = mean_ap(dist, self.queryset.ids, self.testset.ids,
                       self.queryset.cameras, self.testset.cameras)
        r = cmc(dist,
                self.queryset.ids,
                self.testset.ids,
                self.queryset.cameras,
                self.testset.cameras,
                separate_camera_set=False,
                single_gallery_shot=False,
                first_match_break=True)
        self.ckpt.log[-1, 0] = m_ap
        self.ckpt.log[-1, 1] = r[0]
        self.ckpt.log[-1, 2] = r[2]
        self.ckpt.log[-1, 3] = r[4]
        self.ckpt.log[-1, 4] = r[9]
        best = self.ckpt.log.max(0)
        self.ckpt.write_log(
            '[INFO]( ^_^ )  mAP: {:.4f} rank1: {:.4f} rank3: {:.4f} rank5: {:.4f} rank10: {:.4f} (Best: {:.4f} @epoch {})'
            .format(m_ap, r[0], r[2], r[4], r[9], best[0][0],
                    (best[1][0] + 1) * self.args.test_every))

        # rerank
        if self.args.re_rank:
            q_g_dist = np.dot(qf, np.transpose(gf))
            q_q_dist = np.dot(qf, np.transpose(qf))
            g_g_dist = np.dot(gf, np.transpose(gf))
            dist_rerank = re_ranking(q_g_dist, q_q_dist, g_g_dist)

        r_rerank = cmc(dist_rerank,
                       self.queryset.ids,
                       self.testset.ids,
                       self.queryset.cameras,
                       self.testset.cameras,
                       separate_camera_set=False,
                       single_gallery_shot=False,
                       first_match_break=True)
        map_rerank = mean_ap(dist_rerank, self.queryset.ids, self.testset.ids,
                             self.queryset.cameras, self.testset.cameras)
        self.ckpt.log[-1, 0] = map_rerank
        self.ckpt.log[-1, 1] = r_rerank[0]
        self.ckpt.log[-1, 2] = r_rerank[2]
        self.ckpt.log[-1, 3] = r_rerank[4]
        self.ckpt.log[-1, 4] = r_rerank[9]
        best = self.ckpt.log.max(0)
        self.ckpt.write_log(
            '[INFO](rerank) mAP: {:.4f} rank1: {:.4f} rank3: {:.4f} rank5: {:.4f} rank10: {:.4f} (Best: {:.4f} @epoch {})'
            .format(map_rerank, r_rerank[0], r_rerank[2], r_rerank[4],
                    r_rerank[9], best[0][0],
                    (best[1][0] + 1) * self.args.test_every))

        if not self.args.test_only:
            self.ckpt.save(self,
                           epoch,
                           is_best=((best[1][0] + 1) *
                                    self.args.test_every == epoch))