A method for estimating a three-dimensional pose of an object, the method comprising: receiving a depth image of the object; sampling the depth image to generate a plurality of image patches of the depth image; extracting, using a trained convolutional neural network, features from each of the plurality of image patches and from the depth image; searching, using the extracted features, a plurality of image patch feature databases and a full-image feature database for a plurality of nearest neighbor poses, the feature databases including a discrete number of poses, wherein a nearest neighbor pose is found for each local image patch of the plurality of image patches using a respective image patch feature database and a nearest neighbor pose is found for the depth image using full-image feature database, the nearest neighbor poses for each local image patch of the plurality of image patches and the nearest neighbor pose for the full depth image form a pool of possible nearest neighbor poses; and estimating, based on the pool of possible nearest neighbor poses, the three-dimensional pose of the object, the estimating comprising: rendering a depth image from each of the identified nearest neighbor poses using a three-dimensional model of the object; aligning each of the rendered depth images with the received depth image of the object by applying a mean shift algorithm and a refinement algorithm to each of the rendered depth images; and selecting a rendered and aligned depth image closest to the received depth image, wherein estimating the three-dimensional pose is based on the selected rendered depth image. receiving a depth image of the object; sampling the depth image to generate a plurality of image patches of the depth image; extracting, using a trained convolutional neural network, features from each of the plurality of image patches and from the depth image; searching, using the extracted features, a plurality of image patch feature databases and a full-image feature database for a plurality of nearest neighbor poses, the feature databases including a discrete number of poses, wherein a nearest neighbor pose is found for each local image patch of the plurality of image patches using a respective image patch feature database and a nearest neighbor pose is found for the depth image using full-image feature database, the nearest neighbor poses for each local image patch of the plurality of image patches and the nearest neighbor pose for the full depth image form a pool of possible nearest neighbor poses; and estimating, based on the pool of possible nearest neighbor poses, the three-dimensional pose of the object, the estimating comprising: rendering a depth image from each of the identified nearest neighbor poses using a three-dimensional model of the object; aligning each of the rendered depth images with the received depth image of the object by applying a mean shift algorithm and a refinement algorithm to each of the rendered depth images; and selecting a rendered and aligned depth image closest to the received depth image, wherein estimating the three-dimensional pose is based on the selected rendered depth image. rendering a depth image from each of the identified nearest neighbor poses using a three-dimensional model of the object; aligning each of the rendered depth images with the received depth image of the object by applying a mean shift algorithm and a refinement algorithm to each of the rendered depth images; and selecting a rendered and aligned depth image closest to the received depth image, wherein estimating the three-dimensional pose is based on the selected rendered depth image.