  Nearest neighbor search plays a fundamental role in many disciplines such as
multimedia information retrieval, data-mining, and machine learning. The
graph-based search approaches show superior performance over other types of
approaches in recent studies. In this paper, the graph-based NN search is
revisited. We optimize two key components in the approach, namely the search
procedure and the graph that supports the search. For the graph construction, a
two-stage graph diversification scheme is proposed, which makes a good
trade-off between the efficiency and reachability for the search procedure that
builds upon it. Moreover, the proposed diversification scheme allows the search
procedure to decide dynamically how many nodes should be visited in one node's
neighborhood. By this way, the computing power of the devices is fully utilized
when the search is carried out under different circumstances. Furthermore, two
NN search procedures are designed respectively for small and large batch
queries on the GPU. The optimized NN search, when being supported by the
two-stage diversified graph, outperforms all the state-of-the-art approaches on
both the CPU and the GPU across all the considered large-scale datasets.
