Nota sobre o campo license acima. Ele diz other, e não mit, de propósito. A licença MIT deste repositório cobre o código. A licença dos pesos não está determinada — ver LICENSES.md. Marcar o repositório como mit afirmaria sobre os pesos exatamente o que a auditoria diz que não pode ser afirmado.

Estado de publicação. O pacote está tecnicamente pronto para publicação — equivalência, instalação limpa e testes verificados. A redistribuição dos pesos permanece condicionada à resolução das questões documentadas em LICENSES.md. Enquanto elas não forem resolvidas, os pesos não devem ser descritos como open source, licenciados sob MIT, redistribuíveis ou de uso comercial, e a publicação não está juridicamente autorizada por este documento — que não é parecer jurídico.

AIDA — AI Detector Analysis (P0)

Detector de imagens geradas por IA. Funde três sensores independentes sobre o pixel — sem olhar metadados, sem marca d'água — e devolve uma probabilidade calibrada e uma classe.

Este repositório não distribui os pesos do modelo. Ele publica código, metodologia, arquitetura, métricas e limitações. Os pesos acompanham o Space AIDAON/aida-api, que hospeda a API e faz as inferências de produção — sob licença em revisão. Ver AIDA Core P0, abaixo.

Leia isto antes de usar. O AIDA erra entre 9% e 47% das fotografias reais, dependendo do tipo de fotografia. Isso não é ruído de medição: é a principal limitação conhecida do modelo, está medida em 5.307 imagens e está documentada em detalhe no MODEL_CARD.md. Um resultado do AIDA não é prova de que uma imagem seja gerada por IA.

Quick Start

Este repositório não executa inferência sozinho: ele não contém os pesos.

O que você consegue fazer aqui:

git clone <este-repositorio> aida-p0 && cd aida-p0

python -m venv .venv
.venv/bin/pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cpu

# ler a metodologia, a arquitetura, as métricas e as limitações
#   MODEL_CARD.md  RELEASE_BENCHMARK.md  LICENSES.md

# rodar a suíte que não depende de pesos
.venv/bin/pip install -r requirements-dev.txt
.venv/bin/python -m pytest tests -q

Se você já tem um diretório models/ do AIDA por outra via, aponte para ele e o código roda sem nenhuma alteração:

AIDA_P0_MODELS=/caminho/para/models .venv/bin/python scripts/predict.py foto.jpg
from aida_p0 import AidaP0

aida = AidaP0(models_dir="/caminho/para/models")
r = aida.analisar("foto.jpg")
print(r.score_ia, r.classe, r.threshold)

Sem esse diretório, o AidaP0 levanta ArtefatoAusente com uma mensagem explicando exatamente isto — ele não devolve um número inventado.

O backbone CLIP (ViT-B-32-quickgelu) também não acompanha o repositório: o open_clip o baixa na primeira execução (~350 MB).

Como obter um resultado do AIDA

Pelo serviço do AIDA, que roda o P0 no Space AIDAON/aida-api. O fluxo é:

imagem → frontend → backend/API → P0 → inferência → resultado

Nenhum peso trafega para o navegador nem para quem consome a API.

AIDA Core P0

Status Production Champion
Backbone visual ViT-B-32-quickgelu
Representação 512 dimensões
Pipeline Visual Expert + Forensics + Rigid/Real Evidence + Fusion
Classificação REAL / IA
Threshold 0.48158617244389096
Pesos não incluídos neste repositório — ver abaixo

Os pesos do modelo P0 não acompanham este repositório. Eles estão publicados no Space que hospeda a API — AIDAON/aida-api — e é lá que as inferências de produção acontecem.

Estarem publicados não é autorização de uso e não resolve a pendência de licença: a situação dos pesos continua LICENSE_UNKNOWN_REVIEW_REQUIRED, com Q1 e Q2 PENDENTE_DE_DECISAO. Ver LICENSES.md.

Este repositório publica o código, a metodologia, a arquitetura, as métricas e as limitações do detector. Ele não publica os pesos, e por isso não roda inferência sozinho — ver Quick Start.

What the score means

score_ia é uma probabilidade calibrada (Platt) de que a imagem se pareça, estatisticamente, com as imagens geradas por IA que o modelo viu no treino.

O que ele não é:

  • não é a probabilidade de a imagem ser gerada por IA no mundo real — isso dependeria de quantas imagens de IA existem no seu material, que o modelo não sabe;
  • não é uma medida de autenticidade. classe = REAL significa "não se parece com IA para este modelo", não "imagem verdadeira e não editada";
  • não é evidência de fraude, autoria ou intenção.

O release também devolve os três scores dos sensores. Quando eles discordam muito (desacordo alto), a confiança é menor — a política oficial marca esses casos como INCONCLUSIVO.

Threshold

0.48158617244389096

Este número saiu do índice de Youden sobre o conjunto de validação do champion anterior e foi deliberadamente congelado na promoção do P0, para que a comparação isolasse mudança de modelo de mudança de ponto de operação.

