 Okay. Yeah. So, hello everybody. I am Chum Tan Ding and this is Igor Anthropov. So we are contributors at GGCAM, I've started for years and Anthropov, as Igor just this year from Google Summer of Code. And so we are, this is our first academy and we are quite new. And today we are going to present the place of recognition and management in GGCAM. And the presentation is normally under my name, but since we all both worked on this project for the Google Summer of Code, I worked on the backend and Igor on the front end, so it's much more complete that we present together this module. Okay, so let's begin. Okay. So just a quick summary for our presentation. We will firstly introduce the module and the face management organization module in GGCAM. Next, the work that I've done for this module, on the improvement on face recognition and then the improvement of Igor that he did on the face management workflow on the UI. And finally a small conclusion for our work and the future of the module. So as I said, we worked for the Google Summer of Code. Just if anybody here hasn't know about this, it's a program for students working on a project for open source organization. And this is a chance for open source to promote themselves to students and to have a more contributor. And for our work, it's on the module in GGCAM for facial recognition, for facial management, simply that we can tag a person by detecting their face in photos and with the name on that tag. And that helps to organize faces and pictures and we can later sort with the name of people or display pictures that have that name on that picture. So for my work in detail, I improved the speed and the accuracy of the module and Igor, he worked on using the face which is more natural and more informative. So why do we need face recognition in GGCAM? Actually when we use GGCAM, we have our albums with a lot of pictures that have faces and we need to tag those faces like what we did in Facebook. Just don't know who are the persons in that picture. And if we have hundreds of faces, it will be difficult for us to do all of that manually. So the module is intended to replace that part and automatically assign the tag based on the known faces that we have already did. And so why do I choose deep learning for that? Actually in GGCAM, the module is already implemented using an old algorithm. As you can see here, we have in GGCAM actually the module is implemented, used egging face and fissure face and there's another algorithm, LPPH, binary something. It's not here but actually they are old algorithm and they are not accurate. So the module actually was deactivated. So the idea is that I use deep learning which is more robust and has flowing this graph, has more accuracy in order to improve this module. And yeah, so I got this picture from a paper so can she show about the certainty of that graph? So okay, so why, how can deep learning have to improve the accuracy of the module? I will just talk a little bit about how does it work and I'm sure that anybody here knows much better than me but yeah, I just will mention it again. So here you have an architecture of neural network. It has many layers and just seeing that a neural network may function like our brain and each layer represents each step when we do some task. Like we do with step one, step two, step three and in order to have a functional neural network, we need to train it and then train it. When we train it, we have to do the forward operation of the inference to predict and then based on the node label of that data, we can compute an error or how close our prediction to the real result and then we do a backward operation where we change the model in the way that it will perform much better and closer to the result. So after training with many data and after many iterations, we will have a module that is functional and we can use it to predict a phase, predict, yeah. So why the deep learning is so good in phase recognition? Because we have so many, an architecture with so many layers and for each layer, we can recognize some parts of the phase. For example, for the first layer, we can recognize edge curves, something like that, with faces region and then for the next, we can recognize the eye, nose and some other features on the face and finally, a picture that is more complex on the face. So for my work, this is a pipeline of phase recognition, and yeah, I took it from Medium because it's a very good and informative give for the pipeline. We begin with an input image and then we do the detection where we detect where is the phase and then we extract the line mark and we crop the image to prepare it for the neural network. There, we compute a representation of faces and from that results, we can do clustering, we can compute the similarity with known faces and to recognize that phase and a part of Qt and C++ and KDA, the most important, the core component of my work is OpenCV DNN model and it has to do a fast inference or forward operation on the whole neural network. It's very fast and modernized. It has to separate the neural network and the functional code so that we can upgrade the neural network apart from the functional, the code. And so continue with the pipeline. Here's the results of my, when running the face detection. It's very robust as you can see with orientation like this. Even dogs are recognized because it is phase two. Even artwork like this and anything that are similar to faces can be detected, right? And finally, if you have a picture with so many faces and they are small, very small faces, you can detect it too. Next, for the line mark extraction, actually this depends on the neural network and here we extract a line mark. This is the point of the important region on the face and for example, for the neural network that I used, it is required that the outer eyes and the top nose are at the special position. So actually this part depends on the neural network and can be implemented, modularized so that we can use it for different architecture of neural network. And for the final part, we have a new image to compute the representation and we can compute the similarity with the group of no faces and then we can assign the tag based on the similarity with that group of faces. So for a small demonstration, it will like this. I have a two-picture of a prepid and it can find all the pictures that are similar to those faces. So for the next part, I will let Igor present the UI of the module. Okay, good day everyone. And so my part of the work was kind of boring because you know, it's UI and UX and you're just asking yourself why didn't DGKM have it already and I don't know. One word, if you are using DGKM and have some issues or some suggestions, please contact me. I will work for face management workflow for a long time I think. So we had a lot of feedback from users about issues about features they want to see in next DGKM releases and this feedback can be divided in two parts. One of them is some strange misunderstanding of difference between face tagging and normal tagging because face tagging is not a normal tag. It's more like, I don't know how to say, but you can't use face tag instead of normal tag. Face tag has to be with the area. It's for detection and recognition for internal usages and so on. And there is some problems. Why DGKM has these problems? Face tags was added after the DGKM had already made a tag engine. So users said that it's hard to tell the difference between face tags and normal tags when you are looking at a tag panel. Because they are using it like normal tags and the big problem is the same names. The other part is about some random improvements to do. So one of the solution was to start separation of the tags and normal tags entirely. So what did we make? We removed face tags from normal tags list and from context menus. This removes the way for users to use face tag as normal tags and to see it from this list, of course. The next one, we removed some really strange functionality to convert face tags into normal tags and the server. I don't know why this was there, but not anymore. We removed the possibility to create face tags outside of people. This is a tricky question because face tags had the same tree architecture as the normal tags. And the tricky part is if the parent is normal tag and the child is a face tag, that won't be shown in any panels at all. Because parent is not a face tag, it's not a face tag tree branch. The leaf is face tag, it's not a normal tag. So what do we propose it? All face tag has to be under the people node. People is internal face tag. All top-level tag is now hidden because it's no really point in that. And I think it's better to rename it to something like face tag internal, something like that. And of course, we removed all face tags from all the list of tags, so we need to add some filters, we already did that, and some more places where they should be, like an algorithm of detection and recognition. So about other changes. Now you can see that if you set some photo as a thumbnail, the face will be the thumbnail, not a full photo. This is really important when on photos, there are so many people that you can't understand. You can see, actually, like before was. Now, announcement of recognized persons. After running the algorithm of detection and recognition, there wasn't any announcement at all, no pop-ups, nothing. And if you have, like, really large collection of photos, it would be a pain to hover your mouse on each face and to find these faces. So now, in brackets, you can see there are some of recognized, but not, did you come not decided, did you come suggested your name, but can't really make a decision. Green borders around the unconfirmed faces, it's really helpful if you're early, if you're same, have a huge collection of faces, one person. Some tree improvements are known and unconfirmed face tags, they are like, again, internal DGCAM tags, but some, I don't know why, but some users, especially newcomers, was confused with them. Because if you install DGCAM, they are already here, there. And I don't know why, but users could just delete them or rename and ruin half of the recognition and detection process. So now you can't move it, you can't remove it, and you can't rename it. And there will be always on top of the list. I think there was some problems with that because this tree can be really messy. And as I said, top level tag is now hidden because there is no point in showing it. And final small feature is you can drag and drop face tags onto faces, is like a normal way because before you, you can do it, but it won't change the face tag, it will assign a new tag using the face tag. As I said, you could use face tags as a normal tag, so not anymore. So this has some problems with separation, especially because there are some places where face tags are removed from tags, but there is no menu from face tags yet. And compatibility with other softwares like Picasso, it's really a pain because it's one more way to create that branch when it's not a face tag and a face tag. And I can't change database. That's all, thank you.