<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مهدی رحمانی</title>
        <link>https://virgool.io/feed/@mahdirahmani</link>
        <description>HiddenCluster.ir</description>
        <language>fa</language>
        <pubDate>2026-04-15 11:15:31</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/23115/avatar/82TVeD.png?height=120&amp;width=120</url>
            <title>مهدی رحمانی</title>
            <link>https://virgool.io/@mahdirahmani</link>
        </image>

                    <item>
                <title>الگوریتم پریم (Prim&#039;s Algorithm)+کد پایتون</title>
                <link>https://virgool.io/@mahdirahmani/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D9%BE%D8%B1%DB%8C%D9%85-prims-algorithm%DA%A9%D8%AF-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-ojbwc28e9rr8</link>
                <description>الگوریتم پریم (Prim&#x27;s Algorithm) یک روش معروف برای یافتن درخت پوشای کمینه (Minimum Spanning Tree, MST) در یک گراف وزن‌دار و بدون جهت است. درخت پوشای کمینه یک زیرگراف است که شامل تمام رئوس گراف اصلی می‌شود و دارای کمترین مجموع وزن یال‌ها است. الگوریتم پریم برای کاربردهایی مانند طراحی شبکه، برنامه‌ریزی شهری، و ساختارهای داده‌ای مورد استفاده قرار می‌گیرد.مراحل الگوریتم پریمانتخاب راس شروع: ابتدا یک راس به عنوان نقطه شروع انتخاب می‌شود.اضافه کردن یال‌ها: در هر مرحله، کوتاه‌ترین یال که یکی از رئوس آن در درخت پوشای کمینه فعلی قرار دارد و راس دیگر آن خارج از درخت است، انتخاب و به درخت اضافه می‌شود.تکرار تا شامل شدن تمام رئوس: این فرآیند تا زمانی که تمام رئوس گراف در درخت پوشای کمینه قرار گیرند، ادامه می‌یابد.ویژگی‌هاحریصانه: الگوریتم پریم یک الگوریتم حریصانه است، به این معنی که در هر مرحله بهترین انتخاب ممکن (در اینجا کوتاه‌ترین یال) را انجام می‌دهد.کارایی: الگوریتم پریم در گراف‌هایی با تعداد یال‌های زیاد و تعداد رئوس نسبتاً کم کارآمد است.کاربردهاشبکه‌های ارتباطی: برای طراحی شبکه‌هایی با کمترین هزینه کابل‌کشی.طراحی مدار: در طراحی مدارهای الکتریکی و الکترونیکی.برنامه‌ریزی شهری: برای طراحی و برنامه‌ریزی زیرساخت‌های شهری.مثالفرض کنید یک گراف وزن‌دار داریم. الگوریتم پریم از یک راس شروع کرده و در هر مرحله کوتاه‌ترین یال را که یکی از رئوس آن در درخت و راس دیگر آن خارج از درخت است، انتخاب می‌کند. این فرآیند تا زمانی که تمام رئوس گراف در درخت پوشای کمینه قرار گیرند، ادامه می‌یابد.در نهایت، الگوریتم یک درخت پوشای کمینه ارائه می‌دهد که شامل تمام رئوس گراف اصلی است و دارای کمترین مجموع وزن یال‌ها است.کد پایتوناین کد از یک صف اولویت برای انتخاب کم‌هزینه‌ترین یال در هر مرحله استفاده می‌کند:import heapq


def prim(graph, start_vertex):
    visited = set([start_vertex])
    edges = [(cost, start_vertex, to) for to, cost in graph[start_vertex].items()]
    heapq.heapify(edges)

    mst_cost = 0
 mst_edges = []

 while edges:
        cost, from_vertex, to_vertex = heapq.heappop(edges)
 if to_vertex not in visited:
            visited.add(to_vertex)
            mst_cost += cost
            mst_edges.append((from_vertex, to_vertex, cost))

 for to_next, cost_next in graph[to_vertex].items():
 if to_next not in visited:
                    heapq.heappush(edges, (cost_next, to_vertex, to_next))

 return mst_cost, mst_edges


# مثال: گراف وزن‌دار
graph = {
 &#039;A&#039;: {&#039;B&#039;: 2, &#039;C&#039;: 3},
 &#039;B&#039;: {&#039;A&#039;: 2, &#039;C&#039;: 1, &#039;D&#039;: 1, &#039;E&#039;: 4},
 &#039;C&#039;: {&#039;A&#039;: 3, &#039;B&#039;: 1, &#039;F&#039;: 5},
 &#039;D&#039;: {&#039;B&#039;: 1, &#039;E&#039;: 1},
 &#039;E&#039;: {&#039;B&#039;: 4, &#039;D&#039;: 1, &#039;F&#039;: 1},
 &#039;F&#039;: {&#039;C&#039;: 5, &#039;E&#039;: 1, &#039;G&#039;: 1},
 &#039;G&#039;: {&#039;F&#039;: 1}
}

mst_cost, mst_edges = prim(graph, &#039;A&#039;)
print(&amp;quotCost of MST:&amp;quot, mst_cost)
print(&amp;quotEdges in MST:&amp;quot, mst_edges)در این کد، graph یک دیکشنری است که گراف وزن‌دار را نمایش می‌دهد. هر کلید نمایانگر یک راس است و مقادیر آن یک دیکشنری دیگر هستند که رئوس متصل به آن راس و وزن یال‌های متصل به آن‌ها را نشان می‌دهد.تابع prim الگوریتم پریم را پیاده‌سازی می‌کند. این تابع از یک صف اولویت برای نگهداری یال‌های مرزی استفاده می‌کند و در هر مرحله کم‌هزینه‌ترین یال را انتخاب می‌کند. این فرآیند تا زمانی که تمام رئوس گراف بازدید شوند، ادامه می‌یابد.نتیجه نهایی شامل هزینه کل درخت پوشای کمینه (MST) و لیست یال‌هایی است که در MST قرار دارند:</description>
                <category>مهدی رحمانی</category>
                <author>مهدی رحمانی</author>
                <pubDate>Thu, 30 Nov 2023 20:19:39 +0330</pubDate>
            </item>
                    <item>
                <title>کدگذاری هافمن(Huffman coding)+کد پایتون</title>
                <link>https://virgool.io/@mahdirahmani/%DA%A9%D8%AF%DA%AF%D8%B0%D8%A7%D8%B1%DB%8C-%D9%87%D8%A7%D9%81%D9%85%D9%86huffman-coding-e9bdoqrjol2x</link>
                <description>الگوریتم کدگذاری هافمن (Huffman Coding Algorithm) یک روش موثر برای فشرده‌سازی داده‌ها است. این الگوریتم در سال 1952 توسط دیوید هافمن، دانشجوی دکتری دانشگاه MIT، ابداع شد. اصلی‌ترین کاربرد آن در فشرده‌سازی داده‌ها و ارتباطات دیجیتال است. در اینجا به توضیح کامل این الگوریتم می‌پردازیم:مفهوم اصلیالگوریتم هافمن بر اساس فراوانی ظاهور کاراکترها (یا هر واحد داده دیگر) در یک مجموعه داده کار می‌کند. هدف اصلی آن کاهش میانگین طول کدگذاری برای هر کاراکتر است.مراحل الگوریتم۱. شمارش فراوانی: ابتدا، فراوانی هر کاراکتر در داده‌ها شمرده می‌شود.۲. ساخت درخت هافمن:برای هر کاراکتر یک گره درخت ایجاد می‌شود.گره‌ها بر اساس فراوانی‌هایشان مرتب می‌شوند.دو گره با کمترین فراوانی انتخاب شده و یک گره جدید ایجاد می‌کنند که فراوانی آن برابر با مجموع فراوانی‌های دو گره فرزند است.این فرآیند تا زمانی که تنها یک گره باقی بماند (ریشه درخت) ادامه می‌یابد.۳. تولید کدهای هافمن:از ریشه درخت شروع کرده، به هر گره فرزند یک بیت اختصاص می‌دهیم (معمولاً 0 برای چپ و 1 برای راست).هر کاراکتر با مسیری از ریشه تا گره مربوط به خود کدگذاری می‌شود.مثالبیایید یک مثال ساده از پیاده‌سازی الگوریتم هافمن را بررسی کنیم. فرض کنید متنی داریم که می‌خواهیم آن را با استفاده از الگوریتم هافمن فشرده‌سازی کنیم. متن ما این است: &quot;BACADAEAFABBBAGAH&quot;ابتدا فراوانی هر کاراکتر را محاسبه می‌کنیم:A: 7 بارB: 4 بارC: 1 بارD: 1 بارE: 1 بارF: 1 بارG: 1 بارH: 1 بارحالا با استفاده از این فراوانی‌ها، درخت هافمن را می‌سازیم. در این درخت، هر گره دو فرزند دارد که کمترین فراوانی‌ها را نشان می‌دهند. این فرآیند تا زمانی که یک گره باقی بماند ادامه می‌یابد.در نهایت، کد هر کاراکتر با توجه به مسیری که از ریشه درخت تا گره مربوط به آن کاراکتر طی می‌کند، تعیین می‌شود. برای سادگی، فرض می‌کنیم که رفتن به سمت چپ در درخت نشان‌دهنده 0 و رفتن به سمت راست نشان‌دهنده 1 است.فرض کنید که درخت هافمن ما به این شکل باشد (این تنها یکی از چندین روش ممکن برای ساخت درخت است):در این مثال، کد هر کاراکتر به شکل زیر خواهد بود:A: 0B: 10C: 1100D: 1101E: 1110F: 1111بنابراین، متن اصلی &quot;BACADAEAFABBAAAGAH&quot; با استفاده از کدهای هافمن به شکل زیر فشرده‌سازی می‌شود:این مثال نشان می‌دهد که چگونه الگوریتم هافمن می‌تواند برای فشرده‌سازی داده‌ها استفاده شود. البته، در عمل، پیاده‌سازی‌های واقعی این الگوریتم ممکن است پیچیده‌تر باشند و شامل جزئیات بیشتری برای مدیریت انواع داده‌ها و شرایط مختلف باشند.کد پایتونابتدا، کلاس‌های لازم برای نمایش گره‌های درخت و خود درخت هافمن را تعریف می‌کنیم:import heapq
import collections


class Node:
 def __init__(self, char, freq):
 self.char = char
 self.freq = freq
 self.left = None
 self.right = None

 # برای استفاده در heapq، تعریف مقایسه بر اساس فرکانس
 def __lt__(self, other):
 return self.freq &lt; other.freq


def calculate_frequencies(text):
 return collections.Counter(text)


def build_huffman_tree(text):
    frequencies = calculate_frequencies(text)
    priority_queue = [Node(char, freq) for char, freq in frequencies.items()]
    heapq.heapify(priority_queue)

 while len(priority_queue) &gt; 1:
        left = heapq.heappop(priority_queue)
        right = heapq.heappop(priority_queue)

        merged = Node(None, left.freq + right.freq)
        merged.left = left
        merged.right = right

        heapq.heappush(priority_queue, merged)

 return priority_queue[0]


def build_codes(node, prefix=&amp;quot&amp;quot, codebook={}):
 if node is not None:
 if node.char is not None:
            codebook[node.char] = prefix
        build_codes(node.left, prefix + &amp;quot0&amp;quot, codebook)
        build_codes(node.right, prefix + &amp;quot1&amp;quot, codebook)
 return codebook


def huffman_encoding(text):
    root = build_huffman_tree(text)
    codebook = build_codes(root)
 return &#039;&#039;.join(codebook[char] + &#039;-&#039; for char in text)


# متن مورد نظر برای کدگذاری
text = &amp;quotBACADAEAFABBAAAGAH&amp;quot
encoded_text = huffman_encoding(text)
print(&amp;quotEncoded Text:&amp;quot, encoded_text)این کد ابتدا فرکانس هر کاراکتر در متن را محاسبه می‌کند، سپس یک درخت هافمن بر اساس این فرکانس‌ها می‌سازد. در نهایت، با استفاده از این درخت، متن را کدگذاری می‌کند.توجه داشته باشید که کدهای تولید شده برای هر کاراکتر ممکن است با مثال قبلی متفاوت باشد، زیرا ساختار دقیق درخت هافمن می‌تواند بسته به نحوه پیاده‌سازی متفاوت باشد. خروجی کد بالا برای مثال قبل:ویژگی‌ها و مزایاکدگذاری متغیر طول: در مقابل کدگذاری ثابت طول (مانند ASCII)، هافمن کدگذاری متغیر طول ارائه می‌دهد که باعث می‌شود کاراکترهای پرتکرار با کدهای کوتاه‌تر و کاراکترهای کمتکرار با کدهای بلندتر نمایش داده شوند.بهینه‌سازی فضای ذخیره‌سازی: با استفاده از این روش، می‌توان حجم داده‌ها را بدون از دست دادن اطلاعات کاهش داد.بدون از دست دادن داده: این یک روش فشرده‌سازی بدون از دست دادن داده است، به این معنی که داده‌های اصلی می‌توانند دقیقاً بازیابی شوند.کاربردهافشرده‌سازی فایل‌ها: در فرمت‌های فشرده‌سازی مانند ZIP و GZIP.ارتباطات دیجیتال: برای کاهش پهنای باند مورد نیاز.پردازش تصویر و صدا: به خصوص در فرمت‌هایی که از فشرده‌سازی بدون از دست دادن داده استفاده می‌کنند.محدودیت‌هاکارایی با داده‌های با فراوانی متغیر: اگر فراوانی کاراکترها در داده‌ها به طور قابل توجهی تغییر کند، کدگذاری هافمن ممکن است بهینه نباشد.نیاز به پیش‌پردازش: برای ساخت درخت هافمن، ابتدا باید تمام داده‌ها پردازش شوند.</description>
                <category>مهدی رحمانی</category>
                <author>مهدی رحمانی</author>
                <pubDate>Thu, 30 Nov 2023 19:30:09 +0330</pubDate>
            </item>
                    <item>
                <title>هوش مصنوعی: تحولی در اقتصاد</title>
                <link>https://virgool.io/@mahdirahmani/%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%AA%D8%AD%D9%88%D9%84%DB%8C-%D8%AF%D8%B1-%D8%A7%D9%82%D8%AA%D8%B5%D8%A7%D8%AF-iez69flxehqp</link>
                <description>هوش مصنوعی به عنوان یک فناوری همه منظورههوش مصنوعی، مثل یه مهمون ناخونده، وارد دنیای ما شده و داره همه چیز رو دگرگون می‌کنه. اگه بخواهیم با فناوری‌های کلی گذشته مثل موتور بخار، برق و اینترنت مقایسه‌اش کنیم، می‌بینیم که هر کدوم به نوبه خودشون یه انقلابی در جهان به پا کردن. مثل این می‌مونه که هر کدوم یه سنگی به آب انداختن و موج‌هایی ایجاد کردن که تا الان هم ادامه داره.فناوری‌های کلی، مثل یه چراغ جادو، ویژگی‌های خاصی دارن: از کاربرد گسترده گرفته تا توانایی در ایجاد نوآوری‌های مکمل و تأثیر عمده بر بهره‌وری. اما هوش مصنوعی یه قدم جلوتره. این فناوری، نه تنها دنیای دیجیتال رو متحول کرده، بلکه با سرعتی باورنکردنی و با هزینه‌ای ناچیز در حال گسترشه. مثل این می‌مونه که یه دونه گندم رو بکاری و فردا صبح یه مزرعه گندم داشته باشی!هوش مصنوعی داره همه چیز رو تحت تأثیر قرار می‌ده، از اقتصاد گرفته تا جامعه. این فناوری، مثل یه جادوگر، داره دنیای ما رو به جایی می‌بره که تا دیروز فقط تو داستان‌ها می‌شد دید. اما مثل هر جادوگر دیگه‌ای، باید مراقب باشیم که قدرتش به دست شیطان نیفته و برای خیر و صلاح بشریت استفاده بشه. هوش مصنوعی نه تنها یک فناوری کلیه، بلکه یک فرصت استثنایی برای پیشرفت و تحول در همه زمینه‌هاست...اثرات اقتصادی هوش مصنوعیهوش مصنوعی (AI) داره دنیای کار و تجارت رو تغییر می‌ده. تو بخش‌های مختلف از تولید تا خدمات، این فناوری داره کارایی رو بالا می‌بره و بهره‌وری رو افزایش می‌ده، انگار که یه چوب جادویی دستش باشه. تو صنعت تولید، مثلاً، با استفاده از سیستم‌های خودکار و یادگیری ماشین، خطوط تولید سریع‌تر و دقیق‌تر شدن. تو بخش خدمات هم، هوش مصنوعی با پردازش زبان طبیعی و تحلیل داده‌ها، داره کارها رو آسون‌تر می‌کنه. این یعنی هم تو سطح شرکت‌ها و هم در اقتصاد کلان، شاهد یه پیشرفت چشمگیر هستیم.اما داستان فقط به اینجا ختم نمی‌شه. هوش مصنوعی داره درهایی به روی نوآوری و بازارهای جدید باز می‌کنه. از وسایل نقلیه خودران گرفته تا پزشکی شخصی‌سازی شده، همه و همه نشون‌دهنده توانایی AI در خلق محصولات و خدمات نوینه. این مثل این می‌مونه که تو یه جنگل ناشناخته قدم بزنی و هر قدم یه گنج جدید پیدا کنی!حالا بیایید نگاهی به بازار کار بندازیم. اینجا داستان کمی پیچیده‌تر می‌شه. هوش مصنوعی هم می‌تونه شغل‌ها رو از بین ببره و هم شغل‌های جدیدی ایجاد کنه. بله، برخی مشاغل به خاطر اتوماسیون از بین می‌رن، اما در عوض، شغل‌های جدیدی با مهارت‌های تازه به وجود میان. این یعنی کارگران و متخصصان باید خودشون رو با این تغییرات وفق بدهند، مثل اینکه تو یه بازی شطرنج، هر لحظه قوانین عوض شه.هوش مصنوعی داره یه تحول بزرگ در اقتصاد و جامعه ما ایجاد می‌کنه. این فناوری نه تنها در حال بازتعریف کارایی و بهره‌وریه، بلکه داره فرصت‌های جدیدی برای نوآوری و اشتغال ایجاد می‌کنه. اما مثل هر تغییر بزرگ دیگه‌ای، باید مراقب باشیم که این تحولات رو به نحوی مدیریت کنیم که همه بتونن از مزیتاش بهره‌مند شن و کسی از قافله عقب نمونه:)هوش مصنوعی در صنایع مختلفهوش مصنوعی (AI) داره توی هر کوی و برزنی از دنیای ما سرک می‌کشه و هر جا که می‌ره، یه دستی به سر و روی اون حوزه می‌کشه. تو بخش بهداشت و درمان، AI مثل یه دکتر همه‌فن‌حریف، از تشخیص بیماری‌ها گرفته تا برنامه‌ریزی درمان و پزشکی شخصی‌سازی شده، داره کارهای شگفت‌انگیزی انجام می‌ده. اینجا دیگه قضیه فقط یه سرماخوردگی ساده نیست، بلکه صحبت از تشخیص دقیق و سریع بیماری‌های پیچیده و ارائه درمان‌های مخصوص به هر فرده.تو حوزه مالی، AI داره مثل یه کارآگاه باهوش، ریسک‌ها رو ارزیابی می‌کنه، تقلب‌ها رو شناسایی می‌کنه و تو معاملات الگوریتمی هم نقش پررنگی داره. اینجا دیگه مثل بازی شطرنجه، هر حرکت باید دقیق و محاسبه شده باشه و AI دقیقاً همین کار رو می‌کنه.در بخش کشاورزی، AI داره مثل یه کشاورز دیجیتالی، روی نظارت رو محصولات، کنترل آفات و بهینه‌سازی محصول تمرکز می‌کنه. اینجا دیگه موضوع فقط کاشت و داشت نیست، بلکه صحبت از استفاده بهینه از منابع و افزایش بهره‌وریه.و در نهایت، تو بخش خرده‌فروشی، AI داره مثل یه فروشنده باهوش و با تجربه، رفتار مشتریان رو تحلیل می‌کنه، مدیریت موجودی رو بهینه می‌کنه و توصیه‌های شخصی‌سازی شده ارائه می‌ده.در کل، AI داره هر روز بیشتر و بیشتر تو زندگی ما نقش بازی می‌کنه و مثل یه چراغ جادو، داره دنیای ما رو متحول می‌کنه. اما همیشه باید یادمون باشه که این چراغ جادو رو با دقت و مسئولیت‌پذیری استفاده کنیم تا از تمام فوایدش بهره‌مند شیم و از معایب احتمالی‌اش دوری کنیم.چالش ها و خطراتدر دنیای هوش مصنوعی (AI)، مثل اینکه همه چیز دور سر داده‌ها می‌چرخه. اما این داده‌ها، مثل یه خنجر دو لبه، هم می‌تونن مفید باشن و هم خطرناک. از یک طرف، سیستم‌های AI برای یادگیری و بهبود به حجم عظیمی از داده‌ها نیاز دارن، اما از طرف دیگه، این همه داده می‌تونه مسائلی مثل نقض حریم خصوصی و امنیت داده‌ها رو به وجود بیاره. مثل این می‌مونه که یه گنج بزرگ داشته باشی، اما همه دزدها دنبالش باشن.حالا بیایید یه نگاهی به مسائل اخلاقی بیندازیم. AI می‌تونه تو تصمیم‌گیری‌ها دچار تعصب بشه، مسئولیت‌پذیریش زیر سوال بره و حتی امکان سوءاستفاده ازش وجود داشته باشه. این مثل اینه که یه ابزار قدرتمند داشته باشی، اما ندونی که چه کسی داره ازش استفاده می‌کنه و برای چه هدفی!و در نهایت، بحث نابرابری اقتصادی.! AI می‌تونه شکاف‌های اقتصادی رو هم در داخل کشورها و هم بین کشورها عمیق‌تر کنه. این مثل این می‌مونه که یه قایق تندرو داشته باشی، اما بعضی‌ها فقط تو قایق‌های کاغذی نشسته باشن. اینجا نقش سیاست‌گذاری‌ها مهم می‌شه تا بتونن این تأثیرات رو کاهش بدن و از عدالت اجتماعی حمایت کنن. هوش مصنوعی می‌تونه هم یه نعمت باشه و هم یه نفرین، بستگی داره که چطور ازش استفاده بشه و چه قوانینی براش وضع بشه.چشم انداز آینده و تحقیقاتدر دنیای پرشتاب تکنولوژی، هوش مصنوعی (AI) داره مثل یه قطار سریع‌السیر حرکت می‌کنه و هر روز یه چیز جدیدی به دنیا معرفی می‌کنه. تحقیقات در حوزه‌هایی مثل کامپیوترهای کوانتومی و سیستم‌های هوش مصنوعی نورو سمبولیک داره داغ‌تر از همیشه پیش می‌ره. اینجا دیگه صحبت از سرعت‌های نجومی و توانایی‌های فکری فراتر از تصوره...حالا بیایید یه نگاهی به پیش‌بینی‌های اقتصادی بلندمدت بندازیم. تصور کنید که AI چطور می‌تونه در دهه‌های آینده چهره اقتصاد جهانی رو دگرگون کنه...!؟ از افزایش بهره‌وری گرفته تا ایجاد بازارهای جدید و شغل‌هایی که هنوز اسمشون رو هم نشنیدیم!بیایید به تأثیرات اجتماعی این فناوری نگاهی بیندازیم. یک آینده مبتنی بر AI می‌تونه تغییرات عمده‌ای در سبک زندگی، نحوه حکومت‌داری و تعاملات انسانی به وجود بیاره. این مثل اینه که یه دنیای جدید درست جلوی چشمای ما شکل بگیره، جایی که روبات‌ها و هوش مصنوعی نقش‌های کلیدی در زندگی روزمره ما بازی می‌کنن. اما مثل هر تغییر بزرگ دیگه‌ای، باید مراقب باشیم که این تحولات رو به نحوی مدیریت کنیم که همه بتونن از مزایاش بهره‌مند شن و کسی از قافله عقب نمونه. هوش مصنوعی نه تنها یک فناوریه، بلکه یک فرصت بزرگ برای نوآوری و پیشرفت در همه جنبه‌های زندگی ماست.منبع</description>
                <category>مهدی رحمانی</category>
                <author>مهدی رحمانی</author>
                <pubDate>Wed, 29 Nov 2023 20:24:31 +0330</pubDate>
            </item>
                    <item>
                <title>DETR در برابرYOLO</title>
                <link>https://virgool.io/@mahdirahmani/detr-%D8%AF%D8%B1-%D8%A8%D8%B1%D8%A7%D8%A8%D8%B1yolo-gx9e9fz7a61h</link>
                <description>تشخیص شیء یک مشکل مهم در بینایی رایانه‌ای است. این شامل شناسایی و تعیین موقعیت اشیا در یک تصویر یا ویدیو است. تشخیص شیء کاربردهای گسترده‌ای دارد، از جمله نظارت تصویری، تشخیص چهره، و تشخیص پلاک خودرو.دو روش برجسته برای تشخیص شیء، YOLO و DETR هستند.YOLO:YOLO مخفف &quot;You Only Look Once&quot; است. این یک روش سریع و کارآمد برای تشخیص شیء است که می‌تواند برای تشخیص شیء در زمان واقعی استفاده شود.YOLO از یک شبکه عصبی عمیق برای پیش‌بینی چهارچوب‌های حاوی اشیا در یک تصویر استفاده می‌کند. چهارچوب‌ها حاوی موقعیت، اندازه، و کلاس شیء هستند.YOLO مزایای زیر را دارد:سریع: YOLO می‌تواند برای تشخیص شیء در زمان واقعی استفاده شود.کارآمد: YOLO از یک شبکه عصبی کوچک استفاده می‌کند که می‌تواند به سرعت آموزش دیده و اجرا شود.ساده: YOLO یک روش ساده و آسان برای پیاده‌سازی است.YOLO معایب زیر را نیز دارد:دقت: YOLO نسبت به سایر روش‌های تشخیص شیء دقت کمتری دارد.انعطاف‌پذیری: YOLO برای تشخیص اشیا با شکل‌های پیچیده مناسب نیست.DETR:DETR مخفف &quot;Detection TRansformer&quot; است. این یک روش دقیق‌تر برای تشخیص شیء است که می‌تواند برای تشخیص شیء در تصاویر و ویدیوها با کیفیت بالا استفاده شود.DETR از یک شبکه عصبی ترانسفورماتور برای پیش‌بینی چهارچوب‌های حاوی اشیا در یک تصویر استفاده می‌کند. چهارچوب‌ها حاوی موقعیت، اندازه، و کلاس شیء هستند.DETR مزایای زیر را دارد:دقت: DETR نسبت به سایر روش‌های تشخیص شیء دقت بالاتری دارد.انعطاف‌پذیری: DETR برای تشخیص اشیا با شکل‌های پیچیده مناسب است.DETR معایب زیر را نیز دارد:کندی: DETR کندتر از YOLO است و نمی‌تواند برای تشخیص شیء در زمان واقعی استفاده شود.پیچیدگی: DETR یک روش پیچیده‌تر است که پیاده‌سازی آن دشوارتر است.نتیجه‌گیری:YOLO و DETR دو روش برجسته برای تشخیص شیء هستند. YOLO یک روش سریع و کارآمد است که می‌تواند برای تشخیص شیء در زمان واقعی استفاده شود. DETR یک روش دقیق‌تر است که می‌تواند برای تشخیص شیء در تصاویر و ویدیوها با کیفیت بالا استفاده شود.انتخاب بهترین روش تشخیص شیء به نیازهای خاص شما بستگی دارد. اگر به دنبال یک روش سریع و کارآمد برای تشخیص شیء در زمان واقعی هستید، YOLO یک گزینه خوب است. اگر به دنبال یک روش دقیق‌تر برای تشخیص شیء در تصاویر و ویدیوها با کیفیت بالا هستید، DETR یک گزینه خوب است.منبع</description>
                <category>مهدی رحمانی</category>
                <author>مهدی رحمانی</author>
                <pubDate>Wed, 29 Nov 2023 19:36:07 +0330</pubDate>
            </item>
                    <item>
                <title>معیار ارزیابی برای تشخیص اشیاء در تصویر</title>
                <link>https://virgool.io/@mahdirahmani/%D9%85%D8%B9%DB%8C%D8%A7%D8%B1-%D8%A7%D8%B1%D8%B2%DB%8C%D8%A7%D8%A8%DB%8C-%D8%AF%D8%B1-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%A7%D8%B4%DB%8C%D8%A7%D8%A1-%D8%AF%D8%B1-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-sumzn4iyjnki</link>
                <description>بعد از آموزش مدل ها، ما به معیار ارزیابی برای محاسبه میزان عملکرد هر مدل نیاز داریم. به طور معمول هر دیتاست موجود به سه بخش داده آموزش، اعتبارسنجی و آموزش تقسیم میشود که توضیحات بیشتر را می توانید در زیر بخوانید:https://vrgl.ir/naMGFبعد از آموزش مدل با استفاده از داده های آموزشی و تنظیم پارامترهای آن توسط داده های اعتبارسنجی، نوبت به ارزیابی نهایی مدل برای مقایسه با مدل های دیگر که از همین دیتاست برای آموزش استفاده کرده اند، می رسد.اما چگونه میتوان معیار مناسبی برای ارزیابی مدل هایی که برای تشخیص اشیاء در تصاویر آموزش دیده اند، پیدا کرد!؟در این نوشته به توضیح کامل معیار ارزیابی معروف mAP برای این کاربرد می پردازم.برای شروع و توضیح mAPنیاز به فهم درستی نسبت به Precision، Recall، Precision-Recall curve و APداریم.Precision:شکل زیر رو نگاه کنید:تصور کنید دو دسته شی داریم. آبی و قرمز. یه مدل آموزش دیده شده داریم که قراره تعدادی از این اشیاء رو که در شکل بالا اومده دسته بندی کنه. 10 تا شی آبی(دسته مثبت) داریم و 10 تا شی قرمز(دسته منفی) که برچسب هرکدوم از اشیاء رو هم میدونیم. در شکل بالا با Label Positive و Label Negative مشخص شدند.حالا اتفاقی که میفته اینه که مدل ما دقت 100 در صدی نداره. بنابراین تعداد از این اشیاء رو درست دسته بندی نمیکنه. در شکل بالا مشخص شده که از 10 تا شی آبی 9 تا رو به عنوان شی آبی و یک دونه رو به عنوان دسته قرمز دسته بندی کرده. اشیاء قرمز رو هم با خطا دسته بندی کرده و فقط تونسته 8 تا از 10 تا رو درست دسته بندی کنه.این توضیحاتی که دارم میدم مربوط به دسته بندیه که بعد از همین توضیحات پل میزنیم برای توضیح دادن mAPدر تشخیص اشیاء در تصویر.نکته بعدی که باید توجه کنید اینه که هر بار یکی از دسته ها رو مورد بررسی قرار میدیم. به عنوان مثال اگر 10 تا دسته داشته باشیم، باید معیار ارزیابی رو هر بار برای هرکدوم از 10 تا دسته اجرا کنیم.خوب... بریم سراغ ادامه توضیحات...شکل زیر رو هم علی الحساب داشته باشید، به مرور متوجهش میشید:به زبان ساده معیار Precision به ما میگه چنتا از اشیائی که به عنوان دسته مثبت تشخیص دادیم، واقعا مثبت هستند! اگر اشیایی که مثبت تشخیص داده شدند و واقعا هم مثبت هستند رو TP(True Positive)بنامیم و اشیایی که مثبت تشخیص داده شدند ولی واقعا مثبت نیستند(نه اینکه لزوما منفی باشند! در مثال بالا چون دوتا کلاس داریم اینطوری نوشته شده وگرنه همینکه مثبت نباشند جزو این دسته قرار میگیرند.) رو FP(False Positive) نام گذاری کنیم، Precision رو میتونیم به شکل زیر تعریف کنیم:برای مثال بالا tpبرابر 9 هست و fpبرابر 2  بنابراین داریم:مقدار precision [برای دسته مثبت و داده های تست بالا] برابر با 0.81 خواهد بود.Recall:مفهوم Recall به ما میگه چنتا از اشیایی که واقعا مثبت هستند رو مدل تونسته به عنوان مثبت تشخیص بده! مفهوم TPرو که متوجه شدیم حالا اگر اشیایی که واقعا مثبت هستند اما به عنوان دسته مثبت در نظر گرفته نشدند(تکرار میکنم مهم اینه ک مثبت در نظر گرفته نشده وگرنه جزو هر دسته دیگه ای باشه همین و آش و همین کاسست[!] و تو این مثال دو کلاسه(دسته) داریم اینجوری بهش میپردازیم) رو FN نام گذاری کنیم، مفهوم Recall رو میتونیم به صورت زیر فرموله کنیم:که با توجه به مقادیر TP=9 و FN=1 برای مثال بالا خواهیم داشت:مقدار recall [برای دسته مثبت و داده های تست بالا] برابر با 0.9 خواهد بود.حالا که درک درستی نسبت به مفهوم precision و recall ایجاد شده مفهوم IOU رو هم بگیم بعد بریم سراغ precision-recall curve.IOU:برای دسته بندی تصاویر، استفاده از فرمول های بالا کار آسونیه و به راحتی میتونید برای هر دسته مقدار precision و recall رو محاسبه کنید. اما برای محاسبه precisionو recallبرای کاربرد تشخیص اشیاء در تصویر کار کمی پیچیده میشه.برای دسته بندی تصاویر اتفاقی که میفته اینه که یه تصویر به مدل داده میشه و در نهایت به صورت 0و1 گفته میشه تصویر متعلق به کدوم کلاسه. اما در کاربرد تشخیص اشیاء در تصویر فقط تعیین دسته کافی نیست و باید موقعیت شی در تصویر هم مشخص بشه. به همین دلیل نیاز به مفهوم IOU داریم.اما IOUچیه!؟با توجه به اینکه در کاربرد تشخیص اشیاء در تصویر، موقعیت شی هم مهمه، پس باید یک معیار برای تعیین درست بودن موقعیت تشخیص داده شده هم داشته باشیم. به زبان ساده IOU به ما میگه که باکسی(box) که تشخیص داده شده چقدر با باکس واقعی همپوشانی دارند. این همپوشانی رو اگه بخوایم فرموله کنیم، به صورت زیر در میاد:همونطور که مشخصه از نسبت اشتراک دو باکس به اجتماع دو باکس برای محاسبه IOUاستفاده میشه.اما محاسبه IOUچه کاربردی برای محاسبه Precision و recall داره!؟ جوابش خیلی سادست: اگر مقدار IOU از یک مقداری بیشتر بود به عنوان باکس تشخیص داده شده در نظر گرفته میشه(چه دسته پیش بینی شده برای این باکس درست باشه، چه اشتباه. IOU صرفا میزان همپوشانی رو محاسبه میکنه.)[برای محاسبه IOUیک باکس تشخیص داده شده، باید میزان همپوشانی این باکس با همه باکس های واقعی درون تصویر مقایسه بشه.]مقدار معمول برای IOUبرای محاسبه precision و recall مقدار 0.5 است. به این معنا که اگر میزان همپوشانی از 0.5 بیشتر بود می توان درباره درست یا اشتباه بودن دسته آن باکس اعلام نظر کرد.خوب الان اون پلی که دوست داشتیم برای محاسبه معیار ارزیابی از دسته بندی به تشخیص اشیاء بزنیم، زده شد و الان یجورایی خوشحالیم:)))اما بریم سراغ precision-recall curve...Precision-Recall curve:منحنی Precision-Recall نشون دهنده tradeoff (پیدا کردن جایگزین فارسی برای این کلمه واقعا سخته!) بین Precisionو Recallبرای آستانه‌های مختلفه!قبول دارم! تعریف بالا یه خورده زیادی سنگینه. برا همین با یه مثال مفهوم بالا رو توضیح میدم.فرض کنید میخوایم منحنی precision-recall دسته آبی رو برای یه نمونه دیتاست 10تایی دیگه رسم کنیم. برای این کار نیاز داریم تا اولا میزان اطمینان(cnfidence) تشخیص هر شی (فرض نید مقدار IOU برابر 0.5 در نظر گفته شده) داشته باشیم و دوما بدونیم درست تشخیص داده شده یا نه!ابتدا خروجی تشخیص رو به صورت نزولی مرتب میکنیم و بعد تعداد TP و FP رو به صورت تجمعی از بالا به پایین محاسبه و در جدول میاریم. و در نهایت برای هر سطر مقدار precision و recall رو محاسبه میکنیم.و در نهایت با توجه به مقادیر precision و recall جدول بالا، نمودار زیر رو رسم میکنیم:منحنی بالا همون precision-recall curve است.این نمودار نشون دهنده دقت(precision) به ازای مقادیر مختلف recall است. هر چقدر مساحت زیر منحنی بیشتر باشد نشون دهنده دقت بالای مدل است.(برا اینکه متوجه مفهوم این نکته بشید کافیه فرض کنید FPندارید و البته مدل همه TP ها رو تشخیص داده. اینجوری مساحت برابر یک[حداکثر مقدار ممکن و همون دقت 100در100 ] خواهد شد.)حالا که مفهوم Precision-Recall ccurve رو متوجه شدیم، میریم سراغ اصل مطلب و چیزی نیست جز AP(Average Precision)...AP(Average Precision):با توجه به نمودار رسم شده در بالا، AP برابر با میانگین Precision برای Recall های مختلف بین 0 و 1 است.به همین راحتی:)))mAP(mean Average Precision):مفهوم mAP همون محاسبه APبرای IOUهای مختلف و در نهایت میانگین گرفتن از همه مقادیره[البته با این پیشفرض که میانگین همه دسته ها گرفته بشه و بعد میانگین IOUها هم محاسبه بشه]. به عنوان مثال mAP@[0.5:0.05:0.95] به معنی اینه که برای حد آستانه های 0.5 تا 0.95 با فاصله 0.05 مقدار AP رو محاسبه کنید و در نهایت میانگین بگیرید...امیدوارم به صورت کامل متوجه مفهوم معیار ارزیابی در تشخیص اشیاء در تصویر شده باشید.کد خیلی خوبی برای محاسبه AP و mAP برای تشخیص اشیاء در تصاویر تو گیتهاب هست که میتونید بهش مراجعه کنید:https://github.com/rafaelpadilla/Object-Detection-Metricsمنابع و مطالعه بیشتر:https://pro.arcgis.com/en/pro-app/2.8/tool-reference/image-analyst/how-compute-accuracy-for-object-detection-works.htmhttps://jonathan-hui.medium.com/map-mean-average-precision-for-object-detection-45c121a31173https://scikit-learn.org/stable/auto_examples/model_selection/plot_precision_recall.htmlhttps://deeperai.blog.ir/post/object-detection-metrics</description>
                <category>مهدی رحمانی</category>
                <author>مهدی رحمانی</author>
                <pubDate>Fri, 01 Apr 2022 13:12:17 +0430</pubDate>
            </item>
                    <item>
                <title>Maximum Likelihood Estimation (MLE) به زبان ساده</title>
                <link>https://virgool.io/@mahdirahmani/maximum-likelihood-estimation-mle-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D8%AF%D9%87-elibxovnu0di</link>
                <description>تو این مقاله قراره از پایه و به صورت کاملا ساده، تخمین درستنمایی بیشینه(MLE) رو براتون توضیح بدم...فرق آماره و احتمال‌:وقتی از احتمال صحبت می‌کنیم،  منظور این است که میزان احتمال توزیع همه نمونه‌ها در کل را می‌دانیم و از این احتمال برای برداشت بخشی از نمونه‌ها از کل استفاده می‌کنیم. به عنوان مثال یه جعبه پر از سیب و پرتغال را در نظر بگیرید. این جعبه شامل 3 سیب و 7 پرتغال است. محاسبه احتمال توزیع سیب در این جعبه برابر 0.3 و پرتغال 0.7 خواهد بود. به این معنا که اگر ما به صورت کاملا تصادفی بخواهیم از این جعبه میوه انتخاب کنیم به احتمال 0.3 سیب است و به احتمال 0.7 پرتغال است. این روش که از ویژگی کل استفاده می‌کنیم تا احتمال جزء را محاسبه کنیم، احتمال می‌گویند.اما در آماره، ما میزان توزیع واقعی در کل جهان را نداریم و فقط به بخشی از این جهان دسترسی داریم. می‌خواهیم از این بخش محدود در دسترس استفاده کنیم و توزیع احتمال نمونه‌ها در کل را تخمین بزنیم. به تابع توزیع واقعی جهان کل، پارامتر می‌گویند. که معمولا آماره را با «تتا هت» و پارامتر را با «تتا» نمایش می‌دهند.برای اطلاعات بیشتر در زمینه آماره و احتمال، می‌تونید ویدئویی که در این زمینه ضبط شده رو مشاهده کنید:https://www.aparat.com/v/c1Nzsدر یادگیری ماشین ما به پارامتر دسترسی نداریم و داده‌های ما صرفا شامل بخشی از پارامتر است. که همین مسئله باعث می‌شود تا برای بدست آوردن تخمین بهتر، داده ها را به سه بخش آموزشی(Train)، اعتبارسنجی(Validation) و آزمایشی(Test) تقسیم کنیم.داده های آموزش(Train)، اعتبارسنجی(Validation) و آزمایش(Test) در یادگیری ماشین به زبان سادهLikelihood:هر یک از داده‌ها چند ویژگی (Feature)  دارد که متناسب با این ویژگی‌ها می‌توان در نهایت این داده‌ها را متناسب با کاربرد مد نظر دسته‌بندی کرد. به عنوان مثال تصور کنید ما به تنها به 1000 نفر دسترسی داریم و می‌خواهیم با بررسی قد و وزن افراد، مرد یا زن بودن را تشخیص دهیم. بعد از بررسی‌های اولیه احتمالا به توزیع زیر برای قد و وزن برسیم:حال با توجه به توزیع بدست آمده می‌توانیم بگوییم اگر قد را داشته باشیم با چه احتمالی مرد است یا زن. برای وزن هم به همین ترتیب. همانطور که مشخص است، توزیع را نرمال فرض کرده ایم. می توان از توزیع های دیگر احتمال نیز استفاده کرد.به همین مقدار احتمال که برای داده ورودی در نظر می گیریم، درست نمایی یا likelihood می گویند. در حالت گسسته همان تابع جرم احتمال است و به شکل زیر نمایش می‌دهند:همچنین برای حالت پیوسته برابر تابع چگالی احتمال است که به شکل زیر نمایش داده می‌شود:که همانطور که گفته شد تابع درست نمایی از توزیع داده های در دسترس به دست آمده اند و تخمینی از کل است.مفهوم توابع فوق که به صورت احتمال شرطی نوشته شده اند، به این معناست که در صورتی که داده های x را داشته باشیم، تخمین ما چگونه است! به عنوان مثال برای مثال دسته بندی خانم ها  آقایون که زده شد، می توان گفت که با توجه به داده های محدودی که داریم، تخمین ما چگونه است!Maximum Likelihood Estimation:با توجه به توضیحات داده شده، هر داده ورودی چند ویژگی دارد. در صورتی که مقدار هر ویژگی را داشته باشیم می توانیم با استفاده از تابع تخمین درست‌نمایی بگوییم با چه احتمالی، داده ورودی متعلق به کدام دسته است. همچنین دو تابع مربوط به قد و وزن را می توانیم با هم ترکیب کنیم و به تابعی مانند زیر برسیم:شکل فوق صرفا مثالی از ترکیب دو تابع تخمین درست نمایی است و مربوط به مثال قد و وزن نمی باشد. اما ترکیب دو تابع قد و وزن نیز شکلی مانند بالا اما با مقادیر متفاوت خواهد بود.حال که نمودار بالا را داریم، می توانیم با دادن مقادیر ویژگی های داده ورودی یعنی مقادیر وزن و قد، بگوییم با چه احتمالی داده ورودی ما مرد است و با چه احتمالی زن!و سپس با مقایسه مقادیر احتمال، بگوییم مثلا داده ورودی مرد است یا زن. که با همین مقایسه که در نهایت احتمال هر دسته برای داده ورودی بیشتر باشد، داده را جزو آن دسته می داند، تخمین درستنمایی بیشینه یا Maximum Likelihood Estimation می گویند و به شکل زیر نمایش می دهند:و تمام :)</description>
                <category>مهدی رحمانی</category>
                <author>مهدی رحمانی</author>
                <pubDate>Sun, 06 Mar 2022 14:10:28 +0330</pubDate>
            </item>
                    <item>
                <title>هندسه حداقل مربعات(Geometry of least squares) در یادگیری ماشین(Machine Learning)</title>
                <link>https://virgool.io/@mahdirahmani/%D9%87%D9%86%D8%AF%D8%B3%D9%87-%D8%AD%D8%AF%D8%A7%D9%82%D9%84-%D9%85%D8%B1%D8%A8%D8%B9%D8%A7%D8%AAgeometry-of-least-squares-%D8%AF%D8%B1-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86machine-learning-nv2ppwn6ab3i</link>
                <description>برداشت من از اسلایدهای زیر رو می تونید در ادامه ببینید:برداشت های من: و تمام :)......................................................................................................................................................................................................................................................................................................................</description>
                <category>مهدی رحمانی</category>
                <author>مهدی رحمانی</author>
                <pubDate>Sun, 27 Feb 2022 10:35:23 +0330</pubDate>
            </item>
                    <item>
                <title>داده های آموزش(Train)، اعتبارسنجی(Validation) و آزمایش(Test) در یادگیری ماشین به زبان ساده</title>
                <link>https://virgool.io/@mahdirahmani/%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7%DB%8C-%D8%A2%D9%85%D9%88%D8%B2%D8%B4train-%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1%D8%B3%D9%86%D8%AC%DB%8Cvalidation-%D9%88-%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4test-%D8%AF%D8%B1-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D8%AF%D9%87-ymrpwx7gcdly</link>
                <description>برای یادگیری مدل در یادگیری ماشین، معمولا داده ها رو به سه دسته آموزش، اعتبارسنجی و آزمایش تقسیم می کنن. دلیل این مسئله اینه که ما با استفاده از داده های محدودی که داریم، مدلی رو آموزش بدیم که برای ورود به دنیای واقعی هم به کار بیاد. وگرنه آموزش مدلی با دقت صد در صد (بدون در نظر گرفتن داده اعتبارسنجی و آزمایشی و فقط با داده آموزش) کاری نداره و میشه راحت بهش رسید!و اما بریم سراغ اصل مطلب...داده های آموزشی(Train):این داده ها برای آموزش مدل استفاده می شن. معمولا 70 درصد کل داده های در دسترس، به این دسته تعلق داره. وظیفه اصلی این داده ها تنظیم دقیق وزن هاست.به عنوان مثال تو یه شبکه عصبی عمیق که از تعدادی لایه تشکیل شده، داده ها از لایه اول به لایه آخر میرن و با توجه به خروجی، طی back-propagation وزن ها آپدیت میشه. اما داده های اعتبارسنجی و آزمایشی به صورت مستقیم و به این شکل روی وزن ها تاثیری ندارن. به همین دلیله که معمولا حجم زیادی از داده ها به این دسته تعلق میگیره تا آپدیت شدن وزن ها با احتمال بیشتری متناسب با توزیع داده های واقعی باشه.داده های اعتبارسنجی(Validation):معمولا داده ها رو طی چندین بار به خورد مدل میدن و متناسب با اون وزن ها رو آپدیت میکنن. به هر بار دادن داده های آموزش به مدل و آپدیت شدن وزن ها توسط اون ها، میگن یک Epoch. این موضوع باعث میشه تا موضوع کم بودن داده ها رو با نشون دادن چندباره داده ها جبران کنیم. اما تا یه جایی این تکرار شدنه خوبه. از یه جایی به بعد به جای اینکه مدل از داده ها یاد بگیره، اون ها رو حفظ میکنه! اینجاست که داده های اعتبارسنجی به کمکمون میان.تو هر ایپوک(Epoch)، ما مدل رو روی داده های اعتبارسنجی امتحان میکنیم و دقت مدل رو درمیاریم. تا یه جایی با کم شدن خطای مدل روی داده های آموزش، خطا روی داده های اعتبارسنجی هم پایین میاد. اما از یه جایی به بعد که مدل داده های آموزش رو حفظ میکنه، که اصطلاحا بهش میگن Overfit شده، خطای مدل روی داده های اعتبارسنجی به جای کم شدن، بیشتر میشه. تو این نقطه است که آموزش باید متوقف بشه چرا که آموزش بیشتر نه تنها سودی نداره، بلکه باعث میشه عملکرد نهایی مدل پایین تر بیاد.تو شکل پایین خط نقطه چین سبز(ایپوک 10) دقیقا همون نقطه ایه که آموزش باید متوقف بشه:داده های آزمایشی(Test):با توجه به توضیحات گفته شده، در نهایت مدل آموزش میبینه و میشه ازش استفاده کرد(که التبه فعلا به کلیات داره پرداخته میشه و اینکه دقت چقد شده، مدلی که استفاده کردیم چی بوده و ... کاری نداریم).اما نکته ای که اینجا پیش میاد اینه که من از کجا بفهمم مدلی که شما روی این داده ها آموزش دادی بهتره یا مدل من!؟ اینجا همونجاییه که داده های آزمایشی پا به میدان قضاوت(!) میذارن. از داده های آزمایش به عنوان معیاری برای مقایسه عملکرد مدل های مختلف که روی یه دیتاست واحد آموزش دیدن، استفاده میشه.امیدوارم که این مطلب براتون مفید بوده باشه:)</description>
                <category>مهدی رحمانی</category>
                <author>مهدی رحمانی</author>
                <pubDate>Mon, 21 Feb 2022 17:02:20 +0330</pubDate>
            </item>
                    <item>
                <title>پردازشی به پهنای پاسخنامه‌ها</title>
                <link>https://virgool.io/@mahdirahmani/%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4%DB%8C-%D8%A8%D9%87-%D9%BE%D9%87%D9%86%D8%A7%DB%8C-%D9%BE%D8%A7%D8%B3%D8%AE%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7-d3ej7ddqmx0q</link>
                <description>همه چی از اونجایی شروع شد که بهم پیام داد و گفت تو حوزه تصویر هم کار میکنی؟ منم که درگیر درس و دانشگاه بودم. دو دل بودم. دلو زدم به دریا و گفتم آره! قبلا تو یه شرکت خصوصی با هم کار می کردیم. من گفتم آره. اما گذشت و خبری نشد. تا اینکه بعد یکی دو هفته خبر داد که یه پروژه پردازش تصویره. برا یه استارتاپه. تشخیص گزینه های علامت زده شده پاسخنامه های تستی! تا حالا همچین پروژه ای نداشتم. پروژه هایی که کار کرده بودم تو حوزه یادگیری ماشین بود و برای این پروژه به خاطر این که زمان اجرا خیلی مهم بود، مجبور بودن برن سمت پردازش تصویر. که همین مسئله سرعت، کلی cpu ذهنو درگیر کرد تا با یه الگوریتم خفن یه خروجی مناسب حاصل بشه.این پروژه به ظاهر ساده چالش های زیادی داشت. از جمله اینکه بعضی از پاسخ نامه ها کلا برعکس بود. در قدم اول باید چرخش مناسب اتفاق می افتاد. گام بعدی کیفیت های متفاوت با وجود نویز های زیاد بود. تو فضای RGB کار کردن برای این پروژه اصلا جواب نبود. برای یه آدم با شرایط بصری موجود(:)) RGB عالیه! اما به کار کامپیوتری که فهمی از زیبایی نداره و فقط میگه یه چی بده من محاسبه کنم(!)، اصلا جواب نبود!! باید اولا تبدیل به Gray Scale می شد. دلیل این موضوع اینه که برای ما مهم نیست که رنگ بندی صفحه به چه شکله! تنها چیزی که برامون مهمه اینه که یه خونه از گزینه ها پر شده یا نه! اینجوری بهتر میشه با کامپیوتر هم زاد پنداری کرد:)) اما Gray Scale هم جواب کار ما نبود! چرا که همه با یه میزان رنگ گزینه ها رو پر نمیکنن و یا شاید کیفیت اسکن ها متفاوت باشه. حتا یک فرد هم هر گزینه رو با شرایط مختلفی پر می کنه! شناسوندن این فضا به کامپیوتر مثل درخواست تفکیک رنگ «بژ تیره» و «حنایی روشن» از یه مَرده! پس باید به فهم ماشین نزدیک تر می شدم. خیلی نزدیک تر. فضای صفر و یک :) پس با یه Threshold تصویر رو از Gray Scaleبه Binary تبدیل می کنیم.مثل نمونه زیر که تصویر از فضای RGB(تصویر سمت چپ) به تصویر Binary(تصویر سمت راست) تبدیل میشه:تو تبدیلی که انجام شده، علاوه بر تشخیص میزان چرخش، با بدست آوردن مقدار حد آستانه مناسب (Threshold)، که به صورت تجربی بدست میاد، نویز تصویر گرفته میشه و البته کیفیت گزینه های تیک خورده شده هم تا حد خیلی خوبی برای تشخیص ماشین(کامپیوتر) آماده سازی میشه.همه این چیزایی که گفته شد، تنها Preprocessing تصویر بود! تصویر رو پیش پردازش کردیم تا برای مراحل بعدی کارمون راحت تر باشه...اگه بتونیم تو مرحله بعدی جای تک تک گزینه ها رو تشخیص بدیم، با محاسبه تعداد پیکسل های مشکی هر گزینه و البته مقایسه با یه حد آستانه مربوط به هر گزینه، کار تمومه. اما مسئله اساسی اینجاست که اولا اندازه جعبه یا Box مربوط به هر پاسخنامه با پاسخنامه بعدی متفاوته. و دوما اگر هم اندازه اونا یکی باشه، باز مسئله زاویه های متفاوت پیش میاد که میتونه تو تشخیص مشکل ایجاد کنه. برا همین اولین کار اینه که گوشه های پاسخنامه رو تشخیص بدیم، و بعد بخش پاسخنامه رو به مقیاس استاندارد مد نظرمون تبدیل کنیم. همچنین تو این تبدیل باید زوایا رو هم به شکل مناسب تبدیل کنیم.تصویر زیر خروجی نهایی این بخشه:اتفاقی که الآن افتاده اتفاق خیلی مبارکه:))) الآن مردا می تونن پایکوبی کنن و خانم هام اگر دوس داشتن کِل بکشن:) [البته اینو در نظر داشته باشید که با توجه به محدودیت زمانی تعریف شده در پروژه، پیدا کردن الگوریتمی که این کار رو با دقت صد در صدی انجام بده، پیچیدگی های زیادی داره که با توجه به عام بودن مخاطب این مقاله، از ذکر جزئیات اجتناب شده]اتفاقی که افتاده اینه که بخش اصلی پاسخنامه رو از فضای به شدت متغیر تصویر اولیه به فضای استاندارد خودمون منتقل کردیم. تو این مرحله تنها اتفاقی که باید بیفته اینه که با استفاده از ابزاری مثل فتوشاپ، موقعیت مرکزی هر گزینه رو مشخص کنیم و با تست کردن Thresholdهای مختلف تو برنامه اصلی، حد آستانه تشخیص گزینه پر شده، سفید و مشکوک رو به صورت تجربی(:|) و البته طاقت فرسا به دست بیاریم.در این حد بهتون بگم که این دو تا کار آخر باعث میشه چشماتون از کاسه دربیاد، چرا که باید با دقت خیلی زیاد به صفحه نمایشگر لپ تاپ زل بزنید تا خدای نکرده حتا یه پیکسل هم اینور اونور نشه!تشخیص نهایی برای تصویر اولیه رو در زیر می تونید ببینید:و در نهایت این خروجی رو از فضای استاندارد خودمون به فضای صفحه اولیه بر می گردونیم تا به کاربر نمایش داده بشه:زمان اجرای این کد برای نمونه های 300 تایی در نهایت روی CPU Corei5 دو هسته ای به متوسط زمان 1.25 ثانیه رسید. با توجه به قدرت پایین این CPU زمان مورد نظر کاملا قابل قبول بود. و دقت نهایی برای گزینه های کاملا مشکی و کاملا نزده، صد در صد شد. و بقیه گزینه ها به عنوان گزینه مثل حالتی که خط خطیه یا کم رنگه یا کامل پر نشده، به عنوان مشکوک در نظر گرفته میشه.به نظرم الآن درک این مسئله که میگن تو آزمونا حتما گزینه مد نظرتون رو با مداد نرم پر رنگ مشکی پر کنید، براتون شفاف تر شده :)))گیتهاب پروژه:https://github.com/MahdiRahmani/detect_the_marked_answer_sheet_optionsدر صورتی که مایلید بیشتر با هم آشنا بشیم یا کامنت بذارید یا ایمیل بدید:) MahdiRahmani1375@gmail.com</description>
                <category>مهدی رحمانی</category>
                <author>مهدی رحمانی</author>
                <pubDate>Sat, 05 Feb 2022 18:29:20 +0330</pubDate>
            </item>
                    <item>
                <title>ترجمه مقاله GFPGAN (CVPR 2021)</title>
                <link>https://virgool.io/@mahdirahmani/%D8%AA%D8%B1%D8%AC%D9%85%D9%87-%D9%85%D9%82%D8%A7%D9%84%D9%87-gfpgan-cvpr-2021-rfnnu3li1qnj</link>
                <description>نمونه خروجی راستش رو بخواین دنبال یه مقاله میگشتم که برای درس پردازش تصویر ارائه بدم. تاکید استاد محترم هم این بود که حتما یادگیری عمیق توش تا جای ممکن دخیل نباشه و صرفا از ابزار های پردازش تصویر استفاده بشه. و خوب  متاسفانه یا خوشبختانه به خاطر پیشرفت های یادگیری عمیق، پیدا کردن همچین مقاله ای واقعا سخته!خلاصه بعد از کلی کلنجار رفتن با خودم که این مقاله رو استاد قبول میکنه یا نه، به خاطر اتفاقای خفنی که تو این مقاله افتاده، این مقاله رو انتخاب کردم. و خوشبختانه استاد محترم هم با من هم عقیده بود که این مقاله خفنه(!) برا همین اوکی داد و منم کار رو این مقاله رو شروع کردم.یه نکته مثبت دیگه ای که این مقاله داره اینه که اولا کدش تو گیتهاب هست(لینکشو آخر نوشته میذارم) و هم اینکه مشکلی برای استفاده ازش وجود نداره. و حتا تو کولب گوگل هم راحت import میشه. خروجی بالا هم عکس پدر(سمت راستی) و عموی بندس. که وقتی به خانواده نشون دادم، اونام به خفن بودن مقاله پی بردن. در تاکید خفن بودن این مقاله همین بس که برای یکی از درس های دیگم همینو ارائه دادم و استاد درس دیگه هم به خفن بودن این مقاله اذعان داشتن(یا کردن، نمیدونم فعل درستش چیه!)خلاصه همه اینا باعث شد تا ترجمه ای از این مقاله رو براتون به اشتراک بذارم تا شمام به خفن بودن این مقاله پی ببرید:)قبل شروع اینو بگم که اسم کامل مقاله اینه: Towards Real-World Blind Face Restoration with Generative Facial Priorو اما بریم سراغ اصل مطلب...شکل 1: مقایسه با پیشرفته ترین روش های ترمیم چهره: HiFaceGAN ، DFDNet ، Wan و همکاران و PULSE در تصاویر با کیفیت پایین در دنیای واقعی. در حالی که روشهای قبلی برای بازگرداندن جزئیات صورت وفادار یا حفظ هویت چهره تلاش می کنند ، GFP-GAN پیشنهادی ما با مصنوعات بسیار کمتری به توازن واقعی و وفاداری می رسد. علاوه بر این ، صورت قدرتمند مولد به ما امکان می دهد تا ترمیم و تقویت رنگ را به طور مشترک انجام دهیم.چکیده:ترمیم صورت کور معمولاً به موارد قبلی ، مانند هندسه صورت قبلی یا مرجع قبلی ، برای بازگرداندن جزئیات واقعی و صادقانه متکی است. با این حال ، ورودی های بسیار با کیفیت پایین نمی توانند هندسه دقیقی از قبل ارائه دهند در حالی که مراجع با کیفیت بالا غیرقابل دسترسی هستند ، و این قابلیت را در سناریوهای دنیای واقعی محدود می کند. در این کار ، ما GFP-GAN را پیشنهاد می دهیم که از اهرم های متمایز و غنی و متنوعی که برای ترمیم صورت کور در یک GAN صورت آموزش دیده محصور شده اند ، استفاده می کند. این مولد صورت اولیه (GFP) از طریق لایه های تبدیل ویژگی فضایی ، که به روش ما امکان می دهد تعادل خوبی از واقعیت و وفاداری داشته باشد ، در فرآیند ترمیم صورت گنجانیده شده است. GFP-GAN ما می تواند به لطف طراحی های ظریف و قدرتمند صورت قبل و ظریف ، جزئیات صورت را بازیابی کند و رنگ ها را فقط با یک پاس رو به جلو بهبود بخشد ، در حالی که روش های وارونگی GAN نیاز به بهینه سازی خاص تصویر در استنباط دارند. آزمایش های گسترده نشان می دهد که روش ما هم در مجموعه داده های مصنوعی و هم در دنیای واقعی به عملکردی برتر نسبت به پیشرفت های قبلی دست می یابد.1- مقدمه:ترمیم صورت کور با هدف بازیابی چهره های با کیفیت بالا از تصاویر بی کیفیت که از تخریب ناشناخته رنج می برند ، مانند وضوح پایین ، نویز، تاری ، مصنوعات فشرده سازی و غیره تعریف می شود. وقتی به سناریوهای دنیای واقعی اعمال می شود ، به دلیل تخریب پیچیده تر ، حالات و اوضاع متنوع ، چالش برانگیزتر می شود. کارهای قبلی معمولاً از موارد خاص صورت در ترمیم صورت ، مانند نشانه های صورت ، نقشه های تجزیه ، نقشه های حرارتی مولفه های صورت ، بهره برداری می کنند و نشان می دهند که آن مشخصات اولیه هندسه برای بازیابی شکل و جزئیات دقیق صورت، محوری هستند. با این حال ، این مقدمات معمولاً از تصاویر ورودی تخمین زده می شوند و به ناچار با ورودی های بسیار بی کیفیت در دنیای واقعی تخریب می شوند. علاوه بر این ، علی رغم راهنمایی معنایی ، موارد قبلی شامل اطلاعات بافت محدودی برای بازیابی جزئیات صورت (به عنوان مثال مردمک چشم) است.دسته دیگری از رویکردها ، برای تولید نتایج واقعی و کاهش وابستگی به ورودی های تخریب شده ، اطلاعات مرجع ، یعنی چهره های هدایت شونده با کیفیت بالا یا دیکشنری های اجزای صورت را بررسی می کند. با این حال ، غیرقابل دسترس بودن منابع با وضوح بالا ، کاربرد عملی آن را محدود می کند ، در حالی که ظرفیت محدود دیکشنری ها ، تنوع و غنای جزئیات صورت را محدود می کند.در این مطالعه ، ما از Generative Facial Prior (GFP) برای ترمیم چهره کور در دنیای واقعی استفاده می کنیم ، به عنوان مثال ، مدل های قبلی به طور ضمنی در مدل های شبکه آموزش خصمانه نسل پیش ساخته (GAN) مانند StyleGAN کپسوله شده اند. این GAN های چهره قادر به ایجاد چهره های وفادار با درجه تنوع بالایی هستند و بدین ترتیب مقدماتی غنی و متنوع مانند هندسه ، بافت صورت و رنگ ها را فراهم می آورند ، این امکان را فراهم می کند تا جزئیات صورت را به طور مشترک بازیابی کرده و رنگ ها را تقویت کنید (شکل 1). با این حال ، چالش کشیدن چنین پیش تولیدهای مولد در روند ترمیم چالش برانگیز است. تلاش های قبلی معمولاً از وارونگی GAN استفاده می کنند. آنها ابتدا تصویر تخریب شده را به یک کد پنهان از GAN آموزش دیده &quot;معکوس&quot; می کنند و سپس بهینه سازی خاص تصویر پرخرج را برای بازسازی تصاویر انجام می دهند. با وجود خروجی های بصری واقع بینانه ، آنها معمولاً تصاویری با وفاداری کم تولید می کنند ، زیرا کدهای نهفته در ابعاد پایین برای هدایت ترمیم دقیق کافی نیستند.برای مقابله با این چالش ها ، ما GFP-GAN را با طراحی ظریف پیشنهاد می دهیم تا در یک پاس رو به جلو به تعادل خوبی از واقعیت و وفاداری دست پیدا کنیم. به طور خاص ، GFPGAN شامل یک ماژول حذف تخریب و یک GAN صورت آموزش دیده به عنوان صورت قبلی است.آنها توسط یک نگاشت کد پنهان مستقیم و چندین لایه تبدیل فضایی کانال تقسیم شده (CS-SFT) به روشی درشت و ظریف به هم متصل می شوند. لایه های پیشنهادی CS-SFT تعدیل فضایی را بر روی تقسیم ویژگی ها انجام می دهند و ویژگی های سمت چپ را برای حفظ بهتر اطلاعات به طور مستقیم عبور می دهند ، و به روش ما اجازه می دهد قبل از آموزش مجدد وفاداری بالا ، از قبل مولد را به طور موثر ترکیب کند. علاوه بر این ، ما از بین رفتن اجزای صورت را با تبعیض های محلی معرفی می کنیم تا جزئیات ادراکی صورت را بیشتر ارتقا دهیم ، در حالی که برای حفظ وفاداری، هویت را حفظ می کنیم.ما مشارکتها را به شرح زیر خلاصه می کنیم. (1) ما از اولویت های تولید کننده صورت غنی و متنوع برای ترمیم صورت کور استفاده می کنیم. این افراد دارای بافت کافی و اطلاعات رنگی هستند که به ما امکان می دهد تا به طور مشترک ترمیم صورت و تقویت رنگ را انجام دهیم. (2) ما چارچوب GFP-GAN را با طراحی های ظریف معماری و تلفات پیشنهاد می دهیم تا قبل از آن صورت های مولد را ترکیب کنیم. GFP-GANما با لایه های CS-SFT در یک پاس رو به جلو به تعادل خوبی از پایداری و وفاداری به بافت می رسد. (3) آزمایش های گسترده نشان می دهد که روش ما در مجموعه داده های مصنوعی و دنیای واقعی عملکرد برتر نسبت به روش های قبلی را به دست می آورد.2- کار مرتبط:ترمیم تصویر معمولاً شامل وضوح فوق العاده ، حذف نویز ، رفع تاری و حذف فشرده سازی است. برای دستیابی به نتایج دلپذیر از نظر بصری ، از شبکه خصمانه تولیدی معمولاً به عنوان نظارت بر ضرر استفاده می شود تا راه حل ها به مجرای طبیعی نزدیک شود ، در حالی که کار ما این است که از GAN های صورت آموزش دیده به عنوان پیش تولیدهای صورت (GFP) استفاده کند.ترمیم صورت(Face Restoration). بر اساس تجسم عمومی صورت ، دو اطلاعات معمول چهره خاص: اطلاعات هندسه و اطلاعات مرجع ، برای بهبود بیشتر عملکرد ترکیب شده اند. نمونه های اولیه هندسه شامل نشانه های صورت ، نقشه های تجزیه صورت و نقشه های حرارتی مولفه های صورت هستند. با این حال، 1) این موارد قبلی به برآورد از ورودی های بی کیفیت نیاز دارند و به طور حتم در حالات واقعی تخریب می شوند. 2) آنها عمدتا بر محدودیت های هندسه تمرکز می کنند و ممکن است جزئیات کافی برای ترمیم نداشته باشند. در عوض ، GFPمشغول ما تخمین هندسی صریح از تصاویر تخریب شده را شامل نمی شود و شامل بافت های کافی در داخل شبکه آموزش دیده آن است.اطلاعات مرجع (Reference priors) معمولاً به تصاویر مرجع با همان هویت اعتماد می کنند. برای غلبه بر این مسئله ، DFDNet پیشنهاد می دهد که برای راهنمایی ترمیم ، یک دیکشنری صورت از هر جز (مانند چشم ، دهان) با ویژگی های CNNساخته شود. با این حال ، DFDNet عمدتا بر روی اجزای دیکشنری تمرکز دارد و بنابراین در مناطقی فراتر از دامنه دیکشنری آن تخریب می شود (به عنوان مثال ، کانتور مو ، گوش و صورت) ، در عوض ، GFP-GANما می تواند چهره ها را برای بازیابی به طور کلی درمان کند. علاوه بر این ، اندازه محدود دیکشنری تنوع و غنای آن را محدود می کند ، در حالی که GFP می تواند اطلاعات متنوع و غنی از جمله هندسه ، بافت ها و رنگ ها را ارائه دهد.اطلاعات تولیدی(Generative Priors)، GAN های آموزش دیده که قبلاً توسط وارونگی GAN مورد بهره برداری قرار می گیرد ، هدف اصلی آن یافتن نزدیکترین کدهای نهفته است که به یک تصویر ورودی داده شده است. PULSE به طور تکراری کد پنهان StyleGANرا بهینه می کند تا زمانی که فاصله بین خروجی ها و ورودی ها زیر یک آستانه باشد. mGANprior سعی دارد چندین کد را برای بهبود کیفیت بازسازی بهینه کند. با این حال ، این روش ها معمولاً تصاویری با وفاداری کم تولید می کنند ، زیرا کدهای نهفته در ابعاد پایین برای هدایت ترمیم کافی نیستند. در مقابل ، لایه های مدولاسیون پیشنهادی CS-SFT ما امکان دستیابی قبلی به ویژگی های فضایی چند وضوح را برای دستیابی به وفاداری بالا فراهم می کنند. علاوه بر این ، بهینه سازی تکراری گران قیمت در GFP-GAN ما هنگام استنباط مورد نیاز نیست.عملیات تقسیم کانال معمولاً برای طراحی مدلهای جمع و جور و بهبود توانایی نمایش مدل مورد کاوش قرار می گیرد. MobileNet پیچیدگی های عمقی را پیشنهاد می کند و GhostNet لایه کانولوشن را به دو قسمت تقسیم می کند و از فیلترهای کمتری برای تولید نقشه های ویژگی ذاتی(intrinsic feature maps) استفاده می کند. معماری مسیر دوگانه در DPNامکان استفاده مجدد از ویژگی ها و کاوش ویژگی های جدید را برای هر مسیر فراهم می کند ، بنابراین توانایی نمایش آن را بهبود می بخشد. یک ایده مشابه نیز در وضوح فوق العاده به کار رفته است. لایه های CS-SFTما روحیه مشابهی دارند ، اما با عملیات و اهداف مختلف. ما ویژگی فضایی را به یک شکاف تبدیل می کنیم و شکاف چپ را به عنوان هویت ترک می کنیم تا به تعادل خوبی از واقعیت و وفاداری برسیم.تفکیک کننده های اجزای محلی. تفکیک کننده محلی پیشنهاد شده است که روی توزیع های مسیر محلی تمرکز کند. هنگامی که به چهره اعمال می شود ، آن lossهای تفکیک کننده بر مناطق معنایی چهره جداگانه اعمال می شود. loss اجزای چهره معرفی شده ما نیز چنین طرح هایی را اتخاذ می کند اما با نظارت بیشتر بر اساس ویژگی های تفکیک کننده آموخته شده.3- روش شناسی:3-1- نمای کلی GFP-GAN:ما چارچوب GFP-GAN را در این بخش توصیف می کنیم. با توجه به یک ورودی چهره x که از تخریب ناشناخته رنج می برد ، هدف از ترمیم صورت کور برآورد یک تصویر yهَت(نمیشه علائم ریاضی رو بذارم:/ لینک دانلود رو ته نوشته میذارم. دیگ چیکارتون کنم:)) با کیفیت بالا است ، که از لحاظ واقعی و وفاداری تا حد امکان به تصویر y اصلی شبیه است.شکل 2. GFP-GANاز یک ماژول حذف تخریب (U-Net) و یک GAN چهره آموزش دیده شده (مانند StyleGAN2) به عنوان priorتشکیل شده است. آن‌ها از طریق نقشه‌برداری کد پنهان و چندین لایه فضای سه‌بعدی تقسیم مشخصه ( CS - SFT ) از بین می‌روند . به طور خاص ، ماژول حذف تخریب برای حذف تخریب پیچیده و استخراج دو نوع ویژگی طراحی شده است ، یعنی 1) ویژگی های نهفته F latent نقشه ورودی تصویر به نزدیکترین کد نهان در StyleGAN2 ، و 2) ویژگی های مکانی چند وضوح F spatial برای تعدیل ویژگی های StyleGAN2.پس از آن ، F latent با چندین لایه خطی به کدهای نهان W میانی ترسیم می شود. با توجه به کد نهان نزدیک به تصویر ورودی ، StyleGAN2می تواند ویژگی های کانولوشن متوسط ایجاد کند ، که با F GAN نشان داده می شود. این ویژگی ها جزئیات غنی صورت را در وزن GANآموزش دیده ثبت می کنند. ویژگی های چند وضوح F spatial برای تعدیل فضایی ویژگی های GAN صورت F GAN با لایه های پیشنهادی CS-SFT به روشی درشت تا ریز استفاده می شود، تا با حفظ وفاداری بالا به نتایج واقعی دست پیدا کنید.در طول آموزش ، به جزloss تفکیک کننده سراسری ، ما برای افزایش اجزای قابل درک چهره ، یعنی چشم و دهان ، loss اجزای صورت را با تفکیک کننده ها معرفی می کنیم. به منظور آموزش مجدد هویت(identity) ، ما همچنین از راهنمایی های حفظ هویت استفاده می کنیم.شکل 2: مروری بر چارچوب GFP-GAN. این شامل یک ماژول حذف تخریب (U-Net) و یک GAN صورت آموزش دیده به عنوان صورت قبلی است. آنها توسط یک نقشه برداری کد پنهان و چندین لایه تبدیل ویژگی فضایی کانال تقسیم شده (CS-SFT) متصل می شوند. در طول آموزش ، ما 1) lossهای ترمیم میانی را برای از بین بردن تخریب پیچیده ، 2) loss اجزای صورت با تفکیک کننده ها برای افزایش جزئیات صورت ، و 3) loss هویت برای حفظ هویت چهره را استفاده می کنیم.3-2- ماژول حذف تخریب:ترمیم کننده چهره کور در دنیای واقعی با تخریب پیچیده و شدیدتر ، که معمولاً مخلوطی از وضوح کم ، تاری ، نویز و مصنوعات JPEG است، مواجه می شوند. ماژول حذف تخریب برای حذف صریح تخریب فوق و استخراج ویژگی های &quot;تمیز&quot; F latent و F spatial طراحی شده است، مسئولیت ماژول های بعدی را کاهش می دهد. ما ساختار U-Net را به عنوان ماژول حذف تخریب خود در نظر می گیریم ، زیرا می تواند 1) زمینه پذیرش را برای از بین بردن تاری بزرگ افزایش دهد ، و 2) ویژگی های چند وضوح ایجاد کند. فرمول به شرح زیر است:از ویژگی های نهفته F latent برای ترسیم تصویر ورودی به نزدیکترین کد نهان در StyleGAN2 استفاده می شود (بخش 3.3). ویژگی های فضایی چند وضوح F spatial برای تعدیل ویژگی های StyleGAN2 استفاده می شود (بخش 3.4).به منظور داشتن یک نظارت متوسط برای از بین بردن تخریب ، ما در مراحل اولیه آموزش از lossترمیم L1 در هر مقیاس وضوح استفاده می کنیم. به طور خاص ، ما همچنین برای هر مقیاس وضوح از رمزگشا U-Net تصاویر خروجی می گیریم ، و سپس این خروجی ها را محدود می کنیم تا به هرم تصویر واقعی نزدیک شوند.3-3- مولد چهره اولیه و نگاشت کد پنهان:GANچهره که از قبل آموزش دیده است توزیع چهره ها را در وزن های متراکم کانولشن های خود ، یعنی اولویت مولد(generative prior) ، ضبط می کند. ما از چنین GANهای صورت آموزش دیده استفاده می کنیم تا جزئیات متنوع و غنی صورت را برای کار خود ارائه دهیم. یک روش معمول برای استفاده از اولویت های مولد ، نگاشت تصویر ورودی به نزدیکترین کدهای نهان Z آن است و سپس تولید یک خروجی مربوطه توسط یک GAN از پیش آموزش دیده. با این حال ، این روش ها برای حفظ وفاداری معمولاً به بهینه سازی تکراری زمان بر نیاز دارند. ما به جای تولید مستقیم تصویر نهایی ، ویژگی های کانولوشن میانی F GAN از نزدیک ترین چهره را ایجاد می کنیم ، زیرا شامل جزئیات بیشتری است و برای وفاداری بهتر می تواند توسط ویژگی های ورودی بیشتر مدوله شود (به بخش 3.4 مراجعه کنید).به طور خاص ، با توجه به بردار رمزگذاری شده F latent از تصویر ورودی (تولید شده توسط U-Net، معادله 1) ، ما ابتدا آن را به کدهای نهان میانی W برای حفظ بهتر ویژگی معنایی نگاشت می کنیم ، یعنی فضای میانی که از Z با چندین لایه پرسپترون چند لایه (MLP) تبدیل شده است. سپس کدهای نهفته W از هر لایه کانولوشن در GANآموزش دیده عبور می کنند و ویژگی های GAN را برای هر مقیاس وضوح تولید می کنند.بحث: ترمیم مفصل و تقویت رنگ. مدل های تولیدی اولویت های متنوع و غنی فراتر از جزئیات واقع گرایانه و بافت های زنده را ضبط می کنند.به عنوان مثال ، آنها اولویت های رنگی را کپسوله می کنند ، که می تواند در کار ما برای ترمیم مفصل چهره و تقویت رنگ استفاده شود.تصاویر چهره واقعی، به عنوان مثال ، عکس های قدیمی ، معمولاً دارای رنگ سیاه و سفید ، رنگ زرد قدیمی یا کم رنگ هستند. رنگ زنده اولیه در مولد چهره اولیه به ما امکان می دهد تقویت رنگ از جمله رنگ آمیزی را انجام دهیم. ما اعتقاد داریم که مولد چهره اولیه نیز از اولویت های هندسی کانولوشن ، اولویت های سه بعدی و غیره برای ترمیم و دستکاری استفاده می کنند.3-4- تبدیل ویژگی فضایی کانال تقسیم شده:به منظور حفظ بهتر وفاداری ، ما بیشتر از ویژگی های فضایی ورودی F spatial (تولید شده توسط U-Net ، Eq. 1) برای تعدیل ویژگی های GAN  در  F GAN از Eq.2استفاده می کنیم. حفظ اطلاعات فضایی از ورودی ها برای ترمیم چهره بسیار مهم است ، زیرا معمولاً به ویژگی های محلی برای حفظ وفاداری و ترمیم سازگار در مکان های مختلف فضایی چهره نیاز دارد. بنابراین، ما از تبدیل ویژگی فضایی (SFT) استفاده می کنیم ، که پارامترهای تبدیل نسبت را برای مدولاسیون ویژگی فضایی تولید می کند و تأثیر آن را در ترکیب سایر شرایط در ترمیم تصویر و تولید تصویر نشان داده است.به طور خاص ، در هر مقیاس تفکیک پذیری ، ما از طریق ویژگی های ورودی F spatial توسط چندین لایه کانولوشن ، یک جفت پارامتر تبدیل نسبت (α ، β) تولید می کنیم. پس از آن ، مدولاسیون با مقیاس گذاری و تغییر ویژگی های GAN در F GAN انجام می شود ، فرموله شده توسط:برای دستیابی به توازن بهتر از واقعیت و وفاداری ، ما همچنین لایه های تبدیل ویژگی فضایی کانال تقسیم شده (CSSFT) را پیشنهاد می دهیم که با استفاده از ویژگی های ورودی  F spatial (کمک به وفاداری) و تعدیل فضایی بخشی از ویژگی های GANرا انجام می دهند و ویژگی های GANسمت چپ برای عبور مستقیم(کمک به واقعیت) ترک میکند، همانطور که در شکل 2 نشان داده شده است:در نتیجه ، CS-SFT از مزایای تلفیق مستقیم اطلاعات قبلی و تعدیل موثر توسط تصاویر ورودی بهره مند می شود ، در نتیجه تعادل خوبی بین وفاداری بافت( texture faithfulness) و وفاداری(fidelity) به دست می آورد. علاوه بر این ، CS-SFT همچنین می تواند پیچیدگی را کاهش دهد زیرا به کانال های کمتری برای مدولاسیون ، مشابه GhostNet نیاز دارد.ما لایه های SFTکانال تقسیم شده را در هر مقیاس وضوح انجام می دهیم ، و در نهایت یک چهره بازیابی شده  yهَت ایجاد می کنیم.3-5- اهداف مدل:هدف یادگیری آموزش GFP-GAN ما شامل: 1) lossبازسازی که خروجی های  yهَت نزدیک به y واقعی را محدود می کند ، 2) loss خصمانه برای بازیابی بافت های واقع گرایانه ، 3) پیشنهاد loss اجزای صورت برای افزایش بیشتر جزئیات صورت ، و 4) loss حفظ هویت است.loss بازسازی. ما loss مربوط به L1و loss ادراکی را که به طور گسترده مورد استفاده قرار می گیرد ، به عنوان lossبازسازی Lrec ، که به شرح زیر تعریف شده است ، تعیین می کنیم:loss اجزای صورت. به منظور افزایش بیشتر اجزای قابل درک صورت ، ما loss اجزای صورت را با تفکیک کننده های محلی برای چشم چپ ، چشم راست و دهان معرفی می کنیم. همانطور که در شکل 2 نشان داده شده است ، ما در ابتدا مناطق علاقه مند با ترازبندی ROI را برش می دهیم. برای هر منطقه ، ما تفکیک کننده های محلی جدا و کوچک را آموزش می دهیم تا تشخیص دهیم که آیا وصله های(patches) بازیابی واقعی هستند یا خیر ، وصله ها را به توزیع اجزای طبیعی صورت نزدیک میکنیم.با الهام از [62] ، ما همچنین بر اساس تفکیک کننده های آموزش دیده، loss سبک ویژگی را ترکیب می کنیم. loss تطبیق ویژگی قبلی با محدودیت های فضایی، متفاوت است ، loss سبک ویژگی ما تلاش می کند تا با آمار ماتریس گرم(Gram) وصله های واقعی و بازسازی شده مطابقت داشته باشد. ماتریس گرم همبستگی ویژگی ها را محاسبه می کند و معمولاً به طور موثر اطلاعات بافت را ثبت می کند. ما ویژگی هایی را از چندین لایه از تفکیک کننده های محلی یاد گرفته شده استخراج می کنیم و یاد می گیریم با این آمار گرم از نمایش های متوسط از وصله های واقعی و ترمیم شده مطابقت داشته باشد. از نظر تجربی ، ما دریافتیم که loss سبک ویژگی از نظر تولید جزئیات واقعی چهره و کاهش مصنوعات ناخوشایند بهتر از loss تطبیق ویژگی قبلی است.loss اجزای صورت به شرح زیر تعریف می شود. اصطلاح اول loss تفکیک کننده است و اصطلاح دوم loss سبک است:loss حفظ هویت. ما از [31] الهام می گیریم و lossحفظ هویت را در مدل خود اعمال می کنیم. مشابه loss ادراکی ، ما lossرا بر اساس ویژگی تعبیه شده ازچهره ورودی تعریف می کنیم. به طور خاص ، ما مدل تشخیص چهره آموزش دیده شده ArcFaceرا انتخاب کردیم که برجسته ترین ویژگی های تفکیک کننده هویت را ضبط میکند. loss حفظ هویت، نتیجه بازیابی شده را مجبور می کند تا فاصله کمی با واقعیت در فضای ویژگی عمیق متراکم داشته باشد:هدف کلی مدل ترکیبی از lossهای فوق است:4- آزمایش:4-1- دیتاست ها و پیاده سازی:مجموعه داده های آموزشی. ما GFP-GAN خود را بر روی مجموعه داده های FFHQ ، که شامل 70000 تصویر با کیفیت است ، آموزش می دهیم. در حین آموزش ، تمام تصاویر را به &lt;512 به توان 2&gt; تغییر می دهیم.GFP-GAN ما روی داده های مصنوعی آموزش دیده است که تقریب تصاویر واقعی با کیفیت پایین است و در هنگام استنتاج به تصاویر دنیای واقعی تعمیم می یابد. ما این روش را در [46 ، 44] دنبال می کنیم و برای تلفیق داده های آموزش ، مدل تخریب زیر را اتخاذ می کنیم:مجموعه داده های آزمایشی. ما یک مجموعه داده مصنوعی و سه مجموعه داده مختلف واقعی با منابع متمایز می سازیم. تمام این مجموعه های داده هیچ تطابقی با مجموعه داده های آموزشی ما ندارند. ما در اینجا یک معرفی مختصر ارائه می دهیم.CelebA-Test مجموعه داده ترکیبی با 3000 تصویر CelebA-HQ از پارتیشن آزمایش خود است. روش تولید همانند روند آموزش است.LFW-Test. LFW شامل تصاویر با کیفیت پایین در طبیعت است. ما تمام تصویر اول برای هر هویت را در پارتیشن اعتبار سنجی گروه بندی می کنیم و 1711 تصویر آزمایشی را تشکیل می دهیم.CelebChild-Test شامل 180 چهره کودک از افراد مشهور است که از اینترنت جمع آوری شده اند. آنها بی کیفیت هستند و بسیاری از آنها عکسهای قدیمی سیاه و سفید هستند.WebPhoto-Test. ما 188 عکس بی کیفیت زندگی واقعی را از اینترنت کرول کردیم و 407 چهره برای ساخت مجموعه داده آزمایش WebPhoto استخراج کردیم. این عکس ها تخریب متنوع و پیچیده ای دارند. برخی از آنها عکسهای قدیمی هستند که از نظر جزئیات و رنگ بسیار کمرنگ هستند.پیاده سازی. ما StyleGAN2 آموزش دیده را با 5122 خروجی به عنوان مولد صورت قبلی خود انتخاب می کنیم. ضریب کانال StyleGAN2 برای اندازه مدل جمع و جور روی یک تنظیم شده است. UNet برای حذف تخریب از هفت نمونه کوچک و هفت مثال بالا تشکیل شده است که هر کدام دارای بلوک باقیمانده هستند. برای هر لایه CS-SFT ، به ترتیب از دو لایه کانولوشن برای تولید پارامترهای آفین α و β استفاده می کنیم.اندازه مینی بچ آموزش روی 12 تنظیم شده است. ما داده های آموزش را با برگرداندن افقی و رنگ پس زمینه تقویت می کنیم. ما سه جز را در نظر می گیریم: چشم چپ ، چشم راست ، دهان برای loss اجزای صورت ، زیرا از نظر ادراک قابل توجه هستند. هر مولفه توسط ROI مطابق با نشانه های چهره ارائه شده در مجموعه داده های آموزش اصلی بریده می شود. ما مدل خود را با بهینه ساز آدام در مجموع با 800k تکرار آموزش می دهیم. نرخ یادگیری(learning rate) &lt; 2 ضربدر 10 به توان -3&gt; در نظر گرفته شد و سپس با تکرار ضریب 2 در تکرارهای 700kام ، 750kام کاهشیافت. ما مدل های خود را با چارچوب PyTorch پیاده سازی کرده و با استفاده از چهار پردازنده گرافیکی NVIDIA Tesla P40 آنها را آموزش دادیم.شکل 3: مقایسه کیفی CelebA-Test برای ترمیم صورت نابینا. GFP-GAN ما جزئیات وفاداری را در چشم ، دهان و مو تولید می کند.4-2- مقایسه با روش های پیشرفته:ما GFP-GAN خود را با چندین روش پیشرفته ترمیم صورت مقایسه می کنیم: HiFaceGAN ، DFDNet ، PSFRGAN ، Super-FAN و Wan و همکاران. روش های وارونگی GAN برای ترمیم صورت: PULSE و mGANprior نیز برای مقایسه وجود دارد. ما همچنین GFP-GAN خود را با روش های بازیابی تصویر مقایسه می کنیم: RCAN ، ESRGAN و DeblurGANv2 ، و آنها را در مجموعه آموزش چهره خود برای مقایسه عادلانه به صورت دقیق تنظیم می کنیم. ما کدهای رسمی آنها را به جز Super-FAN که برای استفاده مجدد از آنها استفاده می کنیم ، در نظر میگیریم.برای ارزیابی ، ما از معیارهای ادراکی غیر مرجع استفاده می کنیم: FID و NIQE. ما همچنین معیارهای پیکسلی (PSNR و SSIM) و معیار ادراکی (LPIPS) را برای CelebA-Test with Ground-Truth (GT) اتخاذ می کنیم. ما در تعبیه ویژگی ArcFace فاصله هویت را با فرشتگان اندازه گیری می کنیم ، جایی که مقادیر کوچکتر هویت نزدیکتر به GT را نشان می دهد.شکل 5: مقایسه کیفی سه مجموعه داده در دنیای واقعی.CelebA-Test مصنوعی.مقایسه ها با دو تنظیم انجام می شود: 1) ترمیم صورت کور که ورودی و خروجی آن از وضوح یکسانی برخوردار است.2) 4*وضوح فوق العاده تصویر. توجه داشته باشید که روش ما می تواند تصاویر نمونه برداری شده را به عنوان ورودی برای وضوح فوق العاده صورت در نظر بگیرد.نتایج کمی برای هر تنظیم در جدول 1 و جدول 2 نشان داده شده است. در هر دو تنظیمات ، GFP-GAN به کمترین میزان LPIPS دست می یابد ، نشان می دهد که نتایج ما از نظر ادراک به واقعیت نزدیک است. GFP-GAN همچنین کمترین FID و NIQE را به دست می آورد ، نشان می دهد که خروجی ها به ترتیب فاصله نزدیک با توزیع چهره واقعی و توزیع تصویر طبیعی دارند. علاوه بر عملکرد ادراکی ، روش ما همچنین هویت بهتری را حفظ می کند ، که با کمترین درجه در تعبیه ویژگی چهره نشان داده می شود. توجه داشته باشید که 1) FID و NIQE پایین تر از GT ما نشان نمی دهد که عملکرد ما بهتر از GT است ، زیرا این معیارهای &quot;ادراکی&quot; با نمرات نظرات انسان در مقیاس بزرگ همبستگی دارند ، اما همیشه با هم در مقیاس دقیق تر ارتباط خوبی ندارند؛ 2) معیارهای پیکسل-خرد PSNR و SSIM با ارزیابی ذهنی ناظران انسانی ارتباط خوبی ندارند و مدل ما در این دو معیار خوب نیست.شکل 4: مقایسه CelebA-Test با رزولوشن فوق العاده صورت *4. GFP-GAN ما دندان های واقع گرایانه و جهت وفادار نگاه چشم را بازیابی می کند.نتایج کیفی در شکل 3 و شکل 4 ارائه شده است. 1) با تشکر از مولد چهره قبلی قدرتمند ، GFPGAN ما جزئیات وفادار را در چشم ها (مردمک ها و مژه ها) ، دندان ها و غیره بازیابی می کند. 2) روش ما ترمیم چهره به طور کامل انجام می دهد و همچنین می تواند موهای واقع گرایانه ایجاد کند ، در حالی که روش های قبلی که به دیکشنری های مولفه (DFDNet) یا نقشه های تجزیه (PSFRGAN) متکی هستند ، نمی توانند موهای موثقی تولید کنند (ردیف دوم ، شکل 3). 3) GFP-GAN توانایی حفظ وفاداری را دارد ، به عنوان مثال ، دهان بسته طبیعی و بدون افزودن اجباری دندان مانند PSFRGAN تولید می کند (ردیف 2 ، شکل 3). و در شکل 4 ، GFP-GAN جهت معقول نگاه چشم را نیز بازیابی می کند.LFW ، CelebChild و WedPhoto-Test در دنیای واقعی. برای آزمایش توانایی تعمیم ، مدل خود را در سه مجموعه داده مختلف در دنیای واقعی ارزیابی می کنیم. نتایج کمی در جدول 3 نشان داده شده است. GFP-GAN ما در هر سه مجموعه داده در دنیای واقعی به عملکردی برتر دست می یابد که قابلیت تعمیم چشمگیر آن را نشان می دهد. اگرچه PULSE می تواند کیفیت ادراکی بالایی نیز کسب کند (نمرات FID پایین تر) ، اما نمی تواند هویت چهره را حفظ کند همانطور که در شکل 5 نشان داده شده است.مقایسه های کیفی در شکل 5 نشان داده شده است. GFPGAN می تواند به طور مشترک ترمیم چهره و تقویت رنگ را برای عکس های واقعی با استفاده از مولد قبلی قدرتمند انجام دهد. روش ما می تواند چهره های قابل قبول و واقع گرایانه ای را در تخریب پیچیده دنیای واقعی ایجاد کند در حالی که سایر روش ها موفق به بازیابی جزئیات صورت وفادار یا تولید مصنوعات نمی شوند (به خصوص در WebPhoto-Test در شکل 5). علاوه بر اجزای مشترک صورت مانند چشم و دندان ، GFP-GAN در موها و گوش ها نیز عملکرد بهتری دارد ، زیرا GFP قبل از آن تمام صورت را در نظر می گیرد نه قسمت های جداگانه. با لایه های SC-SFT ، مدل ما توانایی دستیابی به وفاداری بالا را دارد. همانطور که در ردیف آخر شکل 5 نشان داده شده است ، بیشتر روشهای قبلی در بازیابی چشمهای بسته موفق نیستند ، در حالی که ما می توانستیم آنها را با استفاده از مصنوعات کمتر با موفقیت بازیابی کنیم.4-3- مطالعات فرسایشی(ablation):لایه های CS-SFT. همانطور که در جدول 4 [پیکربندی a] و شکل 6 نشان داده شده است ، وقتی لایه های مدولاسیون فضایی را حذف می کنیم ، یعنی فقط نقشه کد پنهان را بدون اطلاعات فضایی حفظ می کنیم ، چهره های بازیابی شده حتی با loss حفظ هویت هم نمی توانند هویت چهره را حفظ کنند (امتیاز LIPS بالا و Deg بزرگ .) بنابراین ، ویژگی های فضایی چند وضوح مورد استفاده در لایه های CS-SFT برای حفظ وفاداری بسیار حیاتی است. وقتی لایه های CS-SFT را به لایه های ساده SFT تغییر می دهیم [پیکربندی b در جدول 4] ، مشاهده خواهیم کرد که 1) کیفیت ادراکی در تمام معیارها تخریب می شود و 2)هویت قویتر (Deg کوچکتر) را حفظ می کند، همانطور که ویژگی های تصویر ورودی نفوذ را به همه ویژگی های مدوله شده و بایاس خروجی را به ورودی های تخریب شده تحمیل کند، بنابراین منجر به کاهش کیفیت ادراکی می شود. در مقابل ، لایه های CSSFT با مدوله کردن تقسیم ویژگی ها تعادل خوبی از واقعیت و وفاداری را ایجاد می کنند.GAN آموزش دیده به عنوان GFP. GAN آموزش دیده امکانات غنی و متنوعی را برای ترمیم فراهم می کند. چنانچه در جدول 4 [پیکربندی c] و شکل 6 نشان داده شده است ، اگر از مولد صورت قبلی استفاده نکنیم ، افت عملکرد مشاهده می شود.loss ترمیم هرمی. loss ترمیم هرمی در ماژول حذف تخریب استفاده می شود و توانایی ترمیم را برای تخریب پیچیده در دنیای واقعی تقویت می کند. بدون این نظارت میانی ، ممکن است ویژگی های فضایی با وضوح چندگانه برای مدولاسیون های بعدی همچنان تخریب شده و در نتیجه عملکرد پایین تری داشته باشد ، همانطور که در جدول 4 [پیکربندی d] و شکل 6 نشان داده شده است.شکل 6: مطالعات فرسایش روی لایه های CS-SFT و GFP prior و loss ترمیم هرم.loss اجزای صورت. ما نتایج 1) حذف همه loss اجزای صورت ، 2) فقط حفظ تفکیک کننده های اجزا ، 3) اضافه کردن loss تطبیق ویژگی های اضافی مانند [62] ، و 4) اتخاذ سبک اضافی loss سبک بر اساس آمار گرم را مقایسه می کنیم. در شکل 7 نشان داده شده است که تقکیک کننده های اجزا با اloss سبک ویژگی می توانند توزیع چشم را بهتر به دست آورند و جزئیات قابل قبول را بازیابی کنند.شکل 7: مطالعات فرسایش در مورد loss اجزای صورت.4-4- بحث و محدودیت ها:شکل 8: نتایج در صورتهای پوست تیره.بایاس آموزش. روش ما در اکثر چهره های دارای پوست خشک و گروههای مختلف جمعیتی عملکرد مطلوبی دارد (شکل 8) ، زیرا روش ما از هر دو ویژگی GAN آموزش دیده و تصویر ورودی برای مدولاسیون استفاده می کند. علاوه بر این ، ما از loss بازسازی و loss هویت برای محدود کردن خروجی ها برای حفظ وفاداری براساس ورودی ها استفاده می کنیم. با این حال ، هنگامی که تصاویر ورودی در مقیاس خاکستری هستند ، رنگ چهره ممکن است دارای یک سوگیری باشد (مثال آخر در شکل 8) ، زیرا ورودی ها حاوی اطلاعات رنگ کافی نیستند. بنابراین ، یک مجموعه داده متنوع و متعادل مورد نیاز است.شکل 9: محدودیت های مدل ما. نتایج PSFRGAN نیز ارائه شده است.محدودیت ها. همانطور که در شکل 9 نشان داده شده است ، هنگامی که تخریب تصاویر واقعی شدید است ، جزئیات صورت بازسازی شده توسط GFPGAN با مصنوعات پیچیده می شود. روش ما همچنین برای ژست های بسیار بزرگ نتایج غیرطبیعی ایجاد می کند. این به این دلیل است که تخریب مصنوعی و توزیع داده های آموزشی با آنچه در دنیای واقعی اتفاق می افتد متفاوت است. یک راه ممکن این است که به جای استفاده از داده های مصنوعی ، که به عنوان کار آینده باقی مانده است ، توزیع ها را از داده های واقعی یاد بگیریم.5- نتیجه:ما چارچوب GFP-GAN را پیشنهاد کرده ایم که از مولد چهره قبلی(prior) غنی و متنوع برای انجام کار ترمیم صورت نابینا استفاده می کند.این prior با استفاده از لایه های تبدیل ویژگی فضایی تقسیم شده در کانال ، به ما امکان می دهد تا به تعادل خوبی از واقعیت و وفاداری دست یابیم. مقایسه های گسترده توانایی برتر GFP-GAN را در ترمیم صورت مفصل و تقویت رنگ برای تصاویر در دنیای واقعی نشان می دهد و از پیشرفت های قبلی بهتر عمل می کنممنو ن بابت وقتی که گذاشتید تا ببینید اونقد که من جَو دادم خفن هست یا نه:)اما بریم سراغ لینک هایی که باید براتون بذارم:دانلود مقاله نسخه اول: https://arxiv.org/abs/2101.04061v1دانلود مقاله نسخه نهایی: https://arxiv.org/abs/2101.04061گیتهاب: https://github.com/TencentARC/GFPGANدانلود فایل ترجمه: https://bayanbox.ir/download/3839606304795306494/%D8%AA%D8%B1%D8%AC%D9%85%D9%87-%D9%85%D9%82%D8%A7%D9%84%D9%87-GFPGAN.pdfخوشحال میشم نظراتتون درباره این مقاله رو با من به اشتراک بذارید :)</description>
                <category>مهدی رحمانی</category>
                <author>مهدی رحمانی</author>
                <pubDate>Wed, 10 Nov 2021 15:33:14 +0330</pubDate>
            </item>
                    <item>
                <title>شبکه کاملاً کانولوشنال با یادگیری تقویتی برای پردازش تصویر(PixelRL)</title>
                <link>https://virgool.io/@mahdirahmani/%D8%B4%D8%A8%DA%A9%D9%87-%DA%A9%D8%A7%D9%85%D9%84%D8%A7%D9%8B-%DA%A9%D8%A7%D9%86%D9%88%D9%84%D9%88%D8%B4%D9%86%D8%A7%D9%84-%D8%A8%D8%A7-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D8%AA%D9%82%D9%88%DB%8C%D8%AA%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1pixelrl-q1mxhj0jmon5</link>
                <description>در این مطلب خلاصه ای از مقاله PixelRL: Fully Convolutional Network with Reinforcement Learning for Image Processing (2019) ارائه خواهد شد.این مقاله به یک مسئله جدید می پردازد: یادگیری تقویتی با پاداش های پیکسل (pixelRL) برای پردازش تصویر. پس از معرفی شبکه Q عمیق، RL عمیق موفقیت بزرگی کسب کرده است. با این حال، کاربردهای یادگیری تقویتی عمیق (RL) برای پردازش تصویر هنوز محدود است. بنابراین، برای کاربردهای مختلف پردازش تصویر، RL عمیق را به pixelRL(روش پیشنهادی نویسندگان مقاله) گسترش می دهیم. در pixelRL، هر پیکسل یک عامل دارد و عامل با انجام اقدامی مقدار پیکسل را تغییر می دهد. ما همچنین یک روش یادگیری موثر برای pixelRL پیشنهاد می کنیم که با در نظر گرفتن نه تنها حالات آینده پیکسل خود بلکه همچنین پیکسل های همسایه، عملکرد را به طور قابل توجهی بهبود می بخشد. روش پیشنهادی را می توان برای برخی از کارهای پردازش تصویر که نیاز به دستکاری های پیکسلی دارند، جایی که RL عمیق هرگز استفاده نشده است، اعمال کرد. علاوه بر این، می توان نوع عملکرد را برای هر پیکسل در هر تکرار تجسم کرد، که به ما کمک می کند بفهمیم چرا و چگونه چنین عملی انتخاب شده است. ما همچنین معتقدیم که فناوری ما می تواند قابلیت تبیین و تفسیر پذیری شبکه های عصبی عمیق را افزایش دهد. بعلاوه، از آن جا که عملیات اجرا شده در هر پیکسل بصری شده است، در صورت لزوم می توانیم عملیات را تغییر دهیم یا اصلاح کنیم. ما روش پیشنهادی را برای کارهای مختلف پردازش تصویر اعمال می کنیم: حذف نویز تصویر(image denoising)، ترمیم تصویر(image restoration) ، بهبود رنگ محلی(local color enhancement) و ویرایش تصویر saliency-driven. نتایج تجربی ما نشان می دهد که روش پیشنهادی در مقایسه با روشهای پیشرفته مبتنی بر یادگیری تحت نظارت، به عملکردی قابل مقایسه یا بهتر دست می یابد.در سال های اخیر، یادگیری عمیق نه تنها در طبقه بندی تصویر، بلکه در کارهای پردازش تصویر مانند فیلتر کردن تصویر، رنگ آمیزی، تولید و ترجمه نیز موفقیت چشمگیری داشته است. اگرچه همه موارد فوق از شبکه های عصبی برای یادگیری روابط بین ورودی و خروجی استفاده می کنند، ساختارهای آن ها تقریباً به دو دسته تقسیم می شوند. شبکه های عصبی که به طور معمول برای شناسایی تصویر استفاده می شوند، شبکه های عصبی کانولوشن (CNN: convolutional neural networks) هستند که دارای تعدادی لایه کانولوشن و به دنبال آن لایه های fully connected برای خروجی امتیازات طبقه بندی هستند. در مقابل، شبکه های کاملا کانولوشن (FCN: fully convolutional networks) که لایه های fully connected به هم ندارند، برای کارهای پردازش تصویر استفاده می شوند زیرا برای کارهای آن ها یک خروجی پیکسلی لازم است.پس از معرفی شبکه Q عمیق (DQN: deep Q-network)، که می تواند بازی های آتاری را در سطح انسانی انجام دهد، توجه بیشتری به یادگیری تقویتی عمیق (RL: reinforcement learning) معطوف شده است. اخیراً RL عمیق همچنین در انواع وظایف پردازش تصویر اعمال شده است. با این حال، این روش ها می توانند فقط اقدامات کلی را برای کل تصویر اجرا کنند و محدود به برنامه های ساده هستند، به عنوان مثال، برش تصویر(image cropping) و بهبود رنگ کلی(global color enhancement). به سختی می توان این روش ها را در برنامه هایی که به دستکاری های پیکسلی(pixel-wise) مانند حذف نویز تصویر(image denoising) نیاز دارند، اعمال کرد.برای غلبه بر این اشکال، ما یک مسئله جدید تنظیم می کنیم: pixelRL برای پردازش تصویر. PixelRL یک مسئله RL چند عاملی است، که در آن هر پیکسل یک عامل دارد. نمایندگان رفتار بهینه را برای به حداکثر رساندن میانگین کل پاداش مورد انتظار در تمام پیکسل ها می آموزند. هر مقدار پیکسل به عنوان حالت فعلی در نظر گرفته می شود و با عملکرد نماینده به صورت تکراری به روز می شود. استفاده از تکنیک های موجود RL چند عامل برای pixelRL از نظر هزینه محاسباتی غیر عملی است زیرا تعداد عامل ها بسیار زیاد است (به عنوان مثال ، 1 میلیون عامل برای تصاویر 1000*1000 پیکسل). بنابراین، ما با استفاده از شبکه کاملا کانولوشن (FCN) مشکل را حل می کنیم. شایستگی استفاده از FCN این است که همه عوامل می توانند پارامترها را به اشتراک بگذارند و به طور کارآمد یاد بگیرند. در این مقاله ، ما همچنین پیشنهاد ترکیب نقشه پاداش را ارائه می دهیم، که یک روش یادگیری موثر برای pixelRL است. با پیشنهاد ترکیب نقشه پاداش، هر عامل نه تنها وضعیت های آینده پیکسل خود بلکه پیکسل های همسایه را نیز در نظر می گیرد. اگرچه اقدامات باید برای هر برنامه از پیش تعریف شده باشد، اما روش پیشنهادی با مشاهده اقدامات انجام شده توسط عوامل قابل تفسیر است، كه این یک نقطه جدید و متفاوت از روش های پردازش تصویر مبتنی بر یادگیری عمیق برای چنین برنامه هایی است.pixelRL پیشنهادی برای حذف نویز تصویر، بازسازی تصویر، بهبود رنگ محلی و ویرایش تصویر saliency-driven اعمال می شود. با توجه به دانش ما، این اولین کاری است که RL را برای پردازش تصویر سطح پایین برای هر پیکسل یا هر منطقه محلی اعمال می کند. نتایج تجربی ما نشان می دهد که عوامل آموزش داده شده با pixelRL و پیچیدگی نقشه پاداش پیشنهادی، در مقایسه با پیشرفته ترین روش های مبتنی بر CNN، عملکردی قابل مقایسه یا بهتر دارند.الگوریتم اساسی روش پیشنهادی و نتایج تجربی حذف نویز تصویر، بازسازی تصویر، بهبود رنگ محلی قبلاً در مطالعه مقدماتی ما ارائه شده است. در این مقاله توضیحات دقیق تر و کاربرد جدیدی از pixelRL در ویرایش تصویر مبتنی بر شوری ارائه شده است.نمونه هایی از عملکرد روش پیشنهادی مقاله را در زیر می توانید ببینید:شکل 1: فرآیند حذف نویز با استفاده از روش پیشنهادی.شکل2: مقایسه کیفی روش پیشنهادی و CNN برای نویز نمک و فلفل (تراکم 0.5).شکل 3: فرآیند ترمیم تصویر با روش پیشنهادی.شکل 4: مقایسه کیفی فرآیند ترمیم تصویر در روش پیشنهادی، &quot;Net-E and Net-D&quot; و &quot;CNN&quot;.شکل 5: فرآیند بهبود رنگ با روش پیشنهادی برای آبرنگ.شکل 6: مقایسه کیفی روش پیشنهادی و DNN.شکل 7: فرآیند ویرایش تصویر saliency-driven با روش پیشنهادی.شکل 8: مقایسه کیفی روش پیشنهادی با OHA، HAG، WSR و SDIM برای بهبود اشیا saliency-driven.لینک دانلود مقاله اصلی:https://arxiv.org/abs/1912.07190</description>
                <category>مهدی رحمانی</category>
                <author>مهدی رحمانی</author>
                <pubDate>Thu, 15 Apr 2021 12:47:26 +0430</pubDate>
            </item>
                    <item>
                <title>به یاد او، با نام او، برای او...</title>
                <link>https://virgool.io/@mahdirahmani/%D8%A8%D9%87-%DB%8C%D8%A7%D8%AF-%D8%A7%D9%88-%D8%A8%D8%A7-%D9%86%D8%A7%D9%85-%D8%A7%D9%88-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D9%88-debnihtsw73u</link>
                <description>در خرابات مغان نور خدا می‌بینماین عجب بین که چه نوری ز کجا می‌بینمجلوه بر من مفروش ای ملک الحاج که توخانه می‌بینی و من خانه خدا می‌بینمخواهم از زلف بتان نافه گشایی کردنفکر دور است همانا که خطا می‌بینمسوز دل اشک روان آه سحر ناله شباین همه از نظر لطف شما می‌بینمهر دم از روی تو نقشی زندم راه خیالبا که گویم که در این پرده چه‌ها می‌بینمکس ندیده‌ست ز مشک ختن و نافه چینآن چه من هر سحر از باد صبا می‌بینمدوستان عیب نظربازی حافظ مکنیدکه من او را ز محبان شما می‌بینم</description>
                <category>مهدی رحمانی</category>
                <author>مهدی رحمانی</author>
                <pubDate>Mon, 21 Dec 2020 23:00:06 +0330</pubDate>
            </item>
            </channel>
</rss>