ჩვენ ადრე ვნახეთ, რომ ნერვული ქსელები საკმაოდ კარგად ასრულებენ სურათებს და ერთ ფენიანი პერცეპტრონიც კი შეუძლია გონივრული სიზუსტით ამოიცნოს ხელნაწერი ციფრები MNIST მონაცემთა ნაკრებიდან. თუმცა, MNIST მონაცემთა ნაკრები ძალიან განსაკუთრებულია და ყველა ციფრი ცენტრშია გამოსახულების შიგნით, რაც ამოცანას ამარტივებს.
რეალურ ცხოვრებაში, ჩვენ გვინდა შევძლოთ სურათზე ობიექტების ამოცნობა, მიუხედავად მათი ზუსტი მდებარეობისა სურათზე. კომპიუტერული ხედვა განსხვავდება ზოგადი კლასიფიკაციისგან, რადგან როდესაც ჩვენ ვცდილობთ ვიპოვოთ გარკვეული ობიექტი სურათზე, ჩვენ სკანირებთ სურათს, ვეძებთ კონკრეტულ შაბლონებს და მათ კომბინაციებს. მაგალითად, როდესაც ვეძებთ კატას, ჩვენ ჯერ შეიძლება მოვძებნოთ ჰორიზონტალური ხაზები, რომლებსაც შეუძლიათ შექმნან ულვაში, შემდეგ კი ულვაშების გარკვეულმა კომბინაციამ შეიძლება გვითხრას, რომ ეს სინამდვილეში კატის სურათია. მნიშვნელოვანია გარკვეული შაბლონების შედარებითი პოზიცია და არსებობა და არა მათი ზუსტი პოზიცია სურათზე.
შაბლონების ამოსაღებად, ჩვენ გამოვიყენებთ კონვოლუციური ფილტრების ცნებას. მაგრამ პირველ რიგში, მოდით ჩატვირთოთ ყველა დამოკიდებულება და ფუნქცია, რომელიც განვსაზღვრეთ წინა ერთეულებში. ჩვენ ასევე შემოვიტანთ tfcv დამხმარე ბიბლიოთეკას, რომელიც შეიცავს რამდენიმე სასარგებლო ფუნქციას, რომელიც არ გვინდა განვსაზღვროთ ამ ნოუთბუქში, რომ კოდი მოკლე და სუფთა იყოს.
იტვირთება…ამ მაგალითში ჩვენ ყურადღებას გავამახვილებთ MNIST მონაცემთა ბაზაზე, რომელიც ადრე ვნახეთ, და გამოსახულების კლასიფიკაციაზე. ჩვენ დავიწყებთ მონაცემთა ნაკრების ჩატვირთვით Keras-ის ჩაშენებული ფუნქციების გამოყენებით.
იტვირთება…კონვოლუციური ფილტრები
კონვოლუციური ფილტრები არის პატარა ფანჯრები, რომლებიც გადადიან გამოსახულების თითოეულ პიქსელზე და ითვლის მეზობელი პიქსელების საშუალო შეწონილებას.
ისინი განისაზღვრება წონის კოეფიციენტების მატრიცებით. მოდით ვნახოთ ორი განსხვავებული კონვოლუციური ფილტრის გამოყენების მაგალითები ჩვენს MNIST ხელნაწერ ციფრებზე:
იტვირთება…გამოტანა


