Dans la version 1.2.0 de l’application mobile de Celestro, avec le byte-code java, on a cinq librairies de code natif pour arm64_v8a.
libc++ Librairie standard du C++
libopencv Librairie ‘Open Source Computer Vision Library’
libphotontiff Librairie de Hectig pour traiter les fichiers tiff (nouveauté de la version 1.2)
libskychart Librairie pour l’affichage du ciel (planétarium)
libtensorflowlite Librairie TensorFlow lite pour processeur seulement
libtensorflowlite_gpu et pour processeur + GPU
Dans l’application mobile sont aussi inclus 3 modèles de réseaux neuronaux au format: Tensor Flow lite (.tflite)
- deconvolution v1_318
- photon_denoiser v13p
- gradient_removal v1
Ce sont les mêmes fichiers depuis l’origine de l’Origin ! Ces trois modèles on été entraînés en 2023 par la société Québecoise Hectiq.AI qui a aussi fait le stacking qui s’exécute dans le Raspberry Pi.
C'est pour cela que dans le code de l'application mobile on voit des imports de com.hectiq.photon
import com.hectiq.photon.io.RAWImage;
import com.hectiq.photon.io.RAWImageFactory;
import com.hectiq.photon.io.ReplayBuilder;
import com.hectiq.photon.io.TiffBandReader;
import com.hectiq.photon.io.TiffBandWriter;
import com.hectiq.photon.processing.ProcessedImage;
import com.hectiq.photon.processing.noise.DenoisingAILevel;
import com.hectiq.photon.processing.recipes.DeepSkyTiledPipelineLowMem;
import com.hectiq.photon.processing.recipes.StreamingTiledPipeline; Note : Avant la version 1.2.0 de l’application mobile, il y avait en plus un mini modèle ‘as_model_768.tflite’ qui a disparu avec la version 1.2.0
AI.1) Deconvolution
L’opération de déconvolution a pour but d’inverser les effets d’une convolution.
Une convolution est une opération mathématique représentant la rencontre de deux fonctions.
- La moyenne mobile est la chose la plus courante qui peut aider à se représenter ce qu'est une convolution. Chaque nombre d'une suite est remplacé par la moyenne de : lui même, le nombre qui le précède, le nombre qui le suit. La suite est définit pas une fonction, la zone sur laquelle porte la moyenne est définit pas une autre fonction. Dans le cas ci-dessus c'est la constante 3 que l'on déplace le long de la suite.
- Voici une autre analogie, plus réaliste, basée sur la distribution d'un traitement à l’hôpital (en anglais).
En astrophotographie :
- Les déformations introduites par l’atmosphère sur l’image du ciel est un type de convolution.
- L'optique du télescope peut être assimilée à l'une des deux fonctions, l'autre étant l'image du ciel. La convolution des deux donnant l'image sur le capteur cmos.
L’algorithme itératif de déconvolution le plus connue date de 1974 et est dû à Richardson & Lucy. C'est l'un des algorithmes utilisés par Siril.
On peut aussi utiliser une méthode de Deep Learning (maintenant on dit IA) basée sur l’entraînement d’un réseau neuronal qui effectuera la déconvolution d’une image issue de la camera et restituera l'image originale du ciel (en théorie sans les aberrations introduites par le télescope). C’est le rôle du modèle ‘deconvolution_v1_318_float16.tflite’ utilisé par l’application mobile de l’Origin.
Ce modèle travaille sur des portions d’image de 768x768 en RGB et utilise 1.5 millions de paramètres (1543677 pour être exact). En voici le schéma.
Ce modèle a été obtenu par un apprentissage compétitif, comme le Denoiser (voir ci-dessous)
AI.2) Denoiser
Les prises de vue unitaires (sub) sont calibrées immédiatement après la prise de vue, donc le bruit de lecture et le bruit thermique sont pris en compte dés le départ. De quel bruit s’agit-il ici, à la deuxième étape du pipeline IA ?
Le graphique ci-dessous (et le suivant) sont adaptés de la présentation de Martin Laprise, patron de Hectiq. On constate que l’entraînement utilisé pour ce modèle est basé sur une bibliothèque d'images auxquelles on ajoute volontairement du bruit (CMOS Noise) et on demande au modèle en cours d’entraînement de supprimer ce bruit. Comme on connaît l'original non bruité il est facile de déterminer automatiquement si le modèle a bien fait son travail. Si tel n'est pas le cas on peut corriger le modèle (flèche rouge).
Le modèle résultant de cet d'apprentissage automatique compétitif fonctionnera correctement si le modèle utilisé pour bruiter les originaux est conforme à la réalité. Comme les masters Dark et Flat ont déjà été appliqués je ne vois pas quelle réalité il est supposé simuler ?
En tout cas le modèle résultant est 'photon_denoiser_v13p_768.tflite' Ce modèle travaille sur des portions d’image de 768x768 en RGB et utilise 1.8 millions de paramètres (1856622 pour être exact) ET 3 paramètres externes : denoising_divider_param, noise_scale_val, noise_thres_val ce qui permet de régler le niveaux de dé-bruitage : Low, Normal, High. En voici le schéma.
AI.3) Gradient Removal
La présence d’un gradient de luminosité est courant sur les photos du ciel à cause de la pollution lumineuse, de la proximité de la lune, de photos faites trop proches du coucher ou lever du soleil.
Quand on fait une mosaïque le problème est aggravé par la plus large portion de ciel couverte et par le fait qu'il faut harmoniser toutes les photos de la mosaïque.
Il y a de bons algorithmes pour supprimer ce gradient, et surtout des algorithmes dirigés par l’utilisateur comme avec Siril. Mais là aussi, on peut utiliser un modèle entraîné pour faire ce travail spécifique automatiquement.
Le modèle gradient_removal_v1_float16.tflite est utilisé par l’application mobile
Ce modèle travaille sur des portions d’image de 224x224 en RGB et utilise 2.7 millions de paramètres (2711438 pour être exact). En voici le schéma.
Il faut noter qu'une première étape de suppression du gradient a déjà été appliqué
PS: Les schémas au format svg de chaque modèle ont été réalisés avec Netron


