I would recommend to write a custom Dataset as described here 1.
The general workflow is:

load the data paths or the data directly (if it fits into memory and/or is small) in the __init__ method
return the length of the dataset in __len__

load, process, and return each data-target pair in __getitem__ using the passed index.

In your case you would most likely load the csv data in the __init__ method and index it in the __getitem__ using the index.
Also, the lazy image loading and processing would take place in the __getitem__ method.