პირველ ფილტრს ეწოდება ვერტიკალური კიდეების ფილტრი და ის განისაზღვრება შემდეგი მატრიცით: $$ \მარცხნივ( \დაწყება{მატრიცა} -1 & 0 & 1 \ კრ -1 & 0 & 1 \ კრ -1 & 0 & 1 \ კრ \დასრულება{მატრიცა} \ მარჯვენა) $$ როდესაც ეს ფილტრი გადადის შედარებით ერთგვაროვან პიქსელის ველზე, ყველა მნიშვნელობა ემატება 0-მდე. თუმცა, როდესაც ის ხვდება ვერტიკალურ კიდეს სურათზე, წარმოიქმნება მაღალი მწვერვალის მნიშვნელობა. სწორედ ამიტომ, ზემოთ მოცემულ სურათებზე შეგიძლიათ იხილოთ ვერტიკალური კიდეები, რომლებიც წარმოდგენილია მაღალი და დაბალი მნიშვნელობებით, ხოლო ჰორიზონტალური კიდეები არის საშუალოდ.
საპირისპირო ხდება, როდესაც ვაყენებთ ჰორიზონტალურ კიდეების ფილტრს - ჰორიზონტალური ხაზები ძლიერდება, ხოლო ვერტიკალური საშუალოდ.
კლასიკურ კომპიუტერულ ხედვაში მრავალი ფილტრი გამოიყენებოდა სურათზე ფუნქციების შესაქმნელად, რომლებიც შემდეგ გამოიყენებოდა მანქანური სწავლების ალგორითმის მიერ კლასიფიკატორის შესაქმნელად. ეს ფილტრები ფაქტობრივად ჰგავს ნერვულ სტრუქტურებს, რომლებიც ხელმისაწვდომია ზოგიერთი ცხოველის მხედველობის სისტემაში.

