OT for domain adaptation with image color adaptation [6] with mapping estimation [8].
[6] Ferradans, S., Papadakis, N., Peyre, G., & Aujol, J. F. (2014). Regularized discrete optimal transport. SIAM Journal on Imaging Sciences, 7(3), 1853-1882.
[8] M. Perrot, N. Courty, R. Flamary, A. Habrard, “Mapping estimation for discrete optimal transport”, Neural Information Processing Systems (NIPS), 2016.
# Authors: Remi Flamary <remi.flamary@unice.fr> # Stanislas Chambon <stan.chambon@gmail.com> # # License: MIT License # sphinx_gallery_thumbnail_number = 3 import os from pathlib import Path import numpy as np from matplotlib import pyplot as plt import ot rng = np.random.RandomState(42) def im2mat(img): """Converts and image to matrix (one pixel per line)""" return img.reshape((img.shape[0] * img.shape[1], img.shape[2])) def mat2im(X, shape): """Converts back a matrix to an image""" return X.reshape(shape) def minmax(img): return np.clip(img, 0, 1)Generate data Domain adaptation for pixel distribution transfer
# EMDTransport ot_emd = ot.da.EMDTransport() ot_emd.fit(Xs=Xs, Xt=Xt) transp_Xs_emd = ot_emd.transform(Xs=X1) Image_emd = minmax(mat2im(transp_Xs_emd, I1.shape)) # SinkhornTransport ot_sinkhorn = ot.da.SinkhornTransport(reg_e=1e-1) ot_sinkhorn.fit(Xs=Xs, Xt=Xt) transp_Xs_sinkhorn = ot_sinkhorn.transform(Xs=X1) Image_sinkhorn = minmax(mat2im(transp_Xs_sinkhorn, I1.shape)) ot_mapping_linear = ot.da.MappingTransport( mu=1e0, eta=1e-8, bias=True, max_iter=20, verbose=True ) ot_mapping_linear.fit(Xs=Xs, Xt=Xt) X1tl = ot_mapping_linear.transform(Xs=X1) Image_mapping_linear = minmax(mat2im(X1tl, I1.shape)) ot_mapping_gaussian = ot.da.MappingTransport( mu=1e0, eta=1e-2, sigma=1, bias=False, max_iter=10, verbose=True ) ot_mapping_gaussian.fit(Xs=Xs, Xt=Xt) X1tn = ot_mapping_gaussian.transform(Xs=X1) # use the estimated mapping Image_mapping_gaussian = minmax(mat2im(X1tn, I1.shape))
It. |Loss |Delta loss -------------------------------- 0|1.797245e+02|0.000000e+00 1|1.758014e+02|-2.182822e-02 2|1.757026e+02|-5.620752e-04 3|1.756521e+02|-2.875691e-04 4|1.756218e+02|-1.725224e-04 5|1.756015e+02|-1.153553e-04 6|1.755868e+02|-8.348118e-05 7|1.755759e+02|-6.234582e-05 8|1.755673e+02|-4.893582e-05 9|1.755604e+02|-3.942771e-05 10|1.755547e+02|-3.206000e-05 11|1.755500e+02|-2.695056e-05 12|1.755460e+02|-2.307154e-05 13|1.755426e+02|-1.944208e-05 14|1.755395e+02|-1.715960e-05 15|1.755369e+02|-1.515613e-05 16|1.755345e+02|-1.367864e-05 17|1.755324e+02|-1.197885e-05 18|1.755305e+02|-1.071067e-05 19|1.755303e+02|-9.898122e-07 It. |Loss |Delta loss -------------------------------- 0|1.842001e+02|0.000000e+00 1|1.780145e+02|-3.358084e-02 2|1.778490e+02|-9.296544e-04 3|1.777841e+02|-3.648247e-04 4|1.777495e+02|-1.948923e-04 5|1.777284e+02|-1.184075e-04 6|1.777135e+02|-8.396988e-05 7|1.777027e+02|-6.059322e-05 8|1.776945e+02|-4.619816e-05 9|1.776880e+02|-3.672789e-05 10|1.776827e+02|-2.971430e-05Plot original images Plot pixel values distribution
plt.figure(2, figsize=(6.4, 5)) plt.subplot(1, 2, 1) plt.scatter(Xs[:, 0], Xs[:, 2], c=Xs) plt.axis([0, 1, 0, 1]) plt.xlabel("Red") plt.ylabel("Blue") plt.title("Image 1") plt.subplot(1, 2, 2) plt.scatter(Xt[:, 0], Xt[:, 2], c=Xt) plt.axis([0, 1, 0, 1]) plt.xlabel("Red") plt.ylabel("Blue") plt.title("Image 2") plt.tight_layout()Plot transformed images
plt.figure(2, figsize=(10, 5)) plt.subplot(2, 3, 1) plt.imshow(I1) plt.axis("off") plt.title("Im. 1") plt.subplot(2, 3, 4) plt.imshow(I2) plt.axis("off") plt.title("Im. 2") plt.subplot(2, 3, 2) plt.imshow(Image_emd) plt.axis("off") plt.title("EmdTransport") plt.subplot(2, 3, 5) plt.imshow(Image_sinkhorn) plt.axis("off") plt.title("SinkhornTransport") plt.subplot(2, 3, 3) plt.imshow(Image_mapping_linear) plt.axis("off") plt.title("MappingTransport (linear)") plt.subplot(2, 3, 6) plt.imshow(Image_mapping_gaussian) plt.axis("off") plt.title("MappingTransport (gaussian)") plt.tight_layout() plt.show()
Total running time of the script: (0 minutes 22.790 seconds)
Gallery generated by Sphinx-Gallery
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4