Detect AI Generated And Real Images

مقدمه:
با پیشرفت فناوری و گسترش ابزارهای هوش مصنوعی، تولید و ویرایش عکسها با استفاده از این ابزارها به سرعت در حال رشد است. این پیشرفتها، امکان ایجاد تصاویر با کیفیت بالا و واقعیتر از همیشه را فراهم کردهاند. اما در عین حال، تمایز بین عکسهای ساخته شده توسط هوش مصنوعی و عکسهای گرفته شده توسط انسان به یک چالش پیچیده تبدیل شده است. تشخیص صحیح این تصاویر، به ویژه در حوزههایی مانند رسانهها، تبلیغات و حتی پژوهشهای علمی، اهمیت زیادی دارد. در این گزارش، به بررسی روشها و تکنیکهای مختلف برای طبقهبندی عکسها بر اساس منبع تولید آنها میپردازیم و چالشهایی که در این زمینه وجود دارد را مرور خواهیم کرد. این بررسی میتواند به روشنتر شدن آیندهی این فناوری و نحوهی برخورد با آن کمک کند.
شبکه EfficentNet:
در طراحی معماریهای شبکههای عصبی کانولوشنی، سه روش اصلی برای افزایش دقت و بهبود عملکرد وجود دارد: افزایش عمق شبکه، افزایش ارتفاع شبکه، و افزایش رزولوشن ورودی. هر یک از این ویژگیها به تنهایی میتواند به بهبود عملکرد شبکه کمک کند، اما تأثیر واقعی زمانی به اوج خود میرسد که این ویژگیها به صورت هماهنگ با یکدیگر به کار گرفته شوند. بدیهی است که این سه ویژگی با یکدیگر ارتباط مستقیمی دارند؛ به عنوان مثال، با افزایش رزولوشن ورودی، شبکه قادر است ویژگیهای بیشتری را بررسی کند که این امر به نوبه خود امکان افزایش عمق شبکه را فراهم میآورد. معماری EfficientNet را میتوان به عنوان روشی برای جستجو و یافتن کارآمدترین شبکه عصبی با توجه به میزان توان محاسباتی در دسترس در نظر گرفت. این معماری با بهینهسازی همزمان عمق، ارتفاع، و رزولوشن، به دستاوردهای چشمگیری در بهبود عملکرد شبکههای عصبی دست یافته است. در شکل زیر می توانیم شمای کلی ازین شبکه مشاهده کنید:
ورژن baseline:
معماری که به عنوان baseline (خط مبنا) در نظر گرفته میشود از اهمیت بسیاری برخوردار است، زیرا در روش EfficientNet، معماری baseline تغییر نمیکند بلکه صرفاً مقیاسبندی میشود. برای مثال، اگر AlexNet به عنوان baseline استفاده شود، پس از اعمال تغییرات در مقیاس با استفاده از عرض، طول و رزولوشن، نتایج حاصل از همان AlexNet مقایسه میشود و با شبکه دیگری مانند ResNet مقایسه نمیشود. بنابراین، داشتن یک baseline مناسب اهمیت ویژهای دارد. EfficientNet دارای هفت نسخه مختلف است. ابتدا نسخه B0 با استفاده از روش و معماری معرفی شده به دست میآید و به عنوان baseline در نظر گرفته میشود. سپس با دو گام مقیاسبندی، نسخههای دیگر (B1 تا B7) به دست میآیند. این نسخهها با اعمال مقیاسبندیهای مختلف، عملکرد شبکه را بهینهسازی میکنند و باعث میشوند شبکههای عصبی با توان محاسباتی و منابع موجود بهترین کارایی را داشته باشند. این روش مقیاسبندی موثر، بهینهسازی همزمان سه عامل عمق، عرض و رزولوشن را امکانپذیر میسازد و باعث ایجاد شبکههایی کارآمدتر و با دقت بالاتر میشود. ما در مثالی که خواهیم زد از ورژن 2 آن استفاده میکنیم.EfficientNet-B1
نسخه B1 شبکه EfficientNet، بر پایه نسخه اولیه B0 ساخته شده است. در این نسخه، پارامترهای مقیاسبندی به گونهای تنظیم شدهاند که بهینهترین ترکیب ممکن از عمق، عرض و رزولوشن به دست آید. با اعمال این تغییرات، شبکه B1 نسبت به B0 از عمق بیشتری برخوردار است که باعث میشود ویژگیهای پیچیدهتری را استخراج کند. همچنین، عرض شبکه نیز افزایش یافته که به آن اجازه میدهد جزئیات بیشتری از دادهها را پردازش کند. علاوه بر این، رزولوشن ورودیها نیز افزایش یافته که منجر به دقت بالاتری در شناسایی و طبقهبندی تصاویر میشود. تمامی این بهینهسازیها با حفظ تعادل بین پارامترها انجام شده است تا بدون افزایش بیش از حد هزینههای محاسباتی، کارایی شبکه بهبود یابد.EfficientNet-B2
نسخه B2 شبکه EfficientNet، تکاملیافتهتر از نسخه B1 است و با هدف بهبود بیشتر دقت و کارایی شبکه توسعه یافته است. در این نسخه، پارامترهای مقیاسبندی به طور دقیقتری تنظیم شدهاند. عمق شبکه در B2 باز هم افزایش یافته که امکان شناسایی ویژگیهای حتی پیچیدهتر را فراهم میکند. عرض شبکه نیز بیشتر شده که به شبکه اجازه میدهد با ظرفیت بیشتری دادهها را پردازش کند. رزولوشن ورودیها نیز در این نسخه بیشتر شده که دقت تشخیص شبکه را به میزان قابل توجهی افزایش میدهد. این تغییرات باعث میشود که نسخه B2، نسبت به نسخههای قبلی خود، عملکرد بهتری داشته باشد و بتواند با دقت بیشتری تصاویر را طبقهبندی کند. این شبکه تا ورژن B7 تکامل پیدا کرد که به عنوان به عنوان پیشرفتهترین و بهینهترین نسخه شبکه EfficientNet شناخته میشود. در شکل زیر میتوان مقایسه کلی بین این شبکهها داشت:تشخیص عکس با استفاده از شبکه EfficientNetB2:
حال بهتر است مقداری وارد دنیای عمل شویم و از شبکه EfficentNet برای حل مسئله ابتدای مقاله کمک بگیریم.دیتاست:
در این مرحله ما از یک دیتاست تقریبا بزرگ به حجم 16 گیگابایت استفاده میکنیم عکس ها لیبلگذاری شدهاند و در پوشه real , ai قرار گرفته اند. عکس ها از کیفیت قابل قبولی برخوردار هستند. نمونه دو عکس با لیبل real, AI در تصاویر زیر قابل رویت هستند. '

