የጄዲ ኮንቮሉሽን ኔትወርኮችን የመቀነስ ዘዴ - መቁረጥ

የጄዲ ኮንቮሉሽን ኔትወርኮችን የመቀነስ ዘዴ - መቁረጥ

ከአንተ በፊት ነገሮችን የማወቅ ተግባር ነው። ቅድሚያ የሚሰጠው - የስራ ፍጥነት ተቀባይነት ባለው ትክክለኛነት. የYOLOv3 አርክቴክቸር ወስደህ የበለጠ አሰልጥነህ። ትክክለኛነት (mAp75) ከ0.95 በላይ ነው። ነገር ግን የሩጫው ፍጥነት አሁንም ዝቅተኛ ነው. ክፋት።

ዛሬ መጠኑን እናልፋለን። እና በመቁረጫው ስር, ግምት ውስጥ ያስገቡ ሞዴል መከርከም - ትክክለኛነትን ሳያሳጣ ኢንፈረንስ ለማፋጠን ተደጋጋሚ የአውታረ መረብ ክፍሎችን መቁረጥ። በግልጽ - የት, ምን ያህል እና እንዴት እንደሚቆረጥ. በእጅ እንዴት እንደሚሰራ እና የት አውቶማቲክ ማድረግ እንደሚችሉ እንወቅ። መጨረሻ ላይ - በ keras ላይ ማጠራቀሚያ.

መግቢያ

በመጨረሻው የሥራ ቦታዬ ፣ በፔር ውስጥ ማክሮስኮፕ ፣ አንድ ልማድ አገኘሁ - የስልተ ቀመሮችን የአፈፃፀም ጊዜ ሁል ጊዜ መከታተል። እና የአውታረ መረቡ የማስኬጃ ጊዜ ሁል ጊዜ በቂ በሆነ ማጣሪያ በኩል መረጋገጥ አለበት። ብዙውን ጊዜ በምርት ውስጥ ያለው ዘመናዊ ይህንን ማጣሪያ አያልፍም ፣ ይህም ወደ መከርከም መራኝ።

መግረዝ በ ውስጥ የተብራራ የቆየ ርዕስ ነው። የስታንፎርድ ትምህርቶች በ2017 ዓ.ም. ዋናው ሃሳብ የተለያዩ አንጓዎችን በማንሳት ትክክለኛነትን ሳያጡ የሰለጠነውን ኔትወርክ መጠን መቀነስ ነው. አሪፍ ይመስላል፣ ግን ስለ አጠቃቀሙ ብዙም አልሰማም። ምናልባት, በቂ አተገባበር የለም, የሩሲያ ቋንቋ ጽሑፎች የሉም, ወይም በቀላሉ ሁሉም ሰው የመግረዝ እውቀትን ያስባል እና ዝም ይላል.
ግን ለመበተን

ወደ ባዮሎጂ እይታ

ከባዮሎጂ የሚመጡ ሀሳቦች ወደ ጥልቅ ትምህርት ሲመለከቱ ወድጄዋለሁ። እነሱ፣ ልክ እንደ ዝግመተ ለውጥ፣ እምነት ሊጣልባቸው ይችላል (ReLU በጣም ተመሳሳይ መሆኑን ያውቃሉ በአንጎል ውስጥ የነርቭ ሴሎች የማግበር ተግባር?)

የሞዴል መከርከም ሂደት ለባዮሎጂ ቅርብ ነው። እዚህ ያለው የአውታረ መረብ ምላሽ ከአንጎል ፕላስቲክ ጋር ሊመሳሰል ይችላል. በመጽሐፉ ውስጥ ሁለት አስደሳች ምሳሌዎች አሉ። ኖርማን ዶይጅ:

  1. አንድ ግማሽ ብቻ የተወለደችው ሴት አንጎል የጎደለውን ግማሽ ተግባራት ለማከናወን እራሱን እንደገና አዘጋጀ
  2. ሰውዬው ለዕይታ ተጠያቂ የሆነውን የአንጎሉን ክፍል በጥይት ተኩሷል። ከጊዜ በኋላ, ሌሎች የአንጎል ክፍሎች እነዚህን ተግባራት ተቆጣጠሩ. (ለመድገም አይሞክሩ)