Ele não é um ótimo, e isso foi auditado. O limiar de MCC máximo é 0,2901 na validação, 0,5202 no External 882 e 0,8626 no External V2 — cada população pede um corte diferente. E mexer nele não resolve: no External 882, o melhor total de erros que qualquer política de limiar alcança é 118 contra os 119 do atual. Por isso ele permanece.

Se você precisa de um ponto de operação diferente, o release devolve score_ia bruto — aplique o seu próprio corte, medido no seu material, e diga qual é quando publicar resultados.

Architecture

imagem → normalização (1024 px, JPEG q92, em memória)
   ├── B2 FORENSE   846 características → RandomForest → Platt
   ├── B3 CLIP      ViT-B-32-quickgelu congelado → cabeça linear → Platt
   └── B5 RIGID     5 passes do CLIP com ruído → logística → Platt
        └── média dos três → Platt → threshold

Detalhes de cada sensor e da fusão no MODEL_CARD.md.

Performance

Threshold oficial, POSITIVO = IA, FN = IA → REAL é o erro crítico.

conjunto n FPR FNR MCC ROC-AUC
validacao_546 (escolheu o threshold) 546 0,1078 0,1500 0,7432 0,9517
teste_546 546 0,0915 0,1375 0,7729 0,9345
teste_externo_882 (o número a citar) 882 0,0972 0,1852 0,7235 0,9154
external_v2 (independente) 900 0,4667 0,0028 0,5567 0,9836
pool_publico (2.433 fotos reais públicas) 2.433 0,3453

TPR em regime de FPR baixo, no teste_externo_882: 0,4947 a 1% de FPR, 0,7328 a 5%, 0,8175 a 10%. A 0,5% de FPR o conjunto não tem resolução estatística para responder.

Important Limitations

O FPR não é um número. Depende do que você está analisando.

população FPR
acervo próprio (teste_546, teste_externo_882) 9,2% – 9,7%
2.433 fotografias reais públicas (COCO + ImageNet) 34,5%
lote novo de 900 imagens, 88% do lado REAL é foto de cachorro 46,7%

Uma em cada três fotografias reais públicas é classificada como IA. Por domínio, o FPR vai de 21,4% (coco:predios) a 49,4% (coco:animais) — nenhum dos nove domínios testados é normal.

A causa foi investigada e medida: é cobertura do treino, não um defeito de ordenação. O ROC-AUC no conjunto mais deslocado é 0,9836, o mais alto de todos — o modelo continua sabendo ordenar; o que ele não sabe é onde cortar.

Outras limitações, todas detalhadas no MODEL_CARD.md:

  • falsos positivos e falsos negativos são confiantes, não hesitantes — nenhum ajuste de corte os alcança;
  • generalização para geradores fora de OpenAI / Google Gemini / ByteDance não foi avaliada;
  • não detecta edição local nem deepfake de rosto;
  • não é ferramenta forense e não atesta autenticidade;
  • não foi auditado para viés demográfico.

Não use o AIDA como única evidência para acusar alguém de nada.

Reproducibility

Tudo neste pacote é verificável:

pip install -r requirements-dev.txt
pytest tests -q

tests/test_publico.py roda sem pesos e verifica que nenhum peso foi publicado, que a documentação não promete download, que o threshold e os benchmarks oficiais estão corretos e que a licença continua conservadora. tests/test_release.py testa a integridade dos pesos e por isso pula inteira aqui, com razão explícita.

Os testes conferem que o threshold é exatamente 0.48158617244389096, que os SHA-256 dos dez artefatos e dos 32 módulos batem com o MANIFEST.json, que a inferência não escreve em models/, que nenhum artefato de challenger foi incluído e que o pacote roda sem nada do laboratório no PYTHONPATH.

O pipeline foi verificado contra o pipeline oficial de pesquisa em 40 imagens do teste_externo_882, em processos separados: diferença máxima de exatamente 0,0 nos quatro scores. Ver RELEASE_BENCHMARK.md.

Files

README.md              este arquivo
MODEL_CARD.md          o documento que importa: escopo, limites, dataset shift
RELEASE_BENCHMARK.md   equivalência, latência, ambiente, métricas congeladas
LICENSES.md            licenças e a pendência de revisão dos pesos
LICENSE                MIT (código)
MANIFEST.json          SHA-256 de cada arquivo publicado (`pesos_incluidos: false`)
requirements.txt       dependências de inferência
predict.py             CLI
aida_p0/               interface do release (importável)
aida/                  módulos do laboratório, copiados byte a byte
config/release.json    metadados legíveis (o limiar oficial vive em models/)
scripts/predict.py     CLI
examples/              exemplo mínimo de uso
tests/                 a suíte do release

Citation

Trabalho de conclusão de curso, sem publicação formal e sem DOI. Ver MODEL_CARD.md para o BibTeX. Não invente um DOI para este trabalho.

License

Código sob MIT (LICENSE). A situação dos pesos está em LICENSES.md como LICENSE_UNKNOWN_REVIEW_REQUIRED — leia antes de redistribuir, e não descreva os pesos como open source, redistributable ou de uso comercial enquanto a pendência estiver aberta. O backbone CLIP não é redistribuído aqui.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support