თუმცა, ღრმა სწავლისას ჩვენ ვაშენებთ ქსელებს, რომლებიც ვისწავლიან საუკეთესო კონვოლუციურ ფილტრებს კლასიფიკაციის პრობლემის გადასაჭრელად. ამისათვის ჩვენ წარმოგიდგენთ კონვოლუციურ ფენებს.
კოვოლუციური ფენები
იმისათვის, რომ კონვოლუციური ფენის წონები გაწვრთნილი გავხადოთ, ჩვენ როგორმე უნდა შევამციროთ გამოსახულებაზე კონვოლუციური ფილტრის ფანჯრის გამოყენების პროცესი მატრიცულ ოპერაციებამდე, რომელიც შემდეგ შეიძლება დაექვემდებაროს უკან გავრცელების ვარჯიშს. ამისათვის ჩვენ ვიყენებთ ჭკვიან მატრიცის ტრანსფორმაციას, რომელსაც ვუწოდებთ im2col.
დავუშვათ, გვაქვს პატარა სურათი $\mathbf{x}$, შემდეგი პიქსელებით:
$$ \mathbf{x} = \მარცხნივ( \begin{მასივი}{ccccc} a & b & c & d & e \ f & g & h & i & j \ k & l & m & n & o \ p & q & r & s & t \ u & v & w & x & y \ \დასრულება{მასივი} \ მარჯვენა) $$
და ჩვენ გვინდა გამოვიყენოთ ორი კონვერტაციის ფილტრი, შემდეგი წონებით: $$ W^{(i)} = \left(\ დასაწყისი{მასივი}{ccc} w^{(i)}{00} და w^{(i)}{01} და w^{(i)}{02} \ w^{(i)}{10} და w^{(i)}{11} და w^{(i)}{12} \ w^{(i)}{20} და w^{(i)}{21} და w^{(i)}_{22} \ \end{მასივი}\მარჯვნივ) $$
კონვოლუციის გამოყენებისას, შედეგის პირველი პიქსელი მიიღება ელემენტის გამრავლებით $\left(\begin{მასივი}{ccc} a & b & c \ f & g & h \ k & l & m \ \end{მასივი}\right)$ და $W^{(i)}$, მეორე ელემენტი - $\left(\begin{მასივი}{ccc}-ზე გამრავლებით b & c & d \ g & h & i \ l & m & n \ \end{მასივი}\right)$ $W^{(i)}$-ით და ა.შ.
ამ პროცესის ფორმალიზებისთვის, მოდით გამოვყოთ ორიგინალური სურათის $3\times3$ ფრაგმენტი შემდეგ მატრიცაში:
$$ \mathrm{im2col}(x) = \left[ \begin{მასივი}{cccccc} a & b & \ldots & g & \ldots & m \ b & c & \ldots & h & \ldots & n \ c & d & \ldots & i & \ldots & o \ f & g & \ldots & l & \ldots & r \ g & h & \ldots & m & \ldots & s \ h & i & \ldots & n & \ldots & t \ k & l & \ldots & q & \ldots & w \ l & m & \ldots & r & \ldots & x \ m & n & \ldots & s & \ldots & y \ \დასრულება{მასივი} \მარჯვნივ] $$
ამ მატრიცის თითოეული სვეტი შეესაბამება ორიგინალური სურათის თითოეულ $3\times3$ ქვერეგიონს. ახლა, კონვოლუციის შედეგის მისაღებად, ჩვენ უბრალოდ უნდა გავამრავლოთ ეს მატრიცა მატრიცზე ან წონაზე $$ \mathbf{W} = \მარცხნივ[ \begin{მასივი}{cccccccc} w^{(0)}{00} და w^{(0)}{01} და w^{(0)}{02} და w^{(0)}{10} და w^{(0)}{11} & \ldots & w^{(0)}{21} და w^{(0)}{2} \ w^{(1)}{00} და w^{(1)}{01} და w^{(1)}{02} და w^{(1)}{10} და w^{(1)}{11} & \ldots & w^{(1)}{21} და w^{(1)}{2} \ \დასრულება{მასივი} \მარჯვნივ] $$ (ამ მატრიცის თითოეული მწკრივი შეიცავს $i$-th ფილტრის წონას, გაბრტყელებულია ერთ მწკრივად)
So the application of a convolution filter to the original image can be replaced by matrix multiplication, which we already know how to handle using back prop: $$ C(x) = W\ჯერ\mathbf{im2col}(x) $$
კონვოლუციური ფენები განისაზღვრება Conv2d კლასის გამოყენებით. ჩვენ უნდა დავაკონკრეტოთ შემდეგი:
filters- გამოსაყენებელი ფილტრების რაოდენობა. ჩვენ გამოვიყენებთ 9 განსხვავებულ ფილტრს, რაც ქსელს მისცემს უამრავ შესაძლებლობას გამოიკვლიოს რომელი ფილტრები მუშაობს საუკეთესოდ ჩვენი სცენარისთვის.kernel_sizeარის მოცურების ფანჯრის ზომა. ჩვეულებრივ გამოიყენება 3x3 ან 5x5 ფილტრები.
უმარტივესი CNN შეიცავს ერთ კონვოლუციურ ფენას. 28x28 შეყვანის ზომის გათვალისწინებით, ცხრა 5x5 ფილტრის გამოყენების შემდეგ მივიღებთ 24x24x9 ტენსორს. სივრცითი განზომილება უფრო მცირეა, რადგან არის მხოლოდ 24 პოზიცია, სადაც 5 სიგრძის მოცურების ინტერვალი შეიძლება მოერგოს 28 პიქსელს).
After convolution, we flatten 24x24x9 tensor into one vector of size 5184, and then add linear layer, to produce 10 classes. ჩვენ ასევე ვიყენებთ relu აქტივაციის ფუნქციას შრეებს შორის.
იტვირთება…გამოტანა
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 24, 24, 9) 234
flatten (Flatten) (None, 5184) 0
dense (Dense) (None, 10) 51850
=================================================================
Total params: 52,084
Trainable params: 52,084
Non-trainable params: 0
_________________________________________________________________
თქვენ ხედავთ, რომ ეს ქსელი შეიცავს დაახლოებით 50k სასწავლო პარამეტრს, შედარებით დაახლოებით 80k სრულად დაკავშირებულ მრავალ ფენიან ქსელებში. ეს საშუალებას გვაძლევს მივაღწიოთ კარგ შედეგებს თუნდაც მცირე მონაცემთა ნაკრებებზე, რადგან კონვოლუციური ქსელები ბევრად უკეთესად განზოგადება.
შენიშვნა: უმეტეს პრაქტიკულ შემთხვევებში, ჩვენ გვინდა გამოვიყენოთ კონვოლუციური ფენები ფერად სურათებზე. ამრიგად,
Conv2Dფენა მოელის, რომ შეყვანა იქნება $W\ჯერ H\ჯერ C$, სადაც $W$ და $H$ არის გამოსახულების სიგანე და სიმაღლე, ხოლო $C$ არის ფერადი არხების რაოდენობა. ნაცრისფერი ფერის გამოსახულებებისთვის, ჩვენ გვჭირდება იგივე ფორმა $C=1$.
ჩვენ უნდა შევცვალოთ ჩვენი მონაცემები ტრენინგის დაწყებამდე:
იტვირთება…გამოტანა
Epoch 1/5
1875/1875 [==============================] - 15s 7ms/step - loss: 0.2099 - acc: 0.9410 - val_loss: 0.0879 - val_acc: 0.9735
Epoch 2/5
1875/1875 [==============================] - 13s 7ms/step - loss: 0.0858 - acc: 0.9753 - val_loss: 0.0682 - val_acc: 0.9791
Epoch 3/5
1875/1875 [==============================] - 13s 7ms/step - loss: 0.0665 - acc: 0.9808 - val_loss: 0.0553 - val_acc: 0.9829
Epoch 4/5
1875/1875 [==============================] - 15s 8ms/step - loss: 0.0582 - acc: 0.9835 - val_loss: 0.0513 - val_acc: 0.9835
Epoch 5/5
1875/1875 [==============================] - 14s 8ms/step - loss: 0.0527 - acc: 0.9847 - val_loss: 0.0503 - val_acc: 0.9833
იტვირთება…გამოტანა