ስለዚህ ከእርስዎ ሞዴል, አንዳንድ ደካማ ውዝግቦችን መቁረጥ ይችላሉ. በአስጊ ሁኔታ ውስጥ, የተቀሩት እሽጎች የተቆራረጡትን ለመተካት ይረዳሉ.

የዝውውር ትምህርት ይወዳሉ ወይንስ ከባዶ ይማራሉ?

አማራጭ ቁጥር አንድ. በዮሎቭ3 ላይ የማስተላለፊያ ትምህርትን ትጠቀማለህ። ሬቲና፣ ማስክ-RCNN ወይም U-Net ግን ብዙ ጊዜ፣ እንደ COCO ያሉ 80 የቁስ ክፍሎችን መለየት አያስፈልገንም። በእኔ ልምምድ ሁሉም ነገር በ1-2 ክፍሎች የተገደበ ነው. ለ 80 ክፍሎች ያለው አርክቴክቸር እዚህ ብዙ ነው ብሎ መገመት ይቻላል. አርክቴክቸር መቀነስ አለበት የሚል ሀሳብ ይነሳል። ከዚህም በላይ ቀደም ሲል የሰለጠኑ ክብደቶችን ሳላጠፋ ይህን ማድረግ እፈልጋለሁ.

አማራጭ ቁጥር ሁለት. ምናልባት ብዙ ዳታ እና የኮምፒውተር ግብዓቶች አሉዎት፣ ወይም ልዕለ-ብጁ አርክቴክቸር ብቻ ያስፈልግዎታል። ምንም ማለት አይደለም. ግን ኔትወርኩን ከባዶ እየተማርክ ነው። የተለመደው ቅደም ተከተል - የውሂብ አወቃቀሩን እንመለከታለን, ከኃይል አኳያ ከመጠን በላይ የሆነ ስነ-ህንፃን እንመርጣለን እና ማቋረጥን ከስልጠና እንገፋፋለን. ካርል 0.6 መቋረጦችን አየሁ።

በሁለቱም ሁኔታዎች አውታረ መረቡ ሊቀንስ ይችላል. አስተዋወቀ። አሁን ምን ዓይነት የግርዛት መግረዝ ምን እንደሆነ ለማወቅ እንሞክር

አጠቃላይ ስልተ ቀመር

ውዝግቦችን ማስወገድ እንደምንችል ወስነናል። በጣም ቀላል ይመስላል:

የጄዲ ኮንቮሉሽን ኔትወርኮችን የመቀነስ ዘዴ - መቁረጥ

ማንኛውንም ማወዛወዝ ማስወገድ ለአውታረ መረቡ አስጨናቂ ነው, ይህም አብዛኛውን ጊዜ ወደ አንዳንድ የስህተት መጨመር ያመራል. በአንድ በኩል፣ ይህ የስህተት መጨመር ውዝግቦችን እንዴት በትክክል እንደምናስወግድ አመላካች ነው (ለምሳሌ ትልቅ ጭማሪ ስህተት እየሰራን መሆኑን ያሳያል)። ነገር ግን ትንሽ ጭማሪ በጣም ተቀባይነት ያለው እና ብዙ ጊዜ የሚጠፋው በቀጣይ የብርሃን መልሶ ማሰልጠኛ በትንሽ LR ነው። የመልሶ ማሰልጠኛ ደረጃ መጨመር፡-

የጄዲ ኮንቮሉሽን ኔትወርኮችን የመቀነስ ዘዴ - መቁረጥ

