Esempio n. 1
0
extern void* start(int img_size, int inner_size, bool center, bool flip,
                   bool rgb, bool multiview, int minibatch_size,
                   char *filename, int macro_start,
                   uint num_data, uint num_labels, bool macro,
                   DeviceParams* params) {
    static_assert(sizeof(int) == 4, "int is not 4 bytes");
    try {
        int nchannels = (rgb == true) ? 3 : 1;
        int item_max_size = nchannels*inner_size*inner_size;
        // These objects will get freed in the destructor of ImageLoader.
        Device* device;
#if HASGPU
        if (params->_type == CPU) {
            device = new Cpu(params);
        } else {
            device = new Gpu(params);
        }
#else
        assert(params->_type == CPU);
        device = new Cpu(params);
#endif
        Reader*     reader;
        if (macro == true) {
            reader = new MacrobatchReader(filename, macro_start,
                                          num_data, minibatch_size);
        } else {
            reader = new ImageFileReader(filename, num_data,
                                         minibatch_size, img_size);
        }
        Decoder* decoder = new ImageDecoder(inner_size, flip);
        ImageLoader* loader = new ImageLoader(minibatch_size, item_max_size,
                                              num_labels, device,
                                              reader, decoder);
        int result = loader->start();
        if (result != 0) {
            printf("Could not start data loader. Error %d", result);
            delete loader;
            exit(-1);
        }
        return (void *) loader;
    } catch(...) {
        return 0;
    }
}