I was trying to run a modified version of [the Pre-trained TSN Models on UCF101 
tutorial](https://gluon-cv.mxnet.io/build/examples_action_recognition/demo_tsn_ucf101.html)
 on GPU.

The idea is to collect frames from a video or a camera stream for a certain 
time interval (1 second in my case), run the activity recognition on this 
batch, and repeat the process. I'm having a hard time figuring out how to load 
the batch of frames in the same context as the model.

I'm using:

    def main():

        ctx = [mx.gpu(0)]
        net = get_model('inceptionv3_ucf101', nclass=101, pretrained=True, 
ctx=ctx)
        net.collect_params().reset_ctx(ctx)

        cap = cv2.VideoCapture("files/test_01.mp4")

        while(True):
            ret, frame = cap.read()
            frame_nd_resized = image.imresize(nd.array(frame_np_orig), 299, 299)

            key = cv2.waitKey(1)
            if (key == ord('q')) or (ret == False):
                break

            ## accumulating frames in batch
            frames_to_analyze.append(frame_nd_resized.asnumpy())

            ## if frames have been collected for selected amount of time, 
transform them and send them to detection
            if (datetime.datetime.now()-start_time_batch).total_seconds() > 
time_interval_to_analyze:
                transform_fn = transforms.Compose([
                    video.VideoToTensor(),
                    video.VideoNormalize([0.485, 0.456, 0.406], [0.229, 0.224, 
0.225])
                ])
                frames_to_analyze_transformed = transform_fn(frames_to_analyze)

                ## running predictions over batch of frames
                pred_batch = net(nd.array(frames_to_analyze_transformed, 
ctx=ctx))
                pred_batch.wait_to_read()
           
                ## flush frames buffer
                frames_to_analyze = []
                frames_to_analyze_transformed = []
                print(f"\tHistory so far: {past_batches_results}")
                print("\tFlushing memory\n")
                ## reset timer for batch collection
                start_time_batch = datetime.datetime.now()

        cap.release()
        cv2.destroyAllWindows()

    if __name__ == '__main__':
        main()


I'm getting the error:

    AttributeError: 'list' object has no attribute 'device_typeid'

so I guess I'm supposed to load the frames batch to the selected ctx in another 
way, but I cannot figure out how.





---
[Visit 
Topic](https://discuss.mxnet.apache.org/t/loading-batch-of-images-on-gpu-for-detection/6614/1)
 or reply to this email to respond.

You are receiving this because you enabled mailing list mode.

To unsubscribe from these emails, [click 
here](https://discuss.mxnet.apache.org/email/unsubscribe/f8d4fc54010fa1fb0cc2dc2c1cfb4a9fac343dbb919060d14ce43c4fbb2524f6).

Reply via email to