አሁን ትምህርታችንን መቼ ማቆም እንደምንፈልግ ማወቅ አለብን<->መግረዝ ሉፕ። አውታረ መረቡን በተወሰነ መጠን መቀነስ እና ፍጥነትን (ለምሳሌ ለሞባይል መሳሪያዎች) ፍጥነት መቀነስ ስንፈልግ እዚህ ላይ ያልተለመዱ አማራጮች ሊኖሩ ይችላሉ። ይሁን እንጂ በጣም የተለመደው አማራጭ ስህተቱ ከሚፈቀደው በላይ እስኪሆን ድረስ ዑደቱን መቀጠል ነው. ሁኔታ መጨመር፡-

የጄዲ ኮንቮሉሽን ኔትወርኮችን የመቀነስ ዘዴ - መቁረጥ

ስለዚህ, አልጎሪዝም ግልጽ ይሆናል. የሚወገዱትን ውዝግቦች እንዴት እንደሚወስኑ ለማወቅ ይቀራል.

የተወገዱ ቅርቅቦችን በማግኘት ላይ

አንዳንድ ውዝግቦችን ማስወገድ አለብን። ወደፊት መጣደፍ እና ማንኛውንም "መተኮስ" መጥፎ ሀሳብ ነው፣ ምንም እንኳን ቢሰራም። ነገር ግን ጭንቅላት ስላለ ለማሰብ እና ለመሰረዝ "ደካማ" ውዝግቦችን ለመምረጥ መሞከር ትችላለህ. በርካታ አማራጮች አሉ፡-

  1. ዝቅተኛው L1-መለኪያ ወይም ዝቅተኛ_መግኒቱድ_መግረዝ. ከትንሽ ክብደቶች ጋር የሚጋጭ ሀሳብ ለመጨረሻው ውሳኔ ትንሽ አስተዋጽኦ ያደርጋል
  2. አነስተኛው L1 መለኪያ በአማካኝ እና በመደበኛ ልዩነት የተሰጠው። የስርጭቱን ባህሪ ግምት እናሟላለን።
  3. በመጨረሻው ትክክለኛነት ላይ አነስተኛ ተጽዕኖ ያላቸውን የኮንቮሉሽን ጭንብል እና ማግለል።. ትርጉም የለሽ ውዝግቦች የበለጠ ትክክለኛ ትርጓሜ፣ ግን ጊዜ እና ሀብት የሚወስድ።
  4. ሌላ

እያንዳንዳቸው አማራጮች በህይወት የመኖር መብት እና የአተገባበር ባህሪያት አላቸው. እዚህ ከትንሽ L1-መለኪያ ጋር ያለውን ልዩነት እንመለከታለን

ለ YOLOv3 በእጅ ሂደት

የመጀመሪያው አርክቴክቸር ቀሪ ብሎኮችን ይዟል። ነገር ግን ለጥልቅ ኔትወርኮች የቱንም ያህል አሪፍ ቢሆኑም በጥቂቱ ጣልቃ ይገቡብናል። ችግሩ በእነዚህ ንብርብሮች ውስጥ ከተለያዩ ኢንዴክሶች ጋር እርቅ መሰረዝ አለመቻል ነው፡-

የጄዲ ኮንቮሉሽን ኔትወርኮችን የመቀነስ ዘዴ - መቁረጥ

ስለዚህ ፣ እርቅን በነፃ የምናስወግድባቸውን ንብርብሮች እንመርጣለን-

የጄዲ ኮንቮሉሽን ኔትወርኮችን የመቀነስ ዘዴ - መቁረጥ

አሁን የስራ ዑደት እንገንባ፡-

  1. ማነቃቂያዎችን በመስቀል ላይ
  2. ምን ያህል እንደሚቆረጥ ማወቅ
  3. ቆርጦ ማውጣት
  4. በLR=10e-1 4 ዘመናትን መማር
  5. በመሞከር ላይ

ጥቅልሎችን ማውረድ በተወሰነ ደረጃ ምን ያህል ማስወገድ እንደምንችል ለመገምገም ጠቃሚ ነው። ምሳሌዎችን ይስቀሉ፡

የጄዲ ኮንቮሉሽን ኔትወርኮችን የመቀነስ ዘዴ - መቁረጥ

