-
Notifications
You must be signed in to change notification settings - Fork 123
GSoC 2023 Project Ideas
Thank you for your interest in applying for Google Summer of Code with CuPy!
PyLops is a Python library for large-scale, matrix-free optimization built on top of NumPy and SciPy (as well as other smaller libraries in the Python ecosystem: see this Overview for more details). Currently, a GPU backend, built on top of CuPy, is also offered that completely mirrors the original CPU backend: from a user perspective, the input arrays provided to operators and solvers drive the internal working of each operator/solver (i.e., if a NumPy array is passed the entire computation is run on CPU, if a CuPy array is passed the entire computation is run on GPU).
Contributing to PyLops will help everyone in the Python ecosystem to run large-scale optimization problems seamlessly as if they were running their dense matrix counterpart using purely NumPy and SciPy routines.
This year, we are planning to accept 1 student in total and below we provide 3 possible projects we would like them to work on.
If you are new to PyLops and would like to become familiar with our codebase, take a look at some of our tutorials:
- Transform 2022: Youtube video links.
- Transform 2021: Youtube video links.
- Swung Rendezvous 2021: Youtube video links.
- PyDataGlobal 2020: Youtube video links.
It is also a good idea to browse through our main documentation and its tutorials and gallery.
Notes
On the student registration form, please prefix your title with PyLops: and choose N/A for "NumFOCUS proposal tag".
The curvelet transform is a multidimensional wavelet-type transform with many nice properties, such as edge-preservation, exact inverse and, for many common types of signals, parsimony of coefficients and optimal representation. It is used in a variety of tasks such as denoising, adaptive filtering, preconditioning other transforms, sparsification and compression, etc. With the rise of deep learning, the curvelet transform also has the potential to be a powerful feature extractor, such as has already been shown for other, less powerful wavelet-type transforms. The Curvelops library developed the PyLops team has some cool visual examples.
There are at least three types of digital implementations of the curvelet transform: (a) the FDCT (Fast Digital Curvelet Transform) via wrapping [1], (b) the FDCT via unequally spaced fast Fourier transform (USFFT) [1], and (c) the Uniform Discrete Curvelet Transform (UDCT) [2]. Many flavors of the FDCT are available from the CurveLab but its licensing hinders open-source implementations, as they could be construed as derived code. For example, the Curvelops library requires the user to license the CurveLab software before being able to use its functions, as it depends on the CurveLab source code. So while the wrapper which only provides an API is MIT-licensed, it requires proprietary code for performing the transforms.
This project proposes the implementation of the UDCT which, in addition to not having the same licensing hurdles, also solves some technical issues identified in the FDCT. It is an excellent opportunity for those wanting to learn how to code a Python library from scratch, as well as learn more about signal and image processing.
[1] Candès, E., Demanet, L., Donoho, D., & Ying, L. (2006). Fast Discrete Curvelet Transforms. Multiscale Modeling & Simulation, 5(3), 861–899.
[2] Nguyen, T. T., & Chauris, H. (2010). Uniform Discrete Curvelet Transform. IEEE Transactions on Signal Processing, 58(7), 3618–3634.
- A Python 3 package containing:
- A NumPy and/or PyTorch and/or CuPy-based Python implementation of the forward and inverse UDCT
- A robust test suite that ensures correctness of the forward and inverse UDCT.
- Examples of how to use the UDCT and integrate with libraries such as PyLops and PyTorch.
- Qualitative comparison between the resulting UDCT implementation and the FDCT (via Curvelops).
- Python 3
- NumPy and/or PyTorch and/or CuPy. The NumPy implementation can be developed first, and later ported to CuPy (Easy) and PyTorch (Medium).
- A Python testing suite such as
pytestorunittest. Mentors can help those eager to learn. - Some image and/or signal processing experience preferred, but not required!
- Some experience reading/running Julia code may be helpful as an MIT-licensed Julia implementation of the UDCT exists: Curvelet.jl.
- No experience with any wavelet or curvelet transform is required, mentors will provide full support for the technical aspects.
@cako @mrava87
Medium (175 hours)
Medium
XX
XXX
XXX
@mrava87 @cako
XX
XX
XX
XXX
XXX
@mrava87 @cako
XX
XX