train_datagen = ImageDataGenerator( rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, validation_split=0.2, ) train_generator = train_datagen.flow_from_directory( DATASET_DIR, target_size=(260, 260), batch_size=8, class_mode='binary', subset='training') validation_generator = train_datagen.flow_from_directory( DATASET_DIR, target_size=(260, 260), batch_size=8, class_mode='binary', subset='validation')با توجه به اینکه اندازه و کیفیت عکس های نباید افت کند سایز ورودی را 260 * 260 در نظر گرفتیم
policy = mixed_precision.Policy('mixed_float16') mixed_precision.set_global_policy(policy)استفاده از این دو خط کد در کتابخانه TensorFlow برای تنظیم سیاست دقت مخلوط (
mixed precision
) است. این روش به شما امکان میدهد تا از دقت اعشاری نیمهکاره (float16
) به جای دقت کامل اعشاری (float32
) استفاده کنید، که میتواند تأثیرات مهمی بر مصرف حافظه RAM و عملکرد شبکههای عصبی دیپ لرنینگ داشته باشد:
- کاهش مصرف رم: دادهها در دقت
float16
نصف حجم دادههایfloat32
را اشغال میکنند. این کاهش حجم باعث میشود که مصرف حافظه RAM کاهش یابد. این امر بخصوص در مدلهای بزرگ که نیاز به مقادیر زیادی حافظه دارند، مفید است. - افزایش سرعت اجرا: بسیاری از پردازندهها، به خصوص GPUها، برای محاسبات با دقت کمتر بهینهسازی شدهاند. استفاده از
float16
میتواند باعث افزایش سرعت محاسبات شود، زیرا پردازنده میتواند در یک زمان مشخص، محاسبات بیشتری را انجام دهد.
ساخت و trainکردن مدل:
# Load EfficientNetB4 without the top layer base_model = EfficientNetB2(weights='imagenet', include_top=False, input_shape=(260, 260, 3)) # Add custom layers x = base_model.output x = GlobalAveragePooling2D()(x) x = Dense(1024, activation='relu')(x) predictions = Dense(1, activation='sigmoid')(x) # Create the final model model = Model(inputs=base_model.input, outputs=predictions) # Freeze all layers in the base model for layer in base_model.layers: layer.trainable = False # Compile the model model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # Train the model model.fit( train_generator, epochs=10, validation_data=validation_generator ) # Unfreeze all layers for layer in base_model.layers: layer.trainable = True # Re-compile the model with a lower learning rate model.compile(optimizer=tf.keras.optimizers.Adam(1e-5), loss='binary_crossentropy', metrics=['accuracy']) # Fine-tune the model model.fit( train_generator, epochs=10, validation_data=validation_generator )بیایید عمیقتر به جزئیات هر بخش از کدی که توضیح داده شد بپردازیم تا دلایل و مکانیزمهای زیربنایی را بهتر درک کنیم:
بارگذاری مدل پایه
EfficientNetB2
EfficientNetB2 یکی از اعضای خانواده مدلهای EfficientNet است، که برای کارآمدی بالا در تعداد پارامترها و سرعت محاسبات طراحی شدهاند. استفاده از این مدل با وزنهای آموزشدیده روی دیتاست بزرگ ImageNet به ما اجازه میدهد تا از دانش پیشینی که این مدل در تشخیص تصاویر بسیار متنوع به دست آورده، استفاده کنیم.بدون لایههای بالایی
با حذف لایههای طبقهبندی بالایی، ما این امکان را به دست میآوریم که مدل را برای وظایف مختلف و دادههایی با تعداد دستههای متفاوت از ImageNet سفارشیسازی کنیم.input_shape
نشاندهنده ابعاد ورودیهای مورد نیاز مدل است که در این مورد 260x260x3 است.
افزودن لایههای سفارشی
Global Average Pooling 2D
این لایه نقش مهمی در فشردهسازی ویژگیهای استخراجشده توسط مدل پایه را بازی میکند. به جای استفاده از یک لایه Flatten که ممکن است باعث افزایش تعداد پارامترها و افزایش خطر بیشبرازش شود، Global Average Pooling میانگین ویژگیها در هر کانال را محاسبه میکند و به یک بردار ویژگی فشرده تبدیل میکند.Dense Layers
لایههای Dense برای یادگیری نمایشهای سطح بالاتر که به طبقهبندی نهایی کمک میکنند استفاده میشود. اولین لایه Dense با 1024 نورون بهعنوان یک لایه تماما متصل عمل میکند که میتواند پیچیدگیهای دادهها را مدلسازی کند. لایه آخر با تابع فعالسازی سیگموئید برای تولید خروجی دودویی در مسائل طبقهبندی دودویی استفاده میشود.تنظیم و آموزش اولیه
Freezing Layers
یخزدایی لایهها اجازه نمیدهد وزنهای مدل پایه در طول آموزش اولیه تغییر کنند. این کار از دست دادن دانش عمومی که مدل از ImageNet به دست آورده جلوگیری میکند و همچنین سرعت آموزش را بهبود میبخشد.آموزش دقیقتر (Fine-tuning)
Trainable Layers
پس از اینکه مدل اولیه با لایههای جدید آموزش دید و وزنهای آنها بهینه شد، لایههای مدل پایه دوباره قابل آموزش میشوند. این اجازه میدهد که مدل بتواند ویژگیهای خاص دادههای جدید را بیاموزد و دقت مدل را در شرایط خاص آن مجموعه داده افزایش دهد.Re-compilation with Lower Learning Rate
بازکامپایل کردن مدل با نرخ یادگیری پایینتر به این معناست که تغییرات در وزنهای مدل دقیقتر و کنترل شدهتر انجام میشود. این کمک میکند تا یادگیریهای قبلی حفظ شوند و مدل به تدریج و با ثبات بهینهسازی شود. در نتیجه، این فرایند دو مرحلهای (آموزش اولیه و تنظیم دقیق) به افزایش توانایی مدل در درک و تمایز بهتر دادهها کمک میکند و اطمینان حاصل میکند که مدل میتواند از دانش عمومی و خاص بهطور مؤثر استفاده کند. در شکل بعدی دقت نهایی در دورهای آخر نشان داده شده است:
برچسب ها :
classification