በሁሉም ቦታ ማለት ይቻላል 5% convolutions በጣም ዝቅተኛ L1-ኖርም እንዳላቸው እና እኛ እነሱን ማስወገድ እንደሚችሉ እናያለን. በእያንዳንዱ ደረጃ, እንዲህ ዓይነቱ ማራገፊያ ተደግሟል እና የትኞቹ ንብርብሮች እና ምን ያህል እንደሚቆረጡ ግምገማ ተዘጋጅቷል.

አጠቃላይ ሂደቱ በ4 ደረጃዎች (እዚህ እና በሁሉም ቦታ የ RTX 2060 ሱፐር ቁጥሮች) ጋር ይጣጣማሉ፡

Шаг ካርታ75 የመለኪያዎች ብዛት, ሚሊዮን የአውታረ መረብ መጠን፣ mb ከመጀመሪያው፣% የሩጫ ጊዜ፣ ms የመቁረጥ ሁኔታ
0 0.9656 60 241 100 180 -
1 0.9622 55 218 91 175 ከሁሉም 5%
2 0.9625 50 197 83 168 ከሁሉም 5%
3 0.9633 39 155 64 155 15% 400+ ጥቅሎች ላሉት ንብርብሮች
4 0.9555 31 124 51 146 10% 100+ ጥቅሎች ላሉት ንብርብሮች

አንድ አዎንታዊ ተጽእኖ በደረጃ 2 ላይ ተጨምሯል - ባች-መጠን 4 ወደ ማህደረ ትውስታ ውስጥ ገባ, ይህም ተጨማሪ የስልጠና ሂደትን በእጅጉ አፋጥኗል.
በ 4 ኛ ደረጃ, ሂደቱ ቆሟል, ምክንያቱም የተራዘመ ተጨማሪ ስልጠና እንኳ mAp75 ወደ አሮጌው እሴት አላሳደገውም።
በውጤቱም, በ ላይ ያለውን ፍንጭ ማፋጠን ተችሏል 15%፣ መጠኑን በ 35% እና ትክክለኛነት አያጡም.

ለቀላል አርክቴክቸር አውቶማቲክ

ለቀላል የኔትወርክ አርክቴክቸር (ያለ ሁኔታዊ አክል፣ ውህድ እና ቀሪ ብሎኮች) በሁሉም የኮንቮሉሽን ንብርብሮች ሂደት ላይ ማተኮር እና የመቁረጥ ሂደትን በራስ-ሰር ማድረግ ይቻላል።

ይህንን አማራጭ ተግባራዊ አድርጌያለሁ እዚህ.
ቀላል ነው፡ እርስዎ የኪሳራ ተግባር፣ አመቻች እና ባች ጀነሬተሮች ብቻ ነው ያለዎት።

import pruning
from keras.optimizers import Adam
from keras.utils import Sequence

train_batch_generator = BatchGenerator...
score_batch_generator = BatchGenerator...

opt = Adam(lr=1e-4)
pruner = pruning.Pruner("config.json", "categorical_crossentropy", opt)

pruner.prune(train_batch, valid_batch)

አስፈላጊ ከሆነ የውቅር መለኪያዎችን መለወጥ ይችላሉ-

{
    "input_model_path": "model.h5",
    "output_model_path": "model_pruned.h5",
    "finetuning_epochs": 10, # the number of epochs for train between pruning steps
    "stop_loss": 0.1, # loss for stopping process
    "pruning_percent_step": 0.05, # part of convs for delete on every pruning step
    "pruning_standart_deviation_part": 0.2 # shift for limit pruning part
}

በተጨማሪም በመደበኛ ልዩነት ላይ የተመሰረተ ገደብ ተግባራዊ ይሆናል. ግቡ የተወገዱትን ክፍል መገደብ ነው፣ ቀድሞውንም “በቂ” L1-መለኪያዎች ያሉ ውዝግቦችን ሳያካትት፡-

የጄዲ ኮንቮሉሽን ኔትወርኮችን የመቀነስ ዘዴ - መቁረጥ