როგორც ხედავთ, ჩვენ შეგვიძლია მივაღწიოთ უფრო მაღალ სიზუსტეს და ბევრად უფრო სწრაფად (ეპოქების რაოდენობის მიხედვით), წინა ერთეულის სრულად დაკავშირებულ ქსელებთან შედარებით. თუმცა, ტრენინგი თავისთავად მეტ რესურსს მოითხოვს და შეიძლება უფრო ნელი იყოს არა GPU კომპიუტერებზე.
კონვოლუციური ფენების ვიზუალიზაცია
ჩვენ ასევე შეგვიძლია ვიზუალურად წარმოვადგინოთ ჩვენი გაწვრთნილი კონვოლუციური ფენების წონა, რათა ვცადოთ უფრო მეტი გაგება, თუ რა ხდება:
იტვირთება…გამოტანა

თქვენ ხედავთ, რომ ზოგიერთი ფილტრი გამოიყურება ისე, რომ მათ შეუძლიათ ამოიცნონ ზოგიერთი ირიბი დარტყმა, ზოგი კი საკმაოდ შემთხვევით გამოიყურება.
ამოცანა: ივარჯიშეთ იგივე ქსელი 3x3 ფილტრებით და წარმოაჩინეთ ისინი. ხედავთ უფრო ნაცნობ ნიმუშებს?
მრავალ ფენიანი CNN და გაერთიანების ფენები
პირველი კონვოლუციური ფენები ეძებს პრიმიტიულ შაბლონებს, როგორიცაა ჰორიზონტალური ან ვერტიკალური ხაზები, მაგრამ ჩვენ შეგვიძლია გამოვიყენოთ შემდგომი კონვოლუციური ფენები მათ თავზე უფრო მაღალი დონის შაბლონების მოსაძებნად, როგორიცაა პრიმიტიული ფორმები. შემდეგ უფრო კონვოლუციურ ფენებს შეუძლიათ გააერთიანონ ეს ფორმები სურათის ზოგიერთ ნაწილში, საბოლოო ობიექტამდე, რომლის კლასიფიკაციასაც ვცდილობთ.
ამის გაკეთებისას ჩვენ ასევე შეგვიძლია გამოვიყენოთ ერთი ხრიკი: სურათის სივრცითი ზომის შემცირება. მას შემდეგ რაც აღმოვაჩინეთ, რომ არის ჰორიზონტალური სტოკი მოცურების 3x3 ფანჯარაში, არც ისე მნიშვნელოვანია, რომელ პიქსელზე მოხდა ის. ამრიგად, ჩვენ შეგვიძლია "შემცირდეს" გამოსახულების ზომა, რაც კეთდება ერთ-ერთი გაერთიანების ფენის გამოყენებით:
- Average Pooling იღებს მოცურების ფანჯარას (მაგალითად, 2x2 პიქსელი) და ითვლის საშუალო მნიშვნელობებს ფანჯარაში
- Max Pooling ცვლის ფანჯარას მაქსიმალური მნიშვნელობით. მაქსიმალური გაერთიანების იდეა არის გარკვეული ნიმუშის არსებობის გამოვლენა მოცურების ფანჯარაში.
ამრიგად, ტიპიურ CNN-ში იქნება რამდენიმე კონვოლუციური ფენა, მათ შორის ფენების გაერთიანებით, რათა შემცირდეს გამოსახულების ზომები. ჩვენ ასევე გავზრდით ფილტრების რაოდენობას, რადგან შაბლონები უფრო დახვეწილი ხდება - უფრო სავარაუდოა საინტერესო კომბინაციები, რომლებიც უნდა ვეძებოთ.

