docs/si/unet/index.html
[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/unet/ init.py)
මෙයකඩදාසි වලින් U-Net ආකෘතිය ක්රියාත්මක කිරීම, U-Net: ජෛව වෛද්ය රූප ඛණ්ඩනය සඳහා සංයුක්ත ජාල.
යූ-නෙට්ගිවිසුම්ගත මාර්ගයක් සහ පුළුල් මාර්ගයකින් සමන්විත වේ. හැකිලීමේ මාර්ගය යනු සංවහන ස්ථර සහ තටාක ස්ථර මාලාවක් වන අතර එහිදී විශේෂාංග සිතියමේ විභේදනය ක්රමයෙන් අඩු වේ. පුළුල් මාර්ගය ලක්ෂණය සිතියම යෝජනාව ක්රමයෙන් වැඩි ලක්වෙයි එහිදී දක්වා-නියැදීම් ස්ථර සහ සංවලිත ස්ථර මාලාවක් වේ.
පුළුල්කරන ලද මාවතේ සෑම පියවරකදීම වර්තමාන විශේෂාංග සිතියමට අනුකූල ගිවිසුම්ගත මාර්ගයෙන් අනුරූප විශේෂාංග සිතියම.
Carvana දත්ත කට්ටලය මත U-Net පුහුණු කරන අත්හදා බැලීමක් සඳහා පුහුණු කේතය මෙන්න.
27importtorch28importtorchvision.transforms.functional29fromtorchimportnn
සංකෝචනමාර්ගය හා පුළුල් මාර්ගය එක් එක් පියවර RelU සක්රිය විසින් අනුගමනය 3×3 convolutional ස්ථර දෙකක් ඇත.
යූ-නෙට්කඩදාසි වලදී ඔවුන් 0 පෑඩින් භාවිතා කළ නමුත් අවසාන විශේෂාංග සිතියම කැපූ නොවන පරිදි අපි 1 පෑඩින් භාවිතා කරමු.
32classDoubleConvolution(nn.Module):
in_channels ආදාන නාලිකා ගණනout_channels ප්රතිදාන නාලිකා ගණන වේ43def\_\_init\_\_(self,in\_channels:int,out\_channels:int):
48super().\_\_init\_\_()
පළමු 3×3 සංවිච්ඡුා ස්ථරය
51self.first=nn.Conv2d(in\_channels,out\_channels,kernel\_size=3,padding=1)52self.act1=nn.ReLU()
දෙවන 3×3 කැටි ගැසුණු ස්ථරය
54self.second=nn.Conv2d(out\_channels,out\_channels,kernel\_size=3,padding=1)55self.act2=nn.ReLU()
57defforward(self,x:torch.Tensor):
කැටිගැසුණු ස්ථර දෙක සහ සක්රිය කිරීම් යොදන්න
59x=self.first(x)60x=self.act1(x)61x=self.second(x)62returnself.act2(x)
කොන්ත්රාත්මාර්ගයේ සෑම පියවරක්ම 2×2 උපරිම තටාක තට්ටුවක් සහිත විශේෂාංග සිතියම පහළට සාම්පල කරයි.
65classDownSample(nn.Module):
73def\_\_init\_\_(self):74super().\_\_init\_\_()
උපරිමතටාක ස්ථරය
76self.pool=nn.MaxPool2d(2)
78defforward(self,x:torch.Tensor):79returnself.pool(x)
පුළුල්කිරීමේ මාවතේ සෑම පියවරක්ම සාම්පල මඟින් විශේෂාංග සිතියම 2×2 දක්වා-කැටි ගැසුමකින් යුක්ත වේ.
82classUpSample(nn.Module):
89def\_\_init\_\_(self,in\_channels:int,out\_channels:int):90super().\_\_init\_\_()
දක්වා-සංවහන
93self.up=nn.ConvTranspose2d(in\_channels,out\_channels,kernel\_size=2,stride=2)
95defforward(self,x:torch.Tensor):96returnself.up(x)
පුළුල්කරන ලද මාවතේ සෑම පියවරකදීම වර්තමාන විශේෂාංග සිතියමට අනුකූල ගිවිසුම්ගත මාර්ගයෙන් අනුරූප විශේෂාංග සිතියම.
99classCropAndConcat(nn.Module):
x පුළුල් කිරීමේ මාවතේ වත්මන් විශේෂාංග සිතියමcontracting_x ගිවිසුම්ගත මාර්ගයෙන් අනුරූප විශේෂාංග සිතියම106defforward(self,x:torch.Tensor,contracting\_x:torch.Tensor):
කොන්ත්රාත්මාර්ගයේ සිට වර්තමාන විශේෂාංග සිතියමේ ප්රමාණය දක්වා විශේෂාංග සිතියම වගා කරන්න
113contracting\_x=torchvision.transforms.functional.center\_crop(contracting\_x,[x.shape[2],x.shape[3]])
විශේෂාංගසිතියම් සංයුක්ත කරන්න
115x=torch.cat([x,contracting\_x],dim=1)
117returnx
120classUNet(nn.Module):
in_channels ආදාන රූපයේ නාලිකා ගණනout_channels ප්රති result ල විශේෂාංග සිතියමේ නාලිකා ගණන124def\_\_init\_\_(self,in\_channels:int,out\_channels:int):
129super().\_\_init\_\_()
කොන්ත්රාත්මාර්ගය සඳහා ද්විත්ව කැටි ගැසීමේ ස්ථර. සිට ආරම්භ වන සෑම පියවරකදීම විශේෂාංග ගණන දෙගුණ 64වේ.
133self.down\_conv=nn.ModuleList([DoubleConvolution(i,o)fori,oin134[(in\_channels,64),(64,128),(128,256),(256,512)]])
කොන්ත්රාත්මාර්ගය සඳහා නියැදි ස්ථර පහළට
136self.down\_sample=nn.ModuleList([DownSample()for\_inrange(4)])
අවමවිභේදනයේ (U පතුලේ) කැටි ගැස්වීමේ ස්ථර දෙක.
139self.middle\_conv=DoubleConvolution(512,1024)
පුළුල්මාර්ගය සඳහා නියැදි ස්ථර දක්වා. විශේෂාංග ගණන ඉහළට නියැදීමෙන් අඩකින් අඩු වේ.
143self.up\_sample=nn.ModuleList([UpSample(i,o)fori,oin144[(1024,512),(512,256),(256,128),(128,64)]])
පුළුල්මාර්ගය සඳහා ද්විත්ව කැටි ගැසුණු ස්ථර. ඔවුන්ගේ ආදානය වන්නේ වර්තමාන විශේෂාංග සිතියම සහ කොන්ත්රාත් මාර්ගයෙන් විශේෂාංග සිතියම සංයුක්ත කිරීමයි. එබැවින් ආදාන විශේෂාංග ගණන ඉහළ නියැදීම් වලින් විශේෂාංග ගණන දෙගුණයක් වේ.
149self.up\_conv=nn.ModuleList([DoubleConvolution(i,o)fori,oin150[(1024,512),(512,256),(256,128),(128,64)]])
පුළුල්මාර්ගය සඳහා බෝග හා concatenate ස්ථර.
152self.concat=nn.ModuleList([CropAndConcat()for\_inrange(4)])
ප්රතිදානයනිෂ්පාදනය 1×1 කිරීම සඳහා අවසාන කැටි ගැසුණු ස්ථරය
154self.final\_conv=nn.Conv2d(64,out\_channels,kernel\_size=1)
x ආදාන රූපය156defforward(self,x:torch.Tensor):
පුළුල්කරන ලද මාර්ගය සමඟ පසුකාලීන සංකෝචනය සඳහා සංකෝචන මාර්ගයේ ප්රතිදානයන් එකතු කිරීම.
161pass\_through=[]
කොන්ත්රාත්මාර්ගය
163foriinrange(len(self.down\_conv)):
3×3 සංකීර්ණ ස්ථර දෙකක්
165x=self.down\_conv[i](x)
ප්රතිදානයඑකතු කරන්න
167pass\_through.append(x)
පහළ-නියැදිය
169x=self.down\_sample[i](x)
යූ-නෙට්පතුලේ 3×3 සංයුක්ත ස්ථර දෙකක්
172x=self.middle\_conv(x)
පුළුල්මාර්ගය
175foriinrange(len(self.up\_conv)):
ඉහළනියැදිය
177x=self.up\_sample[i](x)
කොන්ත්රාත්මාර්ගයේ ප්රතිදානය සංයුක්ත කරන්න
179x=self.concat[i](x,pass\_through.pop())
3×3 සංකීර්ණ ස්ථර දෙකක්
181x=self.up\_conv[i](x)
අවසාන 1×1 කැටි ගැසුණු ස්ථරය
184x=self.final\_conv(x)
187returnx