ስለዚህ፣ ከቀኝ ጋር ተመሳሳይ ከሆኑ ስርጭቶች ውስጥ ደካማ ውዝግቦች እንዲወገዱ እና ከግራ ተመሳሳይ ስርጭቶች መወገድ ላይ ተጽዕኖ እንዳያደርጉ እንፈቅዳለን።

የጄዲ ኮንቮሉሽን ኔትወርኮችን የመቀነስ ዘዴ - መቁረጥ

ስርጭቱ ወደ መደበኛው ሲቃረብ የፕሪንግ_standart_deviation_part Coefficient ከሚከተሉት ሊመረጥ ይችላል፡

የጄዲ ኮንቮሉሽን ኔትወርኮችን የመቀነስ ዘዴ - መቁረጥ
2 ሲግማ ግምት እመክራለሁ. ወይም እሴቱን <1.0 በመተው ይህን ባህሪ ችላ ማለት ይችላሉ።

ውጤቱ የአውታረ መረብ መጠን፣ መጥፋት እና የአውታረ መረብ አሂድ ጊዜ በሙከራው ላይ ያለው ግራፍ ነው፣ መደበኛ ወደ 1.0። ለምሳሌ፣ እዚህ የኔትወርክ መጠኑ በጥራት ሳይቀንስ በ2 ጊዜ ያህል ቀንሷል (ትንሽ ኮንቮሉሽን አውታር ለ100k ክብደት)።

የጄዲ ኮንቮሉሽን ኔትወርኮችን የመቀነስ ዘዴ - መቁረጥ

የሩጫው ፍጥነት ለተለመደው መለዋወጥ የተጋለጠ ነው እና ብዙም አልተለወጠም። ለዚህም ማብራሪያ አለ፡-

  1. የመቀየሪያዎቹ ብዛት ከምቾት (32, 64, 128) ወደ ቪዲዮ ካርዶች በጣም ምቹ አይደለም - 27, 51, ወዘተ. እዚህ ልሳሳት እችላለሁ፣ ግን ምናልባት ያደርጋል።
  2. አርክቴክቸር ሰፊ ሳይሆን ወጥነት ያለው ነው። ስፋቱን በመቀነስ, ጥልቀቱን አንነካውም. ስለዚህ, ጭነቱን እንቀንሳለን, ነገር ግን ፍጥነቱን አንቀይርም.

ስለዚህ ማሻሻያው የተገለጸው በሩጫው ወቅት የ CUDA ጭነት በ 20-30% በመቀነሱ ነው, ነገር ግን የሩጫ ጊዜ መቀነስ አይደለም.

ውጤቶች

እናንጸባርቅ። 2 የመግረዝ አማራጮችን ተመልክተናል - ለ YOLOv3 (በእጅዎ መስራት ሲኖርብዎት) እና ቀላል አርክቴክቸር ላላቸው አውታረ መረቦች። በሁለቱም ሁኔታዎች የኔትወርክን መጠን መቀነስ እና ትክክለኛነትን ሳያሳጣው ማፋጠን እንደሚቻል ሊታይ ይችላል. ውጤቶች፡-

  • መጠኑን በመቀነስ
  • ማፋጠንን አሂድ
  • የCUDA ጭነትን በመቀነስ ላይ
  • በውጤቱም, የአካባቢ ወዳጃዊነት (የወደፊቱን የኮምፒዩተር ሀብቶች አጠቃቀምን እናስተካክላለን. የሆነ ቦታ አንድ ሰው ይደሰታል ግሬታ ታንበርግ)

የትርፍ አንጀት ሕመም

  • ከመግረዝ ደረጃ በኋላ፣ መጠኑን ማስተካከልም ይችላሉ (ለምሳሌ በ TensorRT)
  • Tensorflow ለ መገልገያዎችን ይሰጣል ዝቅተኛ_መግነጢሳዊ_መግረዝ. ይሰራል።
  • ማከማቻ ማዳበር እፈልጋለሁ እና ለመርዳት ደስ ይለኛል

ምንጭ: hab.com

አስተያየት ያክሉ