სივრცითი ზომების შემცირებისა და ფუნქციების/ფილტრების ზომების გაზრდის გამო, ამ არქიტექტურას ასევე უწოდებენ პირამიდის არქიტექტურას.
იტვირთება…გამოტანა
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 24, 24, 10) 260
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 12, 12, 10) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 8, 8, 20) 5020
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 4, 4, 20) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 320) 0
_________________________________________________________________
dense_1 (Dense) (None, 10) 3210
=================================================================
Total params: 8,490
Trainable params: 8,490
Non-trainable params: 0
_________________________________________________________________
ყურადღება მიაქციეთ, რომ ტრეინინგადი პარამეტრების რაოდენობა (~8.5K) მკვეთრად მცირეა, ვიდრე წინა შემთხვევებში. ეს იმიტომ ხდება, რომ კონვოლუციურ ფენებს ზოგადად აქვთ რამდენიმე პარამეტრი და გამოსახულების განზომილება საბოლოო მკვრივი ფენის გამოყენებამდე მნიშვნელოვნად მცირდება. პარამეტრების მცირე რაოდენობა დადებითად აისახება ჩვენს მოდელებზე, რადგან ეს ხელს უწყობს მონაცემთა გადაჭარბების თავიდან აცილებას მონაცემთა მცირე ზომის ზომებზეც კი.
იტვირთება…გამოტანა
Epoch 1/5
1875/1875 [==============================] - 6s 3ms/step - loss: 0.0723 - acc: 0.9780 - val_loss: 0.0423 - val_acc: 0.9861
Epoch 2/5
1875/1875 [==============================] - 6s 3ms/step - loss: 0.0523 - acc: 0.9842 - val_loss: 0.0425 - val_acc: 0.9866
Epoch 3/5
1875/1875 [==============================] - 6s 3ms/step - loss: 0.0448 - acc: 0.9868 - val_loss: 0.0403 - val_acc: 0.9865
Epoch 4/5
1875/1875 [==============================] - 6s 3ms/step - loss: 0.0383 - acc: 0.9886 - val_loss: 0.0323 - val_acc: 0.9888
Epoch 5/5
1875/1875 [==============================] - 6s 3ms/step - loss: 0.0338 - acc: 0.9895 - val_loss: 0.0331 - val_acc: 0.9896
იტვირთება…გამოტანა

რაც თქვენ ალბათ უნდა დააკვირდეთ არის ის, რომ ჩვენ შეგვიძლია მივაღწიოთ უფრო მაღალ სიზუსტეს, ვიდრე მხოლოდ ერთი ფენით და ბევრად უფრო სწრაფად, ეპოქების რაოდენობის მიხედვით - მხოლოდ 1 ან 2 ეპოქით. ეს ნიშნავს, რომ დახვეწილი ქსელის არქიტექტურას გაცილებით ნაკლები მონაცემები სჭირდება იმის გასარკვევად, თუ რა ხდება და ჩვენი სურათებიდან ზოგადი შაბლონების ამოსაღებად. თუმცა, ტრენინგსაც უფრო მეტი დრო სჭირდება და GPU-ს სჭირდება.
თამაში რეალურ სურათებთან CIFAR-10 მონაცემთა ნაკრებიდან
მიუხედავად იმისა, რომ ჩვენი ხელნაწერი ციფრების ამოცნობის პრობლემა შეიძლება სათამაშოს პრობლემად ჩანდეს, ახლა ჩვენ მზად ვართ გავაკეთოთ უფრო სერიოზული. მოდით გამოვიკვლიოთ სხვადასხვა ობიექტების სურათების უფრო გაფართოებული მონაცემთა ნაკრები, სახელწოდებით CIFAR-10. იგი შეიცავს 60k 32x32 სურათს, დაყოფილია 10 კლასად.
იტვირთება…იტვირთება…გამოტანა

