lbourdois/en-fr-nyu-dl-course-corpus huggingface dataset:
English: It’s important that back-propagation is done through the calculation of the mean and std, as well as the application of the normalization: the network training will diverge otherwise. The back-propagation calculation is fairly difficult and error-prone, but PyTorch is able to automatically calculate it for us, which is very helpful. Two normalization layer classes in PyTorch are listed below:
French: l est important que la rétropropagation se fasse par le calcul de la moyenne et des écarts-types ainsi que par l’application de la normalisation. Sinon l’entraînement du réseau diverge. Le calcul de la rétropropagation est assez difficile et sujet à erreur mais PyTorch est capable de le calculer automatiquement pour nous, ce qui est très utile. Deux classes de couches de normalisation dans PyTorch sont énumérées ci-dessous :
English: Batch norm was the first method developed and is the most widely known. However, Aaron Defazio recommends using group norm instead. It’s more stable, theoretically simpler, and usually works better. Group size 32 is a good default.
French: La normalisation par batchs a été la première méthode développée et est la plus connue. Cependant, Aaron Defazio recommande d’utiliser plutôt la normalisation par groupes. Elle est plus stable, théoriquement plus simple, et fonctionne généralement mieux. La taille de groupe 32 est une bonne valeur par défaut.
English: Note that for batch norm and instance norm, the mean/std used are fixed after training, rather than re-computed every time the network is evaluated, because multiple training samples are needed to perform normalization. This is not necessary for group norm and layer norm, since their normalization is over only one training sample.
French: Notez que pour la normalisation par batchs et la normalisation par instances, la moyenne/l’écart-type utilisé est fixé après l’entraînement plutôt que recalculé à chaque fois que le réseau est évalué. En effet de multiples échantillons d’entraînement sont nécessaires pour effectuer la normalisation. Cela n’est pas nécessaire pour la normalisation par groupes et la normalisation par couches, puisque leur normalisation ne porte que sur un seul échantillon d’entraînement.
English: Sometimes we can barge into a field we know nothing about and improve how they are currently implementing things. One such example is the use of deep neural networks in the field of Magnetic Resonance Imaging (MRI) to accelerate MRI image reconstruction.
French: Parfois, nous pouvons faire irruption dans un domaine que nous ne connaissons pas et améliorer la façon dont les choses sont mises en œuvre. L’utilisation de réseaux neuronaux profonds dans le domaine de l’imagerie par résonance magnétique (IRM) pour accélérer la reconstruction des images IRM en est un exemple.
English: In the traditional MRI reconstruction problem, raw data is taken from an MRI machine and an image is reconstructed from it using a simple pipeline/algorithm. MRI machines capture data in a 2-dimensional Fourier domain, one row or one column at a time (every few milliseconds). This raw input is composed of a frequency and a phase channel and the value represents the magnitude of a sine wave with that particular frequency and phase. Simply speaking, it can be thought of as a complex valued image, having a real and an imaginary channel. If we apply an inverse Fourier transform on this input, i.e add together all these sine waves weighted by their values, we can get the original anatomical image.
French: Dans le problème traditionnel de la reconstruction d’une IRM, les données brutes sont extraites d’un appareil IRM et une image est reconstruite à partir de celles-ci à l’aide d’un simple algorithme. Les machines d’IRM capturent les données dans un domaine de Fourier en deux dimensions, une ligne ou une colonne à la fois (toutes les quelques millisecondes). Cette entrée brute est composée d’un canal de fréquence et d’un canal de phase et la valeur représente l’amplitude d’une onde sinusoïdale avec cette fréquence et cette phase particulières. En termes simples, on peut considérer qu’il s’agit d’une image de valeur complexe, ayant un canal réel et un canal imaginaire. Si nous appliquons une transformée de Fourier inverse sur cette entrée, c’est-à-dire si nous additionnons toutes ces ondes sinusoïdales pondérées par leurs valeurs, nous pouvons obtenir l’image anatomique originale.
English: A linear mapping currently exists to go from the Fourier domain to the image domain and it’s very efficient, literally taking milliseconds, no matter how big the image is. But the question is, can we do it even faster?
French: Une association linéaire existe pour passer du domaine de Fourier au domaine de l’image. Elle est très efficace, prenant littéralement des millisecondes, quelle que soit la taille de l’image. Mais la question est de savoir si nous pouvons le faire encore plus rapidement.
English: The new problem that needs to be solved is accelerated MRI, where by acceleration we mean making the MRI reconstruction process much faster. We want to run the machines quicker and still be able to produce identical quality images. One way we can do this and the most successful way so far has been to not capture all the columns from the MRI scan. We can skip some columns randomly, though it’s useful in practice to capture the middle columns, as they contain a lot of information across the image, but outside them we just capture randomly. The problem is that we can’t use our linear mapping anymore to reconstruct the image. The rightmost image in Figure 7 shows the output of a linear mapping applied to the subsampled Fourier space. It’s clear that this method doesn’t give us very useful outputs, and that there’s room to do something a little bit more intelligent.
French: Le nouveau problème qui doit être résolu est l’accélération de l’IRM, où nous entendons rendre le processus de reconstruction de l’IRM beaucoup plus rapide. Nous voulons faire fonctionner les machines plus rapidement tout en étant capables de produire des images de qualité identique. Une façon d’y parvenir, et la plus efficace jusqu’à présent, est de ne pas capturer toutes les colonnes de l’IRM. Nous pouvons sauter certaines colonnes de manière aléatoire, bien qu’il soit utile en pratique de capturer les colonnes du milieu car elles contiennent beaucoup d’informations sur l’ensemble de l’image. Le problème est que nous ne pouvons plus utiliser notre association linéaire pour reconstruire l’image. L’image la plus à droite de la figure 7 montre le résultat d’une association linéaire appliquée à l’espace de Fourier sous-échantillonné. Il est clair que cette méthode ne nous donne pas de résultats très utiles, et qu’il est possible de faire quelque chose d’un peu plus intelligent.
English: One of the biggest breakthroughs in theoretical mathematics for a long time was compressed sensing. A paper by Candes et al. showed that theoretically, we can get a perfect reconstruction from the subsampled Fourier-domain image. In other words, when the signal we are trying to reconstruct is sparse or sparsely structured, then it is possible to perfectly reconstruct it from fewer measurements. But there are some practical requirements for this to work – we don’t need to sample randomly, rather we need to sample incoherently – though in practice, people just end up sampling randomly. Additionally, it takes the same time to sample a full column or half a column, so in practice we also sample entire columns.
French: L’une des plus grandes percées en mathématiques théoriques est la détection comprimée. Un article de Candes et al. a montré que théoriquement, nous pouvons obtenir une reconstruction parfaite à partir de l’image du domaine de Fourier sous-échantillonnée. En d’autres termes, lorsque le signal que nous essayons de reconstruire est épars ou peu structuré, il est alors possible de le reconstruire parfaitement à partir de moins de mesures. Mais pour que cela fonctionne, il y a certaines conditions pratiques à remplir : nous n’avons pas besoin d’échantillonner au hasard mais plutôt d’échantillonner de manière incohérente, bien qu’en pratique, les gens finissent par échantillonner au hasard. En outre, il faut le même temps pour échantillonner une colonne entière ou une demi-colonne, donc en pratique nous échantillonnons aussi des colonnes entières.
English: Another condition is that we need to have sparsity in our image, where by sparsity we mean a lot of zeros or black pixels in the image. The raw input can be represented sparsely if we do a wavelength decomposition, but even this decomposition gives us an approximately sparse and not an exactly sparse image. So, this approach gives us a pretty good but not perfect reconstruction, as we can see in Figure 8. However, if the input were very sparse in the wavelength domain, then we would definitely get a perfect image.
French: Une autre condition est que nous devons avoir une éparsité dans notre image, où par éparsité nous voulons dire beaucoup de zéros ou de pixels noirs dans l’image. L’entrée brute peut être représentée de façon éparse si nous effectuons une décomposition en longueur d’onde. Cependant même cette décomposition nous donne une image approximativement éparse et pas exactement éparse. Ainsi, cette approche nous donne une reconstruction assez bonne mais pas parfaite, comme nous pouvons le voir sur la figure 8. Si l’entrée était très éparse dans le domaine des longueurs d’onde, alors nous obtiendrions certainement une image parf
English: where M is the mask function that zeros out non-sampled entries, F is the Fourier transform, y is the observed Fourier-domain data, λ is the regularization penalty strength, and V is the regularization function.
French: où M est la fonction de masque qui met à zéro les entrées non échantillonnées, F est la transformée de Fourier, y est la donnée observée du domaine de Fourier, λ est la force de la pénalité de régularisation et V est la fonction de régularisation.
English: The optimization problem must be solved for each time step or each “slice” in an MRI scan, which often takes much longer than the scan itself. This gives us another reason to find something better.
French: Le problème d’optimisation doit être résolu pour chaque pas de temps ou chaque « tranche » d’un examen IRM, qui prend souvent beaucoup plus de temps que l’examen lui-même. Cela nous donne une raison supplémentaire de trouver quelque chose de mieux.
English: Instead of solving the little optimization problem at every time step, why not use a big neural network to produce the required solution directly? Our hope is that we can train a neural network with sufficient complexity that it essentially solves the optimization problem in one step and produces an output that is as good as the solution obtained from solving the optimization problem at each time step.
French: Au lieu de résoudre le petit problème d’optimisation à chaque étape, pourquoi ne pas utiliser un grand réseau de neurones pour produire directement la solution requise ? Nous espérons pouvoir entraîner un réseau de neurones suffisamment complexe pour qu’il résolve le problème d’optimisation en une seule étape et produise un résultat aussi bon que la solution obtenue en résolvant le problème d’optimisation à chaque étape temporelle.
English: 15 years ago, this approach was difficult – but nowadays this is a lot easier to implement. Figure 9 shows the result of a deep learning approach to this problem and we can see that the output is much better than the compressed sensing approach and looks very similar to the actual scan.
French: Il y a 15 ans, cette approche était difficile mais est aujourd’hui beaucoup plus facile à mettre en œuvre. La figure 9 montre le résultat d’une approche d’apprentissage profond au problème. Nous pouvons voir qu’il est bien meilleur que l’approche de détection comprimée et ressemble beaucoup au scanner réel.
English: The model used to generate this reconstruction uses an ADAM optimizer, group-norm normalization layers, and a U-Net based convolutional neural network. Such an approach is very close to practical applications and we will hopefully be seeing these accelerated MRI scans happening in clinical practice in a few years’ time
French: Le modèle utilisé pour générer cette reconstruction fait appel à un optimiseur ADAM, à des couches de normalisation par groupes et à un ConvNet basé sur U-Net.
English: Instead of using the matrix A discussed in the previous week, we will change the matrix width to the kernel size k. Therefore, each row of the matrix is a kernel. We can use the kernels by stacking and shifting (see Fig 1). Then we can have mm layers of height n−k+1.
French: Au lieu d’utiliser la matrice A de la semaine précédente, nous allons changer la largeur de la matrice pour la taille du noyau k. Par conséquent, chaque ligne de la matrice est un noyau. Nous pouvons utiliser les noyaux en les empilant et en les déplaçant (voir la figure 1). Nous pouvons alors avoir mm couches de hauteur n−k+1.
English: where Ω={1,2,3,⋯ }⊂N1 (since this is 1 dimensional signal / it has a 1 dimensional domain) and in this case the channel number c is 1. When c=2 this becomes a stereophonic signal.
French: avec Ω={1,2,3,⋯}⊂N1 (puisque c’est un signal de dimension 1 / il a un domaine de dimension 1) et dans ce cas le numéro de canal c est 1. Lorsque c=2, cela devient un signal stéréophonique.
English: We have 1 dimensional convolution going from 2 channels (stereophonic signal) to 16 channels (16 kernels) with kernel size of 3 and stride of 1. We then have 16 kernels with thickness 2 and length 3. Let’s assume that the input signal has a batch of size 1 (one signal), 2 channels and 64 samples. The resulting output layer has 1 signal, 16 channels and the length of the signal is 62 (=64−3+1). Also, if we output the bias size, we’ll find the bias size is 16, since we have one bias per weight.
French: Nous avons une convolution de dimension 1 allant de 2 canaux (signal stéréophonique) à 16 canaux (16 noyaux) avec une taille de noyau de 3 et un pas de 11. Nous avons ensuite 16 noyaux avec une épaisseur de 2 et une longueur de 3. Supposons que le signal d’entrée ait un batch de taille 1 (un signal), de 2 canaux et 64 échantillons. La couche de sortie résultante a 1 signal, des 16 canaux et la longueur du signal est de 62 (=64−3+1). De plus, si nous affichons la taille du biais, nous constaterons qu’elle de 16, puisque nous avons un biais par poids.
English: We first define the input data as 1 sample, 20 channels (say, we’re using an hyperspectral image) with height 64 and width 128. The 2D convolution has 20 channels from input and 16 kernels with size of 3×53×5. After the convolution, the output data has 1 sample, 16 channels with height 62 (=64−3+1) and width 124 (=128−5+1).
French: Nous définissons d’abord les données d’entrée comme un 1 échantillon, 20 canaux (disons que nous utilisons une image hyperspectrale) avec une hauteur de 64 et une largeur de 128. La convolution 2D a 20 canaux en entrée et 16 noyaux de taille de 3×53×5. Après la convolution, la donnée en sortie a un 1 échantillon, 16 canaux avec une hauteur de 62 (=64−3+1) et une largeur de 124 (=128−5+1).
English: If we want to achieve the same dimensionality, we can have paddings. Continuing the code above, we can add new parameters to the convolution function: stride=1 and padding=(1, 2), which means 1 on y direction (1 at the top and 1 at the bottom) and 2 on x direction. Then the output signal is in the same size compared to the input signal. The number of dimensions that is required to store the collection of kernels when you perform 2D convolution is 4.
French: Si nous voulons atteindre la même dimensionnalité, nous pouvons rembourrer. En continuant le code ci-dessus, nous pouvons ajouter de nouveaux paramètres à la fonction de convolution : stride=1 et padding=(1, 2), ce qui signifie 1 dans la direction y (1 en haut et 1 en bas) et 2 dans la direction x. Le signal de sortie est alors de la même taille que le signal d’entrée. Le nombre de dimensions nécessaires pour stocker la collection de noyaux lorsque vous effectuez une convolution 2D est de 4.
English: Now we have a 1×3 vector x, assign y to the double x and keep doubling y until its norm is smaller than 1000. Due to the randomness we have for x, we cannot directly know the number of iterations when the procedure terminates.
French: Maintenant que nous avons un vecteur 1×3 x, assignons 2x à y et doublons y jusqu’à ce que sa norme soit inférieure à 1000. En raison du caractère aléatoire que nous avons pour x, nous ne pouvons pas connaître directement le nombre d’itérations lorsque la procédure se termine.
English: As for the inference, we can use requires_grad=True to label that we want to track the gradient accumulation as shown below. If we omit requires_grad=True in either x or w’s declaration and call backward() on z, there will be runtime error due to we do not have gradient accumulation on x or W.
French: Quant à l’inférence, nous pouvons utiliser requires_grad=True pour indiquer que nous voulons suivre l’accumulation du gradient comme indiqué ci-dessous. Si nous omettons requires_grad=True dans la déclaration de x ou w et appelons backward() sur z, il y aura une erreur d’exécution due au fait que nous n’avons pas d’accumulation de gradient sur x ou w.
English: To do so, we need to inherit torch.autograd.Function and override forward() and backward() functions. For example, if we want to training nets, we need to get the forward pass and know the partial derivatives of the input respect to the output, such that we can use this module in any kind of point in the code. Then, by using back-propagation (chain rule), we can plug the thing anywhere in the chain of operations, as long as we know the partial derivatives of the input respect to the output.
French: Pour ce faire, nous devons partir de la fonction torch.autograd.Function et remplacer les fonctions forward() et backward(). Par exemple, si nous voulons entraîner des réseaux, nous devons obtenir la propagation en avant dans le réseau et connaître les dérivées partielles de l’entrée par rapport à la sortie, de sorte que nous puissions utiliser ce module en tout point du code. Ensuite, en utilisant la rétropropagation (règle de la chaîne), nous pouvons insérer la chose n’importe où dans la chaîne d’opérations, à condition de connaître les dérivées partielles de l’entrée par rapport à la sortie.
English: If we have addition of two things and get an output, we need to overwrite the forward function like this. And when we go down to do back propagation, the gradients copied over both sides. So we overwrite the backward function by copying.
French: Si nous avons l’addition de deux choses et que nous obtenons un résultat, nous devons écraser la fonction forward comme ceci. Et lorsque nous rétropropagation, les gradients sont copiés sur les deux côtés. Nous écrasons donc la fonction backward en copiant.
English: For split and max, see the code of how we overwrite forward and backward functions in the notebook. If we come from the same thing and Split, when go down doing gradients, we should add / sum them. For argmax, it selects the index of the highest thing, so the index of the highest should be 1 while others being 0. Remember, according to different custom modules, we need to overwrite its own forward pass and how they do gradients in backward function.
French: Pour les fonctions split et max, consultez le code pour la façon dont nous écrasons les fonctions forward et backward dans le notebook. Pour argmax, cela sélectionne l’indice de la chose la plus élevée. Ainsi l’indice de la plus élevée devrait être de 1 et 0 pour les autres.
English: We discussed three applications of convolutional neural networks. We started with digit recognition and the application to a 5-digit zip code recognition. In object detection, we talk about how to use multi-scale architecture in a face detection setting. Lastly, we saw how ConvNets are used in semantic segmentation tasks with concrete examples in a robotic vision system and object segmentation in an urban environment.
French: Nous discutons de trois applications des réseaux de neurones convolutifs. Nous commençons par la reconnaissance d’un code postal à 5 chiffres. En ce qui concerne la détection d’objets, nous abordons la manière d’utiliser une architecture multi-échelle dans le cadre de détection de visages. Enfin, nous voyons comment les ConvNets sont utilisés dans des tâches de segmentation sémantique avec des exemples concrets dans un système de vision robotique et la segmentation d’objets dans un environnement urbain.
English: We examine Recurrent Neural Networks, their problems, and common techniques for mitigating these issues. We then review a variety of modules developed to resolve RNN model issues including Attention, GRUs (Gated Recurrent Unit), LSTMs (Long Short-Term Memory), and Seq2Seq.
French: Nous examinons les réseaux neuronaux récurrents (RNNs pour Recurrent Neural Networks), leurs problèmes et les techniques courantes permettant de les atténuer. Nous examinons ensuite divers modules développés pour résoudre les problèmes liés aux modèles RNNs, notamment l’Attention, les GRUs (Gated Recurrent Unit), les LSTMs (Long Short-Term Memory) et le Seq2Seq.
English: We discussed architecture of Vanilla RNN and LSTM models and compared the performance between the two. LSTM inherits advantages of RNN, while improving RNN’s weaknesses by including a ‘memory cell’ to store information in memory for long periods of time. LSTM models significantly outperforms RNN models.
French: Nous discutons de l’architecture des modèles RNNs de base et des LSTMs et comparons les performances entre les deux. Les LSTMs héritent des avantages des RNNs, tout en améliorant leurs faiblesses en incluant une cellule mémoire afin de stocker les informations pendant de longues périodes. Les modèles LSTMs sont nettement plus performants que les modèles RNNs.
English: In the previous lecture, we demonstrated that a convolutional network can recognize digits, however, the question remains, how does the model pick each digit and avoid perturbation on neighboring digits. The next step is to detect non/overlapping objects and use the general approach of Non-Maximum Suppression (NMS). Now, given the assumption that the input is a series of non-overlapping digits, the strategy is to train several convolutional networks and using either majority vote or picking the digits corresponding to the highest score generated by the convolutional network.
French: Dans les cours des semaines précédentes, nous avons démontré qu’un réseau convolutif peut reconnaître des chiffres. Cependant, la question demeure de savoir comment le modèle choisit chaque chiffre et évite les perturbations avec les chiffres voisins. L’étape suivante consiste à détecter les objets qui ne se chevauchent pas et à utiliser l’approche générale de la suppression non maximale (NMS en anglais pour Non-Maximum Suppression). Etant donné l’hypothèse que l’entrée est une série de chiffres ne se chevauchants pas, la stratégie consiste à entraîner plusieurs réseaux convolutifs et à utiliser soit un vote majoritaire, soit à choisir les chiffres correspondant au score le plus élevé généré par le réseau convolutif.