MIML / modelsforIML /Readme.md
P-rateek's picture
Upload 178 files
6e866a2 verified

A newer version of the Gradio SDK is available: 6.8.0

Upgrade

This is the official implement of the APSC-Net


The model is available at Google Drive and Baidu Drive


Data structure

-----this_dir
   |
   -------Python files of this dir (e.g. apscnet.py)
   |
   -------APSC-Net.pth
   |
   -------mmseg/...
   |
   -------mmcv_custom/...
   |
   -------test_data/
              |
              -------------CASIA1/
              |               |
              |               ---------imgs/
              |               |
              |               ---------masks/
              | 
              -------------Columbia/... (the same as CASIA1 dir)
              |
              -------------Coverage/... (the same as CASIA1 dir)
              |
              -------------NIST16/...  (the same as CASIA1 dir)
              |
              -------------IMD20/... (the same as CASIA1 dir)

Command for evaluation

CASIAv1:
CUDA_VISIBLE_DEVICES=0 python casia1_infer.py --cfg apscnet.py --pth APSC-Net.pth

NIST16:
CUDA_VISIBLE_DEVICES=0 python nist_infer.py --cfg apscnet.py --pth APSC-Net.pth

IMD20:
CUDA_VISIBLE_DEVICES=0 python imd20_infer.py --cfg apscnet.py --pth APSC-Net.pth

Columbia:
CUDA_VISIBLE_DEVICES=0 python colu_infer.py --cfg apscnet.py --pth APSC-Net.pth

Coverage:
CUDA_VISIBLE_DEVICES=0 python cover_infer.py --cfg apscnet.py --pth APSC-Net.pth

Final output format of the inference code:

IoU Precision Recall F-score

Training dataset preparation

  1. For each training dataset, prepare images and the corresponding masks. The masks should be normalized to 0-255 instead of 0-1. For example, if the mask is binary, 0 should represent authentic region and 255 should represent tampered region.

  2. Rename the images' filename suffix to '.jpg' and rename the masks' filename suffix to '.png'. The prefix should be the same for a pair of image and mask. For example, a mask should be named "1.png" for its corresponding image "1.jpg".

  3. Arrange the collected images and masks to below structure:

[Your dataset name, e.g. CASIA2]
             |
             ---------imgs
             |         |
             |         |---------1.jpg
             |         |---------2.jpg
             |
             |--------masks
                       |
                       |---------1.png
                       |---------2.png

For example, if the dataset name is CASIA2, all the images should be placed in 'CASIA2/imgs/' dir and all the masks should be placed in 'CASIA2/masks/' dir.

  1. Run the get_pks.py to get dataset pks, specify the args "--dataset" to your dataset path:
python get_pks.py --dataset [your dataset path, e.g. "normed/CASIA2"]

After that, you will get a dir named "pks/" and a pickle file (e.g. named "CASIA2.pk") in it. The "CASIA2.pk" is a list, each item is a pair of image and mask: {'filename': '1.jpg', 'ann': {'seg_map': '1.png'}}

  1. Add this dataset to the config file. For the above example, see this line. The img_dir is the path of your images dir and the ann_dir is the path of their masks. Then add this dataset variable name to train/val/test list as line 178.

Please Note

In the config file such as apscnet.py,

the pipeline for the training data should be or be modified from 'tamper_comp' pipeline, as the Line128

the pipeline for the evaluation data should be or be modified from 'test_pipeline' pipeline, as the Line172


Command for training

bash tools/dist_train.sh apscnet_train.py 10

Pre-trained weights for initilize before training

The ADE-20k weights are downloaded from https://github.com/facebookresearch/ConvNeXt/tree/main/semantic_segmentation Just need to run the below 2 commands to get the "convnext_ade.pth"

wget https://dl.fbaipublicfiles.com/convnext/ade20k/upernet_convnext_base_22k_640x640.pth upernet_convnext_base_22k_640x640.pth
python cvt_conv.py

Fixing possible bugs:

1. Bug: TypeError: FormatCode() got an unexpected keyword argument 'verify'

Fix: a. Open the bug file (e.g. [your anaconda path]/lib/python3.xx/site-packages/mmcv/utils/config.py).

b. find the bug line "text, _ = FormatCode(text, style_config=yapf_style, verify=True)"

c. delete the "verify=True". The result new line: "text, _ = FormatCode(text, style_config=yapf_style)"

2. Bug: ValueError: Cannot infer the rule for key F1score, thus a specific rule must be specified.

Fix: replace the original evaluation.py in [your conda path]/lib/python3.xx/site-packages/mmcv/runner/hooks/evaluation.py with the evaluation.py in the dir.

For example, run the command "cp evaluation.py /media/data2/chenfan/anaconda3/lib/python3.12/site-packages/mmcv/runner/hooks/evaluation.py"

3. Bug: KeyError: 'ann_info' during evaluation.

Fix: modify the pipeline for the test dataset from possible "tamper_comp" into "test_pipeline", as the "Please Note" section above. The "tamper_comp" pipeline is only for training set and the "test_pipeline" is only for evaluation set.