✅ Teaser : https://www.youtube.com/watch?v=paJ_1DrSZnw
Cancerul pulmonar este una dintre cele mai agresive forme de cancer, având o rată mare de mortalitate. Detectarea timpurie joacă un rol esențial în șansele de supraviețuire ale pacienților, însă metodele tradiționale de diagnostic bazate pe interpretarea umană a imaginilor CT sunt consumatoare de timp și pot fi predispuse la erori.
Acest proiect își propune să construiască un sistem de inteligență artificială care analizează imagini CT toracice pentru a:
- Detecta prezența cancerului pulmonar;
- Clasifica tipul de cancer;
- Sprijini medicii în luarea deciziilor clinice rapide și precise.
Nume | Grupa |
---|---|
Constantin Mierla |
224 |
Raul Oanea |
225 |
Balahura Vlad |
221 |
- Imagini CT în format
.jpg
sau.png
, grupate în patru categorii:- Adenocarcinom
- Carcinom cu celule mari (Large-cell)
- Carcinom scuamos (Squamous-cell)
- Normal (celule sănătoase)
- Structura datasetului:
train/
: 70% din imaginivalid/
: 10%test/
: 20%
- Construirea unui model AI (bazat pe CNN) care:
- Recunoaște dacă pacientul are sau nu cancer pulmonar;
- Clasifică tipul de cancer în una dintre cele 3 categorii;
- Poate fi folosit în aplicații clinice pentru sprijin decizional.
- Volumul mare de imagini → imposibil de analizat rapid de oameni;
- Modelele CNN pot învăța tipare subtile și au performanță superioară în clasificare de imagini;
- AI-ul poate standardiza diagnosticul, reducând erorile și timpul de interpretare.
- Sursă: Chest CT-Scan images Dataset – Kaggle
- Format:
.jpg
,.png
- Număr total de imagini: mii de imagini etichetate pe categorii (număr exact vizibil după descărcare locală)
- Scopul inițial: creare de model AI care să clasifice automat tipul de cancer pulmonar
- Cel mai frecvent tip de cancer pulmonar (30-40% din cazuri de NSCLC).
- Apare în glandele care secretă mucus în zonele periferice ale plămânilor.
- Simptome: tuse, răgușeală, slăbiciune, scădere în greutate.
- Apare oriunde în plămân.
- Se dezvoltă rapid și este responsabil pentru 10-15% din NSCLC.
- Este un tip agresiv și greu de tratat.
- Apare central, unde bronhiile mari se conectează la trahee.
- Responsabil pentru 30% din cazurile de NSCLC.
- Puternic asociat cu fumatul.
- Imagini CT fără anomalii vizibile.
- Esențiale pentru antrenarea corectă a modelului AI (contrast între „normal” și „patologic”).
Folder | Descriere | Procent din set |
---|---|---|
train/ |
Imagini pentru antrenare | 70% |
valid/ |
Imagini pentru validare | 10% |
test/ |
Imagini pentru testare | 20% |
Aplicația web folosește Streamlit pentru a permite încărcarea unei imagini CT (.jpg
sau .png
) și afișarea rezultatului direct în browser.
- Utilizatorul încarcă o imagine CT.
- Aplicația afișează poza încărcată și un buton “Diagnostichează”.
- La apăsarea butonului, imaginea este preprocesată și trimisă către modelul AI.
- Se afișează dacă s-a detectat o tumoare și, dacă da, tipul acesteia, împreună cu gradul de încredere al predicției.
- Dacă o tumoare este prezentă în radiografie → tipul de tumoră:
[Adenocarcinoma/Large Cell Carcinoma/Squamous Cell Carcinoma]
. - În caz contrar → se afișează rezultatul Normal.
- Probabilitatea (în procent) asociată predicției.
- Se pornește de la un ResNet-50 pre-antrenat pe ImageNet, încărcat cu
include_top=False
. - Peste modelul pre-antrenat, am adăugat (fără a modifica top-ul original):
- Un strat Dense de 1024 neuroni, activare ReLU
- Un strat final Dense cu 4 neuroni (corespunzători claselor Adenocarcinom, Large-cell, Squamous-cell, Normal) și activare softmax.
- Compilare cu optimizatorul Adam cu un learning rate inițial de
lr = 1×10⁻⁴
. - Am implementat totodată Early Stopping și ReduceLROnPlateau.
- Prin Early Stopping am monitorizat
val_loss
pentru a oprii antrenarea atunci valoarea nu se imbunataseste, prevenind astfel overfitting-ul. - Prin ReduceLROnPlateau , evitam oscilatiile ratei de invatare si ajuta modelul sa converge mai bine spre minimul functiei de cost.
- Freeze la toate straturile ResNet-50; antrenare doar a head-ului.
- Deblocare completă (fine-tuning) a întregului model.
- Salvare finală în format Keras
.keras
.
- Accuracy: procentajul de imagini clasificate corect, pe fiecare epocă, atât pe setul de antrenament (
accuracy
) cât și pe cel de validare (val_accuracy
). - AUC (Area Under ROC Curve): măsoară capacitatea modelului de a separa clasele (important mai ales dacă datele sunt dezechilibrate). Se afișează ca
auc
(pe antrenament) șival_auc
(pe validare).
- Pentru o acuratețe mai ridicată, primul pas ar fi colectarea unui volum mai mare de date.
- Extinderea clasificării pentru a include mai multe tipuri de cancer, atât pulmonar, cât și alte forme.
- Integrarea în sistemul public de sănătate, pentru a eficientiza triajul și gestionarea cazurilor.
- Implementarea unui modul de interpretabilitate (ex: Grad-CAM) pentru a vizualiza zonele din imagine care au influențat decizia modelului și a oferi feedback radiologilor.
- Adăugarea unui mecanism de validare continuă a performanței (monitorizare în producție) pentru a detecta degradarea acurateței în timp și a retrena modelul când este necesar.
- Dezvoltarea unei interfețe multi-utilizator cu roluri diferite (radiolog, medic curant, administrator) și un sistem de audit care să urmărească cine și când accesează rezultatele.
- Crearea unui sistem de feedback din partea utilizatorilor (radiologi/medici) pentru a marca cazurile eronate și a îmbunătăți constant baza de antrenament.