A well-known architecture for CIFAR-10 is called ლენეტი, and has been proposed by Yann LeCun. It follows the same principles as we have outlined above, the main difference being 3 input color channels instead of 1.
იტვირთება…გამოტანა
Model: "sequential_3"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_8 (Conv2D) (None, 28, 28, 6) 456
_________________________________________________________________
max_pooling2d_6 (MaxPooling2 (None, 14, 14, 6) 0
_________________________________________________________________
conv2d_9 (Conv2D) (None, 10, 10, 16) 2416
_________________________________________________________________
max_pooling2d_7 (MaxPooling2 (None, 5, 5, 16) 0
_________________________________________________________________
flatten_3 (Flatten) (None, 400) 0
_________________________________________________________________
dense_9 (Dense) (None, 120) 48120
_________________________________________________________________
dense_10 (Dense) (None, 84) 10164
_________________________________________________________________
dense_11 (Dense) (None, 10) 850
=================================================================
Total params: 62,006
Trainable params: 62,006
Non-trainable params: 0
_________________________________________________________________
ამ ქსელის სწორად მომზადებას მნიშვნელოვანი დრო დასჭირდება და სასურველია განხორციელდეს GPU-ზე ჩართული გამოთვლებით.
იტვირთება…გამოტანა
Epoch 1/10
1563/1563 [==============================] - 6s 4ms/step - loss: 1.6205 - acc: 0.4033 - val_loss: 1.4287 - val_acc: 0.4743
Epoch 2/10
1563/1563 [==============================] - 6s 4ms/step - loss: 1.3435 - acc: 0.5154 - val_loss: 1.2804 - val_acc: 0.5412
Epoch 3/10
1563/1563 [==============================] - 5s 3ms/step - loss: 1.2225 - acc: 0.5645 - val_loss: 1.2164 - val_acc: 0.5600
Epoch 4/10
1563/1563 [==============================] - 5s 4ms/step - loss: 1.1360 - acc: 0.5957 - val_loss: 1.1918 - val_acc: 0.5768
Epoch 5/10
1563/1563 [==============================] - 5s 3ms/step - loss: 1.0776 - acc: 0.6178 - val_loss: 1.1451 - val_acc: 0.5906
Epoch 6/10
1563/1563 [==============================] - 5s 4ms/step - loss: 1.0228 - acc: 0.6370 - val_loss: 1.1178 - val_acc: 0.6098
Epoch 7/10
1563/1563 [==============================] - 5s 4ms/step - loss: 0.9769 - acc: 0.6544 - val_loss: 1.0793 - val_acc: 0.6202
Epoch 8/10
1563/1563 [==============================] - 5s 3ms/step - loss: 0.9340 - acc: 0.6711 - val_loss: 1.0783 - val_acc: 0.6271
Epoch 9/10
1563/1563 [==============================] - 5s 4ms/step - loss: 0.8983 - acc: 0.6824 - val_loss: 1.0952 - val_acc: 0.6203
Epoch 10/10
1563/1563 [==============================] - 6s 4ms/step - loss: 0.8648 - acc: 0.6939 - val_loss: 1.1103 - val_acc: 0.6217
იტვირთება…გამოტანა

სიზუსტე, რომლის მიღწევაც ჩვენ შევძელით ვარჯიშის რამდენიმე ეპოქით, არც ისე დიდი ჩანს. თუმცა, გახსოვდეთ, რომ ბლინგის გამოცნობა მხოლოდ 10%-იან სიზუსტეს მოგვცემს და რომ ჩვენი პრობლემა რეალურად ბევრად უფრო რთულია, ვიდრე MNIST ციფრული კლასიფიკაცია. ასეთ მოკლე ვარჯიშში 50%-ზე მეტი სიზუსტის მიღწევა კარგი მიღწევაა.
Takeaways
ამ განყოფილებაში ჩვენ ვისწავლეთ კომპიუტერული ხედვის ნერვული ქსელების მთავარი კონცეფცია - კონვოლუციური ქსელები. რეალური არქიტექტურები, რომლებიც აძლიერებენ გამოსახულების კლასიფიკაციას, ობიექტების ამოცნობას და სურათების გენერირების ქსელებსაც კი, ყველა დაფუძნებულია CNN-ზე, მხოლოდ მეტი ფენით და დამატებითი სასწავლო ხრიკებით.